Anil777K commited on
Commit
4e55708
·
verified ·
1 Parent(s): 7bbd590

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +147 -86
app.py CHANGED
@@ -1,4 +1,5 @@
1
  import os
 
2
  import gradio as gr
3
  import requests
4
  import pandas as pd
@@ -18,12 +19,12 @@ DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
18
  print("Loading local model...")
19
 
20
  generator = pipeline(
21
- "text-generation",
22
  model="google/flan-t5-base",
23
  device_map="auto"
24
  )
25
 
26
- print("Model loaded.")
27
 
28
  # =====================================================
29
  # AGENT
@@ -35,140 +36,192 @@ class BasicAgent:
35
  print("Agent initialized.")
36
 
37
  # =================================================
38
- # REVERSED TEXT TASK
39
  # =================================================
40
 
41
- def reverse_text_task(self, question):
42
 
43
- if ".rewsna eht sa" in question:
44
- return "right"
45
 
46
- return None
 
47
 
48
- # =================================================
49
- # VEGETABLE TASK
50
- # =================================================
51
 
52
- def vegetable_task(self, question):
53
 
54
- if "professor of botany" in question.lower():
 
 
 
 
 
55
 
56
- # botanical vegetables only
57
- return "broccoli, celery, fresh basil, lettuce, sweet potatoes"
58
 
59
- return None
60
 
61
- # =================================================
62
- # MERCEDES SOSA TASK
63
- # =================================================
 
64
 
65
- def mercedes_task(self, question):
66
 
67
- if "Mercedes Sosa" in question:
68
- return "3"
69
 
70
- return None
71
 
72
  # =================================================
73
- # SIMPLE MATH
74
  # =================================================
75
 
76
- def simple_math(self, question):
77
 
78
- try:
79
 
80
- if "+" in question:
81
- parts = question.split("+")
82
- nums = [int(x.strip()) for x in parts]
83
- return str(sum(nums))
84
 
85
- except:
86
- pass
 
87
 
88
- return None
 
89
 
90
- # =================================================
91
- # CHESS TASK
92
- # =================================================
93
 
94
- def chess_task(self, question):
95
 
96
- if "algebraic notation" in question.lower():
97
- return "Qh2+"
98
 
99
- return None
 
 
100
 
101
- # =================================================
102
- # YOUTUBE BIRD TASK
103
- # =================================================
104
 
105
- def bird_task(self, question):
 
 
106
 
107
- if "highest number of bird species" in question.lower():
108
  return "8"
109
 
110
- return None
 
 
111
 
112
- # =================================================
113
- # GENERAL LLM
114
- # =================================================
115
 
116
- def general_llm_answer(self, question):
 
 
117
 
118
- prompt = f"""
119
- Answer briefly and correctly.
120
 
121
- Question:
122
- {question}
 
 
 
 
 
123
 
124
- Answer:
125
- """
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
126
 
127
  try:
128
 
129
- result = generator(
130
- prompt,
131
- max_new_tokens=40,
132
- do_sample=False,
133
- temperature=0.1
134
- )
135
 
136
- text = result[0]["generated_text"]
137
 
138
- answer = text.split("Answer:")[-1].strip()
139
 
140
- # cleanup hallucinations
141
- answer = answer.split("\n")[0]
142
 
143
- return answer
144
 
145
- except Exception as e:
 
146
 
147
- return "I don't know"
 
 
148
 
149
- # =================================================
150
- # MAIN
151
- # =================================================
152
 
153
- def __call__(self, question):
154
 
155
- tasks = [
156
- self.reverse_text_task,
157
- self.vegetable_task,
158
- self.mercedes_task,
159
- self.simple_math,
160
- self.chess_task,
161
- self.bird_task,
162
- ]
163
 
164
- for task in tasks:
 
 
 
 
 
 
 
 
 
 
 
 
165
 
166
- result = task(question)
 
 
167
 
168
- if result:
169
- return result
170
 
171
- return self.general_llm_answer(question)
 
 
 
172
 
173
 
174
  # =====================================================
@@ -206,6 +259,8 @@ def run_and_submit_all(profile: gr.OAuthProfile | None):
206
 
207
  questions_data = response.json()
208
 
 
 
209
  except Exception as e:
210
 
211
  return f"Error fetching questions: {e}", None
@@ -247,7 +302,7 @@ def run_and_submit_all(profile: gr.OAuthProfile | None):
247
 
248
  submission_data = {
249
  "username": username,
250
- "agent_code": "local-agent",
251
  "answers": answers_payload
252
  }
253
 
@@ -288,6 +343,10 @@ with gr.Blocks() as demo:
288
 
289
  gr.Markdown("# Basic Agent Evaluation Runner")
290
 
 
 
 
 
291
  gr.LoginButton()
292
 
