Coool2 commited on
Commit
b038c33
·
verified ·
1 Parent(s): 80ab86f

Update agent.py

Browse files
Files changed (1) hide show
  1. agent.py +134 -9
agent.py CHANGED
@@ -347,21 +347,146 @@ research_tool = FunctionTool.from_defaults(
347
  **Input format:** Provide the research query with any relevant context."""
348
  )
349
 
350
- code_agent = CodeActAgent(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
351
  name="CodeAgent",
352
- description="Advanced calculations, data processing, and final answer synthesis using ReAct reasoning",
353
  system_prompt="""
354
  You are a coding and reasoning specialist using ReAct methodology.
355
-
356
- For each task:
357
  1. THINK: Analyze what needs to be calculated or processed
358
- 2. ACT: Execute appropriate code or calculations
359
- 3. OBSERVE: Review results and determine if more work is needed
360
- 4. REPEAT: Continue until you have the final answer
 
 
361
 
362
- Always show your reasoning process clearly and provide exact answers.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
363
  """,
364
- llm=proj_llm,
 
 
365
  )
366
 
367
  analysis_tool = FunctionTool.from_defaults(
 
347
  **Input format:** Provide the research query with any relevant context."""
348
  )
349
 
350
+ def execute_python_code(code: str) -> str:
351
+ try:
352
+ safe_globals = {
353
+ "__builtins__": {
354
+ "len": len, "str": str, "int": int, "float": float,
355
+ "list": list, "dict": dict, "sum": sum, "max": max, "min": min,
356
+ "round": round, "abs": abs, "sorted": sorted, "enumerate": enumerate,
357
+ "range": range, "zip": zip, "map": map, "filter": filter,
358
+ "any": any, "all": all, "type": type, "isinstance": isinstance,
359
+ "print": print, "open": open, "bool": bool, "set": set, "tuple": tuple
360
+ },
361
+ # Core Python modules
362
+ "math": __import__("math"),
363
+ "datetime": __import__("datetime"),
364
+ "re": __import__("re"),
365
+ "os": __import__("os"),
366
+ "sys": __import__("sys"),
367
+ "json": __import__("json"),
368
+ "csv": __import__("csv"),
369
+ "random": __import__("random"),
370
+ "itertools": __import__("itertools"),
371
+ "collections": __import__("collections"),
372
+ "functools": __import__("functools"),
373
+
374
+ # Data Science and Numerical Computing
375
+ "numpy": __import__("numpy"),
376
+ "np": __import__("numpy"),
377
+ "pandas": __import__("pandas"),
378
+ "pd": __import__("pandas"),
379
+ "scipy": __import__("scipy"),
380
+
381
+ # Visualization
382
+ "matplotlib": __import__("matplotlib"),
383
+ "plt": __import__("matplotlib.pyplot"),
384
+ "seaborn": __import__("seaborn"),
385
+ "sns": __import__("seaborn"),
386
+ "plotly": __import__("plotly"),
387
+
388
+ # Machine Learning
389
+ "sklearn": __import__("sklearn"),
390
+ "xgboost": __import__("xgboost"),
391
+ "lightgbm": __import__("lightgbm"),
392
+
393
+ # Statistics
394
+ "statistics": __import__("statistics"),
395
+ "statsmodels": __import__("statsmodels"),
396
+
397
+ # Image Processing
398
+ "PIL": __import__("PIL"),
399
+ "cv2": __import__("cv2"),
400
+ "skimage": __import__("skimage"),
401
+
402
+ # Network and Web
403
+ "requests": __import__("requests"),
404
+ "urllib": __import__("urllib"),
405
+
406
+ # Text Processing
407
+ "nltk": __import__("nltk"),
408
+ "spacy": __import__("spacy"),
409
+
410
+ # Time Series
411
+ "pytz": __import__("pytz"),
412
+
413
+ # Utilities
414
+ "tqdm": __import__("tqdm"),
415
+ "pickle": __import__("pickle"),
416
+ "gzip": __import__("gzip"),
417
+ "base64": __import__("base64"),
418
+ "hashlib": __import__("hashlib"),
419
+ "uuid": __import__("uuid"),
420
+
421
+ # Scientific Computing
422
+ "sympy": __import__("sympy"),
423
+ "networkx": __import__("networkx"),
424
+
425
+ # Database
426
+ "sqlite3": __import__("sqlite3"),
427
+
428
+ # Parallel Processing
429
+ "multiprocessing": __import__("multiprocessing"),
430
+ "threading": __import__("threading"),
431
+ "concurrent": __import__("concurrent"),
432
+ }
433
+
434
+ exec_locals = {}
435
+ exec(code, safe_globals, exec_locals)
436
+
437
+ if 'result' in exec_locals:
438
+ return str(exec_locals['result'])
439
+ else:
440
+ return "Code executed successfully"
441
+
442
+ except Exception as e:
443
+ return f"Code execution failed: {str(e)}"
444
+
445
+ code_execution_tool = FunctionTool.from_defaults(
446
+ fn=execute_python_code,
447
+ name="Python Code Execution",
448
+ description="Execute Python code safely for calculations and data processing"
449
+ )
450
+
451
+ # Code Agent as ReActAgent with explicit code generation
452
+ code_agent = ReActAgent(
453
  name="CodeAgent",
454
+ description="Advanced calculations, data processing, and final answer synthesis using ReAct reasoning with code generation",
455
  system_prompt="""
456
  You are a coding and reasoning specialist using ReAct methodology.
457
+
458
+ For each task, follow this process:
459
  1. THINK: Analyze what needs to be calculated or processed
460
+ 2. PLAN: Design the approach and identify what code needs to be written
461
+ 3. GENERATE: Write the appropriate Python code to solve the problem
462
+ 4. ACT: Execute the generated code using the code execution tool
463
+ 5. OBSERVE: Review results and determine if more work is needed
464
+ 6. REPEAT: Continue until you have the final answer
465
 
466
+ When generating code:
467
+ - Write clear, well-commented Python code
468
+ - Use available libraries (numpy, pandas, matplotlib, etc.)
469
+ - Store your final result in a variable called 'result'
470
+ - Handle edge cases and potential errors
471
+ - Show intermediate steps for complex calculations
472
+
473
+ Always show your reasoning process clearly and provide exact answers as required by GAIA.
474
+
475
+ Example workflow:
476
+ THINK: I need to calculate the mean of a dataset
477
+ PLAN: Load data, use numpy or pandas to calculate mean
478
+ GENERATE:
479
+ ```
480
+ import numpy as np
481
+ data =
482
+ result = np.mean(data)
483
+ ```
484
+ ACT: [Execute the code using the tool]
485
+ OBSERVE: Check if result is correct and complete
486
  """,
487
+ llm=proj_llm,
488
+ tools=[code_execution_tool],
489
+ max_steps=5
490
  )
491
 
492
  analysis_tool = FunctionTool.from_defaults(