import gradio as gr import os from datetime import date from langchain.agents import AgentType, initialize_agent, load_tools, tool from langchain.chat_models import ChatOpenAI from openai import OpenAI from dotenv import load_dotenv, find_dotenv _ = load_dotenv(find_dotenv()) OPENWEATHERMAP_API_KEY = os.environ["OPENWEATHERMAP_API_KEY"] config = { "model_name": "gpt-4-0613", "temperature": 0, } AGENT_OFF = False AGENT_ON = True @tool def time(text: str) -> str: """Returns today's date. Use this for any questions related to knowing today's date. The input should always be an empty string, and this function will always return today's date. Any date mathematics should occur outside this function.""" return str(date.today()) def invoke(openai_api_key, prompt, agent_option): if (openai_api_key == ""): raise gr.Error("OpenAI API Key is required.") if (prompt == ""): raise gr.Error("Prompt is required.") if (agent_option is None): raise gr.Error("Use Agent is required.") output = "" try: if (agent_option == AGENT_OFF): client = OpenAI(api_key = openai_api_key) completion = client.chat.completions.create( messages = [{"role": "user", "content": prompt}], model = config["model_name"], temperature = config["temperature"],) output = completion.choices[0].message.content else: llm = ChatOpenAI( model_name = config["model_name"], openai_api_key = openai_api_key, temperature = config["temperature"]) tools = load_tools(["openweathermap-api"]) agent = initialize_agent( tools + # built-in tools [time], # custom tools llm, agent = AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, handle_parsing_errors = True, verbose = True) completion = agent(prompt) output = completion["output"] except Exception as e: err_msg = e raise gr.Error(e) return output gr.close_all() demo = gr.Interface(fn = invoke, inputs = [gr.Textbox(label = "OpenAI API Key", type = "password", lines = 1), gr.Textbox(label = "Prompt", lines = 1, value = "What is the weather in Irvine, California, in imperial system? Suggest activities for an active person."), gr.Radio([AGENT_OFF, AGENT_ON], label = "Use Agent", value = AGENT_ON)], outputs = [gr.Textbox(label = "Completion", lines = 1)], title = "Real-Time Reasoning Application", description = os.environ["DESCRIPTION"]) demo.launch()