Spaces:
Running
Running
| import gradio as gr | |
| import json, openai, os, time | |
| from openai import OpenAI | |
| _client, _assistant, _thread = None, None, None | |
| def show_json(str, obj): | |
| print(f"=> {str}\n{json.loads(obj.model_dump_json())}") | |
| def init_client(): | |
| global _client, _assistant, _thread | |
| _client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY")) | |
| _assistant = _client.beta.assistants.create( | |
| name="Math Tutor", | |
| instructions="You are a personal math tutor. Answer questions briefly, in a sentence or less.", | |
| model="gpt-4-1106-preview", | |
| ) | |
| #show_json("assistant", _assistant) | |
| _thread = _client.beta.threads.create() | |
| #show_json("thread", _thread) | |
| def wait_on_run(run): | |
| global _client, _thread | |
| while run.status == "queued" or run.status == "in_progress": | |
| run = _client.beta.threads.runs.retrieve( | |
| thread_id=_thread.id, | |
| run_id=run.id, | |
| ) | |
| time.sleep(0.25) | |
| return run | |
| def extract_content_values(data): | |
| content_values = [] | |
| for item in data.data: | |
| for content in item.content: | |
| if content.type == 'text': | |
| content_values.append(content.text.value) | |
| return content_values | |
| def chat(message, msg2, history): | |
| global _client, _assistant, _thread | |
| if _client == None: | |
| init_client() | |
| message = _client.beta.threads.messages.create( | |
| role="user", | |
| thread_id=_thread.id, | |
| content=message, | |
| ) | |
| #show_json("message", message) | |
| run = _client.beta.threads.runs.create( | |
| assistant_id=_assistant.id, | |
| thread_id=_thread.id, | |
| ) | |
| #show_json("run", run) | |
| run = wait_on_run(run) | |
| show_json("run", run) | |
| messages = _client.beta.threads.messages.list( | |
| thread_id=_thread.id | |
| ) | |
| show_json("messages", messages) | |
| return extract_content_values(messages)[0] | |
| def vote(data: gr.LikeData): | |
| print(data.value) | |
| print(data.value["value"]) | |
| #if data.liked: | |
| # print("You upvoted this response: " + data.value["value"]) | |
| #else: | |
| # print("You downvoted this response: " + data.value["value"]) | |
| """ | |
| gr.ChatInterface( | |
| chat, | |
| chatbot=gr.Chatbot(height=300), | |
| textbox=gr.Textbox(placeholder="Question", container=False, scale=7), | |
| title="Math Tutor", | |
| description="Ask Math Tutor any question", | |
| theme="soft", | |
| examples=["I need to solve the equation '3x + 13 = 11'. Can you help me?"], | |
| cache_examples=True, | |
| retry_btn=None, | |
| undo_btn=None, | |
| clear_btn="Clear", | |
| #multimodal=True, | |
| #additional_inputs=[ | |
| # gr.Textbox("sk-", label="OpenAI API Key", type = "password"), | |
| #], | |
| ).launch() | |
| """ | |
| with gr.Blocks() as demo: | |
| chatbot = gr.Chatbot(placeholder="<strong>Math Tutor</strong><br>Ask Me Anything") | |
| chatbot.like(vote, None, None) | |
| gr.ChatInterface(fn=chat, chatbot=chatbot) | |
| demo.launch() |