Nguyen Nhu Trung commited on
Commit
d78e24c
·
1 Parent(s): 81917a3
Files changed (3) hide show
  1. agent.py +75 -0
  2. app.py +3 -1
  3. requirements.txt +7 -1
agent.py ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from dotenv import load_dotenv
3
+ from langgraph.graph import START, StateGraph, MessagesState
4
+ from langgraph.prebuilt import tools_condition
5
+ from langgraph.prebuilt import ToolNode
6
+ from langchain_groq import ChatGroq
7
+ from langchain_community.tools import DuckDuckGoSearchResults
8
+ from langchain_community.document_loaders import WikipediaLoader
9
+ from langchain_core.messages import SystemMessage, HumanMessage
10
+ from langchain_core.tools import tool
11
+ from langchain_core.output_parsers import StrOutputParser
12
+
13
+ load_dotenv()
14
+
15
+ @tool
16
+ def wiki_search(query: str) -> str:
17
+ """Search Wikipedia for a query and return maximum 2 results.
18
+
19
+ Args:
20
+ query: The search query."""
21
+ search_docs = WikipediaLoader(query=query, load_max_docs=2).load()
22
+ formatted_search_docs = "\n\n---\n\n".join(
23
+ [
24
+ f'<Document source="{doc.metadata["source"]}" page="{doc.metadata.get("page", "")}"/>\n{doc.page_content}\n</Document>'
25
+ for doc in search_docs
26
+ ])
27
+ return {"wiki_results": formatted_search_docs}
28
+
29
+ @tool
30
+ def web_search(query: str) -> str:
31
+ """Search DuckDuckGo for a query and return maximum 3 results.
32
+
33
+ Args:
34
+ query: The search query."""
35
+ search_docs = DuckDuckGoSearchResults(max_results=3).invoke(query)
36
+ return {"web_results": search_docs}
37
+
38
+ system_prompt = "You are a helpful assistant"
39
+ sys_msg = SystemMessage(content=system_prompt)
40
+
41
+ tools = [
42
+ wiki_search,
43
+ web_search,
44
+ ]
45
+
46
+ llm = ChatGroq(model="qwen-qwq-32b", temperature=0)
47
+ llm_with_tools = llm.bind_tools(tools)
48
+
49
+ def assistant(state: MessagesState):
50
+ """Assistant node"""
51
+ return {"messages": [llm_with_tools.invoke(state["messages"])]}
52
+
53
+ builder = StateGraph(MessagesState)
54
+ builder.add_node("assistant", assistant)
55
+ builder.add_node("tools", ToolNode(tools))
56
+ builder.add_edge(START, "assistant")
57
+ builder.add_conditional_edges(
58
+ "assistant",
59
+ tools_condition,
60
+ )
61
+ builder.add_edge("tools", "assistant")
62
+ graph = builder.compile()
63
+
64
+
65
+ def get_answer(query):
66
+ messages = [HumanMessage(content=query)]
67
+ messages = graph.invoke({"messages": messages})
68
+ return result["messages"][-1]["content"]
69
+
70
+ if __name__ == "__main__":
71
+ question = "In the video https://www.youtube.com/watch?v=L1vXCYZAYYM, what is the highest number of bird species to be on camera simultaneously?"
72
+ messages = [HumanMessage(content=question)]
73
+ messages = graph.invoke({"messages": messages})
74
+ for m in messages["messages"]:
75
+ m.pretty_print()
app.py CHANGED
@@ -3,6 +3,7 @@ import gradio as gr
3
  import requests
4
  import inspect
5
  import pandas as pd
 
6
 
7
  # (Keep Constants as is)
8
  # --- Constants ---
@@ -13,9 +14,10 @@ DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
13
  class BasicAgent:
14
  def __init__(self):
15
  print("BasicAgent initialized.")
 
16
  def __call__(self, question: str) -> str:
17
  print(f"Agent received question (first 50 chars): {question[:50]}...")
18
- fixed_answer = "This is a default answer."
19
  print(f"Agent returning fixed answer: {fixed_answer}")
20
  return fixed_answer
21
 
 
3
  import requests
4
  import inspect
5
  import pandas as pd
6
+ from agent import graph, get_answer
7
 
8
  # (Keep Constants as is)
9
  # --- Constants ---
 
14
  class BasicAgent:
15
  def __init__(self):
16
  print("BasicAgent initialized.")
17
+
18
  def __call__(self, question: str) -> str:
19
  print(f"Agent received question (first 50 chars): {question[:50]}...")
20
+ fixed_answer = get_answer(question)
21
  print(f"Agent returning fixed answer: {fixed_answer}")
22
  return fixed_answer
23
 
requirements.txt CHANGED
@@ -1,2 +1,8 @@
1
  gradio
2
- requests
 
 
 
 
 
 
 
1
  gradio
2
+ requests
3
+ langgraph
4
+ dotenv
5
+ langchain-groq
6
+ langchain-community
7
+ wikipedia
8
+ duckduckgo-search