errchh commited on
Commit
9461725
·
1 Parent(s): 6bbce09
Files changed (2) hide show
  1. agent.py +8 -7
  2. app.py +3 -24
agent.py CHANGED
@@ -1,4 +1,3 @@
1
- # import libraries for langgraph, huggingface
2
  import os
3
  from dotenv import load_dotenv
4
  from typing import TypedDict, List, Dict, Any, Optional, Annotated
@@ -106,7 +105,7 @@ def search_web(query: str) -> Dict[str, str]:
106
  docs = SerpAPIWrapper()
107
  docs.run(query)
108
  formatted_result = f'<Document source="{docs.metadata["source"]}" page="{docs.metadata.get("page", "")}"/>\n{docs.page_content}\n</Document>'
109
- return {"wiki_results": formatted_result}
110
 
111
 
112
  # ArXiv search tool
@@ -119,7 +118,7 @@ def search_arxiv(query: str) -> Dict[str, str]:
119
  arxiv = ArxivAPIWrapper()
120
  docs = arxiv.run(query)
121
  formatted_result = f'<Document source="{docs.metadata["source"]}" page="{docs.metadata.get("page", "")}"/>\n{docs.page_content}\n</Document>'
122
- return {"wiki_results": formatted_result}
123
 
124
 
125
  # build retriever
@@ -180,14 +179,16 @@ def build_graph():
180
  builder.add_edge(START, "assistant")
181
  builder.add_conditional_edges(
182
  "assistant",
183
- # If the latest message requires a tool, route to tools
184
- # Otherwise, provide a direct response
185
  tools_condition,
 
 
 
 
 
 
186
  )
187
  builder.add_edge("tools", "assistant")
188
 
189
- return builder.compile()
190
-
191
 
192
  if __name__ == "__main__":
193
  question = "When was a picture of St. Thomas Aquinas first added to the Wikipedia page on the Principle of double effect?"
 
 
1
  import os
2
  from dotenv import load_dotenv
3
  from typing import TypedDict, List, Dict, Any, Optional, Annotated
 
105
  docs = SerpAPIWrapper()
106
  docs.run(query)
107
  formatted_result = f'<Document source="{docs.metadata["source"]}" page="{docs.metadata.get("page", "")}"/>\n{docs.page_content}\n</Document>'
108
+ return {"web_results": formatted_result}
109
 
110
 
111
  # ArXiv search tool
 
118
  arxiv = ArxivAPIWrapper()
119
  docs = arxiv.run(query)
120
  formatted_result = f'<Document source="{docs.metadata["source"]}" page="{docs.metadata.get("page", "")}"/>\n{docs.page_content}\n</Document>'
121
+ return {"arxiv_results": formatted_result}
122
 
123
 
124
  # build retriever
 
179
  builder.add_edge(START, "assistant")
180
  builder.add_conditional_edges(
181
  "assistant",
 
 
182
  tools_condition,
183
+ {
184
+ # If the latest message requires a tool, route to tools
185
+ "tools": "tools",
186
+ # Otherwise, provide a direct response
187
+ END: END,
188
+ }
189
  )
190
  builder.add_edge("tools", "assistant")
191
 
 
 
192
 
193
  if __name__ == "__main__":
194
  question = "When was a picture of St. Thomas Aquinas first added to the Wikipedia page on the Principle of double effect?"
app.py CHANGED
@@ -23,30 +23,9 @@ class BasicAgent:
23
  print(f"Agent received question (first 50 chars): {question[:50]}...")
24
  # Wrap the question in a HumanMessage from langchain_core
25
  messages = [HumanMessage(content=question)]
26
- # The graph.invoke method returns the final state of the graph.
27
- # The state is expected to contain a 'messages' key with a list of messages.
28
- result = self.graph.invoke({"messages": messages})
29
- # Extract the final answer message from the state
30
- # The final message should be the content of the last AIMessage with content
31
- submitted_answer = "Could not get answer from agent output." # Default if extraction fails
32
-
33
- # Check if the result is a dictionary and contains a list of messages
34
- if isinstance(result, dict) and "messages" in result and isinstance(result["messages"], list):
35
- # Iterate through messages in reverse to find the last one from the AI
36
- for msg in reversed(result["messages"]):
37
- # Check if the message is an AIMessage and has content (non-empty string or non-empty list/dict representation)
38
- # The 'content' attribute exists on AIMessage, so hasattr check is redundant.
39
- if isinstance(msg, AIMessage) and msg.content is not None:
40
- # Ensure the content is treated as a string for submission.
41
- # LangChain AIMessage content can be str or list[str | dict].
42
- # str() handles conversion for both cases.
43
- submitted_answer = str(msg.content)
44
- break # Found the last AI message with content, stop searching
45
-
46
- # If the loop finishes without finding an AIMessage with content,
47
- # submitted_answer remains the default value.
48
-
49
- return submitted_answer
50
 
51
 
52
  def run_and_submit_all( profile: gr.OAuthProfile | None):
 
23
  print(f"Agent received question (first 50 chars): {question[:50]}...")
24
  # Wrap the question in a HumanMessage from langchain_core
25
  messages = [HumanMessage(content=question)]
26
+ messages = self.graph.invoke({"messages": messages})
27
+ answer = messages['messages'][-1].content
28
+ return answer[14:]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
 
30
 
31
  def run_and_submit_all( profile: gr.OAuthProfile | None):