Golfn commited on
Commit
f173520
·
1 Parent(s): 30ec337

Update tools and dependency

Browse files
Files changed (5) hide show
  1. .env sample +2 -1
  2. Alfred_Agent.py +2 -1
  3. other_tools.py +45 -0
  4. pdm.lock +56 -1
  5. pyproject.toml +1 -1
.env sample CHANGED
@@ -1,3 +1,4 @@
1
  OPENAI_KEY=
2
  OPENAI_ENDPOINT=
3
- OPENWEATHER_KEY=
 
 
1
  OPENAI_KEY=
2
  OPENAI_ENDPOINT=
3
+ OPENWEATHER_KEY=
4
+ TAVILY_KEY=
Alfred_Agent.py CHANGED
@@ -45,6 +45,7 @@ from langgraph.graph import START, StateGraph
45
  from langgraph.prebuilt import tools_condition
46
  from langchain_openai import ChatOpenAI
47
  from Webserch_tool import search_tool,weather_info_tool
 
48
  import os
49
  from dotenv import load_dotenv
50
  load_dotenv()
@@ -52,7 +53,7 @@ load_dotenv()
52
  llm = ChatOpenAI(temperature=0
53
  , model="gpt-4o-mini", openai_api_key=os.getenv("OPENAI_KEY"))
54
 
55
- tools = [guest_info_tool,search_tool,weather_info_tool]
56
  chat_with_tools = llm.bind_tools(tools)
57
 
58
  # Generate the AgentState and Agent graph
 
45
  from langgraph.prebuilt import tools_condition
46
  from langchain_openai import ChatOpenAI
47
  from Webserch_tool import search_tool,weather_info_tool
48
+ from other_tools import wiki_search, arvix_search, web_search
49
  import os
50
  from dotenv import load_dotenv
51
  load_dotenv()
 
53
  llm = ChatOpenAI(temperature=0
54
  , model="gpt-4o-mini", openai_api_key=os.getenv("OPENAI_KEY"))
55
 
56
+ tools = [guest_info_tool,search_tool,weather_info_tool,wiki_search,arvix_search,web_search]
57
  chat_with_tools = llm.bind_tools(tools)
58
 
59
  # Generate the AgentState and Agent graph
other_tools.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ from langchain_community.document_loaders import WikipediaLoader
3
+ def wiki_search(query: str) -> str:
4
+ """Search Wikipedia for a query and return maximum 2 results.
5
+
6
+ Args:
7
+ query: The search query."""
8
+ search_docs = WikipediaLoader(query=query, load_max_docs=2).load()
9
+ formatted_search_docs = "\n\n---\n\n".join(
10
+ [
11
+ f'<Document source="{doc.metadata["source"]}" page="{doc.metadata.get("page", "")}"/>\n{doc.page_content}\n</Document>'
12
+ for doc in search_docs
13
+ ])
14
+ return {"wiki_results": formatted_search_docs}
15
+
16
+
17
+
18
+ from langchain_community.document_loaders import ArxivLoader
19
+ def arvix_search(query: str) -> str:
20
+ """Search Arxiv for a query and return maximum 3 result.
21
+
22
+ Args:
23
+ query: The search query."""
24
+ search_docs = ArxivLoader(query=query, load_max_docs=3).load()
25
+ formatted_search_docs = "\n\n---\n\n".join(
26
+ [
27
+ f'<Document source="{doc.metadata["source"]}" page="{doc.metadata.get("page", "")}"/>\n{doc.page_content[:1000]}\n</Document>'
28
+ for doc in search_docs
29
+ ])
30
+ return {"arvix_results": formatted_search_docs}
31
+
32
+
33
+ from langchain_community.tools.tavily_search import TavilySearchResults
34
+ def web_search(query: str) -> str:
35
+ """Search Tavily for a query and return maximum 3 results.
36
+
37
+ Args:
38
+ query: The search query."""
39
+ search_docs = TavilySearchResults(max_results=3).invoke(query=query)
40
+ formatted_search_docs = "\n\n---\n\n".join(
41
+ [
42
+ f'<Document source="{doc.metadata["source"]}" page="{doc.metadata.get("page", "")}"/>\n{doc.page_content}\n</Document>'
43
+ for doc in search_docs
44
+ ])
45
+ return {"web_results": formatted_search_docs}
pdm.lock CHANGED
@@ -5,7 +5,7 @@
5
  groups = ["default"]
