Spaces:
No application file
No application file
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 = { | |