Initial implementation of the bot: - cmd/chat-bot: CLI entrypoint (serve, reindex, ask, version) - internal/agent: LLM provider client + agent runner with RAG injection - internal/config: YAML config loader (providers, RAG, persona, server) - internal/i18n: response-language detection (EN/ES) - internal/persona: persona system prompt assembly from YAML - internal/portfolio: heading-based chunker + SQLite FTS5 indexer - internal/server: chi router with /api/chat (SSE), /api/health, /api/info, /api/reindex, middleware (RequestID, Logging, CORS, RateLimit) - internal/streaming: SSE protocol helpers (start, chunk, sources, done, error) - web/: drop-in vanilla-JS chat widget (no build, no deps) + demo + README - bench/: reproducible driver benchmark (modernc vs mattn SQLite) - configs/portfolio-bot.yaml: llama.cpp default provider, SQLite RAG, canine persona - docs/architecture.md / .es.md: aligned with SQLite FTS5 + llama.cpp decisions - data/projects/README*.md: project data documentation - README.md / .es.md: updated for current implementation All tests pass (go test ./...). Bot is functional end-to-end with the configured LLM provider.
4.3 KiB
4.3 KiB
Rony Chat Bot — Portfolio Bot HTTP
🤖 Chatbot HTTP que presenta tu portfolio y responde preguntas sobre tus proyectos.
Rony Chat Bot es un chatbot basado en rony-llm-agent que se integra con un sitio Astro/React para responder preguntas sobre Victor Hugo Vargas y sus proyectos, usando RAG sobre archivos markdown.
✨ Features
- 🌐 HTTP server con streaming SSE (Server-Sent Events)
- 🧠 RAG sobre markdown — indexa automáticamente los
.mdendata/projects/(SQLite FTS5, sin embeddings) - 🎭 Persona customizable — responde como "asistente de Victor"
- ⚡ Self-hosted con llama.cpp (default) u Ollama (no requiere API key de cloud)
- 💬 Widget de chat drop-in — vanilla JS, sin build step, funciona en cualquier sitio
- 🛡️ Rate limiting y logging estructurado
- 📦 Portable — se puede adaptar a otros contextos (clientes, productos, etc.)
🚀 Quick start
# 1. Instalar
git clone https://github.com/VictorVargas/rony-chat-bot.git
cd chat-bot
# 2. Resolver dependencias (crea go.sum con hashes)
go mod tidy
# 3. Configurar provider (llama.cpp por default)
# Descarga un modelo GGUF, ej.:
# https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct-GGUF
export RONY_MODELS_PATH=/path/to/models
# 4. Cargar tus proyectos en data/projects/
echo "# Mi Proyecto Cool\nDescripción..." > data/projects/mi-proyecto.md
# 5. Build
go build -o bin/chat-bot ./cmd/chat-bot
# 6. Run
./bin/chat-bot serve
# → Sirve en http://localhost:7331
📁 Estructura
rony-chat-bot/
├── cmd/chat-bot/ # Entry point (CLI)
├── internal/
│ ├── server/ # HTTP handlers + SSE
│ ├── agent/ # LLM client + RAG + persona runner
│ ├── portfolio/ # Data loader (markdown → RAG)
│ ├── persona/ # Persona override
│ ├── streaming/ # SSE helpers
│ └── i18n/ # Detección de idioma (EN/ES)
├── web/ # ← WIDGET DE CHAT DROP-IN
│ ├── chat-widget.js
│ ├── chat-widget.css
│ └── example.html
├── data/projects/ # ← TUS PROYECTOS EN MARKDOWN
│ ├── rony-tui.md
│ ├── rony-llm-agent.md
│ └── ...
├── configs/
│ └── portfolio-bot.yaml # Provider + RAG + persona config
├── docs/
│ └── architecture.md # ← Especificación técnica completa
└── go.mod # require rony-llm-agent
🎯 Embebido en cualquier sitio
El bot viene con un widget de chat drop-in. Agrega dos archivos y un tag <script>:
<link rel="stylesheet" href="/chat-widget.css">
<script src="/chat-widget.js"
data-api-url="https://chat.example.com"
data-title="Pregúntame lo que sea"
data-position="bottom-right"
data-theme="auto"
defer></script>
Ver web/README.md para la referencia completa de configuración y snippets de integración con Astro/Next.js. Arquitectura completa en docs/architecture.md §5.
🔄 Adaptar a otro cliente
Este bot está diseñado para ser atómico y reusable. Para adaptarlo (ej. chatbot para un concesionario):
- Fork/clone este repo
- Reemplaza
data/projects/condata/inventory/(u otro dominio) - Actualiza
configs/portfolio-bot.yamlcon la nueva persona - Deploy
La librería rony-llm-agent no cambia.
📚 Documentación
- Architecture doc — Especificación técnica completa
- Library:
rony-llm-agent— Core reutilizable - Harness — El otro proyecto que usa la misma librería
📄 Licencia
MIT — ver LICENSE.
🔗 Proyectos del workspace
rony-llm-agent— Librería coreharness— AI agent harness (TUI)portfolio— Astro + React site (integra este bot)