From 7a3ec529647875111f31fc1606f154727aa28407 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 6 Oct 2025 22:07:39 +0000
Subject: [PATCH 1/5] Initial plan
From f656eba4e59625a7a1a6c7d4a3557509fb30068b Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 6 Oct 2025 22:20:20 +0000
Subject: [PATCH 2/5] Add modern medical UI and HF Spaces deployment
configuration
Co-authored-by: DeepRatAI <201007130+DeepRatAI@users.noreply.github.com>
---
.gitignore | 14 +
DEPLOYMENT_GUIDE.md | 242 ++++++++++++
MEDEX_FINAL.py | 70 ++++
README_SPACES.md | 228 +++++++++++
SECRET_CONFIG.md | 139 +++++++
app.py | 331 ++++++++++++++++
index.html | 209 +++++++++++
requirements.txt | 4 +
script.js | 620 ++++++++++++++++++++++++++++++
styles.css | 894 ++++++++++++++++++++++++++++++++++++++++++++
10 files changed, 2751 insertions(+)
create mode 100644 DEPLOYMENT_GUIDE.md
create mode 100644 README_SPACES.md
create mode 100644 SECRET_CONFIG.md
create mode 100644 app.py
create mode 100644 index.html
create mode 100644 script.js
create mode 100644 styles.css
diff --git a/.gitignore b/.gitignore
index 806c13a..bddf46c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,9 @@ config.json
*.key
*.secret
+# API Keys (keep api_key.txt for local development)
+# api_key.txt will be used locally but ignored in HF Spaces
+
# Python
__pycache__/
*.py[cod]
@@ -38,6 +41,7 @@ env/
.cache/
temp/
tmp/
+rag_cache/
# IDE and Editor files
.vscode/
@@ -60,3 +64,13 @@ patient_data/
medical_records/
*.dicom
*.dcm
+
+# Node modules (if any frontend tools are added)
+node_modules/
+package-lock.json
+
+# Test files
+.pytest_cache/
+.coverage
+htmlcov/
+
diff --git a/DEPLOYMENT_GUIDE.md b/DEPLOYMENT_GUIDE.md
new file mode 100644
index 0000000..38b2862
--- /dev/null
+++ b/DEPLOYMENT_GUIDE.md
@@ -0,0 +1,242 @@
+# 🚀 Guía de Despliegue en Hugging Face Spaces
+
+Esta guía te ayudará a desplegar MedeX en Hugging Face Spaces usando el SDK estático.
+
+## 📋 Prerequisitos
+
+1. Cuenta en [Hugging Face](https://huggingface.co/)
+2. API Key de [Moonshot AI](https://platform.moonshot.ai/)
+3. Repositorio MedeX clonado
+
+---
+
+## 🔧 Pasos para el Despliegue
+
+### 1. Crear un Nuevo Space
+
+1. Ve a [huggingface.co/spaces](https://huggingface.co/spaces)
+2. Haz clic en "Create new Space"
+3. Configura:
+ - **Space name**: `medex` (o el nombre que prefieras)
+ - **License**: MIT
+ - **Select SDK**: **Static**
+ - **Space hardware**: CPU basic (suficiente)
+
+### 2. Subir los Archivos
+
+Sube los siguientes archivos a tu Space:
+
+```
+index.html
+styles.css
+script.js
+app.py
+MEDEX_FINAL.py
+requirements.txt
+README_SPACES.md (renombrar a README.md)
+banner.png
+```
+
+**IMPORTANTE**: NO subas el archivo `api_key.txt` - esto se manejará con secrets.
+
+### 3. Configurar el Secret de la API Key
+
+1. En tu Space, ve a **Settings** (⚙️)
+2. Busca la sección **Repository secrets**
+3. Haz clic en **New secret**
+4. Configura:
+ - **Name**: `MOONSHOT_API_KEY`
+ - **Value**: Tu API key de Moonshot AI
+ - **Public**: NO (déjalo sin marcar)
+5. Haz clic en **Add secret**
+
+### 4. Configurar README
+
+Renombra `README_SPACES.md` a `README.md` para que se muestre en tu Space:
+
+```bash
+mv README_SPACES.md README.md
+```
+
+### 5. Verificar Despliegue
+
+Una vez que los archivos estén subidos:
+
+1. HF Spaces detectará automáticamente el SDK estático
+2. Instalará las dependencias de `requirements.txt`
+3. Iniciará la aplicación con `app.py`
+4. El Space estará disponible en: `https://huggingface.co/spaces/TU_USUARIO/medex`
+
+---
+
+## ✅ Verificación
+
+Para verificar que todo funciona correctamente:
+
+1. Abre tu Space
+2. Deberías ver la interfaz de MedeX
+3. El indicador de estado debería mostrar "Conectado" (punto verde)
+4. Haz clic en "Iniciar Consulta"
+5. Envía un mensaje de prueba como: "¿Qué son los AINEs?"
+6. Deberías recibir una respuesta de MedeX
+
+---
+
+## 🔍 Solución de Problemas
+
+### El Space no inicia
+
+**Causa común**: El secret no está configurado correctamente.
+
+**Solución**:
+1. Verifica que el secret se llama exactamente `MOONSHOT_API_KEY`
+2. Verifica que la API key es válida
+3. Reinicia el Space (Settings → Factory reboot)
+
+### Error "MedeX system not available"
+
+**Causa**: La API key no se está cargando.
+
+**Solución**:
+1. Revisa los logs del Space (en la interfaz de HF)
+2. Verifica que el secret está configurado
+3. Asegúrate de que `app.py` tiene acceso a `os.environ.get('MOONSHOT_API_KEY')`
+
+### La interfaz se ve pero no responde
+
+**Causa**: Problema con el backend.
+
+**Solución**:
+1. Abre la consola del navegador (F12)
+2. Busca errores en la pestaña "Console"
+3. Verifica que las peticiones a `/chat` lleguen correctamente
+4. Revisa los logs del Space
+
+### Error 503 Service Unavailable
+
+**Causa**: El backend no pudo inicializar MedeX.
+
+**Solución**:
+1. Verifica que todas las dependencias están en `requirements.txt`
+2. Revisa los logs del Space para ver el error específico
+3. Asegúrate de que `MEDEX_FINAL.py` está presente
+
+---
+
+## 🎨 Personalización
+
+### Cambiar el título del Space
+
+Edita la sección `---` al inicio de `README.md`:
+
+```yaml
+---
+title: TU_TITULO_AQUI
+emoji: 🏥
+colorFrom: blue
+colorTo: purple
+sdk: static
+---
+```
+
+### Modificar la UI
+
+Los archivos que puedes modificar:
+
+- `index.html`: Estructura de la página
+- `styles.css`: Estilos visuales
+- `script.js`: Lógica del frontend
+
+### Cambiar el puerto
+
+Si necesitas cambiar el puerto (por defecto 7860):
+
+En `app.py`, modifica:
+
+```python
+port = int(os.environ.get("PORT", TU_PUERTO))
+```
+
+---
+
+## 📊 Monitoreo
+
+### Ver logs en tiempo real
+
+1. Ve a tu Space en HF
+2. Haz clic en la pestaña "Logs"
+3. Podrás ver:
+ - Inicialización del sistema
+ - Peticiones recibidas
+ - Errores (si los hay)
+
+### Estadísticas de uso
+
+Puedes ver estadísticas en:
+- Endpoint: `https://TU_SPACE_URL/stats`
+- Retorna JSON con métricas del sistema
+
+---
+
+## 🔐 Seguridad
+
+### Mejores prácticas
+
+1. **NUNCA** subas tu API key directamente en el código
+2. **SIEMPRE** usa secrets de HF Spaces
+3. Mantén el secret marcado como privado
+4. Regenera la API key si se compromete
+
+### CORS
+
+El backend está configurado para aceptar peticiones de cualquier origen (`allow_origins=["*"]`).
+
+Para producción, es recomendable cambiar esto en `app.py`:
+
+```python
+app.add_middleware(
+ CORSMiddleware,
+ allow_origins=["https://tudominio.com"], # Tu dominio específico
+ allow_credentials=True,
+ allow_methods=["*"],
+ allow_headers=["*"],
+)
+```
+
+---
+
+## 📚 Recursos Adicionales
+
+- [Documentación de HF Spaces](https://huggingface.co/docs/hub/spaces)
+- [Documentación de FastAPI](https://fastapi.tiangolo.com/)
+- [Moonshot AI Platform](https://platform.moonshot.ai/)
+- [Repositorio GitHub de MedeX](https://github.com/DeepRatAI/MedeX)
+
+---
+
+## 💡 Tips
+
+1. **Cache**: HF Spaces mantiene caché, si haces cambios y no se reflejan, prueba "Factory reboot"
+2. **Logs**: Los logs son tu mejor amigo para debugging
+3. **Testing local**: Prueba primero localmente con `python app.py` antes de subir
+4. **Recursos**: El tier gratuito de HF Spaces es suficiente para MedeX
+
+---
+
+## ✉️ Soporte
+
+Si tienes problemas:
+
+1. Revisa los logs del Space
+2. Consulta la documentación de HF Spaces
+3. Abre un issue en GitHub
+4. Pregunta en la comunidad de HF
+
+---
+
+**🎉 ¡Listo! Tu instancia de MedeX debería estar funcionando en Hugging Face Spaces.**
+
+---
+
+*Última actualización: 2024*
+*MedeX v25.83 - DeepRatAI*
diff --git a/MEDEX_FINAL.py b/MEDEX_FINAL.py
index d497de7..6cf4ea3 100644
--- a/MEDEX_FINAL.py
+++ b/MEDEX_FINAL.py
@@ -794,6 +794,76 @@ def get_session_stats(self) -> Dict[str, Any]:
]
}
+ async def generate_response_stream(self, query: str):
+ """Generador de respuestas con streaming para API web"""
+ # Analizar query
+ user_type = self.detect_user_type(query)
+ is_emergency = self.detect_emergency(query)
+
+ # Actualizar estadísticas
+ self.session_stats['queries'] += 1
+ if is_emergency:
+ self.session_stats['emergencies'] += 1
+ if user_type == "Professional":
+ self.session_stats['professional_queries'] += 1
+ else:
+ self.session_stats['educational_queries'] += 1
+
+ # Crear system prompt
+ system_prompt = self.create_system_prompt(user_type, is_emergency)
+
+ # Configurar herramientas
+ tools = None
+ if not is_emergency:
+ tools = [
+ {
+ "type": "builtin_function",
+ "function": {
+ "name": "web_search"
+ }
+ }
+ ]
+
+ # Agregar mensaje al historial
+ self.conversation_history.append({
+ "role": "user",
+ "content": query
+ })
+
+ # Preparar mensajes
+ messages = [
+ {"role": "system", "content": system_prompt},
+ *self.conversation_history[-10:] # Últimos 10 mensajes
+ ]
+
+ # Streaming
+ try:
+ response = self.client.chat.completions.create(
+ model="kimi-k2-0711-preview",
+ messages=messages,
+ temperature=0.3,
+ stream=True,
+ tools=tools
+ )
+
+ full_response = ""
+ for chunk in response:
+ if chunk.choices and len(chunk.choices) > 0:
+ delta = chunk.choices[0].delta
+ if hasattr(delta, 'content') and delta.content:
+ full_response += delta.content
+ yield delta.content
+
+ # Agregar respuesta al historial
+ self.conversation_history.append({
+ "role": "assistant",
+ "content": full_response
+ })
+
+ except Exception as e:
+ error_msg = f"❌ Error: {e}"
+ yield error_msg
+
def clear_history(self):
"""Limpia el historial conversacional"""
self.conversation_history.clear()
diff --git a/README_SPACES.md b/README_SPACES.md
new file mode 100644
index 0000000..2664e35
--- /dev/null
+++ b/README_SPACES.md
@@ -0,0 +1,228 @@
+---
+title: MedeX - Sistema Avanzado de IA Médica
+emoji: 🏥
+colorFrom: blue
+colorTo: purple
+sdk: static
+pinned: false
+license: mit
+---
+
+# 🏥 MedeX v25.83 - Sistema Avanzado de IA Médica
+
+
+
+
+
+**Sistema médico inteligente con IA avanzada, detección automática de usuarios y protocolos de emergencia**
+
+[](https://www.python.org/downloads/)
+[](https://fastapi.tiangolo.com/)
+[](https://opensource.org/licenses/MIT)
+
+
+
+---
+
+## 🌟 Acerca de MedeX
+
+MedeX v25.83 es un sistema avanzado de inteligencia artificial médica que utiliza el modelo **Kimi K2-0711-Preview** para proporcionar información médica precisa y contextualizada. El sistema cuenta con:
+
+### ✨ Características Principales
+
+- **🧠 IA Médica Avanzada**: Powered by Kimi K2-0711-Preview
+- **👤 Detección Inteligente**: Distingue automáticamente entre profesionales de salud y usuarios educativos
+- **🚨 Protocolos de Emergencia**: Reconocimiento automático de emergencias médicas
+- **📚 RAG Integrado**: Sistema de recuperación aumentada con base de conocimiento médico
+- **⚡ Respuestas en Tiempo Real**: Streaming de respuestas progresivas
+- **🎨 UI Moderna**: Interfaz profesional y responsive
+
+### 🎯 Modos de Operación
+
+#### Modo Profesional 👨⚕️
+Activado automáticamente cuando detecta terminología médica profesional:
+- Análisis clínicos detallados
+- Diagnósticos diferenciales
+- Protocolos de tratamiento basados en evidencia
+- Referencias a guías clínicas actualizadas
+
+#### Modo Educativo 📚
+Para estudiantes y público general:
+- Explicaciones claras y accesibles
+- Terminología simplificada
+- Énfasis en prevención y educación
+- Disclaimers de seguridad apropiados
+
+---
+
+## 🚀 Cómo Usar MedeX
+
+### 1️⃣ Configuración en Hugging Face Spaces
+
+Para usar MedeX, necesitas configurar un **secret** en tu Space:
+
+1. Ve a la configuración de tu Space (Settings)
+2. En la sección "Repository secrets", agrega:
+ - **Nombre del secret**: `MOONSHOT_API_KEY`
+ - **Valor**: Tu API key de [Moonshot AI](https://platform.moonshot.ai/)
+
+### 2️⃣ Obtener API Key
+
+1. Visita [platform.moonshot.ai](https://platform.moonshot.ai/)
+2. Crea una cuenta o inicia sesión
+3. Genera tu API key en el dashboard
+4. Copia la API key y configúrala en los secrets de HF Spaces
+
+### 3️⃣ Usar la Aplicación
+
+Una vez configurado el secret:
+
+1. La aplicación se iniciará automáticamente
+2. Haz clic en "Iniciar Consulta"
+3. Escribe tu pregunta médica
+4. MedeX detectará automáticamente tu perfil y proporcionará la respuesta adecuada
+
+---
+
+## 💡 Ejemplos de Uso
+
+### Para Profesionales de la Salud
+
+```
+👨⚕️ "Paciente masculino 65 años, diabético, dolor precordial 2 horas de evolución"
+
+📋 MedeX responderá con:
+- Análisis diferencial completo
+- Protocolos de actuación
+- Estudios diagnósticos específicos
+- Plan terapéutico basado en guías
+- Códigos CIE-10
+```
+
+### Para Estudiantes/Público General
+
+```
+👤 "¿Qué son los AINEs y para qué sirven?"
+
+📋 MedeX responderá con:
+- Explicación clara y educativa
+- Ejemplos comunes
+- Precauciones importantes
+- Cuándo consultar a un profesional
+```
+
+### Casos de Emergencia
+
+```
+🚨 "Dolor intenso en el pecho que irradia al brazo"
+
+⚠️ MedeX activará protocolo de emergencia:
+- Alerta visual destacada
+- Instrucciones inmediatas
+- Indicación de llamar al 911
+- Primeros auxilios básicos
+```
+
+---
+
+## 🔧 Tecnologías Utilizadas
+
+- **Frontend**: HTML5, CSS3, JavaScript (ES6+)
+- **Backend**: FastAPI, Python 3.8+
+- **IA**: Kimi K2-0711-Preview (Moonshot AI)
+- **Deployment**: Hugging Face Spaces (Static SDK)
+- **UI/UX**: Diseño responsive moderno con gradientes médicos
+
+---
+
+## 📋 Estructura del Proyecto
+
+```
+MedeX/
+├── index.html # Interfaz principal
+├── styles.css # Estilos modernos y profesionales
+├── script.js # Lógica del frontend
+├── app.py # API FastAPI backend
+├── MEDEX_FINAL.py # Sistema MedeX core
+├── requirements.txt # Dependencias Python
+└── README.md # Este archivo
+```
+
+---
+
+## ⚠️ Disclaimer Importante
+
+**MedeX es una herramienta de apoyo educativo e informativo.**
+
+- ❌ **NO reemplaza** la consulta médica profesional
+- ❌ **NO proporciona** diagnósticos médicos definitivos
+- ❌ **NO debe usarse** para emergencias reales
+
+### En caso de emergencia real:
+- 🚨 Llama al 911 o servicios de emergencia locales
+- 🏥 Acude al servicio de urgencias más cercano
+- 👨⚕️ Consulta con profesionales de la salud certificados
+
+---
+
+## 🔐 Seguridad y Privacidad
+
+- Las conversaciones **NO se almacenan** permanentemente
+- Los datos **NO se comparten** con terceros
+- La API key se maneja de forma segura a través de secrets de HF
+- Sin cookies ni tracking de usuarios
+
+---
+
+## 📖 Documentación Adicional
+
+- [Guía de Usuario Completa](docs/guia_de_usuario.md)
+- [User Guide (English)](docs/user_guide.md)
+- [GitHub Repository](https://github.com/DeepRatAI/MedeX)
+
+---
+
+## 🤝 Contribuciones
+
+MedeX es un proyecto open-source. Las contribuciones son bienvenidas:
+
+1. Fork el repositorio
+2. Crea una rama para tu feature
+3. Commit tus cambios
+4. Push a la rama
+5. Abre un Pull Request
+
+---
+
+## 📄 Licencia
+
+MedeX está licenciado bajo [MIT License](https://opensource.org/licenses/MIT).
+
+---
+
+## 👥 Créditos
+
+- **Desarrollado por**: DeepRatAI
+- **Modelo IA**: Kimi K2-0711-Preview (Moonshot AI)
+- **Versión**: 25.83
+- **Última actualización**: 2024
+
+---
+
+## 📞 Soporte
+
+¿Necesitas ayuda?
+
+- 📧 Issues en GitHub
+- 📖 Consulta la documentación
+- 💬 Discusiones en la comunidad
+
+---
+
+
+
+**🏥 MedeX v25.83 - Inteligencia Artificial al Servicio de la Medicina**
+
+*Powered by Kimi K2 • Built with ❤️ by DeepRatAI*
+
+
diff --git a/SECRET_CONFIG.md b/SECRET_CONFIG.md
new file mode 100644
index 0000000..b17bfa1
--- /dev/null
+++ b/SECRET_CONFIG.md
@@ -0,0 +1,139 @@
+# 🔐 Configuración de Secrets en Hugging Face Spaces
+
+## Nombre del Secret Requerido
+
+Para que MedeX funcione correctamente en Hugging Face Spaces, necesitas configurar el siguiente secret:
+
+### Secret Name: `MOONSHOT_API_KEY`
+
+Este es el nombre exacto que debes usar al configurar el secret en Hugging Face Spaces.
+
+## ¿Cómo Obtener la API Key?
+
+1. Ve a [platform.moonshot.ai](https://platform.moonshot.ai/)
+2. Crea una cuenta o inicia sesión
+3. Navega a tu dashboard o sección de API keys
+4. Genera una nueva API key o copia una existente
+5. Guarda la API key en un lugar seguro
+
+## ¿Cómo Configurar el Secret en HF Spaces?
+
+### Paso 1: Acceder a Settings
+1. Ve a tu Space en Hugging Face
+2. Haz clic en el ícono de configuración (⚙️) o en "Settings"
+
+### Paso 2: Agregar el Secret
+1. Busca la sección **"Repository secrets"** o **"Variables and secrets"**
+2. Haz clic en **"New secret"**
+3. Configura:
+ - **Name**: `MOONSHOT_API_KEY` (exactamente este nombre)
+ - **Value**: Pega tu API key de Moonshot AI
+ - **Public**: Deja desmarcado (mantén el secret privado)
+4. Haz clic en **"Add secret"** o **"Save"**
+
+### Paso 3: Verificar
+1. El Space se reiniciará automáticamente
+2. Verifica en los logs que aparezca: `📡 API Key configured: True`
+3. Abre la interfaz y prueba enviar un mensaje
+
+## Verificación del Secret
+
+Para verificar que el secret está configurado correctamente, puedes:
+
+1. **Ver los logs del Space**: Busca el mensaje `✅ MedeX v25.83 initialized successfully`
+2. **Probar el endpoint de salud**:
+ ```bash
+ curl https://TU_USUARIO-medex.hf.space/health
+ ```
+ Deberías ver: `"medex_available": true`
+
+3. **Usar la interfaz**: Envía un mensaje de prueba y verifica que obtienes una respuesta real
+
+## Solución de Problemas
+
+### El Secret no funciona
+
+**Problema**: Ves `❌ Cannot initialize MedeX: No API key available`
+
+**Solución**:
+1. Verifica que el nombre del secret es exactamente: `MOONSHOT_API_KEY`
+2. Verifica que la API key es válida
+3. Reinicia el Space (Settings → Factory reboot)
+4. Revisa los logs para ver errores específicos
+
+### Error 503 Service Unavailable
+
+**Problema**: La API responde con error 503
+
+**Causa**: El backend no pudo inicializar MedeX
+
+**Solución**:
+1. Verifica que el secret está configurado
+2. Revisa los logs del Space
+3. Asegúrate de que la API key de Moonshot es válida y tiene créditos
+
+### La API Key es visible en los logs
+
+**No te preocupes**: Los logs de HF Spaces son privados y no se muestran públicamente. Sin embargo, nunca debes hacer commit de la API key en el código.
+
+## Desarrollo Local
+
+Para desarrollo local, puedes usar el archivo `api_key.txt`:
+
+1. Crea un archivo llamado `api_key.txt` en la raíz del proyecto
+2. Pega tu API key en el archivo (una sola línea)
+3. Guarda el archivo
+4. El archivo está en `.gitignore` y no se subirá a GitHub
+
+**IMPORTANTE**: El archivo `api_key.txt` es solo para desarrollo local. En HF Spaces se usa el secret `MOONSHOT_API_KEY`.
+
+## Seguridad
+
+### ✅ Buenas Prácticas
+
+- **SIEMPRE** usa secrets en HF Spaces
+- **NUNCA** hagas commit de tu API key en el código
+- **MANTÉN** el secret como privado (no público)
+- **REGENERA** la API key si se compromete
+- **REVOCA** API keys que ya no uses
+
+### ❌ Evita
+
+- Compartir tu API key públicamente
+- Incluir la API key en el código fuente
+- Subir `api_key.txt` a GitHub
+- Hacer screenshots que muestren la API key completa
+
+## Información Adicional
+
+### ¿Por qué este nombre específico?
+
+El código de MedeX busca la API key en esta variable de entorno:
+
+```python
+API_KEY = os.environ.get('MOONSHOT_API_KEY')
+```
+
+Si cambias el nombre del secret, debes actualizar el código en `app.py`.
+
+### ¿Puedo usar otro servicio de IA?
+
+Actualmente, MedeX está configurado para usar Moonshot AI (Kimi K2). Para usar otro servicio, necesitarás modificar:
+- `MEDEX_FINAL.py`: Cambiar el cliente y la base URL
+- `app.py`: Actualizar la referencia al secret
+
+---
+
+## Resumen
+
+**Nombre del Secret**: `MOONSHOT_API_KEY`
+
+**Dónde configurarlo**: Settings → Repository secrets en tu Space de HF
+
+**Dónde obtener la key**: [platform.moonshot.ai](https://platform.moonshot.ai/)
+
+**¿Dudas?**: Consulta la [Guía de Despliegue](DEPLOYMENT_GUIDE.md) completa
+
+---
+
+*MedeX v25.83 - DeepRatAI*
diff --git a/app.py b/app.py
new file mode 100644
index 0000000..bf8fb3e
--- /dev/null
+++ b/app.py
@@ -0,0 +1,331 @@
+#!/usr/bin/env python3
+"""
+🏥 MedeX v25.83 - API Backend for Hugging Face Spaces
+FastAPI backend for static frontend deployment
+"""
+
+import os
+import sys
+import asyncio
+import json
+from typing import Optional, Dict, Any
+from datetime import datetime
+
+from fastapi import FastAPI, HTTPException, Request
+from fastapi.responses import StreamingResponse, JSONResponse, HTMLResponse, FileResponse
+from fastapi.staticfiles import StaticFiles
+from fastapi.middleware.cors import CORSMiddleware
+from pydantic import BaseModel
+import uvicorn
+
+# Import MedeX system
+from MEDEX_FINAL import MedeXv2583
+
+# ===================================
+# Configuration
+# ===================================
+
+# Load API key from HF Spaces secrets or local file
+API_KEY = os.environ.get('MOONSHOT_API_KEY') # HF Spaces secret name: MOONSHOT_API_KEY
+
+if not API_KEY:
+ try:
+ with open('api_key.txt', 'r') as f:
+ API_KEY = f.read().strip()
+ except FileNotFoundError:
+ print("⚠️ Warning: No API key found. Set MOONSHOT_API_KEY secret in HF Spaces.")
+ API_KEY = None
+
+# ===================================
+# FastAPI App Setup
+# ===================================
+
+app = FastAPI(
+ title="MedeX API",
+ description="Advanced Medical AI System API",
+ version="25.83"
+)
+
+# CORS configuration
+app.add_middleware(
+ CORSMiddleware,
+ allow_origins=["*"], # In production, specify exact origins
+ allow_credentials=True,
+ allow_methods=["*"],
+ allow_headers=["*"],
+)
+
+# ===================================
+# Global State
+# ===================================
+
+medex_instance = None
+session_stats = {
+ "total_queries": 0,
+ "total_emergencies": 0,
+ "total_professional": 0,
+ "total_educational": 0,
+ "uptime_start": datetime.now()
+}
+
+# ===================================
+# Request/Response Models
+# ===================================
+
+class ChatRequest(BaseModel):
+ message: str
+ streaming: bool = True
+
+class ChatResponse(BaseModel):
+ response: str
+ user_type: str
+ is_emergency: bool
+ stats: Dict[str, Any]
+
+# ===================================
+# Initialization
+# ===================================
+
+def initialize_medex():
+ """Initialize MedeX system with API key"""
+ global medex_instance
+
+ if not API_KEY:
+ print("❌ Cannot initialize MedeX: No API key available")
+ return False
+
+ try:
+ # Temporarily write API key to file for MedeX initialization
+ with open('api_key.txt', 'w') as f:
+ f.write(API_KEY)
+
+ medex_instance = MedeXv2583()
+ print("✅ MedeX v25.83 initialized successfully")
+ return True
+ except Exception as e:
+ print(f"❌ Error initializing MedeX: {e}")
+ return False
+
+@app.on_event("startup")
+async def startup_event():
+ """Initialize MedeX on startup"""
+ print("🏥 Starting MedeX API v25.83...")
+ initialize_medex()
+ print("✅ MedeX API ready")
+
+# ===================================
+# API Endpoints
+# ===================================
+
+@app.get("/")
+async def root():
+ """Serve the main HTML page"""
+ try:
+ return FileResponse("index.html")
+ except Exception as e:
+ return HTMLResponse(content=f"
+ MedeX utiliza inteligencia artificial avanzada (Kimi K2-0711-Preview) para proporcionar
+ información médica precisa, adaptándose automáticamente según tu perfil profesional.
+
+
+
+
+
+
Detección Inteligente
+
Adapta las respuestas automáticamente según tu perfil
+
+
+
+
Emergencias
+
Protocolos automáticos para situaciones críticas
+
+
+
+
RAG Avanzado
+
Base de conocimiento médico integrada
+
+
+
+
Tiempo Real
+
Respuestas progresivas con streaming
+
+
+
+
+
+
Importante: MedeX es una herramienta de apoyo educativo e informativo.
+ No reemplaza la consulta médica profesional. En caso de emergencia real, contacta servicios
+ de emergencia inmediatamente.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Consulta Médica
+ Modo: Detectando...
+
+
+
+
+
+
+
+
+
+
+
+
+ ⚠️ EMERGENCIA DETECTADA
+
Si esto es una emergencia real, llama al 911 o acude al servicio de urgencias más cercano inmediatamente.