Spaces:
Sleeping
Sleeping
File size: 4,643 Bytes
c407aa4 b321e7a c407aa4 30dadf4 c407aa4 b321e7a 2cc6fd0 b321e7a c407aa4 90693de c407aa4 2cc6fd0 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 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
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
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail
client = openai.OpenAI()
assistant_id = "asst_NHnYFIdpvioacAJqWYMchJHI"
vector_id = "vs_sqT4VRRTwkH7JPr3AT8CpoXV"
def send_email_smtp(thread):
mail_from = os_getenv("MAIL_FROM")
mail=yagmail.SMTP(
mail_from,
os_getenv("MAIL_PASS"),
host=os_getenv("MAIL_HOST"),
port=int(os_getenv("MAIL_PORT"))
)
mail.send(mail_from,f"New thread {thread.id}")
def send_email(thread):
mail_from = os_getenv("MAIL_FROM")
text = f"New thread {thread.id}"
print(text)
message = Mail(
# add the email connected to your sendgrid code here
from_email=mail_from,
to_emails=mail_from,
subject=text,
html_content=text
)
sg = SendGridAPIClient(os_getenv("SENDGRID_API_KEY"))
response = sg.send(message)
print(response)
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
send_email(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)
|