mdicio commited on
Commit
cca9cef
·
1 Parent(s): 0c43797

tryng to sync

Browse files
Files changed (2) hide show
  1. app.py +35 -66
  2. myapp.py +228 -0
app.py CHANGED
@@ -1,38 +1,34 @@
1
- # app.py
2
  import os
3
-
4
  import gradio as gr
5
- import pandas as pd
6
  import requests
7
-
8
- from agent import BoomBot
9
 
10
  # (Keep Constants as is)
11
  # --- Constants ---
12
  DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
13
 
14
-
15
- # --- Basic Agent Definition --
16
  class BasicAgent:
17
  def __init__(self):
18
  print("BasicAgent initialized.")
19
- self.agent = BoomBot(provider="deepinfra")
20
-
21
- def __call__(self, question: str, task_id: str, to_download) -> str:
22
  print(f"Agent received question (first 50 chars): {question[:50]}...")
23
- return self.agent.run(question, task_id, to_download)
24
-
 
25
 
26
- def run_and_submit_all(profile: gr.OAuthProfile | None):
27
  """
28
  Fetches all questions, runs the BasicAgent on them, submits all answers,
29
  and displays the results.
30
  """
31
  # --- Determine HF Space Runtime URL and Repo URL ---
32
- space_id = os.getenv("SPACE_ID") # Get the SPACE_ID for sending link to the code
33
 
34
  if profile:
35
- username = f"{profile.username}"
36
  print(f"User logged in: {username}")
37
  else:
38
  print("User not logged in.")
@@ -59,16 +55,16 @@ def run_and_submit_all(profile: gr.OAuthProfile | None):
59
  response.raise_for_status()
60
  questions_data = response.json()
61
  if not questions_data:
62
- print("Fetched questions list is empty.")
63
- return "Fetched questions list is empty or invalid format.", None
64
  print(f"Fetched {len(questions_data)} questions.")
65
  except requests.exceptions.RequestException as e:
66
  print(f"Error fetching questions: {e}")
67
  return f"Error fetching questions: {e}", None
68
  except requests.exceptions.JSONDecodeError as e:
69
- print(f"Error decoding JSON response from questions endpoint: {e}")
70
- print(f"Response text: {response.text[:500]}")
71
- return f"Error decoding server response for questions: {e}", None
72
  except Exception as e:
73
  print(f"An unexpected error occurred fetching questions: {e}")
74
  return f"An unexpected error occurred fetching questions: {e}", None
@@ -80,48 +76,23 @@ def run_and_submit_all(profile: gr.OAuthProfile | None):
80
  for item in questions_data:
81
  task_id = item.get("task_id")
82
  question_text = item.get("question")
83
- file_name = item.get("file_name", "")
84
-
85
- if file_name.strip() != "":
86
- to_download = True
87
- else:
88
- to_download = False
89
-
90
  if not task_id or question_text is None:
91
  print(f"Skipping item with missing task_id or question: {item}")
92
  continue
93
  try:
94
- submitted_answer = agent(question_text, task_id, to_download=to_download)
95
- answers_payload.append(
96
- {"task_id": task_id, "submitted_answer": submitted_answer}
97
- )
98
- results_log.append(
99
- {
100
- "Task ID": task_id,
101
- "Question": question_text,
102
- "Submitted Answer": submitted_answer,
103
- }
104
- )
105
  except Exception as e:
106
- print(f"Error running agent on task {task_id}: {e}")
107
- results_log.append(
108
- {
109
- "Task ID": task_id,
110
- "Question": question_text,
111
- "Submitted Answer": f"AGENT ERROR: {e}",
112
- }
113
- )
114
 
115
  if not answers_payload:
116
  print("Agent did not produce any answers to submit.")
117
  return "Agent did not produce any answers to submit.", pd.DataFrame(results_log)
118
 
119
- # 4. Prepare Submission
120
- submission_data = {
121
- "username": username.strip(),
122
- "agent_code": agent_code,
123
- "answers": answers_payload,
124
- }
125
  status_update = f"Agent finished. Submitting {len(answers_payload)} answers for user '{username}'..."
126
  print(status_update)
127
 
@@ -191,19 +162,20 @@ with gr.Blocks() as demo:
191
 
192
  run_button = gr.Button("Run Evaluation & Submit All Answers")
