Versión: 1.0
Última actualización: 2025-04-14
Autor: RGiskard7
HALion es un sistema modular de agentes LLM orientado a la ejecución de herramientas (tools) y flujos encadenados (toolchains). Está diseñado como una plataforma extensible que combina procesamiento de lenguaje natural con ejecución de funciones personalizadas y gestión asistida por IA.
El objetivo es proporcionar una interfaz de control sobre herramientas definidas por el usuario, con soporte para:
- Llamadas a funciones via OpenAI
function_calling - Toolchains dinámicas encadenadas
- Generación de herramientas y flujos con IA
- Registro de llamadas y errores
- Futuro soporte a base de datos y usuarios
- Modularidad: cada responsabilidad se encuentra en su módulo correspondiente
- Separación de responsabilidades: controladores, servicios, vistas, modelos y lógica de negocio están claramente separados
- Escalabilidad: preparada para multiusuario, base de datos y expansión de features
- Legibilidad: código y rutas autoexplicativas
- Extensibilidad: herramientas y flujos pueden añadirse en caliente
app/
│
├── components/ # Componentes visuales reutilizables
│ └── tool_card.py
│
├── config/ # Configuración persistente (toolchains, status, etc)
│ └── toolchains.json
│
├── controllers/ # Lógica de control entre vista y servicios
│ ├── tools_controller.py
│ └── toolchain_controller.py # Nuevo: Gestiona acciones de UI para toolchains
│
├── core/ # Núcleo funcional de la aplicación (sin dependencia de vistas)
│ ├── tool_manager.py
│ ├── tool_definition_registry.py # Gestiona registro/archivos .py de tools
│ ├── toolchain_registry.py # Nuevo: Gestiona registro y persistencia de toolchains
│ ├── logger.py
│ └── env_manager.py
│
├── models/ # Modelos de datos
│ └── toolchain_model.py
│
├── services/ # Lógica de negocio (servicios independientes)
│ ├── chat_services.py # Comunicación con OpenAI
│ ├── chat_service.py # Comunicación con OpenAI
│ └── toolchain_service.py # Nuevo: Ejecución de toolchains y generación AI
│
├── utils/ # Utilidades varias
│ ├── ai_generation.py
│ └── env_detection.py
│
├── views/ # Interfaz gráfica (Streamlit)
│ ├── admin_view.py
│ ├── chat_view.py
│ ├── env_view.py
│ ├── logs_view.py
│ ├── tools_view.py
│ └── toolchains_view.py
│
├── tools/ # Herramientas dinámicas creadas por el usuario
│ └── *.py
│
├── debug_logs/ # Carpeta de logs internos
│ └── *.log
│
└── main.py # Punto de entrada de la appEncapsulan acciones del usuario iniciadas desde la vista. Gestionan el estado de la sesión de Streamlit (session_state) relacionado con la acción y actúan como intermediarios hacia los servicios o el núcleo. No deben contener lógica de negocio compleja ni manipular datos directamente (delegan al registro o servicio). Ejemplo: toolchain_controller.py maneja los botones de la UI de toolchains.
Contiene la lógica central y reutilizable de la aplicación, independiente de la interfaz de usuario.
- Nota sobre Nomenclatura (Manager vs. Registry):
*_manager: Generalmente gestiona el estado en tiempo de ejecución de un conjunto de elementos (ej.tool_managergestiona si las tools están activas o su estado de postproceso).*_registry: Generalmente gestiona el registro y la persistencia de las definiciones de los elementos (ej.toolchain_registrymaneja la carga/guardado de las definiciones de toolchains;tool_definition_registrymaneja los archivos.pyy el registro en memoria de las definiciones de tools).
-Contiene la lógica principal del sistema:
tool_manager.py: carga y gestión del estado runtime de tools (activas, postprocess).tool_definition_registry.py: registro en memoria de tools dinámicas, y gestión de archivos fuente (.py) de todas las tools (lectura, escritura, borrado).
tool_manager.py: Orquestador central para el estado runtime de las herramientas. Carga las definiciones (usandotool_definition_registryimplícitamente al cargar archivos), gestiona qué herramientas están activas (is_tool_active) y su configuración de postproceso (get_tool_postprocess) leyendo/escribiendo en.tool_status.json. Proporciona la lista de herramientas utilizables (get_tools) y permite ejecutarlas (call_tool_by_name).tool_definition_registry.py: Gestiona las definiciones y la persistencia de las herramientas individuales. Mantiene un registro en memoria de las herramientas dinámicas (dynamic_tools) y proporciona funciones para leer (get_tool_code), escribir (save_tool_code,persist_tool_to_disk) y eliminar (delete_tool_file) los archivos.pyque definen las herramientas en la carpetatools/. También registra la función y schema en memoria (register_tool).toolchain_registry.py: Gestiona las definiciones y la persistencia de las cadenas de herramientas (toolchains). Carga (load_toolchains_from_disk) y guarda (save_toolchains_to_disk) las definiciones desde/haciatoolchains.json. Mantiene un registro en memoria (_toolchain_registry) de las definiciones disponibles.logger.py: registros de llamadasenv_manager.py: variables de entorno
Estructuras de datos simples y fuertemente tipadas, actualmente solo incluye:
ToolchainToolchainStep
Futuro: aquí se colocarán modelos persistentes con SQLAlchemy / Pydantic.
Contiene la lógica de negocio y flujos complejos, desacoplados de la UI y del núcleo base.
chat_services.py: gestiona la interacción con OpenAI (incluyendofunction_callingpara tools individuales).chat_service.py: gestiona la interacción con OpenAI (incluyendofunction_callingpara tools individuales).toolchain_service.py: encapsula la lógica para ejecutar una toolchain paso a paso y para orquestar la generación de toolchains mediante IA.
chat_service.py: Servicio responsable de la comunicación con la API de OpenAI para el chat conversacional. Prepara los mensajes, incluye las herramientas activas (obtenidas detool_manager) parafunction_calling, procesa la respuesta del modelo, y ejecuta las herramientas individuales solicitadas por el LLM.toolchain_service.py: Contiene la lógica para ejecutar una secuencia de herramientas definida en una toolchain. Obtiene la definición de la toolchain (detoolchain_registry), obtiene las herramientas necesarias (detool_manager), ejecuta los pasos secuencialmente pasando el contexto, y devuelve el resultado final. También orquesta la generación de definiciones de toolchains usando IA (llamando autils/ai_generation).
tool_service.py: encapsula la lógica para generar tools con IA y gestionar sus variables de entorno.
tool_service.py: Servicio enfocado en la creación asistida de herramientas individuales. Orquesta la generación de código de tool mediante IA (llamando autils/ai_generation), extrae metadatos (schema, nombre) y detecta variables de entorno necesarias (llamando autils/env_detection), y gestiona el guardado de estas variables (llamando acore/env_manager). También puede incluir lógica para la persistencia y registro coordinado de nuevas herramientas (interactuando contool_definition_registryytool_manager).
A futuro aquí se añadirá lógica de autenticación, servicios de usuario, métricas, auditoría, etc.
Responsables del renderizado de interfaz con Streamlit. Solo deben llamar a controllers o services, nunca a core directamente.
Funciones auxiliares desacopladas:
ai_generation.py: generación de código con IAenv_detection.py: detección de claves y entornos en texto
Contiene herramientas dinámicas definidas por el usuario. Se almacenan como scripts .py que se cargan en caliente.
main.pyinicia y configura Streamlit- El usuario navega a una vista (por ejemplo,
tools_view) - La vista invoca funciones de
tools_controller - El controlador accede a
tool_managerotool_definition_registry - Se actualiza el estado de la sesión
- El resultado se renderiza visualmente con un componente (
tool_card)
- Todos los nombres en
snake_case - Todos los ficheros de tools dinámicas deben coincidir con su
schema["name"] - Las herramientas deben tener:
- Una función llamable con docstring y typing
- Un
schemaJSON válido compatible con OpenAI
- Los logs se almacenan en
debug_logs/ - La configuración de herramientas activas está en
config/.tool_status.json - Toolchains en
config/toolchains.json
- ✅ Modularización ya lista
- 🔜 Base de datos relacional con SQLAlchemy (estructura ya preparada en
models/) - 🔜 Gestión multiusuario (autenticación, permisos)
- 🔜 Soporte multi-toolchain, planificador inteligente
- 🔜 Versionado de herramientas
- 🔜 Importación/exportación visual de toolchains
- 🔜 API REST paralela para integración con apps externas (Flask/FastAPI)
- 🔜 Separación backend/frontend completa (si se desea)
Esta arquitectura está diseñada para ser mantenible y ampliable. Todas las decisiones siguen principios de Clean Architecture, inspiradas en MVC, y están pensadas para facilitar el trabajo colaborativo, pruebas unitarias y escalabilidad futura.