RAG Cars Advisor, tambien presentado en la interfaz como "Que Auto Comprar", es un asistente conversacional para apoyar la compra y comparacion de vehiculos. El sistema responde preguntas en lenguaje natural sobre modelos, versiones, equipamiento, seguridad, consumo y caracteristicas tecnicas usando documentos automotrices indexados en Qdrant y respuestas generadas con Groq.
El proyecto combina una aplicacion web en Next.js, una API FastAPI, un motor RAG con FastEmbed/Qdrant/Groq, un pipeline de ingesta de PDFs con LlamaParse, una demo tecnica en Streamlit y despliegues opcionales con Docker, AWS Batch y S3.
- Next.js 14 con App Router.
- React 18.
- TypeScript.
- Tailwind CSS con configuracion local.
- Componentes UI propios en
frontend/components/ui. lucide-reactyreact-iconspara iconografia.- Supabase JS client para autenticacion e historial de chats, si esta configurado.
- Fuente Plus Jakarta Sans mediante
next/font/google.
No hay una dependencia shadcn/ui instalada en frontend/package.json; el proyecto usa componentes propios con una organizacion similar en frontend/components/ui.
- Python.
- FastAPI.
- Uvicorn.
- Pydantic.
python-dotenv.
- LlamaParse /
llama-cloud-servicespara parseo de PDFs. - FastEmbed con
BAAI/bge-m3por defecto. - Qdrant local o Qdrant Cloud como base vectorial.
- Groq para generacion de respuestas.
- Docker para API e indexador.
- AWS Batch y S3 opcionales para ingesta.
- Streamlit como demo tecnica local.
RAG_Cars/
|-- frontend/
| |-- app/ # Rutas Next.js: /, /chat, /login, /register
| |-- components/ # Componentes landing, chat, auth, theme y UI
| |-- constants/ # Textos, rutas y configuracion de UI
| |-- hooks/ # Hooks de auth, chat y threads
| |-- lib/ # Entorno y cliente Supabase
| |-- public/ # Assets estaticos de Next.js
| |-- services/ # Clientes HTTP y servicios frontend
| |-- types/ # Tipos TypeScript
| |-- utils/ # Utilidades compartidas
| |-- package.json
| |-- next.config.mjs
| |-- tailwind.config.ts
| `-- tsconfig.json
|-- backend/
| |-- api.py # API FastAPI
| |-- rag_router.py # Orquestador de consultas RAG
| |-- rag.py
| |-- query_engine.py
| |-- requirements.txt
| `-- Dockerfile.api
|-- ingestion/
| |-- loader.py # Parseo, chunking, embeddings e indexacion
| |-- jobs/
| | `-- index_aws_batch.py
| `-- Dockerfile
|-- streamlit/
| `-- streamlit_app.py
|-- docs/
|-- data/
|-- infra/
|-- DEPLOY_NEXTJS.md
|-- PROJECT_OVERVIEW.md
|-- README.md
`-- .env.example
- Node.js 18+.
- npm.
- Python 3.12 recomendado.
- Docker opcional.
- Una API key de Groq para usar el chat RAG.
- Una API key de Llama Cloud si se van a parsear PDFs.
- Qdrant local o Qdrant Cloud.
- Supabase opcional para login, registro e historial de conversaciones.
cd frontend
npm installCrear frontend/.env.local si se usa el frontend con backend o Supabase:
BACKEND_API_BASE_URL=http://localhost:8000
NEXT_PUBLIC_API_BASE_URL=
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=cd backend
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txtPuedes usar .env.example como base para crear un .env en la raiz del repositorio.
Los scripts reales estan definidos en frontend/package.json:
cd frontend
npm run dev
npm run build
npm run start
npm run lint
npm run test:unitUso esperado:
npm run dev: levanta Next.js en modo desarrollo, normalmente enhttp://localhost:3000.npm run build: genera el build de produccion de Next.js.npm run start: sirve el build de produccion generado por Next.js.npm run lint: ejecuta validacion TypeScript contsc --noEmit --incremental false.npm run test:unit: ejecuta pruebas unitarias TypeScript con Playwright Test.
El frontend corre con Next.js y el build de produccion lo gestiona Next.js.
cd frontend
npm run test:unitpython -m unittest discover -s tests -vcd backend
.venv\Scripts\activate
uvicorn api:app --reload --host 0.0.0.0 --port 8000Endpoints principales:
GET /health
POST /api/chat
Para desarrollo con Next.js, configura CORS_ALLOW_ORIGINS con el origen del frontend:
CORS_ALLOW_ORIGINS=http://localhost:3000,http://127.0.0.1:3000cd frontend
npm run devAbrir:
http://localhost:3000
Rutas principales:
/: landing page./chat: experiencia de chat./login: inicio de sesion./register: registro.
cd streamlit
streamlit run streamlit_app.pyStreamlit se usa como demo tecnica para probar indexacion y consultas RAG localmente.
cd ingestion
python loader.pyEstructura esperada de PDFs:
MARCAS/
kia/
k3/
ficha.pdf
toyota/
corolla/
catalogo.pdf
El archivo .env.example contiene una base actualizada. Las variables mas importantes son:
| Variable | Uso | Obligatoria |
|---|---|---|
GROQ_API_KEY |
API key para generar respuestas con Groq. | Si se usa el chat RAG |
GROQ_MODEL |
Modelo LLM usado por Groq. | No |
LLAMA_CLOUD_API_KEY |
API key para parsear PDFs con LlamaParse. | Si se indexan PDFs |
QDRANT_URL |
URL de Qdrant remoto. | No si se usa Qdrant local |
QDRANT_API_KEY |
API key de Qdrant remoto. | Si Qdrant remoto la requiere |
QDRANT_COLLECTION |
Nombre de la coleccion vectorial. | No |
QDRANT_PATH |
Ruta local para Qdrant embebido. | No |
FASTEMBED_MODEL_NAME |
Modelo de embeddings. | No |
MARCAS_ROOT |
Ruta local donde estan los PDFs fuente. | Si se indexa localmente |
RAG_CARS_DATA_DIR |
Ruta de salida para Markdown parseado. | No |
CORS_ALLOW_ORIGINS |
Origenes permitidos por la API FastAPI. | No |
BACKEND_API_BASE_URL |
URL del backend FastAPI consumida por el proxy de Next.js. | No |
NEXT_PUBLIC_API_BASE_URL |
URL publica opcional para llamar directo al backend desde el navegador. | No |
NEXT_PUBLIC_SUPABASE_URL |
URL publica del proyecto Supabase. | Si se usa auth/chat history |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
Llave anon publica de Supabase. | Si se usa auth/chat history |
ENABLE_S3_SYNC |
Activa sincronizacion con S3. | Solo para ingesta AWS/S3 |
AWS_REGION |
Region AWS para S3/AWS Batch. | Si se usa AWS |
AWS_S3_BUCKET |
Bucket S3 para Bronze/Silver/Gold. | Si se usa AWS/S3 |
- El usuario entra a la landing de Next.js en
/. - Para consultar el asistente entra a
/chat. - Si Supabase esta configurado, el frontend valida la sesion y puede persistir conversaciones.
- El frontend envia la pregunta a
POST /api/chaten Next.js. - FastAPI llama al router RAG.
- El motor RAG genera embeddings con FastEmbed y recupera contexto desde Qdrant.
- Groq genera una respuesta con el contexto recuperado.
- La API devuelve
answer,route,sourcesyhits. - El frontend muestra la respuesta y guarda historial si Supabase esta disponible.
Ejecuta estos comandos desde la raiz del repositorio.
docker build -f backend/Dockerfile.api -t rag-cars-api .
docker run --rm -p 8000:8000 --env-file .env rag-cars-apidocker build -f ingestion/Dockerfile -t rag-cars-indexer .
docker run --rm --env-file .env rag-cars-indexerEl frontend es una aplicacion Next.js ubicada en frontend/. Para actualizar un deploy antiguo del frontend, revisa DEPLOY_NEXTJS.md.
Configuracion base:
- Framework preset:
Next.js. - Install command:
npm install. - Build command:
npm run build. - Start command, si la plataforma lo pide:
npm run start. - Output directory: no configurar manualmente en plataformas que detectan Next.js.
Estado actual:
- La API FastAPI expone endpoints de salud y chat.
- El frontend Next.js implementa landing, login, registro y chat.
- El pipeline de ingesta procesa PDFs y los indexa en Qdrant.
- Streamlit funciona como demo tecnica.
- Docker esta disponible para API e ingesta.
Trabajo pendiente recomendado:
- Agregar pruebas automatizadas.
- Versionar migraciones Supabase si el entorno requiere recrearlas.
- Consolidar observabilidad y manejo de errores.
- Completar archivos de infraestructura reproducible si aplica.
- Documentar el contrato completo de API.
Licencia no especificada en el repositorio. Antes de publicar o distribuir este proyecto, agrega un archivo LICENSE con la licencia correspondiente.