193
 
194
- status_output = gr.Textbox(
195
- label="Run Status / Submission Result", lines=5, interactive=False
196
- )
197
  # Removed max_rows=10 from DataFrame constructor
198
  results_table = gr.DataFrame(label="Questions and Agent Answers", wrap=True)
199
 
200
- run_button.click(fn=run_and_submit_all, outputs=[status_output, results_table])
 
 
 
201
 
202
  if __name__ == "__main__":
203
- print("\n" + "-" * 30 + " App Starting " + "-" * 30)
204
  # Check for SPACE_HOST and SPACE_ID at startup for information
205
  space_host_startup = os.getenv("SPACE_HOST")
206
- space_id_startup = os.getenv("SPACE_ID") # Get SPACE_ID at startup
207
 
208
  if space_host_startup:
209
  print(f"✅ SPACE_HOST found: {space_host_startup}")
@@ -211,18 +183,15 @@ if __name__ == "__main__":
211
  else:
212
  print("ℹ️ SPACE_HOST environment variable not found (running locally?).")
213
 
214
- if space_id_startup: # Print repo URLs if SPACE_ID is found
215
  print(f"✅ SPACE_ID found: {space_id_startup}")
216
  print(f" Repo URL: https://huggingface.co/spaces/{space_id_startup}")
217
- print(
218
- f" Repo Tree URL: https://huggingface.co/spaces/{space_id_startup}/tree/main"
219
- )
220
  else:
221
- print(
222
- "ℹ️ SPACE_ID environment variable not found (running locally?). Repo URL cannot be determined."
223
- )
224
 
225
- print("-" * (60 + len(" App Starting ")) + "\n")
226
 
227
  print("Launching Gradio Interface for Basic Agent Evaluation...")
228
  demo.launch(debug=True, share=False)
 
 
 
1
  import os
 
2
  import gradio as gr
 
3
  import requests
4
+ import inspect
5
+ import pandas as pd
6
 
7
  # (Keep Constants as is)
8
  # --- Constants ---
9
  DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
10
 
11
+ # --- Basic Agent Definition ---
12
+ # ----- THIS IS WERE YOU CAN BUILD WHAT YOU WANT ------
13
  class BasicAgent:
14
  def __init__(self):
15
  print("BasicAgent initialized.")
16
+ def __call__(self, question: str) -> str:
 
 
17
  print(f"Agent received question (first 50 chars): {question[:50]}...")
18
+ fixed_answer = "This is a default answer."
19
+ print(f"Agent returning fixed answer: {fixed_answer}")
20
+ return fixed_answer
21
 
22
+ def run_and_submit_all( profile: gr.OAuthProfile | None):
23
  """
24
  Fetches all questions, runs the BasicAgent on them, submits all answers,
25
  and displays the results.
26
  """
27
  # --- Determine HF Space Runtime URL and Repo URL ---
28
+ space_id = os.getenv("SPACE_ID") # Get the SPACE_ID for sending link to the code
29
 
30
  if profile:
31
+ username= f"{profile.username}"
32
  print(f"User logged in: {username}")
33
  else:
34
  print("User not logged in.")
 
55
  response.raise_for_status()
56
  questions_data = response.json()
57
  if not questions_data:
58
+ print("Fetched questions list is empty.")
59
+ return "Fetched questions list is empty or invalid format.", None
60
  print(f"Fetched {len(questions_data)} questions.")
61
  except requests.exceptions.RequestException as e:
62
  print(f"Error fetching questions: {e}")
63
  return f"Error fetching questions: {e}", None
64
  except requests.exceptions.JSONDecodeError as e:
65
+ print(f"Error decoding JSON response from questions endpoint: {e}")
66
+ print(f"Response text: {response.text[:500]}")
67
+ return f"Error decoding server response for questions: {e}", None
68
  except Exception as e:
69
  print(f"An unexpected error occurred fetching questions: {e}")
70
  return f"An unexpected error occurred fetching questions: {e}", None
 
76
  for item in questions_data:
77
  task_id = item.get("task_id")
78
  question_text = item.get("question")
 
 
 
 
 
 
 
79
  if not task_id or question_text is None:
80
  print(f"Skipping item with missing task_id or question: {item}")
81
  continue
82
  try:
