|
import os |
|
from typing import Optional, Tuple |
|
from threading import Lock |
|
|
|
import gradio as gr |
|
|
|
from query_model import get_model |
|
import openai |
|
|
|
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_model() |
|
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: |
|
history.append((inp, "Please paste your encrypted key to use")) |
|
return history, history |
|
|
|
import openai |
|
openai.api_key = api_key |
|
|
|
output = chain({"question": inp})["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 {font-weight: bold; \ |
|
background-image: url('https://png.pngtree.com/png-vector/20230728/ourmid/pngtree-aster-clipart-purple-chrysanthemum-drawing-cartoon-vector-png-image_6798181.png'); background-size: 20%; \ |
|
background-color: pink} footer {visibility: hidden} #ex {background-color:white; padding: 5px;}") |
|
|
|
with block: |
|
with gr.Row(): |
|
gr.Markdown("<h1 style='font-family: noto-san; font-size: 60px;'><center>Utsumi Bunzō </center></h1>") |
|
|
|
openai_api_key_textbox = gr.Textbox( |
|
placeholder="Paste your special key here", |
|
show_label=False, |
|
lines=1, |
|
type="password", |
|
) |
|
|
|
gr.HTML("<br> <br>") |
|
chatbot = gr.Chatbot(label="Bunzō") |
|
|
|
with gr.Row(): |
|
message = gr.Textbox( |
|
label="Talk to Bunzō", |
|
placeholder="Ask questions", |
|
lines=1, |
|
) |
|
submit = gr.Button(value="Send", variant="secondary") |
|
|
|
gr.Examples( |
|
examples=[ |
|
"Who are you?", |
|
"How do you feel?", |
|
"What are some important things to you?", |
|
], |
|
inputs=message, |
|
elem_id= "ex" |
|
) |
|
|
|
|
|
gr.HTML("<br> <br> <br> <br> <br> <br> <br> <br>\ |
|
<center><strong> Copyright @ Sammy Kao 2023</strong></center>") |
|
|
|
state = gr.State() |
|
agent_state = gr.State() |
|
|
|
|
|
submit.click(chat, inputs=[openai_api_key_textbox, message, state, agent_state], outputs=[chatbot, state]) |
|
submit.click(lambda x: gr.update(value=""), None, [message], queue=False) |
|
message.submit(chat, inputs=[openai_api_key_textbox, message, state, agent_state], outputs=[chatbot, state]) |
|
message.submit(lambda x: gr.update(value=""), None, [message], queue=False) |
|
|
|
openai_api_key_textbox.change( |
|
set_openai_api_key, |
|
inputs=[openai_api_key_textbox], |
|
outputs=[agent_state], |
|
) |
|
|
|
|
|
block.launch(debug=True) |