Spaces:
Sleeping
Sleeping
File size: 3,833 Bytes
c407aa4 30dadf4 c407aa4 90693de c407aa4 b816bdf c407aa4 b816bdf c407aa4 b816bdf c407aa4 b816bdf c407aa4 b816bdf c407aa4 b816bdf c407aa4 b816bdf c407aa4 b816bdf c407aa4 3879995 c407aa4 |
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 |
from os import getenv as os_getenv, path as os_path
from time import sleep
from json import loads as json_loads
import gradio as gr
import openai
client = openai.OpenAI()
assistant_id = "asst_NHnYFIdpvioacAJqWYMchJHI"
vector_id = "vs_sqT4VRRTwkH7JPr3AT8CpoXV"
def chat(user_message, history, state):
if (state is None) or (not state['user']):
gr.Warning("You need to authenticate first")
yield
else:
thread = state['thread']
if thread is None:
thread = client.beta.threads.create(
tool_resources={
"file_search": {
"vector_store_ids": [vector_id]
}
}
)
state['thread'] = thread
client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content=user_message,
)
with client.beta.threads.runs.stream(
thread_id=thread.id,
assistant_id=assistant_id,
) as stream:
total = ''
for delta in stream.text_deltas:
total += delta
yield total
def chat_nostream(user_message, history, state):
if (state is None) or (not state['user']):
gr.Warning("You need to authenticate first")
yield
else:
thread = state['thread']
if thread is None:
thread = client.beta.threads.create(
tool_resources={
"file_search": {
"vector_store_ids": [vector_id]
}
}
)
state['thread'] = thread
# Add the user's message to the thread
client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content=user_message,
)
# Run the Assistant
run = client.beta.threads.runs.create(thread_id=thread.id,
assistant_id=assistant_id)
while True:
run_status = client.beta.threads.runs.retrieve(thread_id=thread.id,
run_id=run.id)
print(f"Run status: {run_status.status}")
if run_status.status == 'completed':
break
sleep(5)
messages = client.beta.threads.messages.list(thread_id=thread.id)
response = messages.data[0].content[0].text.value
yield response
def new_state():
return gr.State({
"user": None,
"thread": None,
})
def auth(token, state):
tokens=os_getenv("APP_TOKENS", None)
if tokens is None:
state["user"] = "anonymous"
else:
tokens=json_loads(tokens)
state["user"] = tokens.get(token, None)
return "", state
AUTH_JS = """function auth_js(token, state) {
if (!!document.location.hash) {
token = document.location.hash
document.location.hash=""
}
return [token, state]
}
"""
with gr.Blocks(title="Dr. Luis Chiozza - Medicina y Psicoanalisis", fill_height=True) as demo:
state = new_state()
gr.ChatInterface(
chat,
title="Dr. Luis Chiozza - Medicina y Psicoanalisis",
description="Habla con la colección de Medicina y Psicoanalisis del Dr. Luis Chiozza",
additional_inputs=[state],
examples=[
["Qué diferencias hay entre el cuerpo y el Alma?"],
["Cuáles son las distintas funciones de los órganos del cuerpo y su relación con el alma?"],
],
)
token = gr.Textbox(visible=False)
demo.load(auth,
[token,state],
[token,state],
js=AUTH_JS)
demo.launch(
height=700,
allowed_paths=["."])
# auth_dependency=authenticate) #auth=authenticate)
|