Spaces:
Sleeping
Sleeping
import os | |
import requests | |
from huggingface_hub import hf_api | |
import time | |
# Cargar el token de Hugging Face desde el entorno | |
HF_TOKEN = os.getenv("HF_TOKEN") | |
MODEL_NAME = os.getenv("MODEL_NAME", "google/gemma-2b-it") | |
print("HF_TOKEN desde agent.py:", HF_TOKEN[:10] if HF_TOKEN else "NO DEFINIDO") | |
# Función para llamar al modelo y obtener respuesta | |
def call_model(prompt, max_retries=5, wait_seconds=10): | |
""" | |
Llama al modelo de Hugging Face y devuelve la respuesta generada. | |
Reintenta si el modelo aún se está cargando. | |
""" | |
headers = { | |
"Authorization": f"Bearer {HF_TOKEN}", | |
"Content-Type": "application/json" | |
} | |
payload = { | |
"inputs": prompt, | |
"parameters": {"max_new_tokens": 512} | |
} | |
for attempt in range(1, max_retries + 1): | |
try: | |
response = requests.post( | |
f"https://api-inference.huggingface.co/models/{MODEL_NAME}", | |
headers=headers, | |
json=payload, | |
timeout=60 | |
) | |
result = response.json() | |
# Verificar si hay un error | |
if isinstance(result, dict) and result.get("error"): | |
error_msg = result["error"] | |
print(f"[Intento {attempt}] Error del modelo: {error_msg}") | |
if "is currently loading" in error_msg and attempt < max_retries: | |
print(f"🔁 Esperando {wait_seconds} segundos antes de reintentar...") | |
time.sleep(wait_seconds) | |
continue | |
else: | |
raise ValueError(f"Error al procesar la solicitud: {error_msg}") | |
# Respuesta válida | |
return result[0]["generated_text"] if isinstance(result, list) else result | |
except requests.exceptions.RequestException as e: | |
print(f"[Intento {attempt}] Error de red: {e}") | |
if attempt < max_retries: | |
time.sleep(wait_seconds) | |
continue | |
else: | |
raise ValueError(f"Error de conexión con el modelo: {str(e)}") | |
except Exception as e: | |
raise ValueError(f"Error al obtener respuesta del modelo: {str(e)}") | |
def wait_for_model(): | |
""" | |
Espera hasta que el modelo esté completamente cargado y disponible para hacer solicitudes. | |
""" | |
headers = { | |
"Authorization": f"Bearer {HF_TOKEN}", | |
"Content-Type": "application/json" | |
} | |
print(f"Esperando que el modelo {MODEL_NAME} esté completamente cargado...") | |
while True: | |
try: | |
response = requests.get( | |
f"https://api-inference.huggingface.co/models/{MODEL_NAME}", | |
headers=headers, | |
timeout=30 | |
) | |
if response.status_code == 200: | |
json_response = response.json() | |
if isinstance(json_response, dict) and json_response.get("status") == "loaded": | |
print(f"✅ Modelo {MODEL_NAME} completamente cargado.") | |
break | |
else: | |
print(f"⏳ Modelo aún cargando... Estado actual: {json_response.get('status', 'desconocido')}") | |
else: | |
print(f"❌ Estado inesperado: {response.status_code}") | |
except requests.exceptions.RequestException as e: | |
print(f"🌐 Error de red: {e}") | |
time.sleep(10) # Espera 10 segundos antes del siguiente intento | |
# Clase para representar la lógica del agente | |
class Agente: | |
def __init__(self): | |
self.name = "Agente Hugging Face" | |
self.version = "1.0" | |
def procesar_pregunta(self, pregunta): | |
""" | |
Procesa la pregunta y devuelve la respuesta generada por el modelo. | |
""" | |
print(f"Procesando pregunta: {pregunta}") | |
try: | |
respuesta = call_model(pregunta) | |
return respuesta | |
except ValueError as e: | |
print(f"Error al procesar la pregunta: {e}") | |
return f"ERROR: {e}" | |
# Función para ejecutar la evaluación de preguntas | |
def evaluar_preguntas(preguntas): | |
""" | |
Toma una lista de preguntas, las procesa y devuelve las respuestas generadas. | |
""" | |
agente = Agente() | |
respuestas = [] | |
# Esperar a que el modelo esté listo | |
wait_for_model() | |
for pregunta in preguntas: | |
print(f"Evaluando: {pregunta}") | |
respuesta = agente.procesar_pregunta(pregunta) | |
respuestas.append(respuesta) | |
return respuestas | |