File size: 2,553 Bytes
1fcafa8
 
 
 
 
 
 
 
 
ddb81ff
 
 
 
 
 
 
1fcafa8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
from langgraph.prebuilt import create_react_agent
from langchain.tools import tool
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain.chains.llm import LLMChain
from langchain_core.messages import SystemMessage
from langchain_core.output_parsers.string import StrOutputParser

from agents.prompts import (
    language_detection_prompt,
    research_agent_prompt,
    summarize_prompt,
    translate_prompt,
)


load_dotenv()

# Initialize model
model = init_chat_model("gemini-2.0-flash", model_provider="google_genai")


# Chain using your model
language_detection_chain = LLMChain(llm=model, prompt=language_detection_prompt, output_parser=StrOutputParser())

# Tool function
@tool
def detect_search_language(craft: str) -> str:
    """Uses an LLM to decide the best language to search for information about a given craft."""
    return language_detection_chain.run({"craft": craft})


# Tool 2: Search the web using Tavily
@tool
def web_search_in_language(query: str) -> str:
    """Search the internet for a given query (in any language) and return a few relevant results."""
    search_tool = TavilySearchResults(k=5)
    return search_tool.run(query)

# Tool 3: Translate text to English
translate_chain = LLMChain(llm=model, prompt=translate_prompt, output_parser=StrOutputParser())

@tool
def translate_to_english(text: str) -> str:
    """Translates a given text into English.

    Args:
        text (str): input text

    Returns:
        str: English translation
    """
    return translate_chain.run({"text": text})


# Tool 4: Summarize translated content
summarize_chain = LLMChain(llm=model, prompt=summarize_prompt, output_parser=StrOutputParser())

@tool
def summarize_craft_intro(text: str) -> str:
    """Summarizes a given text about a specific craft as a craft introduction for beginners.

    Args:
        text (str): text about a craft

    Returns:
        str: summary
    """
    return summarize_chain.run({"text": text})


# Define the agent
craft_research_agent = create_react_agent(
    model=model,
    tools=[
        detect_search_language,
        web_search_in_language,
        translate_to_english,
        summarize_craft_intro
    ],
   prompt = SystemMessage(content=research_agent_prompt.format()),
    name="craft_research_agent"
)



# Example usage
if __name__ == "__main__":
    response = craft_research_agent.invoke({"input": "I want to learn Bulgarian lacework"})
    print(response)