6
  strategy = ["inherit_metadata"]
7
  lock_version = "4.5.0"
8
- content_hash = "sha256:7d897c624862c0f5d78bd04991a5a3021c3254763618e02ec50e0e7c5d255944"
9
 
10
  [[metadata.targets]]
11
  requires_python = "==3.12.*"
@@ -113,6 +113,21 @@ files = [
113
  {file = "anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028"},
114
  ]
115
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
  [[package]]
117
  name = "attrs"
118
  version = "25.3.0"
@@ -318,6 +333,20 @@ files = [
318
  {file = "fastapi-0.115.12.tar.gz", hash = "sha256:1e2c2a2646905f9e83d32f04a3f86aff4a286669c6c950ca95b5fd68c2602681"},
319
  ]
320
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
321
  [[package]]
322
  name = "ffmpy"
323
  version = "0.5.0"
@@ -1517,6 +1546,23 @@ files = [
1517
  {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"},
1518
  ]
1519
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1520
  [[package]]
1521
  name = "python-dateutil"
1522
  version = "2.9.0.post0"
@@ -1821,6 +1867,15 @@ files = [
1821
  {file = "setuptools-80.7.1.tar.gz", hash = "sha256:f6ffc5f0142b1bd8d0ca94ee91b30c0ca862ffd50826da1ea85258a06fd94552"},
1822
  ]
1823
 
 
 
 
 
 
 
 
 
 
1824
  [[package]]
1825
  name = "shellingham"
1826
  version = "1.5.4"
 
5
  groups = ["default"]
6
  strategy = ["inherit_metadata"]
7
  lock_version = "4.5.0"
8
+ content_hash = "sha256:d1b978f5c5889ca1859fe0ed1e488dcb2e81f11d054248bf21c48daccbdc55af"
9
 
10
  [[metadata.targets]]
11
  requires_python = "==3.12.*"
 
113
  {file = "anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028"},
114
  ]
115
 
116
+ [[package]]
117
+ name = "arxiv"
118
+ version = "2.2.0"
119
+ requires_python = ">=3.7"
120
+ summary = "Python wrapper for the arXiv API: https://arxiv.org/help/api/"
121
+ groups = ["default"]
122
+ dependencies = [
123
+ "feedparser~=6.0.10",
124
+ "requests~=2.32.0",
125
+ ]
126
+ files = [
127
+ {file = "arxiv-2.2.0-py3-none-any.whl", hash = "sha256:545b8af5ab301efff7697cd112b5189e631b80521ccbc33fbc1e1f9cff63ca4d"},
128
+ {file = "arxiv-2.2.0.tar.gz", hash = "sha256:6072a2211e95697092ef32acde0144d7de2cfa71208e2751724316c9df322cc0"},
129
+ ]
130
+
131
  [[package]]
132
  name = "attrs"
133
  version = "25.3.0"
 
333
  {file = "fastapi-0.115.12.tar.gz", hash = "sha256:1e2c2a2646905f9e83d32f04a3f86aff4a286669c6c950ca95b5fd68c2602681"},
334
  ]
335
 
336
+ [[package]]
337
+ name = "feedparser"
338
+ version = "6.0.11"
339
+ requires_python = ">=3.6"
340
+ summary = "Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds"
341
+ groups = ["default"]
342
+ dependencies = [
343
+ "sgmllib3k",
344
+ ]
345
+ files = [
346
+ {file = "feedparser-6.0.11-py3-none-any.whl", hash = "sha256:0be7ee7b395572b19ebeb1d6aafb0028dee11169f1c934e0ed67d54992f4ad45"},
347
+ {file = "feedparser-6.0.11.tar.gz", hash = "sha256:c9d0407b64c6f2a065d0ebb292c2b35c01050cc0dc33757461aaabdc4c4184d5"},
348
+ ]
349
+
350
  [[package]]
351
  name = "ffmpy"
352
  version = "0.5.0"
 
1546
  {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"},
1547
  ]
1548
 
