Spaces:
Running
Running
from langchain import hub | |
from langchain.agents import AgentExecutor, create_openai_tools_agent, load_tools | |
from langchain_openai import ChatOpenAI | |
from gradio import ChatMessage | |
import gradio as gr | |
import os | |
if not (os.getenv("SERPAPI_API_KEY") and os.getenv("OPENAI_API_KEY")): | |
with gr.Blocks() as demo: | |
gr.Markdown(""" | |
# Chat with a LangChain Agent π¦βοΈ and see its thoughts π | |
In order to run this space, duplicate it and add the following space secrets: | |
* SERPAPI_API_KEY - create an account at serpapi.com and get an API key | |
* OPENAI_API_KEY - create an openai account and get an API key | |
""") | |
demo.launch() | |
model = ChatOpenAI(temperature=0, streaming=True) | |
tools = load_tools(["serpapi"]) | |
# Get the prompt to use - you can modify this! | |
prompt = hub.pull("hwchase17/openai-tools-agent") | |
# print(prompt.messages) -- to see the prompt | |
agent = create_openai_tools_agent( | |
model.with_config({"tags": ["agent_llm"]}), tools, prompt | |
) | |
agent_executor = AgentExecutor(agent=agent, tools=tools).with_config( | |
{"run_name": "Agent"} | |
) | |
async def interact_with_langchain_agent(prompt, messages): | |
messages.append(ChatMessage(role="user", content=prompt)) | |
yield messages | |
async for chunk in agent_executor.astream( | |
{"input": prompt} | |
): | |
if "steps" in chunk: | |
for step in chunk["steps"]: | |
messages.append(ChatMessage(role="assistant", content=step.action.log, | |
metadata={"title": f"π οΈ Used tool {step.action.tool}"})) | |
yield messages | |
if "output" in chunk: | |
messages.append(ChatMessage(role="assistant", content=chunk["output"])) | |
yield messages | |
with gr.Blocks() as demo: | |
gr.Markdown("# Chat with a LangChain Agent π¦βοΈ and see its thoughts π") | |
chatbot_2 = gr.Chatbot( | |
msg_format="messages", | |
label="Agent", | |
avatar_images=( | |
None, | |
"https://em-content.zobj.net/source/twitter/141/parrot_1f99c.png", | |
), | |
) | |
input_2 = gr.Textbox(lines=1, label="Chat Message") | |
input_2.submit(interact_with_langchain_agent, [input_2, chatbot_2], [chatbot_2]) | |
demo.launch() |