dawid-lorek commited on
Commit
5db119a
·
verified ·
1 Parent(s): 6c7c70b

Update agent.py

Browse files
Files changed (1) hide show
  1. agent.py +18 -12
agent.py CHANGED
@@ -1,14 +1,15 @@
1
- # agent.py
2
 
 
3
  from llama_index.llms.openai import OpenAI
4
- from llama_index.core.agent.workflow import AgentWorkflow
5
  from llama_index.core.tools import FunctionTool
6
 
7
  from langchain_community.tools import DuckDuckGoSearchRun, WikipediaQueryRun
8
  from langchain_experimental.tools.python.tool import PythonREPLTool
9
  from langchain_community.document_loaders import YoutubeLoader
10
 
11
- # --- Tool wrappers --- #
12
  def search_duckduckgo(query: str) -> str:
13
  return DuckDuckGoSearchRun().run(query)
14
 
@@ -23,7 +24,7 @@ def get_youtube_transcript(url: str) -> str:
23
  docs = loader.load()
24
  return " ".join(doc.page_content for doc in docs)
25
 
26
- # --- Register tools --- #
27
  TOOLS = [
28
  FunctionTool.from_defaults(search_duckduckgo),
29
  FunctionTool.from_defaults(search_wikipedia),
@@ -31,17 +32,22 @@ TOOLS = [
31
  FunctionTool.from_defaults(get_youtube_transcript),
32
  ]
33
 
34
- # --- Load LLM --- #
35
  llm = OpenAI(model="gpt-4")
36
 
37
- # --- Build agent --- #
38
- agent = AgentWorkflow.from_tools_or_functions(
39
- TOOLS,
40
  llm=llm,
41
- system_prompt="You are a helpful AI agent using reasoning and external tools to solve tasks."
42
  )
43
 
44
- # --- Async run wrapper --- #
45
  async def answer_question(question: str) -> str:
46
- result = await agent.run(question)
47
- return str(result)
 
 
 
 
 
 
1
+ # agent.py – ReActAgent version with timeouts
2
 
3
+ import asyncio
4
  from llama_index.llms.openai import OpenAI
5
+ from llama_index.core.agent.react import ReActAgent
6
  from llama_index.core.tools import FunctionTool
7
 
8
  from langchain_community.tools import DuckDuckGoSearchRun, WikipediaQueryRun
9
  from langchain_experimental.tools.python.tool import PythonREPLTool
10
  from langchain_community.document_loaders import YoutubeLoader
11
 
12
+ # --- Tool Wrappers ---
13
  def search_duckduckgo(query: str) -> str:
14
  return DuckDuckGoSearchRun().run(query)
15
 
 
24
  docs = loader.load()
25
  return " ".join(doc.page_content for doc in docs)
26
 
27
+ # --- Tools ---
28
  TOOLS = [
29
  FunctionTool.from_defaults(search_duckduckgo),
30
  FunctionTool.from_defaults(search_wikipedia),
 
32
  FunctionTool.from_defaults(get_youtube_transcript),
33
  ]
34
 
35
+ # --- LLM ---
36
  llm = OpenAI(model="gpt-4")
37
 
38
+ # --- ReActAgent ---
39
+ agent = ReActAgent(
40
+ tools=TOOLS,
41
  llm=llm,
42
+ system_prompt="You are a helpful assistant that uses tools to answer questions accurately and efficiently."
43
  )
44
 
45
+ # --- Runner with timeout ---
46
  async def answer_question(question: str) -> str:
47
+ try:
48
+ result = await asyncio.wait_for(agent.run(question), timeout=60)
49
+ return str(result)
50
+ except asyncio.TimeoutError:
51
+ return "[TIMEOUT]"
52
+ except Exception as e:
53
+ return f"[ERROR] {e}"