agentes-unit4 / app.py
jbaselga's picture
Update app.py
d2cd491 verified
import smolagents
print("smolagents version:", smolagents.__version__)
from smolagents import CodeAgent, WebSearchTool, PythonInterpreterTool, InferenceClientModel
import requests
import os
# --- 1. API GAIA ---
HF_TOKEN = os.getenv("token_curso")
# BASE debe ser la raíz del Space, sin /api
BASE = "http://localhost:7860"
QUESTIONS_URL = f"{BASE}/questions"
SUBMIT_URL = f"{BASE}/submit"
HF_USERNAME = "jbaselga"
AGENT_CODE_URL = "https://huggingface.co/spaces/jbaselga/agentes-unit4/tree/main"
def fetch_gaia_questions():
resp = requests.get(QUESTIONS_URL)
return resp.json()
def submit_answers(answers: dict):
payload = {
"username": HF_USERNAME,
"agent_code": AGENT_CODE_URL,
"answers": [
{"task_id": tid, "submitted_answer": ans}
for tid, ans in answers.items()
]
}
resp = requests.post(SUBMIT_URL, json=payload)
return resp.json()
# --- 2. Configuración del agente ---
#model = InferenceClientModel(model="mistralai/Mistral-7B-Instruct-v0.2")
model = InferenceClientModel(model="HuggingFaceH4/zephyr-7b-beta")
# model = InferenceClientModel(model="Qwen/Qwen1.5-7B-Chat")
tools = [
WebSearchTool(), # Búsqueda web (usa DuckDuckGo)
PythonInterpreterTool() # Ejecuta código Python (incluye cálculos)
]
agent = CodeAgent(tools=tools, model=model, add_base_tools=True, max_steps=10)
# --- 3. Función para responder preguntas ---
#def answer_question(qid: str, question: str) -> str:
# prompt = f"{question}\nResponde SOLO la respuesta final, sin explicaciones ni justificación."
# out = agent.run(prompt)
# Devuelve solo la primera línea, por si acaso
# return out.strip().split('\n')[0]
def answer_question(qid: str, question: str) -> str:
prompt = f"{question}\nResponde SOLO la respuesta final, sin explicaciones ni justificación."
try:
out = agent.run(prompt)
if out is None:
print(f"❌ [qid={qid}] El modelo devolvió None.")
return "ERROR"
return out.strip().split('\n')[0]
except Exception as e:
print(f"❌ [qid={qid}] Error al generar respuesta: {e}")
return "ERROR"
# --- 4. Flujo principal ---
def main():
qs = fetch_gaia_questions()
print("DEBUG qs:", qs)
answers = {}
for item in qs:
print("DEBUG item:", item)
if isinstance(item, dict) and "task_id" in item and "question" in item:
answers[item["task_id"]] = answer_question(item["task_id"], item["question"])
else:
print("Formato inesperado:", item)
result = submit_answers(answers)
print("🧪 Resultados GAIA:", result)
if __name__ == "__main__":
main()