feat: Implemented Registry Pattern

This commit is contained in:
2026-02-15 15:58:21 -05:00
parent 548d1eed2b
commit e28c42ddd8
6 changed files with 1276 additions and 4 deletions

View File

@@ -1,15 +1,16 @@
from langgraph.graph import StateGraph, START, END
from langchain_core.messages import SystemMessage, ToolMessage, BaseMessage
from typing import Literal, Callable, Any
from typing import Literal, Callable, Any, Union
from .schemas import MessagesState
from dataclasses import dataclass
from ..tools.tool_registry import ToolRegistry, BaseTool
@dataclass
class AgentConfig:
"""Configuración inmutable del agente para fácil testing."""
system_prompt: str = (
"Eres Naliia un agente de servicio al cliente que permite a los usuarios hacer gestion de su agenda."
"helpful assistant that can call tools when needed. Always respond with a message. "
)
max_iterations: int = 10
timeout_seconds: float = 30.0
@@ -18,17 +19,37 @@ class AgentConfig:
class Agent:
"""
Agente conversacional basado en LangGraph.
Soporta tools usando el patrón Registry para una gestión centralizada
y extensible de herramientas.
"""
def __init__(
self,
model: Any,
config: AgentConfig | None = None,
tools: list | None = None
tools: Union[list, ToolRegistry, None] = None
):
"""
Inicializa el agente.
Args:
model: Modelo LLM a usar
config: Configuración del agente (AgentConfig)
tools: Lista de tools, ToolRegistry, o None
- Si es None: sin herramientas
- Si es list: lista de herramientas
- Si es ToolRegistry: se extrae la lista de herramientas
"""
self._model = model
self._config = config or AgentConfig()
self._tools = tools or []
# Normalizar tools: convertir ToolRegistry a lista si es necesario
if isinstance(tools, ToolRegistry):
self._tools = tools.get_all_tools()
else:
self._tools = tools or []
self._tools_by_name: dict[str, Any] = {
tool.name: tool for tool in self._tools
}