File size: 2,739 Bytes
f158561
9d05c23
66fdcfd
f158561
9d05c23
f158561
 
 
9d05c23
f158561
 
 
 
 
 
 
 
 
 
4c4f363
 
 
 
 
f158561
9d05c23
f158561
 
3b64660
f158561
 
3b64660
f158561
 
 
 
3b64660
9d05c23
 
aa8acb6
9d05c23
 
3b64660
f158561
 
c528499
 
9d05c23
ec315b1
 
9d05c23
 
 
 
 
dc2aa07
9d05c23
f158561
 
 
 
 
9d05c23
f158561
 
 
 
3b64660
 
f158561
4c4f363
3b64660
9d05c23
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
import gradio as gr
import os
from langchain_community.chat_models import ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain.agents import AgentExecutor, initialize_agent
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.tools import Tool

# Define tools
def create_your_own(query: str) -> str:
    """This function can do whatever you would like once you fill it in"""
    return query[::-1]

def get_current_temperature(query: str) -> str:
    return "It's sunny and 75°F."

def search_wikipedia(query: str) -> str:
    return "Wikipedia search results for: " + query

tools = [
    Tool(name="Temperature", func=get_current_temperature, description="Get current temperature"),
    Tool(name="Search Wikipedia", func=search_wikipedia, description="Search Wikipedia"),
    Tool(name="Create Your Own", func=create_your_own, description="Custom tool for processing input")
]

# Define chatbot class
class cbfs:
    def __init__(self, tools):
        self.model = ChatOpenAI(temperature=0, openai_api_key=os.getenv("OPENAI_API_KEY"))
        self.memory = ConversationBufferMemory(return_messages=True, memory_key="chat_history")
        self.prompt = ChatPromptTemplate.from_messages([
            ("system", "You are a helpful but sassy assistant"),
            MessagesPlaceholder(variable_name="chat_history"),
            ("user", "{input}"),
            MessagesPlaceholder(variable_name="agent_scratchpad")
        ])
        self.chain = initialize_agent(
            tools=tools,
            llm=self.model,
            agent="zero-shot-react-description",
            verbose=True,
            memory=self.memory
        )
    
    def convchain(self, query):
        if not query:
            return "Please enter a query."
        try:
            result = self.chain.invoke({"input": query, "chat_history": self.memory.load_memory_variables({})["chat_history"]})
            self.memory.save_context({"input": query}, {"output": result.get("output", "No response generated.")})
            print("Agent Execution Result:", result)  # Debugging output
            return result.get("output", "No response generated.")
        except Exception as e:
            print("Execution Error:", str(e))
            return f"Error: {str(e)}"

# Create chatbot instance
cb = cbfs(tools)

def process_query(query):
    return cb.convchain(query)

# Define Gradio UI
with gr.Blocks() as demo:
    with gr.Row():
        inp = gr.Textbox(placeholder="Enter text here…", label="User Input")
        output = gr.Textbox(placeholder="Response...", label="ChatBot Output", interactive=False)
    inp.submit(process_query, inputs=inp, outputs=output)

demo.launch(share=True)