File size: 4,310 Bytes
b1cca60 3e8fd40 eccf8e4 3e8fd40 b1cca60 6d148d5 3e8fd40 6d148d5 3e8fd40 6d148d5 3e8fd40 6d148d5 3e8fd40 6d148d5 3e8fd40 6d148d5 b1cca60 eccf8e4 3e8fd40 7d65c66 6d148d5 3e8fd40 6d148d5 3e8fd40 6d148d5 3e8fd40 6d148d5 3e8fd40 6d148d5 3e8fd40 6d148d5 3e8fd40 6d148d5 3e8fd40 e80aab9 3e8fd40 6d148d5 e80aab9 6d148d5 3e8fd40 6d148d5 e80aab9 6d148d5 3e8fd40 6d148d5 3e8fd40 6d148d5 3e8fd40 e514fd7 3e8fd40 6d148d5 e80aab9 6d148d5 e80aab9 6d148d5 |
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 |
import os
import gradio as gr
import requests
import pandas as pd
from smolagents import CodeAgent
from smolagents.models import InferenceClientModel
from smolagents.tools import DuckDuckGoSearchTool
# --- Agente Inteligente usando flan-t5-large + DuckDuckGo ---
class BasicAgent:
def __init__(self):
model = InferenceClientModel(model_id="google/flan-t5-large")
tools = [DuckDuckGoSearchTool()]
self.agent = CodeAgent(model=model, tools=tools, add_base_tools=False, max_steps=5)
print("🤖 Agente inteligente inicializado.")
def __call__(self, question: str) -> str:
print(f"❓ Pregunta recibida: {question[:50]}...")
try:
answer = self.agent.run(question).strip()
print(f"✅ Respuesta generada: {answer}")
return answer
except Exception as e:
print(f"❌ Error del agente: {e}")
return f"AGENT ERROR: {e}"
# --- Evaluación y envío GAIA ---
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
def run_and_submit_all(profile: gr.OAuthProfile | None):
space_id = os.getenv("SPACE_ID")
if profile:
username = profile.username
print(f"👤 Usuario: {username}")
else:
return "⚠️ Por favor, inicia sesión en Hugging Face antes de enviar.", None
api_url = DEFAULT_API_URL
questions_url = f"{api_url}/questions"
submit_url = f"{api_url}/submit"
agent_code = f"https://huggingface.co/spaces/{space_id}/tree/main"
try:
agent = BasicAgent()
except Exception as e:
return f"❌ Error al crear el agente: {e}", None
# Descargar preguntas
try:
response = requests.get(questions_url, timeout=15)
response.raise_for_status()
questions_data = response.json()
except Exception as e:
return f"❌ Error al descargar preguntas: {e}", None
# Responder preguntas
results_log = []
answers_payload = []
for item in questions_data:
task_id = item.get("task_id")
question_text = item.get("question")
if not task_id or question_text is None:
continue
try:
submitted_answer = agent(question_text)
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:
results_log.append({
"Task ID": task_id,
"Question": question_text,
"Submitted Answer": f"AGENT ERROR: {e}"
})
# Enviar respuestas
submission_data = {
"username": username,
"agent_code": agent_code,
"answers": answers_payload
}
try:
response = requests.post(submit_url, json=submission_data, timeout=60)
response.raise_for_status()
result_data = response.json()
final_status = (
f"✅ ¡Envío realizado con éxito!\n"
f"👤 Usuario: {result_data.get('username')}\n"
f"📊 Puntuación: {result_data.get('score', 'N/A')}% "
f"({result_data.get('correct_count', '?')}/{result_data.get('total_attempted', '?')} correctas)\n"
f"📬 Mensaje: {result_data.get('message', 'Sin mensaje.')}"
)
return final_status, pd.DataFrame(results_log)
except Exception as e:
return f"❌ Error durante el envío: {e}", pd.DataFrame(results_log)
# --- Interfaz Gradio ---
with gr.Blocks() as demo:
gr.Markdown("# 🧠 Evaluador Agente GAIA - Curso Hugging Face")
gr.Markdown("""
1. Inicia sesión en Hugging Face.
2. Pulsa el botón para ejecutar tu agente y enviar las respuestas.
3. Espera unos minutos y revisa la puntuación.
""")
gr.LoginButton()
run_button = gr.Button("▶️ Ejecutar y Enviar Respuestas")
status_output = gr.Textbox(label="Resultado", lines=6, interactive=False)
results_table = gr.DataFrame(label="Respuestas Generadas")
run_button.click(fn=run_and_submit_all, outputs=[status_output, results_table])
if __name__ == "__main__":
print("🚀 Lanzando interfaz...")
demo.launch(debug=True) |