feat: Implemented Registry Pattern
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user