| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 | import timeimport loggingimport requestsimport jsonfrom app.exceptions.exception import BadRequestErrorfrom examples.prerun import clientfrom examples.prerun import base_urlfrom 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)
 |