mirjam-m commited on
Commit
8f44ac3
·
1 Parent(s): 58632aa

graph test

Browse files
Files changed (1) hide show
  1. app.py +30 -9
app.py CHANGED
@@ -7,13 +7,14 @@ from typing import Any, Dict, List, Optional, TypedDict
7
  import gradio as gr
8
  import pandas as pd
9
  import requests
10
- from langchain_community.tools import DuckDuckGoSearchRun
11
  from langchain_core import messages
12
  from langchain_core.messages import (
13
  BaseMessage,
14
  ChatMessage,
15
  HumanMessage,
16
  SystemMessage,
 
17
  ToolMessage,
18
  )
19
  from langchain_openai import ChatOpenAI
@@ -69,7 +70,7 @@ class AnswerState(TypedDict):
69
  messages: List[BaseMessage]
70
  is_final_answer: bool
71
  search_request: Optional[str]
72
- search_response: Optional[str]
73
 
74
 
75
  class BasicAgent:
@@ -79,6 +80,7 @@ class BasicAgent:
79
  self.graph.add_node("log_question", self.log_question)
80
  self.graph.add_node("invoke_model", self.invoke_model)
81
  self.graph.add_node("web_search", self.web_search)
 
82
  self.graph.add_node("decide", self.decide)
83
  self.graph.add_node("final_answer", self.final_answer)
84
  self.graph.add_node("exceeded_attempts", self.exceeded_attempts)
@@ -95,6 +97,7 @@ class BasicAgent:
95
  "FINAL_ANSWER": "final_answer",
96
  "EXCEEDED_ATTEMPTS": "exceeded_attempts",
97
  "WEB_SEARCH": "web_search",
 
98
  },
99
  )
100
 
@@ -113,7 +116,7 @@ class BasicAgent:
113
  "messages": [],
114
  "is_final_answer": False,
115
  "search_request": None,
116
- "search_response": None,
117
  }
118
  )
119
  return res.get("answer", "N/A")
@@ -134,15 +137,27 @@ class BasicAgent:
134
  "is_final_answer": True,
135
  }
136
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
  def web_search(self, state: AnswerState) -> Dict[str, Any]:
138
  print("[web_search] Searching for: " + str(state["search_request"]))
139
  search_tool = DuckDuckGoSearchRun()
140
  results = search_tool.invoke(str(state["search_request"]))
141
  print(f"Search results: {results}")
142
  state["messages"].append(
143
- ToolMessage(
144
- tool="DuckDuckGoSearchAgent",
145
- tool_call_id=str(state["search_request"])[:20],
146
  content=results,
147
  )
148
  )
@@ -173,6 +188,7 @@ class BasicAgent:
173
  def invoke_model(self, state: AnswerState) -> Dict[str, Any]:
174
  print("[invoke_model] Agent trying to answer")
175
  state["search_request"] = None
 
176
 
177
  response = self.model.invoke(state["messages"])
178
  print(f"Agent response: {response.content}")
@@ -189,8 +205,7 @@ class BasicAgent:
189
  print(f"Agent returning answer: {state['answer']}")
190
  state["answer"] = answer
191
  state["is_final_answer"] = True
192
-
193
- if "TOOL: DuckDuckGoSearchAgent" in response.content:
194
  request_full = (
195
  response.text().split("TOOL: DuckDuckGoSearchAgent(")[-1].strip(")")
196
  )
@@ -198,13 +213,19 @@ class BasicAgent:
198
  request = request_full.split("request=")[-1].strip("'")
199
  print(f"Search request: {request}")
200
  state["search_request"] = request
201
-
 
 
 
 
 
202
  return {
203
  "messages": state["messages"],
204
  "attempt": state.get("attempt", 0) + 1,
205
  "answer": state["answer"],
206
  "is_final_answer": state["is_final_answer"],
207
  "search_request": state["search_request"],
 
208
  }
209
 
210
 
 
7
  import gradio as gr
8
  import pandas as pd
9
  import requests
10
+ from langchain_community.tools import DuckDuckGoSearchRun, WikipediaQueryRunTool
11
  from langchain_core import messages