1549
+ [[package]]
1550
+ name = "pymupdf"
1551
+ version = "1.25.5"
1552
+ requires_python = ">=3.9"
1553
+ summary = "A high performance Python library for data extraction, analysis, conversion & manipulation of PDF (and other) documents."
1554
+ groups = ["default"]
1555
+ files = [
1556
+ {file = "pymupdf-1.25.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:cde4e1c9cfb09c0e1e9c2b7f4b787dd6bb34a32cfe141a4675e24af7c0c25dd3"},
1557
+ {file = "pymupdf-1.25.5-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:5a35e2725fae0ab57f058dff77615c15eb5961eac50ba04f41ebc792cd8facad"},
1558
+ {file = "pymupdf-1.25.5-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d94b800e9501929c42283d39bc241001dd87fdeea297b5cb40d5b5714534452f"},
1559
+ {file = "pymupdf-1.25.5-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ee22155d3a634642d76553204867d862ae1bdd9f7cf70c0797d8127ebee6bed5"},
1560
+ {file = "pymupdf-1.25.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6ed7fc25271004d6d3279c20a80cb2bb4cda3efa9f9088dcc07cd790eca0bc63"},
1561
+ {file = "pymupdf-1.25.5-cp39-abi3-win32.whl", hash = "sha256:65e18ddb37fe8ec4edcdbebe9be3a8486b6a2f42609d0a142677e42f3a0614f8"},
1562
+ {file = "pymupdf-1.25.5-cp39-abi3-win_amd64.whl", hash = "sha256:7f44bc3d03ea45b2f68c96464f96105e8c7908896f2fb5e8c04f1fb8dae7981e"},
1563
+ {file = "pymupdf-1.25.5.tar.gz", hash = "sha256:5f96311cacd13254c905f6654a004a0a2025b71cabc04fda667f5472f72c15a0"},
1564
+ ]
1565
+
1566
  [[package]]
1567
  name = "python-dateutil"
1568
  version = "2.9.0.post0"
 
1867
  {file = "setuptools-80.7.1.tar.gz", hash = "sha256:f6ffc5f0142b1bd8d0ca94ee91b30c0ca862ffd50826da1ea85258a06fd94552"},
1868
  ]
1869
 
1870
+ [[package]]
1871
+ name = "sgmllib3k"
1872
+ version = "1.0.0"
1873
+ summary = "Py3k port of sgmllib."
1874
+ groups = ["default"]
1875
+ files = [
1876
+ {file = "sgmllib3k-1.0.0.tar.gz", hash = "sha256:7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9"},
1877
+ ]
1878
+
1879
  [[package]]
1880
  name = "shellingham"
1881
  version = "1.5.4"
pyproject.toml CHANGED
@@ -5,7 +5,7 @@ description = "Default template for PDM package"
5
  authors = [
6
  {name = "Supphawit_Golf", email = "supphawit.n@gmail.com"},
7
  ]
8
- dependencies = ["langchain>=0.3.25", "huggingface-hub>=0.31.2", "pandas>=2.2.3", "langgraph>=0.4.5", "langchain-openai>=0.3.17", "dotenv>=0.9.9", "datasets>=3.6.0", "langchain-community>=0.3.24", "rank-bm25>=0.2.2", "langchain-huggingface>=0.2.0", "duckduckgo-search>=8.0.2", "requests>=2.32.3", "gradio>=5.29.1"]
9
  requires-python = "==3.12.*"
10
  readme = "README.md"
11
  license = {text = "MIT"}
 
5
  authors = [
6
  {name = "Supphawit_Golf", email = "supphawit.n@gmail.com"},
7
  ]
8
+ dependencies = ["langchain>=0.3.25", "huggingface-hub>=0.31.2", "pandas>=2.2.3", "langgraph>=0.4.5", "langchain-openai>=0.3.17", "dotenv>=0.9.9", "datasets>=3.6.0", "langchain-community>=0.3.24", "rank-bm25>=0.2.2", "langchain-huggingface>=0.2.0", "duckduckgo-search>=8.0.2", "requests>=2.32.3", "gradio>=5.29.1", "arxiv>=2.2.0", "pymupdf>=1.25.5"]
9
  requires-python = "==3.12.*"
10
  readme = "README.md"
11
  license = {text = "MIT"}