12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import time
- import logging
- from app.schemas.runs import ToolOutput
- from examples.prerun import client
- if __name__ == "__main__":
- assistant = client.beta.assistants.create(
- name="Assistant Demo",
- instructions="you are a personal math assistant, can use calculator tool to solve math problems",
- model="gpt-3.5-turbo-1106",
- tools=[
- {
- "type": "function",
- "function": {
- "name": "calculator",
- "description": "can solve math problems, use this tool when you need to calculate.",
- "parameters": {
- "type": "object",
- "properties": {
- "input": {
- "type": "string",
- "description": "the arithmetic expression to be calculated.",
- }
- },
- "required": ["input"],
- },
- },
- },
- ]
- )
- logging.info("=====> : %s\n", assistant)
- thread = client.beta.threads.create()
- logging.info("=====> : %s\n", thread)
- message = client.beta.threads.messages.create(
- thread_id=thread.id,
- role="user",
- content="what is 1+1?",
- )
- logging.info("=====> : %s\n", message)
- run = client.beta.threads.runs.create(
- thread_id=thread.id,
- assistant_id=assistant.id,
- instructions="",
- )
- logging.info("=====> : %s\n", run)
- logging.info("checking assistant status. \n")
- while True:
- run = client.beta.threads.runs.retrieve(thread_id=thread.id, run_id=run.id)
- run_steps = client.beta.threads.runs.steps.list(run_id=run.id, thread_id=thread.id).data
- for run_step in run_steps:
- logging.info("=====> : %s\n", run_step)
- tool_calls = run_step.step_details.type == "tool_calls" and run_step.step_details.tool_calls
- if run.status == "requires_action" and run_step.status == "in_progress" and tool_calls:
- for tool_call in tool_calls:
- try:
- client.beta.threads.runs.submit_tool_outputs(
- run_id=run.id,
- thread_id=thread.id,
- # we submit a fake output here, you can replace it with the real output
- tool_outputs=[ToolOutput(output="2", tool_call_id=tool_call.id)],
- )
- except Exception:
- pass
- if run.status == "completed":
- messages = client.beta.threads.messages.list(thread_id=thread.id)
- logging.info("=====> messages:")
- for message in messages:
- assert message.content[0].type == "text"
- logging.info("%s", {"role": message.role, "message": message.content[0].text.value})
- # delete asst
- client.beta.assistants.delete(assistant.id)
- break
- elif run.status == "failed":
- logging.error("run failed %s\n", run.last_error)
- break
- else:
- logging.info("in progress...\n")
- time.sleep(5)
|