Spaces:
Runtime error
Runtime error
import gradio as gr | |
import os | |
from langchain.schema import HumanMessage, AIMessage | |
from langchain.agents import AgentExecutor, create_openai_tools_agent | |
from langchain_openai import ChatOpenAI, OpenAIEmbeddings | |
from rag import create_rag_tool | |
from leave import LeaveRequestInfoTool, SQLAgentTool, prompt | |
# Initialize LLM | |
key = "sk-proj-LdVhjM2bTI27bA3grOK8T3BlbkFJh5whi2UHYKkgM2pNwpbe" | |
os.environ["OPENAI_API_KEY"] = key | |
llm = ChatOpenAI(model="gpt-4", temperature=0) | |
# Add the RAGTool to the list of tools | |
rag_tool = create_rag_tool(llm=llm) | |
leave_request_info_tool = LeaveRequestInfoTool() | |
sql_tool = SQLAgentTool() | |
tools = [leave_request_info_tool, sql_tool, rag_tool] | |
agent = create_openai_tools_agent(llm, tools, prompt) | |
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) | |
def truncate_chat_history(chat_history, max_tokens=3000): | |
total_tokens = sum(len(message.content.split()) for message in chat_history) | |
while total_tokens > max_tokens and chat_history: | |
chat_history.pop(0) | |
total_tokens = sum(len(message.content.split()) for message in chat_history) | |
return chat_history | |
def handle_user_input(user_input, chat_history): | |
if chat_history is None: | |
chat_history = [] | |
chat_history.append(HumanMessage(content=user_input)) | |
truncated_chat_history = truncate_chat_history(chat_history) | |
response = agent_executor.invoke( | |
{"input": user_input, "chat_history": truncated_chat_history} | |
) | |
ai_response = response['output'] | |
chat_history.append(AIMessage(content=ai_response)) | |
messages = [(message.content, "user" if isinstance(message, HumanMessage) else "bot") for message in chat_history] | |
return messages, chat_history | |
with gr.Blocks() as demo: | |
gr.Markdown("# HR Assistant Chatbot") | |
chatbot = gr.Chatbot() | |
state = gr.State() | |
txt = gr.Textbox(placeholder="Type your message here...") | |
txt.submit(handle_user_input, [txt, state], [chatbot, state]) | |
demo.launch(share = True) | |