File size: 2,315 Bytes
f1a20fe
1a2eba5
200f0bf
9e20032
2bd0bca
9e20032
 
f1a20fe
 
 
9e20032
 
2bd0bca
9e20032
 
 
 
 
 
 
 
 
2bd0bca
 
 
 
 
 
 
 
 
935bc89
 
 
2bd0bca
 
f1a20fe
 
9e20032
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f1a20fe
e5a585e
f1a20fe
 
9e20032
 
 
2bd0bca
f1a20fe
200f0bf
 
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
from langchain_core.tools import tool
from langchain.tools import tool
import os
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_community.document_loaders import YoutubeLoader
from langchain_community.document_loaders import ArxivLoader, WikipediaLoader
from dotenv import load_dotenv


@tool
def web_search(query: str) -> str:
    """Search Tavily for a query and return maximum 3 results.
    Args:
        query: The search query."""
    search_docs = TavilySearchResults(max_results=3).invoke(input=query)
    formatted_search_docs = "\n\n---\n\n".join(
        [
            f'<Document source="{doc["url"]}" />\n{doc["content"]}\n</Document>'
            for doc in search_docs
        ]
    )
    return {"web_results": formatted_search_docs}


@tool
def youtube_transcription_tool(url: str) -> str:
    """
    This tool returns transcript of the youtube video.
    Args:
        url: youtube video url
    """
    loader = YoutubeLoader.from_youtube_url(url, 
                                            add_video_info=False
                                        )

    return loader.load()[0].page_content


@tool
def arxiv_search(query: str) -> str:
    """Search Arxiv for a query and return maximum 3 result.
    Args:
        query: The search query."""
    search_docs = ArxivLoader(query=query, load_max_docs=3).load()
    formatted_search_docs = "\n\n---\n\n".join(
        [
            f'<Document source="{doc.metadata["Title"]}" page="{doc.metadata.get("page", "")}"/>\n{doc.page_content}\n</Document>'
            for doc in search_docs
        ]
    )
    return {"arxiv_results": formatted_search_docs}


@tool
def wiki_search(query: str) -> str:
    """Search Wikipedia for a query and return maximum 2 results.
    Args:
        query: The search query."""
    search_docs = WikipediaLoader(query=query, load_max_docs=2).load()
    formatted_search_docs = "\n\n---\n\n".join(
        [
            f'<Document source="{doc.metadata["source"]}" page="{doc.metadata.get("page", "")}"/>\n{doc.page_content}\n</Document>'
            for doc in search_docs
        ]
    )
    return {"wiki_results": formatted_search_docs}


# Export the tools in a list
TOOLS = [
    web_search,
    wiki_search,
    arxiv_search,
    youtube_transcription_tool
]