Aunque ya no se desarrolla activamente, se mantiene publicado como referencia técnica y documentación de aquella etapa de experimentación.
HALion fue un proyecto experimental centrado en explorar function calling, herramientas dinámicas generadas por IA y automatización de flujos de trabajo sobre modelos de lenguaje de OpenAI.
La aplicación proporciona una interfaz visual para crear, gestionar y ejecutar herramientas personalizadas que pueden ser invocadas por un LLM mediante function calling.
Índice de Contenidos
- Arquitectura modular: añade herramientas en Python como si fueran plugins.
- Panel de administración completo: visualiza, activa o desactiva herramientas.
- Configuración de modelos: temperatura, tokens y parámetros de generación.
- Generación automática de tools: crea nuevas herramientas describiendo lo que quieres que hagan.
- Compatible con herramientas que consumen APIs externas.
- Gestión de entorno: edita las variables del
.envdirectamente desde la interfaz. - Logs detallados: traza todas las llamadas a herramientas, con exportación JSON/CSV.
- Chat con herramientas: usa GPT-4 o GPT-3.5 con tus tools personalizadas.
- Activación dinámica: elige qué herramientas están disponibles para el modelo.
- Control de post-procesado: decide si la IA debe continuar el flujo o devolver el resultado directo.
HALion es una aplicación experimental construida sobre OpenAI Function Calling que permite a un modelo de lenguaje invocar herramientas Python definidas por el usuario.
El proyecto explora conceptos como herramientas dinámicas, generación de código asistida por IA, ejecución de workflows simples y administración visual de capacidades disponibles para un LLM.
Aunque actualmente se mantiene como proyecto histórico, sirvió como laboratorio de experimentación para distintas ideas relacionadas con la ampliación de capacidades de los modelos de lenguaje.
- El usuario escribe un prompt en el chat.
- GPT detecta que necesita usar una herramienta (
function_call). - HALion ejecuta esa tool, pasando los parámetros automáticamente.
- La respuesta de la tool se devuelve al modelo (para que continúe el razonamiento) o directamente al usuario.
Todo eso lo puedes ver en tiempo real, modificar, y extender.
Simplemente describe la herramienta que necesitas. Ejemplo:
"Necesito una herramienta que calcule el IMC dado el peso en kg y la altura en metros"
HALion generará el código, lo validará, lo guardará en disco y lo activará automáticamente.
A continuación, se muestran algunas capturas de pantalla de la aplicación HALion en funcionamiento y su interfaz gráfica:
# Clona el proyecto
$ git clone https://github.com/RGiskard7/halion.git
$ cd halion
# Crea un entorno virtual
$ python -m venv venv
$ source venv/bin/activate # En Windows: venv\Scripts\activate
# Instala las dependencias
$ pip install -r requirements.txt
# Configura tu API Key en el archivo .env
$ cp .env.example .env
# Edita el archivo y añade tu clave de OpenAI
# Añadir tu API key de OpenAI en .env
OPENAI_API_KEY=sk-...python run.pyAbre tu navegador en http://localhost:8501.
- Escribe tu mensaje.
- Si es necesario, el asistente invocará automáticamente una herramienta.
- El resultado se integrará en la conversación o se mostrará directamente.
- Crea herramientas nuevas desde cero o con ayuda de la IA.
- Activa/desactiva herramientas sin tocar código.
- Gestiona variables de entorno, configura parámetros de modelo.
- Visualiza y exporta logs de actividad.
- Describe la funcionalidad deseada.
- HALion genera el código, valida la sintaxis y activa la herramienta automáticamente.
- Puedes editar el código antes de usarlo.
halion/
├── app/ # Código principal de la aplicación Streamlit
│ ├── components/ # Componentes reutilizables de la interfaz (Streamlit)
│ │ ├── tool_card.py # Ejemplo: Tarjeta para mostrar información de una tool
│ │ └── __init__.py
│ ├── config/ # Archivos de configuración generados por la aplicación
│ │ ├── .tool_status.json # Estado (activo/inactivo, postproceso) de las tools
│ │ └── toolchains.json # Definiciones de las toolchains guardadas
│ ├── controllers/ # Controladores (MVC): median entre vistas y lógica de negocio/core
│ │ ├── tool_controller.py # Controlador para la gestión de tools
│ │ ├── toolchain_controller.py # Controlador para la gestión de toolchains
│ │ └── __init__.py
│ ├── core/ # Lógica central y fundamental de la aplicación
│ │ ├── tool_definition_registry.py # Registro y gestión de archivos .py de las tools
│ │ ├── tool_manager.py # Gestión del estado en memoria y ejecución de tools individuales
│ │ ├── toolchain_registry.py # Registro y gestión de la persistencia de las toolchains
│ │ ├── env_manager.py # Gestión de variables de entorno (.env)
│ │ ├── logger.py # Sistema de logging para eventos de la aplicación
│ │ └── __init__.py
│ ├── models/ # Modelos de datos Pydantic
│ │ ├── toolchain_model.py # Modelo para las toolchains
│ │ └── __init__.py
│ ├── services/ # Servicios (MVC): encapsulan la lógica de negocio
│ │ ├── chat_service.py # Servicio para la interacción con el chat (llamadas a OpenAI, etc.)
│ │ ├── tool_service.py # Servicio para la lógica de negocio de las tools (generación AI, etc.)
│ │ ├── toolchain_service.py # Servicio para la lógica de negocio de las toolchains (ejecución, etc.)
│ │ └── __init__.py
│ ├── tools/ # Directorio donde se almacenan los archivos .py de las tools dinámicas
│ │ ├── ejemplo_tool.py # (Contiene ejemplos de herramientas como buscar_en_internet.py, etc.)
│ │ └── __init__.py
│ ├── utils/ # Utilidades compartidas y helpers
│ │ ├── ai_generation.py # Utilidades para la generación de código mediante IA
│ │ ├── env_detection.py # Utilidades para la detección de variables de entorno en código
│ │ └── __init__.py
│ ├── views/ # Vistas (MVC): scripts de Streamlit que renderizan la UI
│ │ ├── admin_view.py # Vista para la administración general
│ │ ├── chat_view.py # Vista para la interfaz de chat
│ │ ├── env_view.py # Vista para la gestión de variables de entorno
│ │ ├── logs_view.py # Vista para visualizar los logs
│ │ ├── toolchains_view.py # Vista para la gestión de toolchains
│ │ ├── tools_view.py # Vista para la gestión de tools
│ │ └── __init__.py
│ ├── main.py # Punto de entrada principal de la aplicación Streamlit, gestiona la navegación
│ └── __init__.py # Hace que 'app' sea un paquete Python
├── docs/ # Documentación del proyecto
│ ├── assets/ # Recursos visuales para la documentación (ej: banners)
│ └── images/ # Capturas de pantalla y otros diagramas
├── tests/ # Pruebas unitarias y de integración
├── .env # Variables de entorno locales (privado, gitignored)
├── .env.example # Plantilla para el archivo .env
├── .gitignore # Especifica archivos y directorios ignorados por Git
├── ARCHITECTURE.md # Descripción detallada de la arquitectura del sistema
├── CHANGELOG.md # Registro de cambios del proyecto
├── LICENSE.md # Información de licencia del proyecto
├── README.md # Este archivo: información general del proyecto
├── requirements.txt # Dependencias de Python del proyecto
├── pyproject.toml # Archivo de configuración del proyecto (ej: para Poetry o Hatch)
├── run.py # Script de conveniencia para ejecutar la aplicación
├── main_context.md # Contexto general del proyecto (duplicado/similar a README o ARCHITECTURE)
└── roadmap.md # Plan de desarrollo futuro y funcionalidades pendientes
- Prototipado de asistentes con herramientas personalizadas.
- Experimentación con OpenAI Function Calling.
- Automatización de tareas mediante herramientas Python.
- Pruebas de integración con APIs externas.
- Exploración de flujos encadenados mediante toolchains.
- Aprendizaje y experimentación con arquitecturas basadas en herramientas para LLMs.
git pull origin main
pip install -r requirements.txtConsulta el CHANGELOG.md para más detalles.
- Haz fork del repositorio
- Crea una rama para tu funcionalidad (
feature/nombre) - Haz commit y push (
git commit -m 'Tu cambio') - Abre un Pull Request con tu mejora
Para sugerencias, errores o mejoras, abre un issue o contáctame directamente.
Este proyecto está licenciado bajo los términos de la licencia Apache 2.0. Consulta el archivo LICENSE.md para más detalles sobre derechos, limitaciones y condiciones de uso.
Desarrollado por Edu Díaz a.k.a RGiskard7







