I am interacting with the openai assistant API (python). so far, it works well. but sometimes the api returns the message i sent to the assistant instead of the assistants reply.
from openai import OpenAI
from os import environ
OPEN_API_KEY = environ.get('OPEN_API_KEY')
assistant_id = "xxxxxxx"
client = OpenAI(api_key=OPEN_API_KEY)
assistant = client.beta.assistants.retrieve(assistant_id)
def ask_assistant(message_text):
print(f'received message: {message_text}')
thread = client.beta.threads.create()
message = client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content=message_text
)
run = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant_id
)
run_retrieve = client.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id
)
messages = client.beta.threads.messages.list(thread.id)
final_text = messages.data[0].content[0].text.value
try:
final_text = messages.data[0].content[0].text.value
print(final_text)
except Exception as e:
print(e)
final_text = ''
return final_text
if __name__ == "__main__":
ask_assistant('How are you?')
as a hot fix, i implemented a sleep function that waits for 3 seconds before retrieving the reply. this works, but i don't expect it to be the best solution (or reliable at all). any ideas how to wait until the assistant REALLY replied?
thank you very much.
This works:
from openai import OpenAI
from os import environ
OPEN_API_KEY = environ.get('xxxxx')
assistant_id = "xxxxx"
client = OpenAI(api_key=OPEN_API_KEY)
assistant = client.beta.assistants.retrieve(assistant_id)
def get_answer(run, thread):
while not run.status == "completed":
print("Waiting for answer...")
run = client.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id
)
messages = client.beta.threads.messages.list(thread.id)
answer = messages.data[0].content[0].text.value
try:
answer = messages.data[0].content[0].text.value
except Exception as e:
print(e)
answer = ''
return answer
def ask_assistant(message_text):
print(f'sending to assistant: {message_text}')
thread = client.beta.threads.create()
message = client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content=message_text
)
run = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant_id
)
answer = get_answer(run, thread)
print(f'assistant response: {answer}')
return answer
if __name__ == "__main__":
ask_assistant('Hello')
This should work:
run = openai.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id
)
print(run)
while run.status !="completed":
run = openai.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id
)
print(run.status)
messages = openai.beta.threads.messages.list(
thread_id=thread.id
)
print(messages.data[0].content[0].text.value)
Thanks to @joyasree78