Spaces:
Sleeping
Sleeping
import os | |
from langchain_community.tools import DuckDuckGoSearchRun | |
from langchain_community.tools.tavily_search import TavilySearchResults | |
from langchain_community.document_loaders import WikipediaLoader | |
from langchain_community.document_loaders import ArxivLoader | |
from langchain_core.tools import tool | |
def calculator(a: float, b: float, type: str) -> float: | |
"""Performs mathematical calculations, addition, subtraction, multiplication, division, modulus. | |
Args: | |
a (float): first float number | |
b (float): second float number | |
type (str): the type of calculation to perform, can be addition, subtraction, multiplication, division, modulus | |
""" | |
if type == "addition": | |
return a + b | |
elif type == "subtraction": | |
return a - b | |
elif type == "multiplication": | |
return a * b | |
elif type == "division": | |
if b == 0: | |
raise ValueError("Cannot divide by zero.") | |
return a / b | |
elif type == "modulus": | |
a % b | |
else: | |
TypeError(f"{type} is not an option for type, choose one of addition, subtraction, multiplication, division, modulus") | |
def duck_web_search(query: str) -> str: | |
"""Use DuckDuckGo to search the web. | |
Args: | |
query: The search query. | |
""" | |
search = DuckDuckGoSearchRun().invoke(query=query) | |
return {"duckduckgo_web_search": search} | |
def wiki_search(query: str) -> str: | |
"""Search Wikipedia for a query and return maximum 3 results. | |
Args: | |
query: The search query.""" | |
documents = WikipediaLoader(query=query, load_max_docs=3).load() | |
processed_documents = "\n\n---\n\n".join( | |
[ | |
f'Document title: {document.metadata.get("title", "")}. Summary: {document.metadata.get("summary", "")}. Documents details: {document.page_content}' | |
for document in documents | |
]) | |
return {"wiki_results": processed_documents} | |
def arxiv_search(query: str) -> str: | |
"""Search Arxiv for a query and return maximum 3 result. | |
Args: | |
query: The search query.""" | |
documents = ArxivLoader(query=query, load_max_docs=3).load() | |
processed_documents = "\n\n---\n\n".join( | |
[ | |
f'Document title: {document.metadata.get("title", "")}. Summary: {document.metadata.get("summary", "")}. Documents details: {document.page_content}' | |
for document in documents | |
]) | |
return {"arxiv_results": processed_documents} | |
def tavily_web_search(query: str) -> str: | |
"""Search the web using Tavily for a query and return maximum 3 results. | |
Args: | |
query: The search query.""" | |
search_engine = TavilySearchResults(max_results=3) | |
search_documents = search_engine.invoke(input=query) | |
web_results = "\n\n---\n\n".join( | |
[ | |
f'Document title: {document["title"]}. Contents: {document["content"]}. Relevance Score: {document["score"]}' | |
for document in search_documents | |
]) | |
return {"web_results": web_results} |