Spaces:
Running
Running
File size: 3,409 Bytes
71e5459 3df06f1 71e5459 35a1c5d 71e5459 3df06f1 71e5459 3df06f1 71e5459 3df06f1 71e5459 3df06f1 71e5459 3df06f1 71e5459 d35962e ce46abb d35962e ce46abb d35962e 71e5459 d35962e 71e5459 3df06f1 71e5459 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
import os
from typing import Optional, Tuple
import gradio as gr
from langchain.agents import create_pandas_dataframe_agent
from langchain.llms import Anthropic
import pandas as pd
from threading import Lock
def load_data():
"""Load the data you want to use for the agent."""
return pd.read_parquet("data/part.17.parquet")
def load_agent(trans: pd.DataFrame) -> create_pandas_dataframe_agent:
"""Logic for loading the agent we want to use."""
llm = Anthropic(temperature=0)
trans = load_data()
return create_pandas_dataframe_agent(llm,
trans,
verbose=True)
def set_anthropic_api_key(api_key: str):
"""Set the api key and return agent.
If no api_key, then None is returned.
"""
if api_key:
os.environ["ANTHROPIC_API_KEY"] = api_key
agent = load_agent()
os.environ["ANTHROPIC_API_KEY"] = ""
return agent
class ChatWrapper:
def __init__(self):
self.lock = Lock()
def __call__(
self, api_key: str, inp: str, history: Optional[Tuple[str, str]], agent: Optional[create_pandas_dataframe_agent]
):
"""Execute the chat functionality."""
self.lock.acquire()
try:
history = history or []
# If chain is None, that is because no API key was provided.
if agent is None:
history.append((inp, "Please paste your anthropic key to use"))
return history, history
# Set OpenAI key
agent = set_anthropic_api_key(history)
# Run chain and append input.
output = agent.run(input=inp)
history.append((inp, output))
except Exception as e:
raise e
finally:
self.lock.release()
return history, history
chat = ChatWrapper()
block = gr.Blocks(css=".gradio-container {background-color: lightgray}")
with block:
with gr.Row():
gr.Markdown("<h3><center>LangChain Demo</center></h3>")
anthropic_api_key_textbox = gr.Textbox(
placeholder="Paste your Anthropic API key (sk-...)",
show_label=False,
lines=1,
type="password",
)
chatbot = gr.Chatbot()
with gr.Row():
message = gr.Textbox(
label="What's your question?",
placeholder="What was the average gas price on 2019-01-22?",
lines=1,
)
submit = gr.Button(value="Send", variant="secondary").style(full_width=False)
gr.Examples(
examples=[
"Which to_address spent the most gas?",
"What was the average gas price on 2019-01-22?",
"How many unique addresses were sending transactions on 2019-01-22?",
],
inputs=message,
)
gr.HTML("Demo application of a LangChain agent.")
gr.HTML(
"<center>Powered by <a href='https://github.com/hwchase17/langchain'>LangChain 🦜️🔗</a></center>"
)
state = gr.State()
agent_state = gr.State()
submit.click(chat, inputs=[message, state, agent_state], outputs=[chatbot, state])
message.submit(chat, inputs=[message, state, agent_state], outputs=[chatbot, state])
anthropic_api_key_textbox.change(
set_anthropic_api_key,
inputs=[anthropic_api_key_textbox],
outputs=[agent_state],
)
block.launch(debug=True)
|