123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- import time
- import logging
- import requests
- import json
- from app.exceptions.exception import BadRequestError
- from examples.prerun import client
- from examples.prerun import base_url
- from examples.prerun import api_key
- # To test the localhost, you can listen to a port using the shell command 'echo -e "HTTP/1.1 200 OK\r\n\r\n Success" | nc -l 9999'.
- # Make sure to change the URL to match your API server.
- auth_server_url = "http://localhost:9999/api/v1"
- def create_worksapce_action():
- """
- create action with actions api
- """
- openapi_schema = {
- "openapi_schema": {
- "openapi": "3.0.0",
- "info": {"title": "Create New Workspace", "version": "1.0.0"},
- "servers": [{"url": f"{auth_server_url}"}],
- "paths": {
- "/tx/v1/workspaces": {
- "post": {
- "summary": "Create a new workspace",
- "description": "This endpoint creates a new workspace with the provided data.",
- "operationId": "createWorkspace",
- "requestBody": {
- "required": True,
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "properties": {
- "name": {"type": "string", "description": "The name of the workspace"},
- "description": {
- "type": "string",
- "description": "The description of the workspace",
- },
- "ui_settings": {
- "type": "object",
- "properties": {
- "color": {
- "type": "string",
- "description": "The color of the workspace UI",
- },
- "icon": {
- "type": "string",
- "description": "The icon of the workspace UI",
- },
- },
- },
- "tenant_id": {"type": "string", "description": "The tenant ID"},
- },
- }
- }
- },
- },
- "responses": {
- "200": {
- "description": "Workspace created successfully",
- "content": {"application/json": {"schema": {"type": "object", "properties": {}}}},
- },
- "401": {"description": "Unauthorized - Authentication credentials are missing or invalid"},
- "403": {
- "description": "Forbidden - The authenticated user does not have permission to perform this action"
- },
- "500": {"description": "Internal Server Error - Something went wrong on the server side"},
- },
- }
- }
- },
- }
- }
- openapi_schema["authentication"] = {"type": "none"}
- actions_url = f"{base_url}/actions"
- headers = {
- 'Content-Type': 'application/json',
- 'Authorization': f'Bearer {api_key}'
- }
- response = requests.request("POST", actions_url, headers=headers, data=json.dumps(openapi_schema), timeout=1000)
- if response.status_code != 200:
- raise BadRequestError(f"Failed to create action: {response.text}")
- return response.json()
- if __name__ == "__main__":
- [create_workspace_with_authentication] = create_worksapce_action()
- logging.info("=====> action: %s\n", create_workspace_with_authentication)
- # create a assistant with action
- assistant = client.beta.assistants.create(
- name="Assistant Demo",
- instructions="you are a personal assistant",
- tools=[{"type": "action", "id": create_workspace_with_authentication["id"]}],
- model="gpt-3.5-turbo-1106",
- )
- 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="在组织 63db49f7dcc8bf7b0990903c 下, 创建一个随机名字的工作空间",
- )
- logging.info("=====> : %s\n", message)
- # create a run with auth info
- run = client.beta.threads.runs.create(
- thread_id=thread.id,
- assistant_id=assistant.id,
- instructions="",
- extra_body={
- "extra_body": {
- "action_authentications": {
- create_workspace_with_authentication["id"]: {
- # auth info, change as needed
- "type": "bearer",
- "secret": "xxx",
- }
- }
- }
- },
- )
- logging.info("=====> : %s\n", run)
- while True:
- run = client.beta.threads.runs.retrieve(thread_id=thread.id, run_id=run.id)
- 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})
- break
- elif run.status == "failed":
- logging.error("run failed %s\n", run.last_error)
- break
- else:
- logging.info("in progress...\n")
- time.sleep(5)
|