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} |