rony-chat-bot/README.es.md
Victor Hugo Vargas f33708534a feat: bootstrap rony-chat-bot Go module
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.
2026-07-17 00:56:06 -07:00

4.3 KiB

Rony Chat Bot — Portfolio Bot HTTP

🌐 Idioma: English | Español

🤖 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 .md en data/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):

  1. Fork/clone este repo
  2. Reemplaza data/projects/ con data/inventory/ (u otro dominio)
  3. Actualiza configs/portfolio-bot.yaml con la nueva persona
  4. Deploy

La librería rony-llm-agent no cambia.

📚 Documentación

📄 Licencia

MIT — ver LICENSE.

🔗 Proyectos del workspace