naman1102 commited on
Commit
8ae792e
Β·
1 Parent(s): 24639c3
Files changed (3) hide show
  1. agent.py +17 -10
  2. app.py +1 -32
  3. tools.py +16 -9
agent.py CHANGED
@@ -9,19 +9,25 @@ from tools import (
9
 
10
  # ──────────────────────────────── Config ────────────────────────────────
11
  SYSTEM_PROMPT = """
12
- You are a smart AI assistant using a tool-augmented reasoning strategy. Follow this loop:
13
- Thought: ...
14
- Action: ...
15
- Action Input: ...
16
 
17
- You will get an Observation, and then continue reasoning.
18
 
19
- Only end the loop with:
20
- FINAL ANSWER: [your short final answer here].
 
21
 
22
- DO NOT answer directly without using this loop at least once, unless the answer is trivially obvious.
 
 
 
 
 
 
 
 
 
23
 
24
- When using task-based tools (audio_transcriber_tool, excel_tool, analyze_code_tool, image_tool), ONLY use the 'task_id' value.
25
  """
26
 
27
  TOOLS = [
@@ -34,7 +40,7 @@ TOOLS = [
34
  class SimpleLangGraphAgent:
35
  def __init__(self, model_name="gpt-4o-mini"):
36
  self.agent = create_react_agent(
37
- model=ChatOpenAI(model_name=model_name, temperature=0),
38
  tools=TOOLS,
39
  )
40
 
@@ -49,6 +55,7 @@ class SimpleLangGraphAgent:
49
 
50
  for msg in final_state["messages"][::-1]:
51
  if "FINAL ANSWER:" in msg.content.upper():
 
52
  return msg.content.split("FINAL ANSWER:")[-1].strip()
53
 
54
  return "No FINAL ANSWER found."
 
9
 
10
  # ──────────────────────────────── Config ────────────────────────────────
11
  SYSTEM_PROMPT = """
12
+ You are a helpful AI assistant. You will answer questions by thinking step-by-step, taking actions using tools when necessary, and finishing with a final answer.
 
 
 
13
 
14
+ When you want to use a tool, respond *exactly* in the following format:
15
 
16
+ Thought: [your reasoning]
17
+ Action: [tool_name]
18
+ Action Input: [input]
19
 
20
+ When you receive an observation, continue reasoning. When you are confident in your answer, write:
21
+
22
+ Thought: [final reasoning]
23
+ FINAL ANSWER: [your answer]
24
+
25
+ IMPORTANT:
26
+ - If using tools that require a `task_id`, only use the value provided.
27
+ - Do not make up tool names.
28
+ - Do not loop unnecessarily.
29
+ - Provide FINAL ANSWER as soon as you are confident.
30
 
 
31
  """
32
 
33
  TOOLS = [
 
40
  class SimpleLangGraphAgent:
41
  def __init__(self, model_name="gpt-4o-mini"):
42
  self.agent = create_react_agent(
43
+ model=ChatOpenAI(model_name=model_name, temperature=0.3),
44
  tools=TOOLS,
45
  )
46
 
 
55
 
56
  for msg in final_state["messages"][::-1]:
57
  if "FINAL ANSWER:" in msg.content.upper():
58
+ print(f"\n\n msg.content = {msg.content} \n\n")
59
  return msg.content.split("FINAL ANSWER:")[-1].strip()
60
 
61
  return "No FINAL ANSWER found."
app.py CHANGED
@@ -14,38 +14,7 @@ from state import AgentState
14
  DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
15
 
16
 
17
- SYSTEM_PROMPT = """
18
- You are a helpful AI assistant using a ReAct pattern. You will answer questions by thinking step-by-step, taking actions using tools when necessary, and finishing with a final answer.
19
-
20
- When you want to use a tool, respond *exactly* in the following format:
21
-
22
- Thought: [your reasoning]
23
- Action: [tool_name]
24
- Action Input: [input]
25
-
26
- When you receive an observation, continue reasoning. When you are confident in your answer, write:
27
-
28
- Thought: [final reasoning]
29
- FINAL ANSWER: [your answer]
30
-
31
- Use only the available tools:
32
- - wikipedia_search_tool
33
- - arxiv_search_tool
34
- - audio_transcriber_tool
35
- - excel_tool
36
- - analyze_code_tool
37
- - image_tool
38
- - add_tool
39
- - subtract_tool
40
- - multiply_tool
41
- - divide_tool
42
-
43
- IMPORTANT:
44
- - If using tools that require a `task_id`, only use the value provided.
45
- - Do not make up tool names.
46
- - Do not loop unnecessarily.
47
- - Provide FINAL ANSWER as soon as you are confident.
48
- """
49
 
50
 
51
  class BasicAgent:
 
14
  DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
15
 
16
 
17
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
 
19
 
20
  class BasicAgent:
tools.py CHANGED
@@ -34,7 +34,7 @@ def _download_file_for_task(task_id: str, ext: str) -> str:
34
  try:
35
  resp = requests.get(url, timeout=10)
36
  if resp.status_code == 200 and resp.content:
37
- print(f"Downloaded file from {url} to {local_path}")
38
  with open(local_path, "wb") as f:
39
  f.write(resp.content)
40
  return local_path
@@ -179,6 +179,7 @@ def audio_transcriber_tool(task_id: str) -> str:
179
  break
180
 
181
  if not local_audio or not os.path.exists(local_audio):
 
182
  return "Error: No audio file found (download failed)."
183
 
184
 
@@ -194,7 +195,7 @@ def audio_transcriber_tool(task_id: str) -> str:
194
  model="whisper-1",
195
  file=audio_file,
196
  )
197
- print("reached response")
198
  text = response.text.strip()
199
  except Exception as e:
200
  text = f"Error during transcription: {e}"
@@ -213,12 +214,13 @@ def wikipedia_search_tool(wiki_query: str) -> str:
213
  Purpose: When the user asks for historical, biographical, scientific, or factual information, use this tool.
214
 
215
  Input: A string describing a topic to search on Wikipedia.
216
-
217
  Example usage:
218
  - "Who was Marie Curie?"
219
  - "Explain quantum entanglement"
220
  - "Tell me about the French Revolution"
221
  """
 
222
  try:
223
  docs = WikipediaLoader(query=wiki_query, load_max_docs=3).load() # Reduced from 5 to 3
224
 
@@ -253,6 +255,7 @@ def wikipedia_search_tool(wiki_query: str) -> str:
253
  break
254
 
255
  if not result.strip():
 
256
  return "No Wikipedia results found for the given query. [END_OF_SEARCH]"
257
 
258
  # Add clear end marker
@@ -279,12 +282,14 @@ def arxiv_search_tool(query: str) -> str:
279
  - "What are recent studies on climate change?"
280
  - "Search for papers on quantum computing"
281
  """
 
282
  try:
283
  # Search arXiv for the top result
284
  search = arxiv.Search(query=query, max_results=1, sort_by=arxiv.SortCriterion.Relevance)
285
  result = next(search.results(), None)
286
 
287
  if not result:
 
288
  return "No results found. [END_OF_SEARCH]"
289
 
290
  # Download PDF
@@ -330,21 +335,19 @@ def analyze_code_tool(task_id: str) -> str:
330
  - "Analyze the code file for bugs"
331
  - "Explain the functions in this script"
332
  """
333
- print("reached analyze_code_tool")
334
  code_txt = ""
335
  if not task_id:
336
  code_txt = "No code provided."
337
  else:
338
  path = _download_file_for_task(task_id, "py")
339
  if not path:
 
340
  return "Error: .py file not found for this task."
341
  code_txt = Path(path).read_text(encoding="utf-8", errors="ignore")
342
- # else:
343
- # return "Error: neither snippet nor file provided."
344
 
345
- # Truncate for safety
346
- lines = code_txt.splitlines()[:400]
347
- code_sample = "\n".join(lines)[:10_000]
348
 
349
  prompt = [
350
  SystemMessage(content="You are a senior Python code reviewer."),
@@ -376,6 +379,7 @@ def add_tool(a: float, b: float) -> str:
376
  - "Add 3.14 and 2.86"
377
  - "Calculate the sum of 100 and 250"
378
  """
 
379
  result = a + b
380
  return f"Addition result: {a} + {b} = {result}"
381
 
@@ -393,6 +397,7 @@ def subtract_tool(a: float, b: float) -> str:
393
  - "Subtract 15.5 from 40.2"
394
  - "Calculate 1000 minus 347"
395
  """
 
396
  result = a - b
397
  return f"Subtraction result: {a} - {b} = {result}"
398
 
@@ -410,6 +415,7 @@ def multiply_tool(a: float, b: float) -> str:
410
  - "Multiply 12.5 by 4"
411
  - "Calculate the product of 15 and 20"
412
  """
 
413
  result = a * b
414
  return f"Multiplication result: {a} Γ— {b} = {result}"
415
 
@@ -427,6 +433,7 @@ def divide_tool(a: float, b: float) -> str:
427
  - "Divide 75 by 3"
428
  - "Calculate 144 divided by 12"
429
  """
 
430
  if b == 0:
431
  return "Division error: Cannot divide by zero"
432
  result = a / b
 
34
  try:
35
  resp = requests.get(url, timeout=10)
36
  if resp.status_code == 200 and resp.content:
37
+ print(f"\n Downloaded file from {url} to {local_path} \n")
38
  with open(local_path, "wb") as f:
39
  f.write(resp.content)
40
  return local_path
 
179
  break
180
 
181
  if not local_audio or not os.path.exists(local_audio):
182
+ print("Error: No audio file found (download failed).")
183
  return "Error: No audio file found (download failed)."
184
 
185
 
 
195
  model="whisper-1",
196
  file=audio_file,
197
  )
198
+ # print("reached response")
199
  text = response.text.strip()
200
  except Exception as e:
201
  text = f"Error during transcription: {e}"
 
214
  Purpose: When the user asks for historical, biographical, scientific, or factual information, use this tool.
215
 
216
  Input: A string describing a topic to search on Wikipedia.
217
+ Tips: If you dont get enough information, try again with a different querry
218
  Example usage:
219
  - "Who was Marie Curie?"
220
  - "Explain quantum entanglement"
221
  - "Tell me about the French Revolution"
222
  """
223
+ print("Reached Wikipedia tool, with query = ", wiki_query)
224
  try:
225
  docs = WikipediaLoader(query=wiki_query, load_max_docs=3).load() # Reduced from 5 to 3
226
 
 
255
  break
256
 
257
  if not result.strip():
258
+ print("No wiki result found")
259
  return "No Wikipedia results found for the given query. [END_OF_SEARCH]"
260
 
261
  # Add clear end marker
 
282
  - "What are recent studies on climate change?"
283
  - "Search for papers on quantum computing"
284
  """
285
+ print("Reached ArXiv tool, with query = ", query)
286
  try:
287
  # Search arXiv for the top result
288
  search = arxiv.Search(query=query, max_results=1, sort_by=arxiv.SortCriterion.Relevance)
289
  result = next(search.results(), None)
290
 
291
  if not result:
292
+ print("No arXiv result found")
293
  return "No results found. [END_OF_SEARCH]"
294
 
295
  # Download PDF
 
335
  - "Analyze the code file for bugs"
336
  - "Explain the functions in this script"
337
  """
338
+ print("Reached analyze_code_tool")
339
  code_txt = ""
340
  if not task_id:
341
  code_txt = "No code provided."
342
  else:
343
  path = _download_file_for_task(task_id, "py")
344
  if not path:
345
+ print("Error: .py file not found for this task.")
346
  return "Error: .py file not found for this task."
347
  code_txt = Path(path).read_text(encoding="utf-8", errors="ignore")
 
 
348
 
349
+ lines = code_txt.splitlines()
350
+ code_sample = "\n".join(lines)
 
351
 
352
  prompt = [
353
  SystemMessage(content="You are a senior Python code reviewer."),
 
379
  - "Add 3.14 and 2.86"
380
  - "Calculate the sum of 100 and 250"
381
  """
382
+ print("Reached add_tool")
383
  result = a + b
384
  return f"Addition result: {a} + {b} = {result}"
385
 
 
397
  - "Subtract 15.5 from 40.2"
398
  - "Calculate 1000 minus 347"
399
  """
400
+ print("Reached subtract_tool")
401
  result = a - b
402
  return f"Subtraction result: {a} - {b} = {result}"
403
 
 
415
  - "Multiply 12.5 by 4"
416
  - "Calculate the product of 15 and 20"
417
  """
418
+ print("Reached multiply_tool")
419
  result = a * b
420
  return f"Multiplication result: {a} Γ— {b} = {result}"
421
 
 
433
  - "Divide 75 by 3"
434
  - "Calculate 144 divided by 12"
435
  """
436
+ print("Reached divide_tool")
437
  if b == 0:
438
  return "Division error: Cannot divide by zero"
439
  result = a / b