KPatelis's picture
missing }
b16840f
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
@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")
@tool
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}
@tool
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}
@tool
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}
@tool
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}