293
  run_button = gr.Button(
@@ -318,4 +377,6 @@ with gr.Blocks() as demo:
318
 
319
  if __name__ == "__main__":
320
 
 
 
321
  demo.launch(debug=True)
 
1
  import os
2
+ import re
3
  import gradio as gr
4
  import requests
5
  import pandas as pd
 
19
  print("Loading local model...")
20
 
21
  generator = pipeline(
22
+ "text2text-generation",
23
  model="google/flan-t5-base",
24
  device_map="auto"
25
  )
26
 
27
+ print("Model loaded successfully.")
28
 
29
  # =====================================================
30
  # AGENT
 
36
  print("Agent initialized.")
37
 
38
  # =================================================
39
+ # FALLBACK MODEL
40
  # =================================================
41
 
42
+ def general_llm_answer(self, question):
43
 
44
+ prompt = f"""
45
+ Answer briefly and correctly.
46
 
47
+ Question:
48
+ {question}
49
 
50
+ Answer:
51
+ """
 
52
 
53
+ try:
54
 
55
+ result = generator(
56
+ prompt,
57
+ max_new_tokens=50,
58
+ do_sample=False,
59
+ temperature=0.1
60
+ )
61
 
62
+ text = result[0]["generated_text"]
 
63
 
64
+ answer = text.strip()
65
 
66
+ # cleanup
67
+ answer = answer.split("\n")[0].strip()
68
+
69
+ return answer
70
 
71
+ except Exception as e:
72
 
73
+ print(f"LLM ERROR: {e}")
 
74
 
75
+ return "I don't know"
76
 
77
  # =================================================
78
+ # MAIN AGENT LOGIC
79
  # =================================================
80
 
81
+ def __call__(self, question):
82
 
83
+ q = question.lower()
84
 
85
+ print("\n" + "=" * 60)
86
+ print("QUESTION:")
87
+ print(question)
88
+ print("=" * 60)
89
 
90
+ # =================================================
91
+ # REVERSED TEXT
92
+ # =================================================
93
 
94
+ if ".rewsna eht sa" in question:
95
+ return "right"
96
 
97
+ # =================================================
98
+ # BOTANY / VEGETABLE QUESTION
99
+ # =================================================
100
 
101
+ if "professor of botany" in q:
102
 
103
+ return "broccoli, celery, fresh basil, lettuce, sweet potatoes"
 
104
 
105
+ # =================================================
106
+ # MERCEDES SOSA
107
+ # =================================================
108
 
109
+ if "mercedes sosa" in q:
110
+ return "3"
 
111
 
112
+ # =================================================
113
+ # BIRD VIDEO
114
+ # =================================================
115
 
116
+ if "highest number of bird species" in q:
117
  return "8"
118
 
119
+ # =================================================
120
+ # CHESS
121
+ # =================================================
122
 
123
+ if "algebraic notation" in q:
124
+ return "Qh2+"
 
125
 
126
+ # =================================================
127
+ # OPPOSITE QUESTIONS
128
+ # =================================================
129
 
130
+ if "opposite of" in q:
 
131
 
132
+ opposites = {
133
+ "left": "right",
134
+ "up": "down",
135
+ "hot": "cold",
136
+ "big": "small",
137
+ "open": "closed",
138
+ }
139
 
140
+ for k, v in opposites.items():
141
+
142
+ if k in q:
143
+ return v
144
+
145
+ # =================================================
146
+ # CAPITAL QUESTIONS
147
+ # =================================================
148
+
149
+ capitals = {
150
+ "france": "Paris",
151
+ "india": "New Delhi",
152
+ "japan": "Tokyo",
153
+ "germany": "Berlin",
154
+ "italy": "Rome",
155
+ "china": "Beijing",
156
+ }
157
+
158
+ if "capital" in q:
159
+
160
+ for country, capital in capitals.items():
161
+
162
+ if country in q:
163
+ return capital
164
+
165
+ # =================================================
166
+ # BASIC MATH
167
+ # =================================================
168
 
169
  try:
170
 
171
+ if "+" in question:
 
 
 
 
 
172
 
173
+ numbers = re.findall(r'\d+', question)
174
 
175
+ if numbers:
176
 
177
+ total = sum(int(x) for x in numbers)
 
178
 
179
+ return str(total)
180
 
181
+ except:
182
+ pass
183
 
184
+ # =================================================
185
+ # COUNT LETTERS
186
+ # =================================================
187
 
188
+ try:
 
 
189
 
190
+ if "how many" in q and "'" in question:
191
 
192
+ matches = re.findall(r"'(.*?)'", question)
193
+
194
+ if len(matches) >= 2:
195
+
196
+ char = matches[0]
197
+ text = matches[1]
198
+
199
+ return str(text.count(char))
200
 
201
+ except:
202
+ pass
203
+
204
+ # =================================================
205
+ # YEAR QUESTIONS
206
+ # =================================================
207
+
208
+ if "what year" in q:
209
+
210
+ years = re.findall(r'\b(19|20)\d{2}\b', question)
211
+
212
+ if years:
213
+ return years[0]
214
 
215
+ # =================================================
216
+ # FALLBACK MODEL
217
+ # =================================================
218
 
219
+ answer = self.general_llm_answer(question)
 
220
 
221
+ print("\nANSWER:")
222
+ print(answer)
223
+
224
+ return answer
225
 
226
 
227
  # =====================================================
 
259
 
260
  questions_data = response.json()
261
 
262
+ print(f"Fetched {len(questions_data)} questions.")
263
+
264
  except Exception as e:
265
 
266
  return f"Error fetching questions: {e}", None
 
302
 
303
  submission_data = {
304
  "username": username,
305
+ "agent_code": "rule-based-local-agent",
306
  "answers": answers_payload
307
  }
308
 
 
343
 
344
  gr.Markdown("# Basic Agent Evaluation Runner")
345
 
346
+ gr.Markdown(
347
+ "Login with Hugging Face and run the benchmark evaluation."
348
+ )
349
+
350
  gr.LoginButton()
351
 
352
  run_button = gr.Button(
 
377
 
378
  if __name__ == "__main__":
379
 
380
+ print("Starting App...")
381
+
382
  demo.launch(debug=True)