# Documentación Técnica: BotAgenteConfiguracionModel (PHP)

El `BotAgenteConfiguracionModel` es el componente encargado de gestionar los parámetros operativos y técnicos de los asistentes inteligentes. Actúa como un registro de configuración dinámica (EAV - Entity-Attribute-Value), permitiendo ajustar el comportamiento de la IA (como modelos a usar, límites de tokens o umbrales de procesamiento) sin necesidad de modificar el código fuente o la estructura de la base de datos.

---

## Estructura de la Entidad

Este modelo mapea la tabla `bot_agente_configuraciones`, la cual almacena pares de clave-valor vinculados a un agente específico.

### Atributos y Campos Permitidos (`$allowedFields`)

* **id_agente**: Referencia al asistente al que pertenece la configuración.
* **clave**: Nombre técnico del parámetro (ej. `limite_tokens_log`, `modelo_ranking`).
* **valor**: El dato configurado almacenado como cadena de texto.
* **type_dato**: Define el tipo de dato original (Entero, Decimal, JSON, Texto) para asegurar un casteo correcto al recuperar la información.
* **descripcion**: Breve explicación del propósito de la configuración para facilitar la administración.

---

## Métodos Destacados

### `getValor(int $idAgente, string $clave)`

* **Propósito**: Recupera una configuración específica y aplica un casteo automático de tipos.
* **Lógica de Negocio**: Convierte el valor almacenado en la base de datos a su tipo nativo de PHP (int, float o array) basándose en el campo `type_dato`.

### `getConfiguracionAgente(int $idAgente)`

* **Propósito**: Obtiene el set completo de parámetros de un agente y los organiza en un arreglo asociativo plano.
* **Uso en el Sistema**: Es el método principal utilizado por el controlador `Chat` para definir qué modelos de Gemini invocar y qué umbrales aplicar durante una conversación.

---

## Configuración del Modelo

| Propiedad | Valor | Descripción |
| --- | --- | --- |
| `$table` | `bot_agente_configuraciones` | Tabla de parámetros dinámicos. |
| `$primaryKey` | `id` | Clave primaria de la configuración. |
| `$returnType` | `array` | Las filas se procesan como arreglos asociativos. |

---

## Ejemplo de Implementación

### Carga de parámetros en el flujo del Chat

Este ejemplo demuestra cómo el sistema utiliza este modelo para decidir qué modelo de lenguaje emplear dinámicamente:

```php
use App\Models\Bot\BotAgenteConfiguracionModel;

$configModel = new BotAgenteConfiguracionModel();

// Recuperar toda la configuración del agente ID 5
$configs = $configModel->getConfiguracionAgente(5);

// Acceso directo a valores ya casteados
$modeloChat = $configs['chat_model'] ?? 'gemini-2.0-flash'; // String
$umbralTokens = $configs['limite_tokens_log'] ?? 1000;      // Entero
$usaVariables = (bool)($configs['usa_variables_dinamicas'] ?? false); // Booleano

```

---

## Casos de Uso

### 1. Control de Costos y Logging

A través de la clave `limite_tokens_log`, el sistema puede decidir dinámicamente cuándo una respuesta es lo suficientemente "pesada" como para requerir un log detallado en la base de datos de auditoría.

### 2. A/B Testing de Modelos

Permite asignar diferentes versiones de modelos de Gemini (ej. `flash-lite` para clasificación y `pro` para respuesta final) a diferentes agentes de forma independiente, facilitando pruebas de rendimiento y calidad de respuesta sin despliegues de código.

### 3. Personalización de la Experiencia (RAG)

Parámetros como `cantidad_conocimiento` o `cantidad_contexto` definen cuántos fragmentos de información técnica se le proporcionan a la IA en cada turno. Al ser configurables por agente, se puede optimizar la precisión de un bot experto frente a uno de propósitos generales.