File size: 2,113 Bytes
a4def59
 
efd8150
a4def59
5d8f022
 
 
 
 
 
a4def59
 
 
 
5d8f022
2f9e3a2
a4def59
 
2f9e3a2
a4def59
 
 
 
5d8f022
a4def59
 
 
 
5d8f022
 
 
 
 
a4def59
efd8150
 
5d8f022
efd8150
5d8f022
 
 
efd8150
5d8f022
efd8150
 
5d8f022
 
 
 
 
 
 
 
 
efd8150
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
from langchain_core.tools import tool
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_community.utilities import GoogleSerperAPIWrapper
from dotenv import load_dotenv
from typing import Annotated
from typing_extensions import Annotated
from langchain_core.tools.base import InjectedToolCallId
from langchain_core.runnables import RunnableConfig
from langgraph.types import Command
from langchain_core.messages import ToolMessage

load_dotenv()

@tool
def taivily_search(query: str, tool_call_id: Annotated[str, InjectedToolCallId], config: RunnableConfig):
    """Tavily is a search engine optimized for LLMs, aimed at efficient, quick and persistent search results. Tavily take care of all the burden of searching, scraping, filtering and extracting the most relevant information from online sources.
    Args:
        query: The search query."""
    
    search_docs = TavilySearchResults(max_results=1).invoke(input=query)
    
    formatted_search_docs = "\n\n---\n\n".join(
        [
            f"""# Taivily \n source="{doc["url"]}"" \n ## Content \n {doc["content"]} \n---"""
            for doc in search_docs
        ]
    )
    
    return Command(
        update={
            "external_information": f"{config.get('external_information', '')}\n\n---\n\n{formatted_search_docs}",
            "messages": [ToolMessage(content=formatted_search_docs, tool_call_id=tool_call_id)]
        }
    )

@tool
def serper_search(query: str, tool_call_id: Annotated[str, InjectedToolCallId], config: RunnableConfig) -> Command:
    """
    lightning-fast Google search results in 1-2 seconds.
    Args: 
        query: The search query.
    """
    search_docs = GoogleSerperAPIWrapper(k=8)
    result = search_docs.run(query)
    
    formatted_result = f"""# Google Search Results \n\n## Results \n\n{result}"""
    
    return Command(
        update={
            "external_information": f"{config.get('external_information', '')}\n\n---\n\n{formatted_result}",
            "messages": [ToolMessage(content=formatted_result, tool_call_id=tool_call_id)]
        }
    )