Spaces:
Sleeping
Sleeping
Update tools and dependency
Browse files- .env sample +2 -1
- Alfred_Agent.py +2 -1
- other_tools.py +45 -0
- pdm.lock +56 -1
- 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:
|
| 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"}
|