83
+ submitted_answer = agent(question_text)
84
+ answers_payload.append({"task_id": task_id, "submitted_answer": submitted_answer})
85
+ results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": submitted_answer})
 
 
 
 
 
 
 
 
86
  except Exception as e:
87
+ print(f"Error running agent on task {task_id}: {e}")
88
+ results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": f"AGENT ERROR: {e}"})
 
 
 
 
 
 
89
 
90
  if not answers_payload:
91
  print("Agent did not produce any answers to submit.")
92
  return "Agent did not produce any answers to submit.", pd.DataFrame(results_log)
93
 
94
+ # 4. Prepare Submission
95
+ submission_data = {"username": username.strip(), "agent_code": agent_code, "answers": answers_payload}
 
 
 
 
96
  status_update = f"Agent finished. Submitting {len(answers_payload)} answers for user '{username}'..."
97
  print(status_update)
98
 
 
162
 
163
  run_button = gr.Button("Run Evaluation & Submit All Answers")
164
 
165
+ status_output = gr.Textbox(label="Run Status / Submission Result", lines=5, interactive=False)
 
 
166
  # Removed max_rows=10 from DataFrame constructor
167
  results_table = gr.DataFrame(label="Questions and Agent Answers", wrap=True)
168
 
169
+ run_button.click(
170
+ fn=run_and_submit_all,
171
+ outputs=[status_output, results_table]
172
+ )
173
 
174
  if __name__ == "__main__":
175
+ print("\n" + "-"*30 + " App Starting " + "-"*30)
176
  # Check for SPACE_HOST and SPACE_ID at startup for information
177
  space_host_startup = os.getenv("SPACE_HOST")
178
+ space_id_startup = os.getenv("SPACE_ID") # Get SPACE_ID at startup
179
 
180
  if space_host_startup:
181
  print(f"✅ SPACE_HOST found: {space_host_startup}")
 
183
  else:
184
  print("ℹ️ SPACE_HOST environment variable not found (running locally?).")
185
 
186
+ if space_id_startup: # Print repo URLs if SPACE_ID is found
187
  print(f"✅ SPACE_ID found: {space_id_startup}")
188
  print(f" Repo URL: https://huggingface.co/spaces/{space_id_startup}")
189
+ print(f" Repo Tree URL: https://huggingface.co/spaces/{space_id_startup}/tree/main")
 
 
190
  else:
191
+ print("ℹ️ SPACE_ID environment variable not found (running locally?). Repo URL cannot be determined.")
 
 
192
 
193
+ print("-"*(60 + len(" App Starting ")) + "\n")
194
 
195
  print("Launching Gradio Interface for Basic Agent Evaluation...")
196
  demo.launch(debug=True, share=False)