12
  from langchain_core.messages import (
13
  BaseMessage,
14
  ChatMessage,
15
  HumanMessage,
16
  SystemMessage,
17
+ ToolCall,
18
  ToolMessage,
19
  )
20
  from langchain_openai import ChatOpenAI
 
70
  messages: List[BaseMessage]
71
  is_final_answer: bool
72
  search_request: Optional[str]
73
+ wiki_request: Optional[str]
74
 
75
 
76
  class BasicAgent:
 
80
  self.graph.add_node("log_question", self.log_question)
81
  self.graph.add_node("invoke_model", self.invoke_model)
82
  self.graph.add_node("web_search", self.web_search)
83
+ self.graph.add_node("wiki_search", self.wiki_search)
84
  self.graph.add_node("decide", self.decide)
85
  self.graph.add_node("final_answer", self.final_answer)
86
  self.graph.add_node("exceeded_attempts", self.exceeded_attempts)
 
97
  "FINAL_ANSWER": "final_answer",
98
  "EXCEEDED_ATTEMPTS": "exceeded_attempts",
99
  "WEB_SEARCH": "web_search",
100
+ "WIKI_SEARCH": "wiki_search",
101
  },
102
  )
103
 
 
116
  "messages": [],
117
  "is_final_answer": False,
118
  "search_request": None,
119
+ "wiki_request": None,
120
  }
121
  )
122
  return res.get("answer", "N/A")
 
137
  "is_final_answer": True,
138
  }
139
 
140
+ def wiki_search(self, state: AnswerState) -> Dict[str, Any]:
141
+ print("[wiki_search] Searching for: " + str(state["search_request"]))
142
+ wiki_tool = WikipediaQueryRunTool()
143
+ results = wiki_tool.invoke(str(state["search_request"]))
144
+ print(f"Wiki results: {results}")
145
+ state["messages"].append(
146
+ ChatMessage(
147
+ role="WikipediaAgent",
148
+ content=results,
149
+ )
150
+ )
151
+ return {"messages": state["messages"]}
152
+
153
  def web_search(self, state: AnswerState) -> Dict[str, Any]:
154
  print("[web_search] Searching for: " + str(state["search_request"]))
155
  search_tool = DuckDuckGoSearchRun()
156
  results = search_tool.invoke(str(state["search_request"]))
157
  print(f"Search results: {results}")
158
  state["messages"].append(
159
+ ChatMessage(
160
+ role="DuckDuckGoSearchAgent",
 
161
  content=results,
162
  )
163
  )
 
188
  def invoke_model(self, state: AnswerState) -> Dict[str, Any]:
189
  print("[invoke_model] Agent trying to answer")
190
  state["search_request"] = None
191
+ state["wiki_request"] = None
192
 
193
  response = self.model.invoke(state["messages"])
194
  print(f"Agent response: {response.content}")
 
205
  print(f"Agent returning answer: {state['answer']}")
206
  state["answer"] = answer
207
  state["is_final_answer"] = True
208
+ elif "TOOL: DuckDuckGoSearchAgent" in response.content:
 
209
  request_full = (
210
  response.text().split("TOOL: DuckDuckGoSearchAgent(")[-1].strip(")")
211
  )
 
213
  request = request_full.split("request=")[-1].strip("'")
214
  print(f"Search request: {request}")
215
  state["search_request"] = request
216
+ elif "TOOL: WikipediaAgent" in response.content:
217
+ request_full = response.text().split("TOOL: WikipediaAgent(")[-1].strip(")")
218
+ print(f"Tool invocation request: {request_full}")
219
+ request = request_full.split("request=")[-1].strip("'")
220
+ print(f"Wiki request: {request}")
221
+ state["wiki_request"] = request
222
  return {
223
  "messages": state["messages"],
224
  "attempt": state.get("attempt", 0) + 1,
225
  "answer": state["answer"],
226
  "is_final_answer": state["is_final_answer"],
227
  "search_request": state["search_request"],
228
+ "wiki_request": state["wiki_request"],
229
  }
230
 
231