MyAgentGAIA / resolver_benchmark.py
Diego2106's picture
Upload resolver_benchmark.py
7ea4cb0 verified
import os
import json
import requests
from smolagents import CodeAgent, HfApiModel
from smolagents.tools.web_search import DuckDuckGoSearchTool
from smolagents.tools.python_interpreter import PythonInterpreterTool
# ==============================================================================
# --- CONFIGURACI脫N ACTUALIZADA CON TUS DATOS ---
# ==============================================================================
# URL de la API del benchmark (reemplaza si es diferente)
API_URL = "https://huggingface.co/spaces/leondurb/gaia_leaderboard"
# Tu nombre de usuario de Hugging Face
TU_USERNAME_DE_HF = "Diego2106"
# El enlace al c贸digo de tu Space en Hugging Face
TU_LINK_AL_CODIGO = "https://huggingface.co/spaces/Diego2106/MyAgentGAIA/tree/main"
# ==============================================================================
def crear_agente_gaia():
"""Crea y configura el agente que resolver谩 las preguntas."""
modelo = HfApiModel(model_id="mistralai/Mistral-7B-Instruct-v0.2")
herramientas = [
DuckDuckGoSearchTool(),
PythonInterpreterTool()
]
agente = CodeAgent(
model=modelo,
tools=herramientas,
# Prompt para asegurar que la respuesta sea directa y sin texto extra
system_prompt_template="Responde 煤nicamente con la respuesta final, sin explicaciones ni texto adicional."
)
return agente
def resolver_benchmark():
"""Funci贸n principal que ejecuta todo el proceso."""
# --- 1. Obtener las preguntas de la API ---
print("Paso 1: Obteniendo preguntas de la API...")
try:
response = requests.get(f"{API_URL}/questions")
response.raise_for_status()
preguntas = response.json()
print(f"Se obtuvieron {len(preguntas)} preguntas.")
except requests.exceptions.RequestException as e:
print(f"Error al obtener las preguntas: {e}")
return
# --- 2. Crear el agente y la lista de respuestas ---
agente = crear_agente_gaia()
lista_de_respuestas = []
# Directorio para guardar archivos de las preguntas
if not os.path.exists("temp_files"):
os.makedirs("temp_files")
# --- 3. Procesar cada pregunta ---
print("\nPaso 2: Procesando cada pregunta con el agente (esto puede tardar mucho)...")
for i, tarea in enumerate(preguntas):
task_id = tarea['task_id']
pregunta_texto = tarea['Question']
file_name = tarea.get('file_name')
prompt_para_agente = pregunta_texto
# Si la pregunta necesita un archivo, lo descargamos
if file_name:
print(f" - La pregunta {task_id} necesita el archivo: {file_name}. Descargando...")
try:
file_response = requests.get(f"{API_URL}/files/{file_name}")
file_response.raise_for_status()
ruta_archivo_local = os.path.join("temp_files", file_name)
with open(ruta_archivo_local, 'wb') as f:
f.write(file_response.content)
prompt_para_agente += f"\n\nContexto adicional: Usa el archivo que se encuentra en la ruta '{ruta_archivo_local}'."
print(f" - Archivo descargado en: {ruta_archivo_local}")
except requests.exceptions.RequestException as e:
print(f" - !! Error al descargar el archivo {file_name}: {e}")
continue
# Ejecutar el agente
print(f" - Resolviendo pregunta {i+1}/{len(preguntas)} (ID: {task_id})...")
try:
respuesta_agente = agente.run(prompt_para_agente)
print(f" - Respuesta obtenida: {respuesta_agente}")
lista_de_respuestas.append({
"task_id": task_id,
"submitted_answer": str(respuesta_agente)
})
except Exception as e:
print(f" - !! Error al ejecutar el agente en la tarea {task_id}: {e}")
lista_de_respuestas.append({
"task_id": task_id,
"submitted_answer": "ERROR"
})
# --- 4. Guardar las respuestas en un archivo local (como respaldo) ---
print("\nPaso 3: Guardando las respuestas en 'submission.jsonl' como respaldo...")
with open("submission.jsonl", 'w') as f:
for respuesta in lista_de_respuestas:
f.write(json.dumps(respuesta) + '\n')
print("Respaldo guardado.")
# --- 5. Enviar los resultados a la API ---
print("\nPaso 4: Enviando los resultados para calificaci贸n...")
payload = {