File size: 4,651 Bytes
e0a7e23 6d59b6c 2cb6a13 af418c7 1f88fc5 5c0e17c 1f88fc5 af418c7 0cbafb7 526ce64 dc7594a 1ee6c52 dc7594a 526ce64 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
from langchain_community.document_loaders.wikipedia import WikipediaLoader
from langchain_community.document_loaders import YoutubeLoader
from langchain_community.document_loaders import ArxivLoader
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.tools import tool
@tool
def youtube_video_loader(url: str) -> str:
"""Load a Youtube video and return the transcript.
Args:
url (str): The Youtube video URL."""
loader = YoutubeLoader.from_youtube_url(str(url), add_video_info=False)
docs = loader.load()
print(docs)
return "\n\n".join(map(repr, docs))
@tool
def multiply(x: int, y: int) -> int:
"""Multiply two numbers."""
return x * y
@tool
def add(x: int, y: int) -> int:
"""Add two numbers."""
return x + y
@tool
def subtract(x: int, y: int) -> int:
"""Subtract two numbers."""
return x - y
@tool
def divide(x: int, y: int) -> float:
"""Divide two numbers."""
return x / y
@tool
def modulus(x: int, y: int) -> int:
"""Get the modulus of two numbers."""
return x % y
@tool
def wiki_search(query: str) -> str:
"""Search Wikipedia for a query. Returns the first result 3.
Args:
query (str): The search query."""
loader = WikipediaLoader(query=query, load_max_docs=3)
docs = loader.load()
if docs:
# For each document Extract the content and metadata from the documents
results = []
for doc in docs:
content = doc.page_content
metadata = doc.metadata
# Handle missing metadata fields gracefully
result = {
"source": metadata.get('source', 'Unknown source'),
"page": metadata.get('page', 'Unknown page'),
"content": content
}
results.append(result)
return results.__str__() if results else "No results found."
@tool
def arxiv_search(query: str) -> str:
"""Search Arxiv for a query. Returns the first result 3.
Args:
query (str): The search query."""
loader = ArxivLoader(query=query, load_max_docs=3)
docs = loader.load()
if docs:
# For each document Extract the content and metadata from the documents
results = []
for doc in docs:
content = doc.page_content
metadata = doc.metadata
# Format the result as json object
result = {
"source": metadata['source'],
"page": metadata['page'],
"content": content[:1000] # Limit content to 1000 characters
}
results.append(result)
return results.__str__() if results else "No results found."
@tool
def tavily_search(query: str) -> str:
"""Search Tavily for a query. Returns the first result 3.
Args:
query (str): The search query."""
docs = TavilySearchResults(max_results=2).invoke(query)
if docs:
# For each document Extract the content and metadata from the documents
results = []
for doc in docs:
content = doc['content']
titel = doc['title']
url = doc['url']
# Format the result as json object
result = {
"source": url,
"titel": titel,
"content": content # Limit content to 1000 characters
}
results.append(result)
return results.__str__() if results else "No results found."
@tool
def wiki_loader(query: str, lang: str='en', load_max_docs: int=3):
"""
Fetches content from Wikipedia based on a given query.
Parameters:
- query (str): The search query for Wikipedia.
- lang (str): The language of the Wikipedia to search in. Default is 'en'.
- load_max_docs (int): The maximum number of documents to load. Default is 2.
Returns:
- list: A list of documents containing the fetched Wikipedia content.
"""
try:
# Initialize the WikipediaLoader with the given query, language, and max documents
loader = WikipediaLoader(query=query, lang=lang, load_max_docs=load_max_docs)
# Load the documents
documents = loader.load()
result = []
for doc in documents:
doc_dict = {
"source": doc.metadata.get('source', 'Unknown source'),
"page": doc.metadata.get('page', 'Unknown page'),
"content": doc.page_content
}
result.append(doc_dict)
print(result)
return result
except Exception as e:
print(f"An error occurred: {e}")
return [] |