197
+
myapp.py ADDED
@@ -0,0 +1,228 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py
2
+ import os
3
+
4
+ import gradio as gr
5
+ import pandas as pd
6
+ import requests
7
+
8
+ from agent import BoomBot
9
+
10
+ # (Keep Constants as is)
11
+ # --- Constants ---
12
+ DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
13
+
14
+
15
+ # --- Basic Agent Definition --
16
+ class BasicAgent:
17
+ def __init__(self):
18
+ print("BasicAgent initialized.")
19
+ self.agent = BoomBot(provider="deepinfra")
20
+
21
+ def __call__(self, question: str, task_id: str, to_download) -> str:
22
+ print(f"Agent received question (first 50 chars): {question[:50]}...")
23
+ return self.agent.run(question, task_id, to_download)
24
+
25
+
26
+ def run_and_submit_all(profile: gr.OAuthProfile | None):
27
+ """
28
+ Fetches all questions, runs the BasicAgent on them, submits all answers,
29
+ and displays the results.
30
+ """
31
+ # --- Determine HF Space Runtime URL and Repo URL ---
32
+ space_id = os.getenv("SPACE_ID") # Get the SPACE_ID for sending link to the code
33
+
34
+ if profile:
35
+ username = f"{profile.username}"
36
+ print(f"User logged in: {username}")
37
+ else:
38
+ print("User not logged in.")
39
+ return "Please Login to Hugging Face with the button.", None
40
+
41
+ api_url = DEFAULT_API_URL
42
+ questions_url = f"{api_url}/questions"
43
+ submit_url = f"{api_url}/submit"
44
+
45
+ # 1. Instantiate Agent ( modify this part to create your agent)
46
+ try:
47
+ agent = BasicAgent()
48
+ except Exception as e:
49
+ print(f"Error instantiating agent: {e}")
50
+ return f"Error initializing agent: {e}", None
51
+ # In the case of an app running as a hugging Face space, this link points toward your codebase ( usefull for others so please keep it public)
52
+ agent_code = f"https://huggingface.co/spaces/{space_id}/tree/main"
53
+ print(agent_code)
54
+
55
+ # 2. Fetch Questions
56
+ print(f"Fetching questions from: {questions_url}")
57
+ try:
58
+ response = requests.get(questions_url, timeout=15)
59
+ response.raise_for_status()
60
+ questions_data = response.json()
61
+ if not questions_data:
62
+ print("Fetched questions list is empty.")
63
+ return "Fetched questions list is empty or invalid format.", None
64
+ print(f"Fetched {len(questions_data)} questions.")
65
+ except requests.exceptions.RequestException as e:
66
+ print(f"Error fetching questions: {e}")
67
+ return f"Error fetching questions: {e}", None
68
+ except requests.exceptions.JSONDecodeError as e:
69
+ print(f"Error decoding JSON response from questions endpoint: {e}")
70
+ print(f"Response text: {response.text[:500]}")
71
+ return f"Error decoding server response for questions: {e}", None
72
+ except Exception as e:
73
+ print(f"An unexpected error occurred fetching questions: {e}")
74
+ return f"An unexpected error occurred fetching questions: {e}", None
75
+
76
+ # 3. Run your Agent
77
+ results_log = []
78
+ answers_payload = []
79
+ print(f"Running agent on {len(questions_data)} questions...")
80
+ for item in questions_data:
81
+ task_id = item.get("task_id")
82
+ question_text = item.get("question")
83
+ file_name = item.get("file_name", "")
84
+
85
+ if file_name.strip() != "":
86
+ to_download = True
87
+ else:
88
+ to_download = False
89
+
90
+ if not task_id or question_text is None:
91
+ print(f"Skipping item with missing task_id or question: {item}")
92
+ continue
93
+ try:
94
+ submitted_answer = agent(question_text, task_id, to_download=to_download)
95
+ answers_payload.append(
96
+ {"task_id": task_id, "submitted_answer": submitted_answer}
97
+ )
98
+ results_log.append(
99
+ {
100
+ "Task ID": task_id,
101
+ "Question": question_text,
102
+ "Submitted Answer": submitted_answer,
103
+ }
104
+ )
105
+ except Exception as e:
106
+ print(f"Error running agent on task {task_id}: {e}")
107
+ results_log.append(
108
+ {
109
+ "Task ID": task_id,
110
+ "Question": question_text,
111
+ "Submitted Answer": f"AGENT ERROR: {e}",
112
+ }
113
+ )
114
+
115
+ if not answers_payload:
116
+ print("Agent did not produce any answers to submit.")
117
+ return "Agent did not produce any answers to submit.", pd.DataFrame(results_log)
118
+
119
+ # 4. Prepare Submission
120
+ submission_data = {
121
+ "username": username.strip(),
122
+ "agent_code": agent_code,
123
+ "answers": answers_payload,
124
+ }
125
+ status_update = f"Agent finished. Submitting {len(answers_payload)} answers for user '{username}'..."
126
+ print(status_update)
127
+
128
+ # 5. Submit
129
+ print(f"Submitting {len(answers_payload)} answers to: {submit_url}")
130
+ try:
131
+ response = requests.post(submit_url, json=submission_data, timeout=60)
132
+ response.raise_for_status()
133
+ result_data = response.json()
134
+ final_status = (
135
+ f"Submission Successful!\n"
136
+ f"User: {result_data.get('username')}\n"
137
+ f"Overall Score: {result_data.get('score', 'N/A')}% "
138
+ f"({result_data.get('correct_count', '?')}/{result_data.get('total_attempted', '?')} correct)\n"
139
+ f"Message: {result_data.get('message', 'No message received.')}"
140
+ )
141
+ print("Submission successful.")
142
+ results_df = pd.DataFrame(results_log)
143
+ return final_status, results_df
144
+ except requests.exceptions.HTTPError as e:
145
+ error_detail = f"Server responded with status {e.response.status_code}."
146
+ try:
147
+ error_json = e.response.json()
148
+ error_detail += f" Detail: {error_json.get('detail', e.response.text)}"
149
+ except requests.exceptions.JSONDecodeError:
150
+ error_detail += f" Response: {e.response.text[:500]}"
151
+ status_message = f"Submission Failed: {error_detail}"
152
+ print(status_message)
153
+ results_df = pd.DataFrame(results_log)
154
+ return status_message, results_df
155
+ except requests.exceptions.Timeout:
156
+ status_message = "Submission Failed: The request timed out."
157
+ print(status_message)
158
+ results_df = pd.DataFrame(results_log)
159
+ return status_message, results_df
160
+ except requests.exceptions.RequestException as e:
161
+ status_message = f"Submission Failed: Network error - {e}"
162
+ print(status_message)
163
+ results_df = pd.DataFrame(results_log)
164
+ return status_message, results_df
165
+ except Exception as e:
166
+ status_message = f"An unexpected error occurred during submission: {e}"
167
+ print(status_message)
168
+ results_df = pd.DataFrame(results_log)
169
+ return status_message, results_df
170
+
171
+
172
+ # --- Build Gradio Interface using Blocks ---
173
+ with gr.Blocks() as demo:
174
+ gr.Markdown("# Basic Agent Evaluation Runner")
175
+ gr.Markdown(
176
+ """
177
+ **Instructions:**
178
+
179
+ 1. Please clone this space, then modify the code to define your agent's logic, the tools, the necessary packages, etc ...
180
+ 2. Log in to your Hugging Face account using the button below. This uses your HF username for submission.
181
+ 3. Click 'Run Evaluation & Submit All Answers' to fetch questions, run your agent, submit answers, and see the score.
182
+
183
+ ---
184
+ **Disclaimers:**
185
+ Once clicking on the "submit button, it can take quite some time ( this is the time for the agent to go through all the questions).
186
+ This space provides a basic setup and is intentionally sub-optimal to encourage you to develop your own, more robust solution. For instance for the delay process of the submit button, a solution could be to cache the answers and submit in a seperate action or even to answer the questions in async.
187
+ """
188
+ )
189
+
190
+ gr.LoginButton()
191
+
192
+ run_button = gr.Button("Run Evaluation & Submit All Answers")
193
+
194
+ status_output = gr.Textbox(
195
+ label="Run Status / Submission Result", lines=5, interactive=False
196
+ )
197
+ # Removed max_rows=10 from DataFrame constructor
198
+ results_table = gr.DataFrame(label="Questions and Agent Answers", wrap=True)
199
+
200
+ run_button.click(fn=run_and_submit_all, outputs=[status_output, results_table])
201
+
202
+ if __name__ == "__main__":
203
+ print("\n" + "-" * 30 + " App Starting " + "-" * 30)
204
+ # Check for SPACE_HOST and SPACE_ID at startup for information
205
+ space_host_startup = os.getenv("SPACE_HOST")
206
+ space_id_startup = os.getenv("SPACE_ID") # Get SPACE_ID at startup
207
+
208
+ if space_host_startup:
209
+ print(f"✅ SPACE_HOST found: {space_host_startup}")
210
+ print(f" Runtime URL should be: https://{space_host_startup}.hf.space")
211
+ else:
212
+ print("ℹ️ SPACE_HOST environment variable not found (running locally?).")
213
+
214
+ if space_id_startup: # Print repo URLs if SPACE_ID is found
215
+ print(f"✅ SPACE_ID found: {space_id_startup}")
216
+ print(f" Repo URL: https://huggingface.co/spaces/{space_id_startup}")
217
+ print(
218
+ f" Repo Tree URL: https://huggingface.co/spaces/{space_id_startup}/tree/main"
219
+ )
220
+ else:
221
+ print(
222
+ "ℹ️ SPACE_ID environment variable not found (running locally?). Repo URL cannot be determined."
223
+ )
224
+
225
+ print("-" * (60 + len(" App Starting ")) + "\n")
226
+
227
+ print("Launching Gradio Interface for Basic Agent Evaluation...")
228
+ demo.launch(debug=True, share=False)