Spaces:
Sleeping
Sleeping
from langchain_community.tools import DuckDuckGoSearchResults | |
from langchain_community.document_loaders import WikipediaLoader | |
from langchain_community.document_loaders import ArxivLoader | |
from langchain_core.documents import Document | |
SEP_CHAR = "\n\n---\n\n" | |
def multiply(a: int, b: int) -> int: | |
"""Multiply two numbers. | |
Args: | |
a: first int | |
b: second int | |
""" | |
return a * b | |
def add(a: int, b: int) -> int: | |
"""Add two numbers. | |
Args: | |
a: first int | |
b: second int | |
""" | |
return a + b | |
def subtract(a: int, b: int) -> int: | |
"""Subtract two numbers. | |
Args: | |
a: first int | |
b: second int | |
""" | |
return a - b | |
def divide(a: int, b: int) -> int: | |
"""Divide two numbers. | |
Args: | |
a: first int | |
b: second int | |
""" | |
if b == 0: | |
raise ValueError("Cannot divide by zero.") | |
return a / b | |
def modulus(a: int, b: int) -> int: | |
"""Get the modulus of two numbers. | |
Args: | |
a: first int | |
b: second int | |
""" | |
return a % b | |
def wiki_search(query: str) -> dict: | |
"""Search Wikipedia for a query and return maximum 2 results. | |
Args: | |
query: The search query.""" | |
search_docs: list[Document] = WikipediaLoader(query=query, load_max_docs=2).load() | |
formatted_search_docs = SEP_CHAR.join( | |
[ | |
f'<Document source="{doc.metadata["source"]}"/>\n{doc.page_content}\n</Document>' | |
for doc in search_docs | |
]) | |
return formatted_search_docs | |
def web_search(query: str) -> dict: | |
"""Search Web for a query and return maximum 3 results. | |
Args: | |
query: The search query.""" | |
search_docs: list[dict] = DuckDuckGoSearchResults(num_results=3, output_format='list').invoke(input=query) | |
formatted_search_docs = SEP_CHAR.join( | |
[ | |
f'<Document source="{doc["link"]}" title="{doc.get("title", "")}"/>\n{doc["snippet"]}\n</Document>' | |
for doc in search_docs | |
]) | |
return formatted_search_docs | |
def arvix_search(query: str) -> dict: | |
"""Search Arxiv for a query and return maximum 3 result. | |
Args: | |
query: The search query.""" | |
search_docs: list[Document] = ArxivLoader(query=query).load() | |
formatted_search_docs = SEP_CHAR.join( | |
[ | |
f'<Document title="{doc.metadata["Title"]}" authors="{doc.metadata.get("Authors", "")}"/>\n{doc.page_content[:1000]}\n</Document>' | |
for doc in search_docs | |
]) | |
return formatted_search_docs | |
tools = [ | |
multiply, | |
add, | |
subtract, | |
divide, | |
modulus, | |
wiki_search, | |
web_search, | |
arvix_search, | |
] |