Spaces:
Sleeping
Sleeping
File size: 5,421 Bytes
d52e0c0 5abdeec d52e0c0 5abdeec d52e0c0 fae1288 5b23571 d52e0c0 ba47893 d52e0c0 fae1288 881b8c8 8c6dc60 64192f5 a090084 fa4af89 d52e0c0 18479af 152fc09 f4ef07a 18f4583 f4ef07a 18f4583 67e39fb a090084 8c6dc60 d52e0c0 d4e6d5d fa774e0 2913c05 d52e0c0 |
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 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
from openai import AsyncAssistantEventHandler
from openai import AsyncOpenAI
import gradio as gr
import asyncio
import os
# set the keys
client = AsyncOpenAI(
api_key=os.getenv("OPENAI_API_KEY")
)
assistantID = os.getenv("OPENAI_ASSISTANT_ID")
mypassword = os.getenv("RTL_PASSWORD")
class EventHandler(AsyncAssistantEventHandler):
def __init__(self) -> None:
super().__init__()
self.response_text = ""
async def on_text_created(self, text) -> None:
self.response_text += str(text)
async def on_text_delta(self, delta, snapshot):
self.response_text += str(delta.value)
async def on_text_done(self, text):
pass
async def on_tool_call_created(self, tool_call):
self.response_text += f"\n[Tool Call]: {str(tool_call.type)}\n"
async def on_tool_call_delta(self, delta, snapshot):
if snapshot.id != getattr(self, "current_tool_call", None):
self.current_tool_call = snapshot.id
self.response_text += f"\n[Tool Call Delta]: {str(delta.type)}\n"
if delta.type == 'code_interpreter':
if delta.code_interpreter.input:
self.response_text += str(delta.code_interpreter.input)
if delta.code_interpreter.outputs:
self.response_text += "\n\n[Output]:\n"
for output in delta.code_interpreter.outputs:
if output.type == "logs":
self.response_text += f"\n{str(output.logs)}"
async def on_tool_call_done(self, text):
pass
# Initialize session variables
session_data = {"assistant_id": assistantID, "thread_id": None}
async def initialize_thread():
# Create a Thread
thread = await client.beta.threads.create()
# Store thread ID in session_data for later use
session_data["thread_id"] = thread.id
async def generate_response(user_input):
assistant_id = session_data["assistant_id"]
thread_id = session_data["thread_id"]
# Add a Message to the Thread
oai_message = await client.beta.threads.messages.create(
thread_id=thread_id,
role="user",
content=user_input
)
# Create and Stream a Run
event_handler = EventHandler()
async with client.beta.threads.runs.stream(
thread_id=thread_id,
assistant_id=assistant_id,
instructions="Please assist the user with their query.",
event_handler=event_handler,
) as stream:
# Yield incremental updates
async for _ in stream:
await asyncio.sleep(0.1) # Small delay to mimic streaming
yield event_handler.response_text
# Gradio interface function (generator)
async def gradio_chat_interface(mode, password, user_input, example):
if mode == "Beispiller":
filename = example[-6:-2] + ".md"
file = open("examples/" + filename, "r")
output = file.read()
yield output
else:
# check the password
if password == "":
yield "Veuillez entrer le mot de passe pour faire des recherches !"
elif password != mypassword:
yield "Veuillez entre le mot de passe correct pour faire des recherches !"
else:
# Create a new event loop if none exists (or if we are in a new thread)
try:
loop = asyncio.get_running_loop()
except RuntimeError:
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
# Initialize the thread if not already done
if session_data["thread_id"] is None:
await initialize_thread()
# Generate and yield responses
async for response in generate_response(user_input):
yield response
def myFunction(mode, password, prompt, exemples):
# do nothing
return "Hello"
with gr.Blocks() as demo:
with gr.Row():
myTitle = gr.HTML("<h2 align=center>RTL AI News Reader : Wat war lass am Land 🇱🇺 an op der Welt 🌎 ?</h2>")
with gr.Row():
myDescription = gr.HTML("""
<h3 align='center'>Wat fir een Thema interesséiert Iech ?</h3>
<p align='center'>🐶 🏃🏻♂️ 🌗 🍇 🌈 🍽️ 🏆 🚘 ✈️ 🩺 </p>
<p align='center' bgcolor="Moccasin">Stellt är Froen op Lëtzebuergesch, oder an enger anerer Sprooch !</p>
"""
)
with gr.Row():
mode = gr.Radio(choices=["Sichen", "Beispiller"], label = "D'Beispiller fonktionnéieren ouni Passwuert.", value = "Beispiller")
pw = gr.Textbox(lines=1, label="Gitt dat richtegt RTL-Passwuert an !")
with gr.Row():
question = gr.Textbox(lines=3, label="Wat wëllt Der wëssen ?")
with gr.Row():
examples = gr.Radio(["Wat war lass am Juni 2023 ?", "Wat ass gewosst iwwert de SREL ?", "Wat fir eng Katastroph war 2022 zu Lëtzebuerg ?", "Koumen an de leschte Jore gréisser Kriminalfäll viru Geriicht ?"], label="Beispiller")
with gr.Row():
clear = gr.Button("Clear")
submit = gr.Button("Submit")
with gr.Row():
mySubtitle = gr.HTML("<p align='center' bgcolor='Khaki'>Äntwert vum OpenAI File-Search Assistent : </p>")
with gr.Row():
myOutput = gr.Textbox(lines=12)
submit.click(fn = gradio_chat_interface, inputs=[mode, pw, question, examples], outputs = myOutput)
demo.launch() |