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, | |
| ] |