xtrade_bot_gradio / gradio_app.py
Josh-Ola's picture
Upload folder using huggingface_hub
8ab1018 verified
raw
history blame
3.93 kB
"""
Module for running the gradio web-ui application
"""
import gradio as gr
"""
Module for testing agent
"""
from time import time
import os
# from langchain_core.pydantic_v1 import (
# BaseModel,
# )
from langchain.globals import set_llm_cache
from langchain_core.callbacks.manager import (
AsyncCallbackManager,
)
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_core.runnables import RunnablePassthrough
from langchain_core.callbacks.streaming_stdout import (
StreamingStdOutCallbackHandler,
)
from langchain_openai.chat_models import ChatOpenAI
from langchain_community.chat_message_histories import ChatMessageHistory
from langchain.agents.output_parsers import OpenAIFunctionsAgentOutputParser
from langchain.agents.format_scratchpad import format_to_openai_functions
from langchain.agents import AgentExecutor
from dotenv import (
load_dotenv,
find_dotenv,
)
from pydantic import BaseModel
from openai_functions_and_agents import (
# create_consumable_functions,
consumable_functions,
# consumable_tools,
)
from prompt_verified import create_agent_prompt
if not load_dotenv(find_dotenv()):
print("Could not load `.env` file or it is empty. Please check that it exists \
and is readable by the current user")
# for caching LLM calls
set_llm_cache(True)
OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
CHATBOT_NAME = os.environ.get("CHATBOT_NAME")
class query(BaseModel):
query: str = "Hello there"
model = ChatOpenAI(
model="gpt-3.5-turbo-1106",
# model="gpt-4-0125-preview",
temperature=0.7,
streaming=True,
callback_manager=AsyncCallbackManager(
[StreamingStdOutCallbackHandler()]
),
verbose=True,
).bind(
functions=consumable_functions()
)
base_chain = create_agent_prompt() | model | OpenAIFunctionsAgentOutputParser()
agent_scratchpad_runnable = RunnablePassthrough.assign(
agent_scratchpad = lambda x: format_to_openai_functions(x["intermediate_steps"])
)
agent_chain = agent_scratchpad_runnable | base_chain
# Check: https://python.langchain.com/docs/modules/agents/quick_start#adding-in-memory for docs
message_history = ChatMessageHistory()
agent_executor = AgentExecutor(
agent=agent_chain,
tools=consumable_functions(return_tool=True),
verbose=True,
handle_parsing_errors=True,
)
final_agent = RunnableWithMessageHistory(
agent_executor,
get_session_history=lambda session_id: message_history,
input_messages_key="input",
history_messages_key="chat_history",
output_messages_key="output",
)
async def run_final_agent(
query_: str,#query,
phone_num: int,
customer_name: str,
session_id: str,
):
start_time = time()
response = await final_agent.ainvoke(
input={
"input": query_,#.query,
"customer_name": customer_name,
"CHATBOT_NAME": CHATBOT_NAME,
},
config={
"configurable": {
"session_id": "session_id"
}
},
)
print(response)
total_time = round(time()-start_time, 2)
return {
"status": 200,
"response": response["output"],
"time_taken": f"{total_time}s",
}
from langchain.schema import AIMessage, HumanMessage
async def predict(message, history): # sourcery skip: merge-list-appends-into-extend
history_langchain_format = []
for human, ai in history:
history_langchain_format.append(HumanMessage(content=human))
history_langchain_format.append(AIMessage(content=ai))
history_langchain_format.append(HumanMessage(content=message))
gpt_response = await run_final_agent(
query_=message,
customer_name="Raheem",
phone_num=816394,
session_id="NotImplemented",
)
return gpt_response['response']
if __name__ == "__main__":
gr.ChatInterface(predict).launch(debug=True, share=True)