innovation64 commited on
Commit
0d60b8e
·
verified ·
1 Parent(s): 368294c
Files changed (1) hide show
  1. app.py +69 -50
app.py CHANGED
@@ -9,9 +9,8 @@ import time
9
  from typing import List, Dict, Any, Optional, Union, Tuple
10
 
11
  # --- Import necessary libraries ---
12
- from smolagents import CodeAgent
13
  from smolagents.models import LiteLLMModel
14
- from llama_index.core.tools import FunctionTool
15
  from langgraph.graph import StateGraph, END
16
 
17
  # --- Constants ---
@@ -257,33 +256,61 @@ class GAIAAgent:
257
 
258
  def setup_tools(self):
259
  """Set up tools for the agent"""
260
- # Use FunctionTool interface from llama_index but integrate with smolagents
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
261
  self.tools = [
262
- FunctionTool.from_defaults(
263
- name="calculator",
264
- description="Calculate mathematical expressions like '2 + 2' or '(15 * 3) / 2'",
265
- fn=GAIAToolkit.calculator
266
- ),
267
- FunctionTool.from_defaults(
268
- name="search_web",
269
- description="Search for information related to a query",
270
- fn=GAIAToolkit.search_web
271
- ),
272
- FunctionTool.from_defaults(
273
- name="file_reader",
274
- description="Read file content given a file ID",
275
- fn=GAIAToolkit.file_reader
276
- ),
277
- FunctionTool.from_defaults(
278
- name="analyze_text",
279
- description="Analyze text to extract statistics and key information",
280
- fn=GAIAToolkit.analyze_text
281
- ),
282
- FunctionTool.from_defaults(
283
- name="extract_answer",
284
- description="Extract the final answer from reasoning",
285
- fn=GAIAToolkit.extract_answer
286
- )
287
  ]
288
 
289
  def create_system_prompt(self) -> str:
@@ -356,32 +383,24 @@ class GAIAAgent:
356
  def analyze_and_plan(self, question: str):
357
  """Analyze the question and plan approach"""
358
  analyze_prompt = f"""Analyze the following question:
359
-
360
- {question}
361
-
362
- Identify:
363
- 1. Question type (calculation, information retrieval, text analysis, etc.)
364
- 2. Key tools needed
365
- 3. Solution steps
366
-
367
- Provide only a concise analysis, don't attempt to answer the question.
368
- """
369
-
370
  analysis = self.model.generate(analyze_prompt).strip()
371
  self.workflow_states["analysis"] = analysis
372
 
373
  plan_prompt = f"""Based on the question analysis:
374
-
375
- {analysis}
376
-
377
- Formulate a concise step-by-step plan to answer the question:
378
-
379
- {question}
380
-
381
- Use available tools: calculator, search_web, file_reader, analyze_text.
382
- List specific steps, don't attempt to answer the question.
383
- """
384
-
385
  plan = self.model.generate(plan_prompt).strip()
386
  self.workflow_states["plan"] = plan
387
 
 
9
  from typing import List, Dict, Any, Optional, Union, Tuple
10
 
11
  # --- Import necessary libraries ---
12
+ from smolagents import CodeAgent, tool
13
  from smolagents.models import LiteLLMModel
 
14
  from langgraph.graph import StateGraph, END
15
 
16
  # --- Constants ---
 
256
 
257
  def setup_tools(self):
258
  """Set up tools for the agent"""
259
+ # Create tools using smolagents @tool decorator
260
+
261
+ @tool
262
+ def calculator(expression: str) -> str:
263
+ """Calculate mathematical expressions like '2 + 2' or '(15 * 3) / 2'
264
+
265
+ Args:
266
+ expression: The mathematical expression to calculate
267
+ """
268
+ return GAIAToolkit.calculator(expression)
269
+
270
+ @tool
271
+ def search_web(query: str) -> str:
272
+ """Search for information related to a query
273
+
274
+ Args:
275
+ query: The search query
276
+ """
277
+ return GAIAToolkit.search_web(query)
278
+
279
+ @tool
280
+ def file_reader(file_id: str) -> str:
281
+ """Read file content given a file ID
282
+
283
+ Args:
284
+ file_id: The ID of the file to read
285
+ """
286
+ return GAIAToolkit.file_reader(file_id)
287
+
288
+ @tool
289
+ def analyze_text(text: str) -> str:
290
+ """Analyze text to extract statistics and key information
291
+
292
+ Args:
293
+ text: The text to analyze
294
+ """
295
+ result = GAIAToolkit.analyze_text(text)
296
+ return str(result)
297
+
298
+ @tool
299
+ def extract_answer(reasoning: str) -> str:
300
+ """Extract the final answer from reasoning
301
+
302
+ Args:
303
+ reasoning: The reasoning text to extract the answer from
304
+ """
305
+ return GAIAToolkit.extract_answer(reasoning)
306
+
307
+ # Assign the tools to the agent
308
  self.tools = [
309
+ calculator,
310
+ search_web,
311
+ file_reader,
312
+ analyze_text,
313
+ extract_answer
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
314
  ]
315
 
316
  def create_system_prompt(self) -> str:
 
383
  def analyze_and_plan(self, question: str):
384
  """Analyze the question and plan approach"""
385
  analyze_prompt = f"""Analyze the following question:
386
+ {question}
387
+ Identify:
388
+ 1. Question type (calculation, information retrieval, text analysis, etc.)
389
+ 2. Key tools needed
390
+ 3. Solution steps
391
+ Provide only a concise analysis, don't attempt to answer the question.
392
+ """
 
 
 
 
393
  analysis = self.model.generate(analyze_prompt).strip()
394
  self.workflow_states["analysis"] = analysis
395
 
396
  plan_prompt = f"""Based on the question analysis:
397
+ {analysis}
398
+ Formulate a concise step-by-step plan to answer the question:
399
+ {question}
400
+ Use available tools: calculator, search_web, file_reader, analyze_text.
401
+ List specific steps, don't attempt to answer the question.
402
+ """
403
+
 
 
 
 
404
  plan = self.model.generate(plan_prompt).strip()
405
  self.workflow_states["plan"] = plan
406