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 = {