Backend de chat con inteligencia artificial para Econexion, usando FastAPI y Gemini 1.5 Flash.
python -m venv venv
# Windows
.\venv\Scripts\activate
# Linux/Mac
source venv/bin/activatepip install -r requirements.txt- Ve a Google AI Studio
- Crea una API Key
- Copia
.env.examplea.env:
cp .env.example .env- Pega tu API Key en
.env:
GEMINI_API_KEY=tu_api_key_aqui
python main.pyO con uvicorn directamente:
uvicorn main:app --reload --host 0.0.0.0 --port 8000GET /
Respuesta:
{"status": "ok", "service": "Econexion Chat IA", "version": "1.0.0"}POST /chat
Content-Type: application/json
{
"message": "¿Cuántas ofertas pendientes tengo?",
"userData": {
"id": "...",
"username": "...",
"enterpriseName": "...",
"email": "...",
"rol": "SELLER",
"publications": [...],
"offers": [...]
}
}
POST /chat/suggestions
Devuelve sugerencias de preguntas basadas en los datos del usuario.
{
"message": "Dame un resumen de mi actividad",
"userData": {
"id": "fe8490b5-0a56-4644-aca2-1b503d417c1c",
"enterpriseName": "JuanSAS",
"username": "Juancho Roi",
"nit": "123456789-0",
"email": "juanpablocamargo91@gmail.com",
"rol": "SELLER",
"publications": [
{
"id": "afe2ed15-2027-4124-ac09-6923de9483ce",
"title": "PET thunder",
"material": "Plasticos PET",
"quantity": 1234,
"price": 123000,
"location": "Bogotá",
"description": "Material PET de alta calidad",
"offers": [
{
"id": "a3ed9343-fd12-4c40-8650-4a70c21fe61b",
"amount": 12222,
"message": "Me interesa tu material",
"date": "2025-12-05T10:29:56.428565",
"status": "PENDING",
"conversation": null
}
]
},
{
"id": "78ae1ad2-2eb0-4445-93ac-0e1499e3a8b1",
"title": "Cartón corrugado industrial",
"material": "Cartón",
"quantity": 1000,
"price": 800,
"location": "Medellín, Antioquia",
"description": "Cajas de cartón en excelente estado",
"offers": []
}
],
"offers": [
{
"id": "daba3a61-8d00-4604-bb8d-baf9ed00ecb8",
"amount": 17777777,
"message": "Oferta por material disponible",
"date": "2025-12-05T10:21:22.351042",
"status": "PENDING",
"conversation": null
}
]
}
}{
"message": "¿Cuántas ofertas pendientes tengo y cuál es la mejor?",
"userData": {
"id": "user-123",
"enterpriseName": "EcoRecicla SAS",
"username": "Carlos López",
"nit": "900123456-1",
"email": "carlos@ecorecicla.com",
"rol": "SELLER",
"publications": [
{
"id": "pub-1",
"title": "Aluminio de latas",
"material": "Aluminio",
"quantity": 500,
"price": 2500,
"location": "Cali",
"description": "Latas de aluminio compactadas",
"offers": [
{
"id": "offer-1",
"amount": 2000,
"message": "Ofrezco 2000 por kg",
"date": "2025-12-04T15:00:00",
"status": "PENDING",
"conversation": null
},
{
"id": "offer-2",
"amount": 2300,
"message": "Puedo pagar 2300",
"date": "2025-12-05T09:00:00",
"status": "PENDING",
"conversation": null
}
]
}
],
"offers": []
}
}{
"message": "¿Qué puedo hacer en la plataforma?",
"userData": {
"id": "nuevo-user",
"enterpriseName": "Mi Primera Empresa",
"username": "Usuario Nuevo",
"nit": null,
"email": "nuevo@email.com",
"rol": "BUYER",
"publications": [],
"offers": []
}
}curl -X POST http://localhost:8000/chat \
-H "Content-Type: application/json" \
-d '{"message":"Hola, dame un resumen","userData":{"id":"1","enterpriseName":"Test","username":"Test User","email":"test@test.com","rol":"SELLER","publications":[],"offers":[]}}'Con el servidor corriendo, visita:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc