lwant commited on
Commit
82e40d1
Β·
1 Parent(s): 88b51a3

Make `run_agent` asynchronous, enhance agent handling, and improve answer extraction logic

Browse files
src/gaia_solving_agent/hf_submission_api.py CHANGED
@@ -1,15 +1,19 @@
 
 
1
  import pandas as pd
2
  import requests
 
 
3
 
4
- from agent import BasicAgent
5
 
6
 
7
  DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
8
 
9
 
10
- def instantiate_agent(space_id: str):
11
  try:
12
- agent = BasicAgent()
13
  except Exception as e:
14
  print(f"Error instantiating agent: {e}")
15
  return f"Error initializing agent: {e}", None
@@ -45,7 +49,7 @@ def fetching_questions(api_url: str = DEFAULT_API_URL):
45
  return questions_data
46
 
47
 
48
- def run_agent(agent, questions_data):
49
  results_log = []
50
  answers_payload = []
51
  print(f"Running agent on {len(questions_data)} questions...")
@@ -56,7 +60,12 @@ def run_agent(agent, questions_data):
56
  print(f"Skipping item with missing task_id or question: {item}")
57
  continue
58
  try:
59
- submitted_answer = agent(question_text)
 
 
 
 
 
60
  answers_payload.append({"task_id": task_id, "submitted_answer": submitted_answer})
61
  results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": submitted_answer})
62
  except Exception as e:
@@ -70,6 +79,18 @@ def run_agent(agent, questions_data):
70
 
71
 
72
  def prepare_submission_data(username:str, agent_code: str, answers_payload: list[dict]):
 
 
 
 
 
 
 
 
 
 
 
 
73
  submission_data = {"username": username.strip(), "agent_code": agent_code, "answers": answers_payload}
74
  status_update = f"Agent finished. Submitting {len(answers_payload)} answers for user '{username}'..."
75
  print(status_update)
 
1
+ import re
2
+
3
  import pandas as pd
4
  import requests
5
+ from llama_index.core.agent.workflow import BaseWorkflowAgent
6
+ from workflows import Workflow
7
 
8
+ from gaia_solving_agent.agent import GaiaWorkflow
9
 
10
 
11
  DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
12
 
13
 
14
+ def instantiate_agent(space_id: str, **agent_kwargs):
15
  try:
16
+ agent = GaiaWorkflow(**agent_kwargs)
17
  except Exception as e:
18
  print(f"Error instantiating agent: {e}")
19
  return f"Error initializing agent: {e}", None
 
49
  return questions_data
50
 
51
 
52
+ async def run_agent(agent, questions_data):
53
  results_log = []
54
  answers_payload = []
55
  print(f"Running agent on {len(questions_data)} questions...")
 
60
  print(f"Skipping item with missing task_id or question: {item}")
61
  continue
62
  try:
63
+ if isinstance(agent, BaseWorkflowAgent):
64
+ submitted_answer = await agent.run(user_msg=question_text)
65
+ elif isinstance(agent, Workflow):
66
+ submitted_answer = await agent.run(query=question_text)
67
+ else:
68
+ raise NotImplementedError(f"Invalid agent type: {type(agent)}")
69
  answers_payload.append({"task_id": task_id, "submitted_answer": submitted_answer})
70
  results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": submitted_answer})
71
  except Exception as e:
 
79
 
80
 
81
  def prepare_submission_data(username:str, agent_code: str, answers_payload: list[dict]):
82
+ def extract_answer(answer: str) -> str | int:
83
+ pattern = r"FINAL ANSWER:\s*(.*)"
84
+ search = re.search(pattern, answer)
85
+ extracted_answer = search.group(1) if search else ""
86
+ try:
87
+ return eval(extracted_answer)
88
+ except:
89
+ return extracted_answer
90
+
91
+ for answer in answers_payload:
92
+ answer["submitted_answer"] = extract_answer(str(answer["submitted_answer"]))
93
+
94
  submission_data = {"username": username.strip(), "agent_code": agent_code, "answers": answers_payload}
95
  status_update = f"Agent finished. Submitting {len(answers_payload)} answers for user '{username}'..."
96
  print(status_update)