Asistente de programación por terminal que utiliza un LLM ejecutándose de manera local mediante Ollama. Proyecto académico para demostrar el uso de modelos de lenguaje grandes (LLM) integrados en un proceso de software.
Aplicación de línea de comandos (CLI) interactiva con las siguientes funciones:
- Explicar código — pega un fragmento de código y el asistente te lo explica paso a paso.
- Revisar código — detecta posibles bugs, malas prácticas y oportunidades de mejora.
- Generar código — describe lo que necesitas y genera el código en el lenguaje que pidas.
- Refactorizar código — reescribe código para mejorar legibilidad y rendimiento.
- Chat libre — modo conversacional para preguntas técnicas generales.
Además incluye:
- Interfaz con colores en terminal (via
colorama). - Métricas por respuesta: tiempo, tokens generados y velocidad (tok/s).
- Guardado en Markdown de consultas puntuales y chats completos en la carpeta
historial/. - Comprobaciones al inicio: verifica que Ollama esté activo y que el modelo configurado esté descargado.
Todo se ejecuta 100% local (sin enviar datos a la nube).
Usuario (terminal)
↓
main.py ────► assistant.py ────► Ollama API (http://localhost:11434)
│ │ ↓
│ │ Modelo local (qwen2.5-coder:1.5b)
└──────────► historial.py ────► historial/*.md
- Python 3.9+
- Ollama instalado
- ~1 GB de espacio en disco para el modelo (qwen2.5-coder:1.5b)
- 4 GB de RAM (recomendado 8 GB)
Windows: descarga el instalador desde https://ollama.com/download/windows y ejecútalo.
Verifica que quedó instalado:
ollama --versionollama pull qwen2.5-coder:1.5bSi dispones de GPU NVIDIA y quieres mejor calidad, puedes usar un modelo más grande:
ollama pull codellama:7bY cambia
MODEL = "qwen2.5-coder:1.5b"porMODEL = "codellama:7b"enconfig.py.
pip install -r requirements.txtDependencias principales: requests (cliente HTTP hacia Ollama) y colorama (colores en la terminal).
Asegúrate de que Ollama está corriendo (en Windows arranca automáticamente como servicio). Luego:
python main.pyVerás un menú interactivo con el modelo activo y la comprobación de conexión:
╔══════════════════════════════════════════════╗
║ CODE ASSISTANT — Powered by Ollama ║
║ LLM 100% Local ║
╚══════════════════════════════════════════════╝
Modelo: qwen2.5-coder:1.5b
✔ Conectado a Ollama. Modelo 'qwen2.5-coder:1.5b' listo.
1) Explicar código
2) Revisar código (encontrar bugs)
3) Generar código
4) Refactorizar código
5) Chat libre
0) Salir
Elige una opción:
En las opciones 1, 2 y 4 puedes pegar código de varias líneas. Termina la entrada escribiendo END en una línea sola.
Tras cada consulta puntual (opciones 1–4), el programa pregunta si deseas guardar la respuesta en un archivo .md dentro de historial/.
En el chat libre (opción 5) puedes usar estos comandos:
| Comando | Descripción |
|---|---|
/guardar [nombre] |
Guarda el historial del chat en historial/ (nombre opcional) |
/limpiar |
Borra el historial de la sesión actual |
/salir |
Sale del chat (ofrece guardar antes si hay mensajes) |
Al final de cada respuesta se muestran métricas de rendimiento, por ejemplo:
⏱ 6.12s 📝 107 tokens ⚡ 17.5 tok/s (prompt: 54 tok)
code-assistant-ollama/
├── main.py # Punto de entrada con el menú interactivo
├── assistant.py # Cliente Ollama (streaming, métricas)
├── historial.py # Guardado de consultas y chats en Markdown
├── config.py # Configuración (modelo, URL, prompts)
├── generar_capturas.py # Utilidad para generar imágenes de documentación
├── requirements.txt # Dependencias Python
├── historial/ # Archivos .md generados (ignorado por git)
└── README.md
El programa actúa como cliente del servidor local de Ollama. Al iniciar:
- Verifica conexión con
http://localhost:11434. - Comprueba que el modelo configurado en
config.pyesté descargado. - Según la opción elegida, construye un system prompt especializado.
- Envía la petición vía HTTP (streaming) y muestra la respuesta token por token.
- Muestra métricas de la inferencia (duración, tokens, velocidad).
- Mantiene el historial dentro de cada sesión de chat libre y permite exportarlo a Markdown.
Esto demuestra cómo un LLM local puede integrarse a cualquier flujo de software sin depender de servicios externos.
Juan Camilo Barranco Tejada