File size: 2,092 Bytes
d45fd05
dedd5b6
ef5c5ef
 
d45fd05
030d3cf
9b09327
03d676c
9defe9f
dedd5b6
 
d45fd05
8595a86
d45fd05
 
ef5c5ef
d45fd05
 
 
 
 
4995664
03d676c
d45fd05
dedd5b6
d45fd05
dedd5b6
d45fd05
 
030d3cf
d45fd05
 
0ede848
 
d45fd05
 
dedd5b6
9b09327
03d676c
33d3dfe
9defe9f
 
33d3dfe
 
b0df00c
16fb597
 
 
b0df00c
9b09327
d45fd05
33d3dfe
d45fd05
030d3cf
9b09327
d45fd05
dedd5b6
d45fd05
 
 
 
 
 
 
 
 
 
 
 
dedd5b6
 
 
030d3cf
d45fd05
 
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
import os
import gradio as gr
from langchain.agents import create_agent
from langchain_huggingface import HuggingFaceEndpoint, ChatHuggingFace
from langgraph.checkpoint.memory import InMemorySaver
from dotenv import load_dotenv
from agents import get_book_retriver_agent
from tools import get_retrieve_book_context_rag_agent_tool
from tools import get_summarization_tool


class GradioAgent:

    def __init__(self):
        self.agent = self.__create_agent()

    def inicialize(self):
        chatbot = gr.ChatInterface(
            self._respond,
            type="messages"
        )

        with gr.Blocks(fill_height=True) as demo:
            chatbot.render()

        demo.launch()

    def __create_agent(self):
        hf_model = HuggingFaceEndpoint(
            repo_id="Qwen/Qwen3-30B-A3B-Instruct-2507",
            task="text-generation",
            provider="auto",
            huggingfacehub_api_token=os.getenv("HF_TOKEN"),
            do_sample=False
        )
        llm = ChatHuggingFace(llm=hf_model)

        rag_agent = get_book_retriver_agent()

        tools = [
            get_retrieve_book_context_rag_agent_tool(rag_agent),
            get_summarization_tool()
        ]

        prompt = (
            "You are a helpful and usefull coordinator agent, you have access to a collection of tools and"
            " agents to help you with reliable data to your query's. "
            "One of your main objectives is to generate user friendly answers based on the information you have."
        )

        return create_agent(
            tools=tools,
            model=llm,
            checkpointer=InMemorySaver(),
            system_prompt=prompt
        )

    def _respond(
        self,
        message,
        history
    ):
        result = self.agent.invoke(
            {"messages": [{"role": "user", "content": message}]},
            {"configurable": {"thread_id": "1"}},
        )
        output = result['messages'][-1].content

        yield output


if __name__ == "__main__":
    load_dotenv()
    gradio = GradioAgent()
    gradio.inicialize()