Spaces:
Runtime error
Runtime error
import os | |
from typing import Optional, Tuple | |
import gradio as gr | |
import pickle | |
from query_data import get_chain | |
from threading import Lock | |
with open("econgeoghistvectorstore.pkl", "rb") as f: | |
vectorstore = pickle.load(f) | |
def set_openai_api_key(api_key: str): | |
"""Set the api key and return chain. | |
If no api_key, then None is returned. | |
""" | |
if api_key: | |
os.environ["OPENAI_API_KEY"] = api_key | |
chain = get_chain(vectorstore) | |
os.environ["OPENAI_API_KEY"] = "" | |
return chain | |
class ChatWrapper: | |
def __init__(self): | |
self.lock = Lock() | |
def __call__( | |
self, api_key: str, inp: str, history: Optional[Tuple[str, str]], chain | |
): | |
"""Execute the chat functionality.""" | |
self.lock.acquire() | |
try: | |
history = history or [] | |
# If chain is None, that is because no API key was provided. | |
if chain is None: | |
history.append((inp, "Please paste your OpenAI key to use")) | |
return history, history | |
# Set OpenAI key | |
import openai | |
openai.api_key = api_key | |
# Run chain and append input. | |
output = chain({"question": inp, "chat_history": history})["answer"] | |
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>Chat-Your-H2 Humanities (History, Economics, Geography)</center></h3>") | |
openai_api_key_textbox = gr.Textbox( | |
placeholder="Paste your OpenAI 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="Ask questions about anything covered in the H2 Humanities (History, Economics, Geography) syllabus", | |
lines=1, | |
) | |
submit = gr.Button(value="Send", variant="secondary").style(full_width=False) | |
gr.Examples( | |
examples=[ | |
"Explain the differences between physical and chemical weathering in the humid tropics.", | |
"Use the real wealth effect to explain the negative gradient of the AD curve.", | |
"Explain the multiplier process.", | |
"To what extent were the problems of the crisis decades caused by the actions of the US?" | |
], | |
inputs=message, | |
) | |
gr.HTML("Demo application of a LangChain chain, built on H2 Economics, H2 History and H2 Geography Data. Many thanks to Jean Chua for giving her notes for Econs, and Yu Tang for his input on Geog. Responses may be cut off due to token limit, a fix should happen soon!") | |
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=[openai_api_key_textbox, message, state, agent_state], outputs=[chatbot, state]) | |
message.submit(chat, inputs=[openai_api_key_textbox, message, state, agent_state], outputs=[chatbot, state]) | |
openai_api_key_textbox.change( | |
set_openai_api_key, | |
inputs=[openai_api_key_textbox], | |
outputs=[agent_state], | |
) | |
block.launch(debug=True) |