Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import random | |
| import time | |
| import os | |
| import gradio as gr | |
| import numpy as np | |
| from langchain.chains import LLMChain | |
| from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder | |
| import re | |
| import requests | |
| from langchain.chat_models import ChatOpenAI | |
| from langchain.agents import AgentType, Tool, initialize_agent | |
| from langchain.tools.render import format_tool_to_openai_function | |
| from langchain.agents.format_scratchpad import format_to_openai_function_messages | |
| from langchain.agents.output_parsers import OpenAIFunctionsAgentOutputParser | |
| from langchain.agents import AgentExecutor | |
| from langchain.schema import ( | |
| SystemMessage, | |
| HumanMessage, | |
| AIMessage | |
| ) | |
| llm = ChatOpenAI( | |
| temperature=0, | |
| model='gpt-3.5-turbo-16k' | |
| ) | |
| def extract_temperature(city): | |
| headers = { | |
| 'Content-Type': 'application/json', | |
| } | |
| response = requests.post('http://api.weatherapi.com/v1/current.json',headers = headers, params = {'q': city, 'key': os.environ['WEATHER_API_KEY'] }) | |
| data = response.json() | |
| return str(data["current"]['temp_c']) + " °C" | |
| personalities = ["You are a weather fact checker. You will check if the user prompts about the temperature in a certain city. You need to use the functions provided to you when needed.",] | |
| def user(user_message, history): | |
| return "", history + [[user_message, None]] | |
| def remove_numbers(question): | |
| return question.translate(str.maketrans('', '', '0123456789')) | |
| # llm = ClaudeLLM() | |
| def add_text(history, text): | |
| print(history) | |
| history = history + [(text, None)] | |
| return history, "" | |
| def qa_retrieve(chatlog, index): | |
| msgs = [[('assistant',chat[1]), ('user', chat[0])] for chat in chatlog[:-1]] | |
| flat_msgs = [y for x in msgs for y in x] | |
| flat_msgs = list([("system", personalities[0])] + flat_msgs + [("user", "{input}")] + [MessagesPlaceholder(variable_name="agent_scratchpad")]) | |
| print(flat_msgs) | |
| print(type(flat_msgs)) | |
| msgs = flat_msgs | |
| prompt = ChatPromptTemplate.from_messages( | |
| msgs | |
| ) | |
| tools = [ | |
| Tool( | |
| name="Search", | |
| func= extract_temperature, | |
| description="useful for when you want to retrieve temperature degrees in a certain city or country. Input should be in the form of a string containing the city or country provided.", | |
| ),] | |
| llm_with_tools = llm.bind(functions=[format_tool_to_openai_function(t) for t in tools]) | |
| agent = ( | |
| { | |
| "input": lambda x: x["input"], | |
| "agent_scratchpad": lambda x: format_to_openai_function_messages( | |
| x["intermediate_steps"] | |
| ), | |
| } | |
| | prompt | |
| | llm_with_tools | |
| | OpenAIFunctionsAgentOutputParser() | |
| ) | |
| print(f"Chatlog qa: {chatlog}") | |
| query = chatlog[-1][0] | |
| agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) | |
| gen = agent_executor.invoke( | |
| { | |
| "input": query | |
| }) | |
| # prompt = PromptTemplate( | |
| # input_variables=["query"], | |
| # template=""" | |
| # {personality} | |
| # {query} | |
| # """, | |
| # ) | |
| # llm = BardLLM() | |
| # chain = LLMChain(llm=llm, prompt = prompt, ) | |
| # response = chain.run(query=query, personality = personalities[0]) | |
| chatlog[-1][1] = gen['output'] | |
| return chatlog | |
| def flush(): | |
| global db | |
| db = "" | |
| return None | |
| with gr.Blocks(css = """#white-button { | |
| background-color: #FFFFFF; | |
| color: #000000; | |
| } | |
| #orange-button-1 { | |
| background-color: #FFDAB9; | |
| color: #000000; | |
| } | |
| #orange-button-2 { | |
| background-color: #FFA07A; | |
| color: #FFFFFF; | |
| } | |
| #orange-button-3 { | |
| background-color: #FF4500; | |
| color: #FFFFFF; | |
| }""", theme=gr.themes.Soft()) as demo: | |
| chatbot = gr.Chatbot().style(height=750) | |
| with gr.Row(): | |
| with gr.Column(scale = 0.75, min_width=0): | |
| msg = gr.Textbox(placeholder = "Enter text and press enter",show_label=False).style(container = False) | |
| with gr.Column(scale = 0.25, min_width=0): | |
| clear = gr.Button("Clear") | |
| index = gr.Textbox(value = "0", visible = False) | |
| msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then( | |
| qa_retrieve, [chatbot, index], chatbot | |
| ) | |
| # marcus.click(lambda x: x, marcus, msg) | |
| # travel_guide.click(lambda x: x, travel_guide, msg) | |
| # astrologer.click(lambda x: x, astrologer, msg) | |
| clear.click(lambda: None, None, chatbot, queue=False) | |
| demo.launch() |