Spaces:
Sleeping
Sleeping
File size: 5,631 Bytes
3f27060 f051775 3f27060 8969868 87c3c1c f03efc2 913ab65 3ca564b 3f27060 4c2a59e 3f27060 3ca564b 8969868 f4accca 6165204 3ca564b 6165204 3ca564b 6165204 8969868 87c3c1c 8969868 6165204 3ca564b 6165204 3ca564b 8969868 3ca564b 8969868 3ca564b 8969868 3ca564b 8969868 3ca564b 8969868 3ca564b 8969868 10af3d7 6165204 8969868 3ca564b 8969868 3ca564b 6165204 3ca564b 8969868 3ca564b 6165204 87c3c1c 3ca564b 6165204 8969868 3ca564b 10af3d7 3ca564b 10af3d7 8969868 6165204 7939a0c 8969868 3f27060 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
import os
import gradio as gr
import requests
import pandas as pd
from huggingface_hub import login
from dotenv import load_dotenv
import time
from agent import Agente
# Cargar variables de entorno
load_dotenv()
# Constantes
API_BASE_URL = "https://agents-course-unit4-scoring.hf.space"
def execute_agent_operations(profile: gr.OAuthProfile | None):
"""
Obtiene preguntas, ejecuta el agente y envía respuestas.
"""
# Obtener el ID de espacio
space_id = os.getenv("MY_SPACE_ID")
if profile:
username = f"{profile.username}"
print(f"Usuario conectado: {username}")
else:
print("No has iniciado sesión.")
return "Inicia sesión en Hugging Face.", None
questions_url = f"{API_BASE_URL}/questions"
attachments_url = f"{API_BASE_URL}/files/"
submit_url = f"{API_BASE_URL}/submit"
try:
print("Iniciando Agente...")
# Aquí puedes instanciar tu agente como se define en agent.py
agente = Agente()
except Exception as e:
print(f"Error al inicializar agente: {e}")
return f"Error al inicializar el agente: {e}", None
# Obtener las preguntas
print(f"Obteniendo preguntas de: {questions_url}")
try:
response = requests.get(questions_url, timeout=15)
response.raise_for_status()
questions = response.json()
if not questions:
print("La lista de preguntas está vacía.")
return "No se encontraron preguntas.", None
print(f"Se obtuvieron {len(questions)} preguntas.")
# Aquí agregamos el retraso entre cada solicitud para evitar el error 429
for i, q in enumerate(questions):
if i > 0: # Para no esperar después de la primera solicitud
time.sleep(2) # Espera de 2 segundos entre cada consulta
file_name = q.get("file_name", "")
task_id = q.get("task_id")
if file_name and task_id:
try:
att_response = requests.get(f"{attachments_url}{task_id}", timeout=15)
att_response.raise_for_status()
q["attachment_b64"] = att_response.text
except Exception as e:
print(f"Error al obtener archivo adjunto para la tarea {task_id}: {e}")
q["attachment_b64"] = None
except requests.exceptions.RequestException as e:
print(f"Error al obtener preguntas: {e}")
return f"Error al obtener preguntas: {e}", None
# Ejecutar el agente
print(f"Ejecutando agente en {len(questions)} preguntas...")
results_log = []
answers_payload = []
for item in questions:
task_id = item.get("task_id")
question_text = item.get("question", "")
attachment_b64 = item.get("attachment_b64", "")
if attachment_b64:
question_text = f"{question_text}\n\n[ATTACHMENT:]\n{attachment_b64}"
if not task_id or not question_text:
print(f"Saltando tarea con información incompleta: {item}")
continue
try:
submitted_answer = agente.procesar_pregunta(question_text) # Aquí llamarías a tu agente para obtener la respuesta
answers_payload.append({"task_id": task_id, "submitted_answer": submitted_answer})
results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": submitted_answer})
except Exception as e:
print(f"Error al procesar la tarea {task_id}: {e}")
results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": f"ERROR: {e}"})
if not answers_payload:
return "El agente no produjo respuestas.", pd.DataFrame(results_log)
submission_data = {"username": username.strip(), "agent_code": f"https://huggingface.co/spaces/{space_id}", "answers": answers_payload}
status_update = f"Enviando respuestas para el usuario '{username}'..."
print(status_update)
try:
response = requests.post(submit_url, json=submission_data, timeout=60)
response.raise_for_status()
result_data = response.json()
final_status = f"¡Envío exitoso!\nPuntuación: {result_data.get('score', 'N/A')}"
print("Envío exitoso.")
results_df = pd.DataFrame(results_log)
return final_status, results_df
except requests.exceptions.RequestException as e:
error_message = f"Error al enviar: {e}"
print(error_message)
results_df = pd.DataFrame(results_log)
return error_message, results_df
# Interfaz Gradio
with gr.Blocks() as demo:
gr.Markdown("# Evaluador de Agente Básico")
gr.Markdown("""
**Instrucciones:**
1. Modifica el código para ajustar el agente a tus necesidades.
2. Inicia sesión en Hugging Face.
3. Haz clic en 'Ejecutar Evaluación y Enviar Respuestas' para procesar las preguntas.
---
**Avisos:**
Este espacio está diseñado para ser subóptimo con el fin de incentivar la personalización del código.
""")
gr.LoginButton()
run_button = gr.Button("Ejecutar Evaluación y Enviar Respuestas")
status_output = gr.Textbox(label="Estado de Ejecución / Resultado del Envío", lines=5, interactive=False)
results_table = gr.DataFrame(label="Preguntas y Respuestas del Agente", wrap=True)
run_button.click(
fn=execute_agent_operations,
outputs=[status_output, results_table]
)
if __name__ == "__main__":
print("Iniciando aplicación de evaluación de agente...")
demo.launch(debug=True, share=False)
|