Skip to content

Navigation Menu

Sign in
Sign up

Repository files navigation

⚡ IronMind — Coach RAG local (CBUM & co.)

CI License: MIT Python 3.12+ FastAPI Tests Docker 100% Local


Un RAG que corre 100% en local con tu RX 9070 XT de 16 GB: ingerí videos de YouTube (idealmente de CBUM y su equipo), y luego preguntale por rutinas, técnica, volumen, y el porqué de cada cosa. Cada respuesta cita el video y el minuto exacto de donde salió la información.

YouTube ──▶ yt-dlp ──▶ Whisper (transcripción) ──▶ chunks con timestamp
 │
 chat ◀── Qwen3-14B (llama.cpp Vulkan) ◀── retrieval ◀── embeddings + store local

Architecture

Capturas

Chat Inicial Chat Respuesta Biblioteca

¿Por qué esta configuración para la 9070 XT?

  • La RX 9070 XT (RDNA4) tiene soporte ROCm flojo en Windows. El backend Vulkan de llama.cpp es la opción probada: corre ~20-29% más rápido que ROCm, funciona nativo en Windows y usa toda la GPU.
  • Qwen3-14B Q4_K_M (~9.3 GB): cabe holgado en 16 GB junto a la caché KV de 8K de contexto, razona muy bien el "porqué", y habla español e inglés excelente (ideal: vos preguntás en español, el contenido de los videos está en inglés).
  • nomic-embed-text-v1.5 para embeddings: chico, rápido y excelente calidad.
  • Todo el stack (transcripción, embeddings, LLM, store) es local. No sale ni un byte a la nube.

Requisitos

Requisito Cómo verificarlo / instalarlo
Python 3.10+ python --version
ffmpeg winget install Gyan.FFmpeg (necesario para extraer audio)
GPU AMD con driver reciente + Vulkan vulkaninfo --summary
llama-server (Vulkan build) Descargá llama-bXXXX-bin-win-vulkan-x64.zip de llama.cpp releases, extraé llama-server.exe a scripts/ o agregalo al PATH

Setup (Windows)

scripts\setup.bat REM crea venv e instala dependencias
scripts\download_models.bat REM baja Qwen3-14B + nomic-embed (~10 GB)
scripts\start_engine.bat REM arranca 2 instancias de llama-server (Vulkan)
venv\Scripts\python -m uvicorn backend.main:app --port 8000

Abrí http://127.0.0.1:8000 🚀

Linux: scripts/start_engine.sh reemplaza al .bat de arranque (instalá llama.cpp con -DGGML_VULKAN=ON).

Uso

  1. Añadí contenido: pegá la URL de un video, una playlist, un canal o una búsqueda (por ejemplo https://www.youtube.com/results?search_query=chris+bumstead). Para canales/playlists/búsquedas elegí cuántos videos procesar (por defecto 5). La ingestión descarga el audio, transcribe con Whisper, fragmenta con timestamps y genera embeddings — todo en el background, con barra de progreso en la sidebar.

    Nota: el handle @cbum tiene un quirk del lado de YouTube/yt-dlp (la tab de videos no se expone). Usá la URL de búsqueda, el canal por ID (/channel/UC4514FwdRy5gI6CdC9GPb0w/videos) o videos sueltos. Si YouTube responde 403 al descargar: venv\Scripts\python -m pip install -U yt-dlp.

  2. Preguntá cosas como:

    • "Dame una rutina de push de 4 días como la de CBUM"
    • "¿Por qué prefiere poco volumen pero mucha intensidad?"
    • "Explica la técnica del press inclinado con mancuernas"
  3. Cada respuesta muestra chips de fuente con el minuto exacto — clickeá y se abre YouTube justo en ese momento del video.

Modelos alternativos

Editalo en config.json y scripts/start_engine.bat:

Modelo VRAM aprox. Para qué
Qwen3-14B-Q4_K_M (default) ~11 GB Mejor razonamiento y español
Qwen3-8B-Q4_K_M ~6 GB Más velocidad y contexto, casi tan bueno
gemma-3-12b Q4 ~8 GB Alternativa sólida

Transcripción: cambiá whisper_model en config.json (small = más rápido, large-v3 = más preciso). La transcripción corre en CPU (faster-whisper); para acelerarla con la GPU se puede usar whisper.cpp con Vulkan.

Opciones de config.json

Clave Default Qué hace
enable_thinking false Qwen3 razona antes de responder por defecto. Con false responde directo (más rápido, ideal para coach); con true da respuestas más elaboradas pero más lentas
whisper_model medium Tamaño de Whisper para transcribir (tiny es ~5x más rápido, ideal para probar; medium/large-v3 para producción)
top_k 8 Fragmentos recuperados por pregunta
chunk_chars 900 Tamaño de cada fragmento del transcript

Nota: si re-ingestás videos cambiando whisper_model, los nuevos reemplazan a los viejos en la biblioteca (no se duplican).

Arquitectura

backend/
 main.py FastAPI: chat RAG (SSE streaming), ingestión, health, UI
 llm.py Cliente OpenAI-compatible (funciona con llama.cpp u Ollama)
 store.py Vector store local (numpy + JSON, sin dependencias nativas)
 ingest.py yt-dlp → audio → Whisper → chunks → embeddings
 transcribe.py faster-whisper (fallback openai-whisper)
 prompts.py System prompt + armado de contexto con citas
web/ UI vanilla JS/CSS premium (sin build, sin CDN, fuentes locales)
scripts/
 start_engine.bat / .sh llama-server chat (:8080) + embeddings (:8081)
 mock_engine.py Motor simulado para probar la app sin GPU
data/ Audio, caché de Whisper, biblioteca vectorial (generado)

Troubleshooting

  • "Motor sin conexión" en la UI → no está corriendo llama-server, o apuntan a otros puertos. Revisá scripts/start_engine.bat y config.json.
  • Errores de Vulkan al cargar → actualizá el driver de AMD (Adrenalin) y usá el build Vulkan más reciente de llama.cpp.
  • Muy lento transcribiendo → usá whisper_model: "small" en config.json.
  • Querés probar la UI antes de bajar 10 GBvenv\Scripts\python scripts/mock_engine.py y listo (respuestas simuladas). Ojo: los videos ingeridos con el mock quedan con embeddings falsos; borralos y re-ingestalos cuando corras el motor real.
  • Ollama en vez de llama.cpp → apuntá chat_url y embed_url a tu Ollama (http://127.0.0.1:11434/v1) y usá los nombres de modelo que tengas (qwen3:14b, nomic-embed-text).

🚀 Deploy

Ver DEPLOY.md para guías de deploy (Local, Docker, Railway).

Aviso

IronMind puede equivocarse o alucinar. Es una herramienta de apoyo: contrastá siempre con las fuentes citadas y con profesionales. No es consejo médico.

🔒 Seguridad

  • 100% local — Ningún dato sale de tu máquina
  • Sin dependencias cloud — Todo corre en tu GPU
  • Configuración segura — Secrets en .env (nunca en código)
  • Datos en disco — Biblioteca almacenada localmente

Ver SECURITY.md para más detalles.

🧪 Testing

cd backend
python -m pytest -v

🤝 Contribuir

Ver CONTRIBUTING.md para guías de desarrollo.

📄 Licencia

MIT © 2026 Alejo Fernandez — ver LICENSE.

About

RAG engine 100% local on GPU. Ingests YouTube videos, transcribes with Whisper, answers with exact video citations. FastAPI + llama.cpp + Qwen3-14B on Vulkan.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /