Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import httpx | |
| import os | |
| from dotenv import load_dotenv | |
| # Cargamos variables de entorno | |
| load_dotenv(os.path.join(os.path.dirname(__file__), '../.env')) | |
| API_URL = os.getenv("API_URL", "https://sherlock-production-67ce.up.railway.app/final_inference") | |
| async def responder(message, history): | |
| # Usamos un bloque 'async with' para gestionar el cliente de HTTPX | |
| # Definimos un timeout alto (60s) porque File Search puede demorar | |
| limits = httpx.Limits(max_keepalive_connections=5, max_connections=10) | |
| timeout = httpx.Timeout(60.0, connect=10.0) | |
| try: | |
| async with httpx.AsyncClient(timeout=timeout, limits=limits) as client: | |
| payload = {"query": message} | |
| response = await client.post(API_URL, json=payload) | |
| response.raise_for_status() | |
| data = response.json() | |
| #print(f"DEBUG: Lo que respondió el backend -> {data}") | |
| # Ajusta 'response' según el nombre del campo que devuelva tu FastAPI | |
| return data.get("answer", "No se obtuvo respuesta del servidor.") | |
| except httpx.HTTPStatusError as e: | |
| return f"❌ Error del servidor ({e.response.status_code}): {e.response.text}" | |
| except httpx.RequestError as e: | |
| return f"⚠️ Error de conexión: No se pudo contactar a la API. ¿Está encendida?" | |
| except Exception as e: | |
| return f"🔥 Error inesperado: {str(e)}" | |
| examples = ["¿Cuáles son las obligaciones de la entidad crediticia en un crédito digital?"] | |
| # Configuración de Gradio | |
| demo = gr.ChatInterface( | |
| fn=responder, | |
| title="Asistente Almah", | |
| description="Consulta información técnica basada en los manuales subidos.", | |
| examples=examples, | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() |