diff --git a/.github/workflows/bandit-security-check-python-agents-api.yml b/.github/workflows/bandit-security-check-python-agents-api.yml index f2981efbc..b6d4e828d 100644 --- a/.github/workflows/bandit-security-check-python-agents-api.yml +++ b/.github/workflows/bandit-security-check-python-agents-api.yml @@ -1,8 +1,13 @@ +name: Bandit security check python agents-api +run-name: ${{ github.actor }} is checking the security of the code + on: pull_request: - branches: - - main - - dev + paths: + - 'agents-api/**' + push: + paths: + - 'agents-api/**' jobs: bandit_check: diff --git a/.github/workflows/lint-and-format.yml b/.github/workflows/lint-agents-api-pr.yml similarity index 67% rename from .github/workflows/lint-and-format.yml rename to .github/workflows/lint-agents-api-pr.yml index ab74c7e9b..3721a8b59 100644 --- a/.github/workflows/lint-and-format.yml +++ b/.github/workflows/lint-agents-api-pr.yml @@ -1,10 +1,13 @@ -name: Lint and typecheck agents-api -run-name: ${{ github.actor }} is linting and typechecking the code +name: Lint agents-api +run-name: ${{ github.actor }} is linting the code -# TODO: Fix CI github actions -# SCRUM-26 - -on: [pull_request] +on: + pull_request: + paths: + - 'agents-api/**' + push: + paths: + - 'agents-api/**' jobs: Lint-And-Format: @@ -33,35 +36,17 @@ jobs: restore-keys: | ${{ runner.os }}-agents-api-poetry- - - name: Cache pytype - uses: actions/cache@v4 - with: - path: agents-api/.pytype - key: ${{ runner.os }}-agents-api-pytype- - restore-keys: | - ${{ runner.os }}-agents-api-pytype- - - name: Install dependencies run: | cd agents-api poetry install - - name: Typecheck - run: | - cd agents-api - poetry run poe typecheck - - name: Lint and format run: | cd agents-api poetry run poe format poetry run poe lint - - name: Run tests - run: | - cd agents-api - poetry run poe test - - uses: stefanzweifel/git-auto-commit-action@v4 with: commit_message: "refactor: Lint agents-api (CI)" diff --git a/.github/workflows/test-agents-api-pr.yml b/.github/workflows/test-agents-api-pr.yml new file mode 100644 index 000000000..95e676657 --- /dev/null +++ b/.github/workflows/test-agents-api-pr.yml @@ -0,0 +1,51 @@ +name: Test agents-api +run-name: ${{ github.actor }} is testing the code + +on: + pull_request: + paths: + - 'agents-api/**' + push: + paths: + - 'agents-api/**' + +jobs: + Test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install and configure Poetry + uses: snok/install-poetry@v1 + + - name: Configure Poetry to use .venv + run: | + cd agents-api + poetry config virtualenvs.in-project true + + - name: Cache Poetry virtualenv + uses: actions/cache@v4 + with: + path: agents-api/.venv + key: ${{ runner.os }}-agents-api-poetry-${{ hashFiles('agents-api/poetry.lock') }} + restore-keys: | + ${{ runner.os }}-agents-api-poetry- + + - name: Install dependencies + run: | + cd agents-api + poetry install + + - name: Run tests + run: | + cd agents-api + poetry run poe test --fail-limit 1 + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} diff --git a/.github/workflows/typecheck-agents-api-pr.yml b/.github/workflows/typecheck-agents-api-pr.yml new file mode 100644 index 000000000..9fbc5d95c --- /dev/null +++ b/.github/workflows/typecheck-agents-api-pr.yml @@ -0,0 +1,59 @@ +name: Typecheck agents-api +run-name: ${{ github.actor }} is typechecking the code + +on: + pull_request: + paths: + - 'agents-api/**' + push: + paths: + - 'agents-api/**' + +jobs: + Typecheck: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install and configure Poetry + uses: snok/install-poetry@v1 + + - name: Configure Poetry to use .venv + run: | + cd agents-api + poetry config virtualenvs.in-project true + + - name: Cache Poetry virtualenv + uses: actions/cache@v4 + with: + path: agents-api/.venv + key: ${{ runner.os }}-agents-api-poetry-${{ hashFiles('agents-api/poetry.lock') }} + restore-keys: | + ${{ runner.os }}-agents-api-poetry- + + - name: Cache pytype + uses: actions/cache@v4 + with: + path: agents-api/.pytype + key: ${{ runner.os }}-agents-api-pytype-${{ github.base_ref }} + restore-keys: | + ${{ runner.os }}-agents-api-pytype- + + - name: Install dependencies + run: | + cd agents-api + poetry install + + - name: Typecheck + run: | + cd agents-api + poetry run poe typecheck + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} diff --git a/agents-api/agents_api/activities/excecute_api_call.py b/agents-api/agents_api/activities/excecute_api_call.py new file mode 100644 index 000000000..88fabce89 --- /dev/null +++ b/agents-api/agents_api/activities/excecute_api_call.py @@ -0,0 +1,60 @@ +from typing import Annotated, Any, Optional, TypedDict, Union + +import httpx +from beartype import beartype +from pydantic import Field +from temporalio import activity + +from ..autogen.openapi_model import ApiCallDef + +# from ..clients import integrations +from ..common.protocol.tasks import StepContext +from ..env import testing + +# from ..models.tools import get_tool_args_from_metadata + + +class RequestArgs(TypedDict): + content: Optional[str] + data: Optional[dict[str, Any]] + json_: Optional[dict[str, Any]] + cookies: Optional[dict[str, str]] + params: Optional[Union[str, dict[str, Any]]] + + +@beartype +async def execute_api_call( + api_call: ApiCallDef, + request_args: RequestArgs, +) -> Any: + try: + async with httpx.AsyncClient() as client: + response = await client.request( + method=api_call.method, + url=str(api_call.url), + headers=api_call.headers, + follow_redirects=api_call.follow_redirects, + **request_args, + ) + + response_dict = { + "status_code": response.status_code, + "headers": dict(response.headers), + "content": response.content, + "json": response.json(), + } + + return response_dict + + except BaseException as e: + if activity.in_activity(): + activity.logger.error(f"Error in execute_api_call: {e}") + + raise + + +mock_execute_api_call = execute_api_call + +execute_api_call = activity.defn(name="execute_api_call")( + execute_api_call if not testing else mock_execute_api_call +) diff --git a/agents-api/agents_api/activities/execute_system.py b/agents-api/agents_api/activities/execute_system.py new file mode 100644 index 000000000..8e4d71274 --- /dev/null +++ b/agents-api/agents_api/activities/execute_system.py @@ -0,0 +1,163 @@ +from typing import Any +from uuid import UUID + +from beartype import beartype +from temporalio import activity + +from ..autogen.Tools import SystemDef +from ..common.protocol.tasks import StepContext +from ..env import testing +from ..models.agent.create_agent import create_agent as create_agent_query +from ..models.agent.delete_agent import delete_agent as delete_agent_query +from ..models.agent.get_agent import get_agent as get_agent_query +from ..models.agent.list_agents import list_agents as list_agents_query +from ..models.agent.update_agent import update_agent as update_agent_query +from ..models.docs.create_doc import create_doc as create_doc_query +from ..models.docs.delete_doc import delete_doc as delete_doc_query +from ..models.docs.get_doc import get_doc as get_doc_query +from ..models.docs.list_docs import list_docs as list_docs_query +from ..models.session.create_session import create_session as create_session_query +from ..models.session.delete_session import delete_session as delete_session_query +from ..models.session.get_session import get_session as get_session_query +from ..models.session.list_sessions import list_sessions as list_sessions_query +from ..models.session.update_session import update_session as update_session_query +from ..models.task.create_task import create_task as create_task_query +from ..models.task.delete_task import delete_task as delete_task_query +from ..models.task.get_task import get_task as get_task_query +from ..models.task.list_tasks import list_tasks as list_tasks_query +from ..models.task.update_task import update_task as update_task_query +from ..models.user.create_user import create_user as create_user_query +from ..models.user.delete_user import delete_user as delete_user_query +from ..models.user.get_user import get_user as get_user_query +from ..models.user.list_users import list_users as list_users_query +from ..models.user.update_user import update_user as update_user_query + + +@beartype +async def execute_system( + context: StepContext, + system: SystemDef, +) -> Any: + arguments = system.arguments + arguments["developer_id"] = context.execution_input.developer_id + + # Convert all UUIDs to UUID objects + if "agent_id" in arguments: + arguments["agent_id"] = UUID(arguments["agent_id"]) + if "user_id" in arguments: + arguments["user_id"] = UUID(arguments["user_id"]) + if "task_id" in arguments: + arguments["task_id"] = UUID(arguments["task_id"]) + if "session_id" in arguments: + arguments["session_id"] = UUID(arguments["session_id"]) + if "doc_id" in arguments: + arguments["doc_id"] = UUID(arguments["doc_id"]) + + # FIXME: This is a total mess. Should be refactored. + try: + # AGENTS + if system.resource == "agent": + # DOCS SUBRESOURCE + if system.subresource == "doc": + # Define the arguments for the agent doc queries + agent_doc_args = { + **{ + "owner_type": "agent", + "owner_id": arguments.pop("agent_id"), + }, + **arguments, + } + if system.operation == "list": + return list_docs_query(**agent_doc_args) + elif system.operation == "create": + return create_doc_query(**agent_doc_args) + elif system.operation == "delete": + return delete_doc_query(**agent_doc_args) + + # NO SUBRESOURCE + elif system.subresource == None: + if system.operation == "list": + return list_agents_query(**arguments) + elif system.operation == "get": + return get_agent_query(**arguments) + elif system.operation == "create": + return create_agent_query(**arguments) + elif system.operation == "update": + return update_agent_query(**arguments) + elif system.operation == "delete": + return delete_agent_query(**arguments) + + # USERS + elif system.resource == "user": + # DOCS SUBRESOURCE + if system.subresource == "doc": + # Define the arguments for the user doc queries + user_doc_args = { + **{ + "owner_type": "user", + "owner_id": arguments.pop("user_id"), + }, + **arguments, + } + if system.operation == "list": + return list_docs_query(**user_doc_args) + elif system.operation == "create": + return create_doc_query(**user_doc_args) + elif system.operation == "delete": + return delete_doc_query(**user_doc_args) + + # NO SUBRESOURCE + elif system.subresource == None: + if system.operation == "list": + return list_users_query(**arguments) + elif system.operation == "get": + return get_user_query(**arguments) + elif system.operation == "create": + return create_user_query(**arguments) + elif system.operation == "update": + return update_user_query(**arguments) + elif system.operation == "delete": + return delete_user_query(**arguments) + + # SESSIONS + elif system.resource == "session": + if system.operation == "list": + return list_sessions_query(**arguments) + elif system.operation == "get": + return get_session_query(**arguments) + elif system.operation == "create": + return create_session_query(**arguments) + elif system.operation == "update": + return update_session_query(**arguments) + elif system.operation == "delete": + return update_session_query(**arguments) + elif system.operation == "delete": + return delete_session_query(**arguments) + # TASKS + elif system.resource == "task": + if system.operation == "list": + return list_tasks_query(**arguments) + elif system.operation == "get": + return get_task_query(**arguments) + elif system.operation == "create": + return create_task_query(**arguments) + elif system.operation == "update": + return update_task_query(**arguments) + elif system.operation == "delete": + return delete_task_query(**arguments) + + raise NotImplementedError(f"System call not implemented for { + system.resource}.{system.operation}") + + except BaseException as e: + if activity.in_activity(): + activity.logger.error(f"Error in execute_system_call: {e}") + raise + + +# Mock and activity definition +mock_execute_system = execute_system + +execute_system = activity.defn(name="execute_system")( + execute_system if not testing else mock_execute_system +) diff --git a/agents-api/agents_api/activities/task_steps/base_evaluate.py b/agents-api/agents_api/activities/task_steps/base_evaluate.py index 0263345ec..3fcbf2f73 100644 --- a/agents-api/agents_api/activities/task_steps/base_evaluate.py +++ b/agents-api/agents_api/activities/task_steps/base_evaluate.py @@ -12,7 +12,7 @@ @beartype async def base_evaluate( - exprs: str | list[str] | dict[str, str], + exprs: str | list[str] | dict[str, str] | dict[str, dict[str, str]], values: dict[str, Any] = {}, extra_lambda_strs: dict[str, str] | None = None, ) -> Any | list[Any] | dict[str, Any]: @@ -53,9 +53,18 @@ async def base_evaluate( case list(): return [evaluator.eval(expr) for expr in exprs] + case dict() as d if all(isinstance(v, dict) for v in d.values()): + return { + k: {ik: evaluator.eval(iv) for ik, iv in v.items()} + for k, v in d.items() + } + case dict(): return {k: evaluator.eval(v) for k, v in exprs.items()} + case _: + raise ValueError(f"Invalid expression: {exprs}") + except BaseException as e: if activity.in_activity(): activity.logger.error(f"Error in base_evaluate: {e}") diff --git a/agents-api/agents_api/activities/task_steps/prompt_step.py b/agents-api/agents_api/activities/task_steps/prompt_step.py index e9b4daeb3..bdc8a5c6e 100644 --- a/agents-api/agents_api/activities/task_steps/prompt_step.py +++ b/agents-api/agents_api/activities/task_steps/prompt_step.py @@ -2,6 +2,7 @@ from temporalio import activity from temporalio.exceptions import ApplicationError +from ...autogen.Tools import Tool from ...clients import ( litellm, # We dont directly import `acompletion` so we can mock it ) @@ -10,6 +11,22 @@ from ...models.tools.list_tools import list_tools +# FIXME: This shouldn't be here. +def format_agent_tool(tool: Tool) -> dict: + if tool.function: + return { + "type": "function", + "function": { + "name": tool.name, + "description": tool.description, + "parameters": tool.function.parameters, + }, + } + # TODO: Add integration | system | api_call tool types + else: + return {} + + @activity.defn @beartype async def prompt_step(context: StepContext) -> StepOutcome: @@ -46,15 +63,7 @@ async def prompt_step(context: StepContext) -> StepOutcome: # Format agent_tools for litellm formatted_agent_tools = [ - { - "type": tool.type, - "function": { - "name": tool.function.name, - "description": tool.function.description, - "parameters": tool.function.parameters, - }, - } - for tool in agent_tools + format_agent_tool(tool) for tool in agent_tools if format_agent_tool(tool) ] if context.current_step.settings: diff --git a/agents-api/agents_api/activities/task_steps/tool_call_step.py b/agents-api/agents_api/activities/task_steps/tool_call_step.py index 3082d8706..8d5d2fc8c 100644 --- a/agents-api/agents_api/activities/task_steps/tool_call_step.py +++ b/agents-api/agents_api/activities/task_steps/tool_call_step.py @@ -6,13 +6,14 @@ from temporalio.exceptions import ApplicationError from ...activities.task_steps.base_evaluate import base_evaluate -from ...autogen.openapi_model import Tool, ToolCallStep +from ...autogen.openapi_model import TaskToolDef, Tool, ToolCallStep from ...common.protocol.tasks import ( StepContext, StepOutcome, ) +# FIXME: This shouldn't be here. def generate_call_id(): # Generate 18 random bytes (which will result in 24 base64 characters) random_bytes = secrets.token_bytes(18) @@ -22,6 +23,26 @@ def generate_call_id(): return f"call_{base64_string}" +# FIXME: This shouldn't be here, and shouldn't be done this way. Should be refactored. +def construct_tool_call(tool: TaskToolDef, arguments: dict, call_id: str) -> dict: + return { + tool.type: { + "arguments": arguments, + "name": tool.name, + } + if tool.type != "system" + else { + "resource": tool.spec["resource"], + "operation": tool.spec["operation"], + "resource_id": tool.spec["resource_id"], + "subresource": tool.spec["subresource"], + "arguments": arguments, + }, + "id": call_id, + "type": tool.type, + } + + @activity.defn @beartype async def tool_call_step(context: StepContext) -> StepOutcome: @@ -40,14 +61,6 @@ async def tool_call_step(context: StepContext) -> StepOutcome: ) call_id = generate_call_id() - - tool_call = { - tool.type: { - "arguments": arguments, - "name": tool_name, - }, - "id": call_id, - "type": tool.type, - } + tool_call = construct_tool_call(tool, arguments, call_id) return StepOutcome(output=tool_call) diff --git a/agents-api/agents_api/activities/truncation.py b/agents-api/agents_api/activities/truncation.py index 4742ee6d4..afdb43da4 100644 --- a/agents-api/agents_api/activities/truncation.py +++ b/agents-api/agents_api/activities/truncation.py @@ -3,7 +3,7 @@ from beartype import beartype from temporalio import activity -from agents_api.autogen.openapi_model import Entry +from ..autogen.openapi_model import Entry # from agents_api.models.entry.entries_summarization import get_toplevel_entries_query diff --git a/agents-api/agents_api/autogen/Tasks.py b/agents-api/agents_api/autogen/Tasks.py index 9dd531c47..83fde00da 100644 --- a/agents-api/agents_api/autogen/Tasks.py +++ b/agents-api/agents_api/autogen/Tasks.py @@ -944,7 +944,7 @@ class ToolCallStep(BaseModel): """ The tool to run """ - arguments: dict[str, str] | Literal["_"] = "_" + arguments: dict[str, dict[str, str] | str] | Literal["_"] = "_" """ The input parameters for the tool (defaults to last step output) """ diff --git a/agents-api/agents_api/autogen/Tools.py b/agents-api/agents_api/autogen/Tools.py index 8227e5759..ffe10302c 100644 --- a/agents-api/agents_api/autogen/Tools.py +++ b/agents-api/agents_api/autogen/Tools.py @@ -6,7 +6,122 @@ from typing import Annotated, Any, Literal from uuid import UUID -from pydantic import AwareDatetime, BaseModel, ConfigDict, Field +from pydantic import AnyUrl, AwareDatetime, BaseModel, ConfigDict, Field, StrictBool + + +class ApiCallDef(BaseModel): + """ + API call definition + """ + + model_config = ConfigDict( + populate_by_name=True, + ) + method: Literal[ + "GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT", "TRACE" + ] + """ + The HTTP method to use + """ + url: AnyUrl + """ + The URL to call + """ + headers: dict[str, str] | None = None + """ + The headers to send with the request + """ + content: str | None = None + """ + The content as base64 to send with the request + """ + data: dict[str, Any] | None = None + """ + The data to send as form data + """ + json_: Annotated[dict[str, Any] | None, Field(None, alias="json")] + """ + JSON body to send with the request + """ + cookies: dict[str, str] | None = None + """ + Cookies + """ + params: str | dict[str, Any] | None = None + """ + The parameters to send with the request + """ + follow_redirects: StrictBool | None = None + """ + Follow redirects + """ + timeout: int | None = None + """ + The timeout for the request + """ + + +class ApiCallDefUpdate(BaseModel): + """ + API call definition + """ + + model_config = ConfigDict( + populate_by_name=True, + ) + method: ( + Literal[ + "GET", + "POST", + "PUT", + "DELETE", + "PATCH", + "HEAD", + "OPTIONS", + "CONNECT", + "TRACE", + ] + | None + ) = None + """ + The HTTP method to use + """ + url: AnyUrl | None = None + """ + The URL to call + """ + headers: dict[str, str] | None = None + """ + The headers to send with the request + """ + content: str | None = None + """ + The content as base64 to send with the request + """ + data: dict[str, Any] | None = None + """ + The data to send as form data + """ + json_: Annotated[dict[str, Any] | None, Field(None, alias="json")] + """ + JSON body to send with the request + """ + cookies: dict[str, str] | None = None + """ + Cookies + """ + params: str | dict[str, Any] | None = None + """ + The parameters to send with the request + """ + follow_redirects: StrictBool | None = None + """ + Follow redirects + """ + timeout: int | None = None + """ + The timeout for the request + """ class ChosenToolCall(BaseModel): @@ -37,12 +152,26 @@ class CreateToolRequest(BaseModel): """ Name of the tool (must be unique for this agent and a valid python identifier string ) """ + description: str | None = None + """ + Description of the tool + """ function: FunctionDef | None = None """ The function to call """ integration: IntegrationDef | None = None + """ + The integration to call + """ system: SystemDef | None = None + """ + The system to call + """ + api_call: ApiCallDef | None = None + """ + The API call to make + """ class FunctionCallOption(BaseModel): @@ -67,9 +196,9 @@ class FunctionDef(BaseModel): """ DO NOT USE: This will be overriden by the tool name. Here only for compatibility reasons. """ - description: str | None = None + description: Any | None = None """ - Description of the function + DO NOT USE: This will be overriden by the tool description. Here only for compatibility reasons. """ parameters: dict[str, Any] | None = None """ @@ -104,10 +233,6 @@ class IntegrationDef(BaseModel): """ The specific method of the integration to call """ - description: str | None = None - """ - Optional description of the integration - """ setup: dict[str, Any] | None = None """ The setup parameters the integration accepts @@ -146,10 +271,6 @@ class IntegrationDefUpdate(BaseModel): """ The specific method of the integration to call """ - description: str | None = None - """ - Optional description of the integration - """ setup: dict[str, Any] | None = None """ The setup parameters the integration accepts @@ -179,12 +300,26 @@ class PatchToolRequest(BaseModel): """ Name of the tool (must be unique for this agent and a valid python identifier string ) """ + description: str | None = None + """ + Description of the tool + """ function: FunctionDef | None = None """ The function to call """ integration: IntegrationDefUpdate | None = None + """ + The integration to call + """ system: SystemDefUpdate | None = None + """ + The system to call + """ + api_call: ApiCallDefUpdate | None = None + """ + The API call to make + """ class SystemDef(BaseModel): @@ -195,13 +330,34 @@ class SystemDef(BaseModel): model_config = ConfigDict( populate_by_name=True, ) - call: str + resource: Literal["agent", "user", "task", "execution", "doc", "session", "job"] """ - The name of the system call + Resource is the name of the resource to use """ - description: str | None = None + operation: Literal[ + "create", + "update", + "patch", + "create_or_update", + "embed", + "change_status", + "search", + "chat", + "history", + "delete", + "get", + "list", + ] + """ + Operation is the name of the operation to perform + """ + resource_id: UUID | None = None + """ + Resource id (if applicable) """ - Optional description of the system call + subresource: Literal["tool", "doc", "execution", "transition"] | None = None + """ + Sub-resource type (if applicable) """ arguments: dict[str, Any] | None = None """ @@ -217,13 +373,39 @@ class SystemDefUpdate(BaseModel): model_config = ConfigDict( populate_by_name=True, ) - call: str | None = None + resource: ( + Literal["agent", "user", "task", "execution", "doc", "session", "job"] | None + ) = None """ - The name of the system call + Resource is the name of the resource to use """ - description: str | None = None + operation: ( + Literal[ + "create", + "update", + "patch", + "create_or_update", + "embed", + "change_status", + "search", + "chat", + "history", + "delete", + "get", + "list", + ] + | None + ) = None + """ + Operation is the name of the operation to perform """ - Optional description of the system call + resource_id: UUID | None = None + """ + Resource id (if applicable) + """ + subresource: Literal["tool", "doc", "execution", "transition"] | None = None + """ + Sub-resource type (if applicable) """ arguments: dict[str, Any] | None = None """ @@ -239,12 +421,26 @@ class Tool(BaseModel): """ Name of the tool (must be unique for this agent and a valid python identifier string ) """ + description: str | None = None + """ + Description of the tool + """ function: FunctionDef | None = None """ The function to call """ integration: IntegrationDef | None = None + """ + The integration to call + """ system: SystemDef | None = None + """ + The system to call + """ + api_call: ApiCallDef | None = None + """ + The API call to make + """ created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time @@ -279,12 +475,26 @@ class UpdateToolRequest(BaseModel): """ Name of the tool (must be unique for this agent and a valid python identifier string ) """ + description: str | None = None + """ + Description of the tool + """ function: FunctionDef | None = None """ The function to call """ integration: IntegrationDef | None = None + """ + The integration to call + """ system: SystemDef | None = None + """ + The system to call + """ + api_call: ApiCallDef | None = None + """ + The API call to make + """ class ChosenFunctionCall(ChosenToolCall): diff --git a/agents-api/agents_api/clients/worker/worker.py b/agents-api/agents_api/clients/worker/worker.py index 1deb8d1c3..8befa3080 100644 --- a/agents-api/agents_api/clients/worker/worker.py +++ b/agents-api/agents_api/clients/worker/worker.py @@ -1,7 +1,6 @@ import httpx -from agents_api.env import temporal_worker_url - +from ...env import temporal_worker_url from .types import ( MemoryManagementTask, MemoryManagementTaskArgs, diff --git a/agents-api/agents_api/common/exceptions/__init__.py b/agents-api/agents_api/common/exceptions/__init__.py index a38a546a2..571691082 100644 --- a/agents-api/agents_api/common/exceptions/__init__.py +++ b/agents-api/agents_api/common/exceptions/__init__.py @@ -1,12 +1,14 @@ """ -This module defines a structured hierarchy of custom exceptions for the agents API, aimed at handling specific error scenarios encountered across various operations. These exceptions are designed to provide clear, actionable error messages and appropriate HTTP status codes, enhancing the API's robustness and usability. +This module defines a structured hierarchy of custom exceptions for the agents API, aimed at handling specific error scenarios encountered across various operations. +These exceptions are designed to provide clear, actionable error messages and appropriate HTTP status codes, enhancing the API's robustness and usability. Exceptions are organized into categories based on the domain of operation, including: - Agent-related operations (agents.py): Exceptions such as `AgentNotFoundError` and `AgentToolNotFoundError` cater to errors specific to agent management. - Session management (sessions.py): Defines exceptions like `SessionNotFoundError` for handling errors related to session operations. - User interactions (users.py): Includes exceptions such as `UserNotFoundError` for addressing issues encountered during user-related operations. -All custom exceptions extend from `BaseCommonException`, which encapsulates common attributes and behavior, including the error message and HTTP status code. This structured approach to exception handling facilitates precise and meaningful error feedback to API consumers, thereby improving the overall developer experience. +All custom exceptions extend from `BaseCommonException`, which encapsulates common attributes and behavior, including the error message and HTTP status code. +This structured approach to exception handling facilitates precise and meaningful error feedback to API consumers, thereby improving the overall developer experience. """ diff --git a/agents-api/agents_api/common/exceptions/agents.py b/agents-api/agents_api/common/exceptions/agents.py index c412eba35..e58f25104 100644 --- a/agents-api/agents_api/common/exceptions/agents.py +++ b/agents-api/agents_api/common/exceptions/agents.py @@ -12,7 +12,12 @@ class BaseAgentException(BaseCommonException): class AgentNotFoundError(BaseAgentException): - """Exception raised when a requested agent cannot be found.""" + """ + Exception raised when a requested agent cannot be found. + Attributes: + developer_id (UUID | str): The ID of the developer attempting the operation. + agent_id (UUID | str): The ID of the agent that was not found. + """ def __init__(self, developer_id: UUID | str, agent_id: UUID | str): # Initialize the exception with a message indicating the missing agent and developer ID. @@ -23,7 +28,12 @@ def __init__(self, developer_id: UUID | str, agent_id: UUID | str): class AgentToolNotFoundError(BaseAgentException): - """Exception raised when a requested tool associated with an agent cannot be found.""" + """ + Exception raised when a requested tool associated with an agent cannot be found. + Attributes: + agent_id (UUID | str): The ID of the agent that was not found. + tool_id (UUID | str): The ID of the tool that was not found. + """ def __init__(self, agent_id: UUID | str, tool_id: UUID | str): # Initialize the exception with a message indicating the missing tool and agent ID. @@ -33,7 +43,12 @@ def __init__(self, agent_id: UUID | str, tool_id: UUID | str): class AgentDocNotFoundError(BaseAgentException): - """Exception raised when a requested document associated with an agent cannot be found.""" + """ + Exception raised when a requested document associated with an agent cannot be found. + Attributes: + agent_id (UUID | str): The ID of the agent that was not found. + doc_id (UUID | str): The ID of the document that was not found. + """ def __init__(self, agent_id: UUID | str, doc_id: UUID | str): # Initialize the exception with a message indicating the missing document and agent ID. @@ -43,6 +58,8 @@ def __init__(self, agent_id: UUID | str, doc_id: UUID | str): class AgentModelNotValid(BaseAgentException): + """Exception raised when requested model is not recognized.""" + def __init__(self, model: str, all_models: list[str]): super().__init__( f"Unknown model: {model}. Please provide a valid model name." @@ -52,6 +69,8 @@ def __init__(self, model: str, all_models: list[str]): class MissingAgentModelAPIKeyError(BaseAgentException): + """Exception raised when API key for requested model is missing.""" + def __init__(self, model: str): super().__init__( f"API key missing for model: {model}. Please provide a valid API key in the configuration", diff --git a/agents-api/agents_api/common/exceptions/sessions.py b/agents-api/agents_api/common/exceptions/sessions.py index d6c04aff5..6e9941d43 100644 --- a/agents-api/agents_api/common/exceptions/sessions.py +++ b/agents-api/agents_api/common/exceptions/sessions.py @@ -8,29 +8,24 @@ from . import BaseCommonException -""" -Base exception class for session-related errors. - -This class serves as a base for all session-related exceptions, allowing for a structured exception handling approach specific to session operations. -""" - class BaseSessionException(BaseCommonException): - pass - + """ + Base exception class for session-related errors. -""" -Exception raised when a session cannot be found. + This class serves as a base for all session-related exceptions, allowing for a structured exception handling approach specific to session operations. + """ -This exception is used to indicate that a specific session, identified by its session ID, does not exist or is not accessible for the given developer. -""" + pass class SessionNotFoundError(BaseSessionException): """ - Initializes a new instance of the SessionNotFoundError. + Exception raised when a session cannot be found. + + This exception is used to indicate that a specific session, identified by its session ID, does not exist or is not accessible for the given developer. - Args: + Attributes: developer_id (UUID | str): The unique identifier of the developer attempting to access the session. session_id (UUID | str): The unique identifier of the session that was not found. """ diff --git a/agents-api/agents_api/common/exceptions/users.py b/agents-api/agents_api/common/exceptions/users.py index 2f7f58ed6..cf4e995ad 100644 --- a/agents-api/agents_api/common/exceptions/users.py +++ b/agents-api/agents_api/common/exceptions/users.py @@ -6,13 +6,18 @@ class BaseUserException(BaseCommonException): - """Base exception class for user-related errors. This class serves as a parent for all user-related exceptions to facilitate catching errors specific to user operations.""" + """ + Base exception class for user-related errors. + + This class serves as a parent for all user-related exceptions to facilitate catching errors specific to user operations. + """ pass class UserNotFoundError(BaseUserException): - """Exception raised when a requested user cannot be found. + """ + Exception raised when a requested user cannot be found. Attributes: developer_id (UUID | str): The ID of the developer attempting the operation. user_id (UUID | str): The ID of the user that was not found. @@ -27,7 +32,8 @@ def __init__(self, developer_id: UUID | str, user_id: UUID | str): class UserDocNotFoundError(BaseUserException): - """Exception raised when a specific document related to a user cannot be found. + """ + Exception raised when a specific document related to a user cannot be found. Attributes: user_id (UUID | str): The ID of the user associated with the document. doc_id (UUID | str): The ID of the document that was not found. diff --git a/agents-api/agents_api/common/protocol/agents.py b/agents-api/agents_api/common/protocol/agents.py index 222f91f01..89f7f4a2d 100644 --- a/agents-api/agents_api/common/protocol/agents.py +++ b/agents-api/agents_api/common/protocol/agents.py @@ -4,17 +4,23 @@ class AgentDefaultSettings(BaseModel): """Defines default settings for an agent. These settings control various aspects of the agent's behavior during operation.""" - """Temperature setting influencing the randomness of the agent's responses. Higher values lead to more random responses.""" temperature: float = 0.0 - """Top-p sampling setting controlling the nucleus of the probability distribution to sample from.""" + """Temperature setting influencing the randomness of the agent's responses. Higher values lead to more random responses.""" + top_p: float = 1.0 - """Penalty applied to discourage repetition in the agent's responses.""" + """Top-p sampling setting controlling the nucleus of the probability distribution to sample from.""" + repetition_penalty: float = 1.0 - """Penalty for longer responses, encouraging more concise outputs.""" + """Penalty applied to discourage repetition in the agent's responses.""" + length_penalty: float = 1.0 - """Penalty applied based on the presence of certain words, influencing content generation.""" + """Penalty for longer responses, encouraging more concise outputs.""" + presence_penalty: float = 0.0 - """Penalty that decreases the likelihood of frequently used words in the agent's responses.""" + """Penalty applied based on the presence of certain words, influencing content generation.""" + frequency_penalty: float = 0.0 - """Minimum probability threshold for including a word in the agent's response.""" + """Penalty that decreases the likelihood of frequently used words in the agent's responses.""" + min_p: float = 0.01 + """Minimum probability threshold for including a word in the agent's response.""" diff --git a/agents-api/agents_api/common/utils/json.py b/agents-api/agents_api/common/utils/json.py index 3157af9c8..f1b82742a 100644 --- a/agents-api/agents_api/common/utils/json.py +++ b/agents-api/agents_api/common/utils/json.py @@ -11,28 +11,35 @@ class CustomJSONEncoder(json.JSONEncoder): """A custom JSON encoder subclass that handles None values and UUIDs for JSON serialization. It allows specifying a default value for None objects during initialization.""" def __init__(self, *args, **kwargs) -> None: - """Initializes the custom JSON encoder. + """ + Initializes the custom JSON encoder. Parameters: *args: Variable length argument list. **kwargs: Arbitrary keyword arguments. The 'default_empty_value' keyword argument specifies the default value to use for None objects during serialization. """ + self._default_empty_value = kwargs.pop("default_empty_value") super().__init__(*args, **kwargs) def encode(self, o) -> str: - """Encodes the given object into a JSON formatted string. + """ + Encodes the given object into a JSON formatted string. Parameters: o: The object to encode. - Returns: A JSON formatted string representing 'o'.""" + Returns: A JSON formatted string representing 'o'. + """ + # Use the overridden default method for serialization before encoding return super().encode(self.default(o)) def default(self, obj) -> Any: - """Provides a default serialization for objects that the standard JSON encoder cannot serialize. + """ + Provides a default serialization for objects that the standard JSON encoder cannot serialize. Parameters: obj: The object to serialize. Returns: A serializable object or raises a TypeError if the object is not serializable. """ + if obj is None: return self._default_empty_value @@ -46,12 +53,15 @@ def default(self, obj) -> Any: def dumps(obj: Any, default_empty_value="", cls=None) -> str: - """Serializes an object to a JSON formatted string using the custom JSON encoder. + """ + Serializes an object to a JSON formatted string using the custom JSON encoder. Parameters: obj: The object to serialize. default_empty_value: The default value to use for None objects. cls: The custom encoder class to use, defaults to CustomJSONEncoder. - Returns: A JSON formatted string.""" + Returns: A JSON formatted string. + """ + return json.dumps( obj, cls=cls or CustomJSONEncoder, default_empty_value=default_empty_value ) diff --git a/agents-api/agents_api/common/utils/messages.py b/agents-api/agents_api/common/utils/messages.py index fd971296c..c94808324 100644 --- a/agents-api/agents_api/common/utils/messages.py +++ b/agents-api/agents_api/common/utils/messages.py @@ -1,7 +1,7 @@ import json from typing import cast -from agents_api.autogen.openapi_model import ( +from ...autogen.openapi_model import ( ChatMLImageContentPart, ChatMLTextContentPart, ) diff --git a/agents-api/agents_api/dependencies/query_filter.py b/agents-api/agents_api/dependencies/query_filter.py new file mode 100644 index 000000000..c100f1489 --- /dev/null +++ b/agents-api/agents_api/dependencies/query_filter.py @@ -0,0 +1,54 @@ +from typing import Any, Callable + +from fastapi import Request + + +def convert_value(value: str) -> Any: + """ + Attempts to convert a string value to an int or float. Returns the original string if conversion fails. + """ + for convert in (int, float): + try: + return convert(value) + except ValueError: + continue + return value + + +def create_filter_extractor( + prefix: str = "filter", +) -> Callable[[Request], dict[str, Any]]: + """ + Creates a dependency function to extract filter parameters with a given prefix. + + Args: + prefix (str): The prefix to identify filter parameters. + + Returns: + Callable[[Request], dict[str, Any]]: The dependency function. + """ + + # Add a dot to the prefix to allow for nested filters + prefix += "." + + def extract_filters(request: Request) -> dict[str, Any]: + """ + Extracts query parameters that start with the specified prefix and returns them as a dictionary. + + Args: + request (Request): The incoming HTTP request. + + Returns: + dict[str, Any]: A dictionary containing the filter parameters. + """ + + filters: dict[str, Any] = {} + + for key, value in request.query_params.items(): + if key.startswith(prefix): + filter_key = key[len(prefix) :] + filters[filter_key] = convert_value(value) + + return filters + + return extract_filters diff --git a/agents-api/agents_api/exceptions.py b/agents-api/agents_api/exceptions.py index fbb8f00f8..4fbf8a2b9 100644 --- a/agents-api/agents_api/exceptions.py +++ b/agents-api/agents_api/exceptions.py @@ -3,11 +3,15 @@ class AgentsBaseException(Exception): class ModelNotSupportedError(AgentsBaseException): + """Exception raised when model is not supported.""" + def __init__(self, model_name) -> None: super().__init__(f"model {model_name} is not supported") class PromptTooBigError(AgentsBaseException): + """Exception raised when prompt is too big.""" + def __init__(self, token_count, max_tokens) -> None: super().__init__( f"prompt is too big, {token_count} tokens provided, exceeds maximum of {max_tokens}" @@ -15,5 +19,7 @@ def __init__(self, token_count, max_tokens) -> None: class UnknownTokenizerError(AgentsBaseException): + """Exception raised when tokenizer is unknown.""" + def __init__(self) -> None: super().__init__("unknown tokenizer") diff --git a/agents-api/agents_api/models/agent/create_agent.py b/agents-api/agents_api/models/agent/create_agent.py index 546d0d441..98daab540 100644 --- a/agents-api/agents_api/models/agent/create_agent.py +++ b/agents-api/agents_api/models/agent/create_agent.py @@ -30,11 +30,24 @@ lambda e: isinstance(e, QueryException) and "asserted to return some results, but returned none" in str(e): lambda *_: HTTPException( - detail="developer not found", status_code=403 + detail="Developer not found. Please ensure the provided auth token (which refers to your developer_id) is valid and the developer has the necessary permissions to create an agent.", + status_code=403, + ), + QueryException: partialclass( + HTTPException, + status_code=400, + detail="A database query failed to return the expected results. This might occur if the requested resource doesn't exist or your query parameters are incorrect.", + ), + ValidationError: partialclass( + HTTPException, + status_code=400, + detail="Input validation failed. Please check the provided data for missing or incorrect fields, and ensure it matches the required format.", + ), + TypeError: partialclass( + HTTPException, + status_code=400, + detail="A type mismatch occurred. This likely means the data provided is of an incorrect type (e.g., string instead of integer). Please review the input and try again.", ), - QueryException: partialclass(HTTPException, status_code=400, detail="A database query failed to return the expected results. This might occur if the requested resource doesn't exist or your query parameters are incorrect."), - ValidationError: partialclass(HTTPException, status_code=400, detail="Input validation failed. Please check the provided data for missing or incorrect fields, and ensure it matches the required format."), - TypeError: partialclass(HTTPException, status_code=400, detail="A type mismatch occurred. This likely means the data provided is of an incorrect type (e.g., string instead of integer). Please review the input and try again."), } ) @wrap_in_class( @@ -55,12 +68,12 @@ def create_agent( Constructs and executes a datalog query to create a new agent in the database. Parameters: - - agent_id (UUID | None): The unique identifier for the agent. - - developer_id (UUID): The unique identifier for the developer creating the agent. - - data (CreateAgentRequest): The data for the new agent. + agent_id (UUID | None): The unique identifier for the agent. + developer_id (UUID): The unique identifier for the developer creating the agent. + data (CreateAgentRequest): The data for the new agent. Returns: - - Agent: The newly created agent record. + Agent: The newly created agent record. """ agent_id = agent_id or uuid4() diff --git a/agents-api/agents_api/models/agent/create_or_update_agent.py b/agents-api/agents_api/models/agent/create_or_update_agent.py index 17e01fccb..3902c1bb5 100644 --- a/agents-api/agents_api/models/agent/create_or_update_agent.py +++ b/agents-api/agents_api/models/agent/create_or_update_agent.py @@ -27,9 +27,21 @@ @rewrap_exceptions( { - QueryException: partialclass(HTTPException, status_code=400,detail="A database query failed to return the expected results. This might occur if the requested resource doesn't exist or your query parameters are incorrect."), - ValidationError: partialclass(HTTPException, status_code=400,detail="Input validation failed. Please check the provided data for missing or incorrect fields, and ensure it matches the required format."), - TypeError: partialclass(HTTPException, status_code=400,detail="A type mismatch occurred. This likely means the data provided is of an incorrect type (e.g., string instead of integer). Please review the input and try again."), + QueryException: partialclass( + HTTPException, + status_code=400, + detail="A database query failed to return the expected results. This might occur if the requested resource doesn't exist or your query parameters are incorrect.", + ), + ValidationError: partialclass( + HTTPException, + status_code=400, + detail="Input validation failed. Please check the provided data for missing or incorrect fields, and ensure it matches the required format.", + ), + TypeError: partialclass( + HTTPException, + status_code=400, + detail="A type mismatch occurred. This likely means the data provided is of an incorrect type (e.g., string instead of integer). Please review the input and try again.", + ), } ) @wrap_in_class( @@ -47,18 +59,18 @@ def create_or_update_agent( Constructs and executes a datalog query to create a new agent in the database. Parameters: - - agent_id (UUID): The unique identifier for the agent. - - developer_id (UUID): The unique identifier for the developer creating the agent. - - name (str): The name of the agent. - - about (str): A description of the agent. - - instructions (list[str], optional): A list of instructions for using the agent. Defaults to an empty list. - - model (str, optional): The model identifier for the agent. Defaults to "gpt-4o". - - metadata (dict, optional): A dictionary of metadata for the agent. Defaults to an empty dict. - - default_settings (dict, optional): A dictionary of default settings for the agent. Defaults to an empty dict. - - client (CozoClient, optional): The CozoDB client instance to use for the query. Defaults to a preconfigured client instance. + agent_id (UUID): The unique identifier for the agent. + developer_id (UUID): The unique identifier for the developer creating the agent. + name (str): The name of the agent. + about (str): A description of the agent. + instructions (list[str], optional): A list of instructions for using the agent. Defaults to an empty list. + model (str, optional): The model identifier for the agent. Defaults to "gpt-4o". + metadata (dict, optional): A dictionary of metadata for the agent. Defaults to an empty dict. + default_settings (dict, optional): A dictionary of default settings for the agent. Defaults to an empty dict. + client (CozoClient, optional): The CozoDB client instance to use for the query. Defaults to a preconfigured client instance. Returns: - Agent: The newly created agent record. + Agent: The newly created agent record. """ # Extract the agent data from the payload diff --git a/agents-api/agents_api/models/agent/delete_agent.py b/agents-api/agents_api/models/agent/delete_agent.py index cb6b16718..60de66292 100644 --- a/agents-api/agents_api/models/agent/delete_agent.py +++ b/agents-api/agents_api/models/agent/delete_agent.py @@ -30,11 +30,24 @@ lambda e: isinstance(e, QueryException) and "Developer does not own resource" in e.resp["display"]: lambda *_: HTTPException( - detail="developer not found or doesnt own resource", status_code=404 + detail="The specified developer does not own the requested resource. Please verify the ownership or check if the developer ID is correct.", + status_code=404, + ), + QueryException: partialclass( + HTTPException, + status_code=400, + detail="A database query failed to return the expected results. This might occur if the requested resource doesn't exist or your query parameters are incorrect.", + ), + ValidationError: partialclass( + HTTPException, + status_code=400, + detail="Input validation failed. Please check the provided data for missing or incorrect fields, and ensure it matches the required format.", + ), + TypeError: partialclass( + HTTPException, + status_code=400, + detail="A type mismatch occurred. This likely means the data provided is of an incorrect type (e.g., string instead of integer). Please review the input and try again.", ), - QueryException: partialclass(HTTPException, status_code=400,detail="A database query failed to return the expected results. This might occur if the requested resource doesn't exist or your query parameters are incorrect."), - ValidationError: partialclass(HTTPException, status_code=400,detail="Input validation failed. Please check the provided data for missing or incorrect fields, and ensure it matches the required format."), - TypeError: partialclass(HTTPException, status_code=400,detail="A type mismatch occurred. This likely means the data provided is of an incorrect type (e.g., string instead of integer). Please review the input and try again."), } ) @wrap_in_class( @@ -54,12 +67,12 @@ def delete_agent(*, developer_id: UUID, agent_id: UUID) -> tuple[list[str], dict Constructs and returns a datalog query for deleting an agent and its default settings from the database. Parameters: - - developer_id (UUID): The UUID of the developer owning the agent. - - agent_id (UUID): The UUID of the agent to be deleted. - - client (CozoClient, optional): An instance of the CozoClient to execute the query. + developer_id (UUID): The UUID of the developer owning the agent. + agent_id (UUID): The UUID of the agent to be deleted. + client (CozoClient, optional): An instance of the CozoClient to execute the query. Returns: - - ResourceDeletedResponse: The response indicating the deletion of the agent. + ResourceDeletedResponse: The response indicating the deletion of the agent. """ queries = [ diff --git a/agents-api/agents_api/models/agent/get_agent.py b/agents-api/agents_api/models/agent/get_agent.py index 956fa46a5..bdae85fcb 100644 --- a/agents-api/agents_api/models/agent/get_agent.py +++ b/agents-api/agents_api/models/agent/get_agent.py @@ -46,12 +46,12 @@ def get_agent(*, developer_id: UUID, agent_id: UUID) -> tuple[list[str], dict]: This function constructs and executes a datalog query to retrieve information about a specific agent, including its default settings, based on the provided agent_id and developer_id. Parameters: - - developer_id (UUID): The unique identifier for the developer. - - agent_id (UUID): The unique identifier for the agent. - - client (CozoClient, optional): The database client used to execute the query. + developer_id (UUID): The unique identifier for the developer. + agent_id (UUID): The unique identifier for the agent. + client (CozoClient, optional): The database client used to execute the query. Returns: - - Agent + Agent """ # Constructing a datalog query to retrieve agent details and default settings. # The query uses input parameters for agent_id and developer_id to filter the results. @@ -101,6 +101,8 @@ def get_agent(*, developer_id: UUID, agent_id: UUID) -> tuple[list[str], dict]: "min_p": min_p, "preset": preset, } + + :limit 1 """ queries = [ diff --git a/agents-api/agents_api/models/agent/patch_agent.py b/agents-api/agents_api/models/agent/patch_agent.py index 72fdc7811..364d1a974 100644 --- a/agents-api/agents_api/models/agent/patch_agent.py +++ b/agents-api/agents_api/models/agent/patch_agent.py @@ -46,13 +46,13 @@ def patch_agent( """Patches agent data based on provided updates. Parameters: - agent_id (UUID): The unique identifier for the agent. - developer_id (UUID): The unique identifier for the developer. - default_settings (dict, optional): Default settings to apply to the agent. - **update_data: Arbitrary keyword arguments representing data to update. + agent_id (UUID): The unique identifier for the agent. + developer_id (UUID): The unique identifier for the developer. + default_settings (dict, optional): Default settings to apply to the agent. + **update_data: Arbitrary keyword arguments representing data to update. Returns: - ResourceUpdatedResponse: The updated agent data. + ResourceUpdatedResponse: The updated agent data. """ update_data = data.model_dump(exclude_unset=True) diff --git a/agents-api/agents_api/models/agent/update_agent.py b/agents-api/agents_api/models/agent/update_agent.py index be7e9ea21..992bb9796 100644 --- a/agents-api/agents_api/models/agent/update_agent.py +++ b/agents-api/agents_api/models/agent/update_agent.py @@ -46,13 +46,13 @@ def update_agent( Constructs and executes a datalog query to update an agent and its default settings in the 'cozodb' database. Parameters: - - agent_id (UUID): The unique identifier of the agent to be updated. - - developer_id (UUID): The unique identifier of the developer associated with the agent. - - data (UpdateAgentRequest): The request payload containing the updated agent data. - - client (CozoClient, optional): The database client used to execute the query. Defaults to a pre-configured client instance. + agent_id (UUID): The unique identifier of the agent to be updated. + developer_id (UUID): The unique identifier of the developer associated with the agent. + data (UpdateAgentRequest): The request payload containing the updated agent data. + client (CozoClient, optional): The database client used to execute the query. Defaults to a pre-configured client instance. Returns: - ResourceUpdatedResponse: The updated agent data. + ResourceUpdatedResponse: The updated agent data. """ default_settings = ( data.default_settings.model_dump(exclude_none=True) diff --git a/agents-api/agents_api/models/chat/gather_messages.py b/agents-api/agents_api/models/chat/gather_messages.py index c1683653f..b6bfdc217 100644 --- a/agents-api/agents_api/models/chat/gather_messages.py +++ b/agents-api/agents_api/models/chat/gather_messages.py @@ -6,8 +6,7 @@ from pycozo.client import QueryException from pydantic import ValidationError -from agents_api.autogen.Chat import ChatInput - +from ...autogen.Chat import ChatInput from ...autogen.openapi_model import DocReference, History from ...clients import litellm from ...common.protocol.developers import Developer diff --git a/agents-api/agents_api/models/chat/get_cached_response.py b/agents-api/agents_api/models/chat/get_cached_response.py index 5440a6703..368c88567 100644 --- a/agents-api/agents_api/models/chat/get_cached_response.py +++ b/agents-api/agents_api/models/chat/get_cached_response.py @@ -9,6 +9,7 @@ def get_cached_response(key: str) -> tuple[str, dict]: query = """ input[key] <- [[$key]] ?[key, value] := input[key], *session_cache{key, value} + :limit 1 """ return (query, {"key": key}) diff --git a/agents-api/agents_api/models/chat/prepare_chat_context.py b/agents-api/agents_api/models/chat/prepare_chat_context.py index 4d521acb0..f77686d7a 100644 --- a/agents-api/agents_api/models/chat/prepare_chat_context.py +++ b/agents-api/agents_api/models/chat/prepare_chat_context.py @@ -90,12 +90,13 @@ def prepare_chat_context( participant_type: "agent", }, - *tools { agent_id, tool_id, name, type, spec, updated_at, created_at }, + *tools { agent_id, tool_id, name, type, spec, description, updated_at, created_at }, tool = { "id": tool_id, "name": name, "type": type, "spec": spec, + "description": description, "updated_at": updated_at, "created_at": created_at, } @@ -119,6 +120,8 @@ def prepare_chat_context( ?[{', '.join(session_data_fields)}, toolsets] := *_session_data_json {{ {', '.join(session_data_fields)} }}, *_toolsets_json {{ toolsets }} + + :limit 1 """ queries = [ diff --git a/agents-api/agents_api/models/developer/get_developer.py b/agents-api/agents_api/models/developer/get_developer.py index 31ade5334..0ae5421aa 100644 --- a/agents-api/agents_api/models/developer/get_developer.py +++ b/agents-api/agents_api/models/developer/get_developer.py @@ -67,6 +67,8 @@ def get_developer( created_at, updated_at, } + + :limit 1 """ return (query, {"developer_id": developer_id}) diff --git a/agents-api/agents_api/models/docs/create_doc.py b/agents-api/agents_api/models/docs/create_doc.py index ee26df484..1c667bd51 100644 --- a/agents-api/agents_api/models/docs/create_doc.py +++ b/agents-api/agents_api/models/docs/create_doc.py @@ -50,10 +50,10 @@ def create_doc( Constructs and executes a datalog query to create a new document and its associated snippets in the 'cozodb' database. Parameters: - - owner_type (Literal["user", "agent"]): The type of the owner of the document. - - owner_id (UUID): The UUID of the document owner. - - id (UUID): The UUID of the document to be created. - - data (CreateDocRequest): The content of the document. + owner_type (Literal["user", "agent"]): The type of the owner of the document. + owner_id (UUID): The UUID of the document owner. + id (UUID): The UUID of the document to be created. + data (CreateDocRequest): The content of the document. """ doc_id = str(doc_id or uuid4()) diff --git a/agents-api/agents_api/models/docs/embed_snippets.py b/agents-api/agents_api/models/docs/embed_snippets.py index e810d0379..8d8ae1e62 100644 --- a/agents-api/agents_api/models/docs/embed_snippets.py +++ b/agents-api/agents_api/models/docs/embed_snippets.py @@ -49,9 +49,9 @@ def embed_snippets( """Embeds document snippets in the cozodb database. Parameters: - doc_id (UUID): The unique identifier for the document. - snippet_indices (list[int]): Indices of the snippets in the document. - embeddings (list[list[float]]): Embedding vectors for the snippets. + doc_id (UUID): The unique identifier for the document. + snippet_indices (list[int]): Indices of the snippets in the document. + embeddings (list[list[float]]): Embedding vectors for the snippets. """ doc_id = str(doc_id) @@ -81,6 +81,7 @@ def embed_snippets( }}, index > {max(snippet_indices)} + :limit 1 :assert none """ diff --git a/agents-api/agents_api/models/docs/get_doc.py b/agents-api/agents_api/models/docs/get_doc.py index 4b3996c27..e81084985 100644 --- a/agents-api/agents_api/models/docs/get_doc.py +++ b/agents-api/agents_api/models/docs/get_doc.py @@ -87,6 +87,8 @@ def get_doc( metadata, }, snippets[snippet_data] + + :limit 1 """ queries = [ diff --git a/agents-api/agents_api/models/docs/list_docs.py b/agents-api/agents_api/models/docs/list_docs.py index 3c095c2db..4dad7ec06 100644 --- a/agents-api/agents_api/models/docs/list_docs.py +++ b/agents-api/agents_api/models/docs/list_docs.py @@ -90,7 +90,8 @@ def list_docs( created_at, metadata, }}, - snippets[id, snippet_data] + snippets[id, snippet_data], + {metadata_filter_str} :limit $limit :offset $offset @@ -112,6 +113,5 @@ def list_docs( "owner_type": owner_type, "limit": limit, "offset": offset, - "metadata_filter": metadata_filter_str, }, ) diff --git a/agents-api/agents_api/models/docs/search_docs_by_embedding.py b/agents-api/agents_api/models/docs/search_docs_by_embedding.py index d6bed97fc..83418aa21 100644 --- a/agents-api/agents_api/models/docs/search_docs_by_embedding.py +++ b/agents-api/agents_api/models/docs/search_docs_by_embedding.py @@ -56,12 +56,12 @@ def search_docs_by_embedding( Searches for document snippets in CozoDB by embedding query. Parameters: - - owner_type (Literal["user", "agent"]): The type of the owner of the documents. - - owner_id (UUID): The unique identifier of the owner. - - query_embedding (list[float]): The embedding vector of the query. - - k (int, optional): The number of nearest neighbors to retrieve. Defaults to 3. - - confidence (float, optional): The confidence threshold for filtering results. Defaults to 0.8. - - mmr_lambda (float, optional): The lambda parameter for MMR. Defaults to 0.25. + owner_type (Literal["user", "agent"]): The type of the owner of the documents. + owner_id (UUID): The unique identifier of the owner. + query_embedding (list[float]): The embedding vector of the query. + k (int, optional): The number of nearest neighbors to retrieve. Defaults to 3. + confidence (float, optional): The confidence threshold for filtering results. Defaults to 0.8. + mmr_lambda (float, optional): The lambda parameter for MMR. Defaults to 0.25. """ assert len(query_embedding) == embedding_size diff --git a/agents-api/agents_api/models/docs/search_docs_by_text.py b/agents-api/agents_api/models/docs/search_docs_by_text.py index eeae8362c..bb700a494 100644 --- a/agents-api/agents_api/models/docs/search_docs_by_text.py +++ b/agents-api/agents_api/models/docs/search_docs_by_text.py @@ -53,9 +53,9 @@ def search_docs_by_text( Searches for document snippets in CozoDB by embedding query. Parameters: - - owners (list[tuple[Literal["user", "agent"], UUID]]): The type of the owner of the documents. - - query (str): The query string. - - k (int, optional): The number of nearest neighbors to retrieve. Defaults to 3. + owners (list[tuple[Literal["user", "agent"], UUID]]): The type of the owner of the documents. + query (str): The query string. + k (int, optional): The number of nearest neighbors to retrieve. Defaults to 3. """ owners: list[list[str]] = [ diff --git a/agents-api/agents_api/models/entry/delete_entries.py b/agents-api/agents_api/models/entry/delete_entries.py index 48c37cd25..c98b6c7d2 100644 --- a/agents-api/agents_api/models/entry/delete_entries.py +++ b/agents-api/agents_api/models/entry/delete_entries.py @@ -49,7 +49,7 @@ def delete_entries_for_session( Constructs and returns a datalog query for deleting entries associated with a given session ID from the 'cozodb' database. Parameters: - - session_id (UUID): The unique identifier of the session whose entries are to be deleted. + session_id (UUID): The unique identifier of the session whose entries are to be deleted. """ delete_query = """ diff --git a/agents-api/agents_api/models/entry/get_history.py b/agents-api/agents_api/models/entry/get_history.py index 8918d357f..bd3c0397a 100644 --- a/agents-api/agents_api/models/entry/get_history.py +++ b/agents-api/agents_api/models/entry/get_history.py @@ -131,7 +131,9 @@ def get_history( session_relations[relations], session_id = to_uuid($session_id), created_at = now() - """ + + :limit 1 + """ queries = [ verify_developer_id_query(developer_id), diff --git a/agents-api/agents_api/models/execution/create_execution_transition.py b/agents-api/agents_api/models/execution/create_execution_transition.py index 42c6f1c22..f40395126 100644 --- a/agents-api/agents_api/models/execution/create_execution_transition.py +++ b/agents-api/agents_api/models/execution/create_execution_transition.py @@ -141,6 +141,8 @@ def create_execution_transition( found = length(prev_transitions), valid = if($next_type == "init", found == 0, found > 0), assert(valid, "Invalid transition"), + + :limit 1 """ # Prepare the insert query diff --git a/agents-api/agents_api/models/execution/get_execution_transition.py b/agents-api/agents_api/models/execution/get_execution_transition.py index d3ebf3783..e2b38789a 100644 --- a/agents-api/agents_api/models/execution/get_execution_transition.py +++ b/agents-api/agents_api/models/execution/get_execution_transition.py @@ -65,7 +65,9 @@ def get_execution_transition( is_null(next_tuple), null, {"workflow": next_tuple->0, "step": next_tuple->1}, - ), + ) + + :limit 1 """ get_query += filter diff --git a/agents-api/agents_api/models/execution/get_paused_execution_token.py b/agents-api/agents_api/models/execution/get_paused_execution_token.py index b4c9f9081..44eb8a4da 100644 --- a/agents-api/agents_api/models/execution/get_paused_execution_token.py +++ b/agents-api/agents_api/models/execution/get_paused_execution_token.py @@ -45,6 +45,7 @@ def get_paused_execution_token( execution_id = to_uuid($execution_id), status = "awaiting_input" + :limit 1 :assert some """ diff --git a/agents-api/agents_api/models/execution/get_temporal_workflow_data.py b/agents-api/agents_api/models/execution/get_temporal_workflow_data.py index bb0a462ef..8b1bf4604 100644 --- a/agents-api/agents_api/models/execution/get_temporal_workflow_data.py +++ b/agents-api/agents_api/models/execution/get_temporal_workflow_data.py @@ -45,6 +45,8 @@ def get_temporal_workflow_data( result_run_id, first_execution_run_id, } + + :limit 1 """ return ( diff --git a/agents-api/agents_api/models/execution/lookup_temporal_data.py b/agents-api/agents_api/models/execution/lookup_temporal_data.py index e3c369b94..35f09129b 100644 --- a/agents-api/agents_api/models/execution/lookup_temporal_data.py +++ b/agents-api/agents_api/models/execution/lookup_temporal_data.py @@ -43,6 +43,8 @@ def lookup_temporal_data( *temporal_executions_lookup { id, execution_id, run_id, first_execution_run_id, result_run_id } + + :limit 1 """ queries = [ diff --git a/agents-api/agents_api/models/execution/prepare_execution_input.py b/agents-api/agents_api/models/execution/prepare_execution_input.py index b763a7508..513c44a16 100644 --- a/agents-api/agents_api/models/execution/prepare_execution_input.py +++ b/agents-api/agents_api/models/execution/prepare_execution_input.py @@ -149,6 +149,7 @@ def prepare_execution_input( "name", "type", "spec", + "description", "created_at", "updated_at", ) @@ -187,6 +188,8 @@ def prepare_execution_input( user = null, session = null, arguments = execution->"input" + + :limit 1 """ queries = [ diff --git a/agents-api/agents_api/models/execution/update_execution.py b/agents-api/agents_api/models/execution/update_execution.py index c2f40c7ff..4d0367ae4 100644 --- a/agents-api/agents_api/models/execution/update_execution.py +++ b/agents-api/agents_api/models/execution/update_execution.py @@ -82,6 +82,8 @@ def update_execution( ?[num] := valid_status[num], assert(num > 0, 'Invalid status') + + :limit 1 """ update_query = f""" diff --git a/agents-api/agents_api/models/session/delete_session.py b/agents-api/agents_api/models/session/delete_session.py index af9e331c7..81f8e1f7c 100644 --- a/agents-api/agents_api/models/session/delete_session.py +++ b/agents-api/agents_api/models/session/delete_session.py @@ -51,11 +51,11 @@ def delete_session( Deletes a session and its related data from the 'cozodb' database. Parameters: - - developer_id (UUID): The unique identifier for the developer. - - session_id (UUID): The unique identifier for the session to be deleted. + developer_id (UUID): The unique identifier for the developer. + session_id (UUID): The unique identifier for the session to be deleted. Returns: - - ResourceDeletedResponse: The response indicating the deletion of the session. + ResourceDeletedResponse: The response indicating the deletion of the session. """ session_id = str(session_id) developer_id = str(developer_id) diff --git a/agents-api/agents_api/models/session/get_session.py b/agents-api/agents_api/models/session/get_session.py index 2d8956eb7..45d971c3f 100644 --- a/agents-api/agents_api/models/session/get_session.py +++ b/agents-api/agents_api/models/session/get_session.py @@ -95,7 +95,10 @@ def get_session( token_budget, context_overflow, @ "END" - }, updated_at = to_int(validity) + }, + updated_at = to_int(validity) + + :limit 1 """ queries = [ diff --git a/agents-api/agents_api/models/session/list_sessions.py b/agents-api/agents_api/models/session/list_sessions.py index 14f4cad0d..b7d5c0049 100644 --- a/agents-api/agents_api/models/session/list_sessions.py +++ b/agents-api/agents_api/models/session/list_sessions.py @@ -41,7 +41,8 @@ def list_sessions( direction: Literal["asc", "desc"] = "desc", metadata_filter: dict[str, Any] = {}, ) -> tuple[list[str], dict]: - """Lists sessions from the 'cozodb' database based on the provided filters. + """ + Lists sessions from the 'cozodb' database based on the provided filters. Parameters: developer_id (UUID): The developer's ID to filter sessions by. diff --git a/agents-api/agents_api/models/session/patch_session.py b/agents-api/agents_api/models/session/patch_session.py index a9f3121b9..4a119a684 100644 --- a/agents-api/agents_api/models/session/patch_session.py +++ b/agents-api/agents_api/models/session/patch_session.py @@ -60,12 +60,13 @@ def patch_session( developer_id: UUID, data: PatchSessionRequest, ) -> tuple[list[str], dict]: - """Patch session data in the 'cozodb' database. + """ + Patch session data in the 'cozodb' database. Parameters: - - session_id (UUID): The unique identifier for the session to be updated. - - developer_id (UUID): The unique identifier for the developer making the update. - - data (PatchSessionRequest): The request payload containing the updates to apply. + session_id (UUID): The unique identifier for the session to be updated. + developer_id (UUID): The unique identifier for the developer making the update. + data (PatchSessionRequest): The request payload containing the updates to apply. """ update_data = data.model_dump(exclude_unset=True) diff --git a/agents-api/agents_api/models/session/prepare_session_data.py b/agents-api/agents_api/models/session/prepare_session_data.py index e8cfb7fc7..bbbd9c4cd 100644 --- a/agents-api/agents_api/models/session/prepare_session_data.py +++ b/agents-api/agents_api/models/session/prepare_session_data.py @@ -209,6 +209,8 @@ def prepare_session_data( session_data[session], user_data[users], agent_data[agents] + + :limit 1 """ queries = [ diff --git a/agents-api/agents_api/models/task/create_or_update_task.py b/agents-api/agents_api/models/task/create_or_update_task.py index af7e258d9..d787d78b5 100644 --- a/agents-api/agents_api/models/task/create_or_update_task.py +++ b/agents-api/agents_api/models/task/create_or_update_task.py @@ -64,7 +64,9 @@ def create_or_update_task( data.metadata = data.metadata or {} data.input_schema = data.input_schema or {} - task_data = task_to_spec(data).model_dump(exclude_none=True, exclude_unset=True) + task_data = task_to_spec(data).model_dump( + exclude_none=True, exclude_unset=True, mode="json" + ) task_data.pop("task_id", None) task_data["created_at"] = utcnow().timestamp() diff --git a/agents-api/agents_api/models/task/create_task.py b/agents-api/agents_api/models/task/create_task.py index a44146c34..9affe0ead 100644 --- a/agents-api/agents_api/models/task/create_task.py +++ b/agents-api/agents_api/models/task/create_task.py @@ -55,7 +55,7 @@ def create_task( # Prepares the update data by filtering out None values and adding user_id and developer_id. columns, values = cozo_process_mutate_data( { - **task_spec.model_dump(exclude_none=True, exclude_unset=True), + **task_spec.model_dump(exclude_none=True, exclude_unset=True, mode="json"), "task_id": str(task_id), "agent_id": str(agent_id), } diff --git a/agents-api/agents_api/models/tools/create_tools.py b/agents-api/agents_api/models/tools/create_tools.py index dd8397797..b98a751d0 100644 --- a/agents-api/agents_api/models/tools/create_tools.py +++ b/agents-api/agents_api/models/tools/create_tools.py @@ -51,11 +51,11 @@ def create_tools( Constructs a datalog query for inserting tool records into the 'agent_functions' relation in the CozoDB. Parameters: - - agent_id (UUID): The unique identifier for the agent. - - data (list[CreateToolRequest]): A list of function definitions to be inserted. + agent_id (UUID): The unique identifier for the agent. + data (list[CreateToolRequest]): A list of function definitions to be inserted. Returns: - list[Tool] + list[Tool] """ tools_data = [ @@ -65,31 +65,35 @@ def create_tools( tool.type, tool.name, getattr(tool, tool.type).dict(), + tool.description if hasattr(tool, "description") else None, ] for tool in data ] ensure_tool_name_unique_query = """ - input[agent_id, tool_id, type, name, spec] <- $records + input[agent_id, tool_id, type, name, spec, description] <- $records ?[tool_id] := - input[agent_id, _, type, name, _], + input[agent_id, _, type, name, _, _], *tools{ agent_id: to_uuid(agent_id), tool_id, type, name, + spec, + description, } + :limit 1 :assert none """ - # Datalog query for inserting new tool records into the 'agent_functions' relation + # Datalog query for inserting new tool records into the 'tools' relation create_query = """ - input[agent_id, tool_id, type, name, spec] <- $records + input[agent_id, tool_id, type, name, spec, description] <- $records # Do not add duplicate - ?[agent_id, tool_id, type, name, spec] := - input[agent_id, tool_id, type, name, spec], + ?[agent_id, tool_id, type, name, spec, description] := + input[agent_id, tool_id, type, name, spec, description], not *tools{ agent_id: to_uuid(agent_id), type, @@ -102,6 +106,7 @@ def create_tools( type, name, spec, + description, } :returning """ diff --git a/agents-api/agents_api/models/tools/get_tool.py b/agents-api/agents_api/models/tools/get_tool.py index 5ea009064..465fd2efe 100644 --- a/agents-api/agents_api/models/tools/get_tool.py +++ b/agents-api/agents_api/models/tools/get_tool.py @@ -68,6 +68,8 @@ def get_tool( updated_at, created_at, } + + :limit 1 """ queries = [ diff --git a/agents-api/agents_api/models/tools/get_tool_args_from_metadata.py b/agents-api/agents_api/models/tools/get_tool_args_from_metadata.py index ade296a29..2cdb92cb9 100644 --- a/agents-api/agents_api/models/tools/get_tool_args_from_metadata.py +++ b/agents-api/agents_api/models/tools/get_tool_args_from_metadata.py @@ -46,6 +46,8 @@ def tool_args_for_task( # Right values overwrite left values # See: https://docs.cozodb.org/en/latest/functions.html#Func.Vector.concat values = concat(agent_{arg_type}, task_{arg_type}), + + :limit 1 """ queries = [ @@ -88,6 +90,8 @@ def tool_args_for_session( # Right values overwrite left values # See: https://docs.cozodb.org/en/latest/functions.html#Func.Vector.concat values = concat(agent_{arg_type}, session_{arg_type}), + + :limit 1 """ queries = [ diff --git a/agents-api/agents_api/models/tools/list_tools.py b/agents-api/agents_api/models/tools/list_tools.py index 931ca3ca9..727bf8028 100644 --- a/agents-api/agents_api/models/tools/list_tools.py +++ b/agents-api/agents_api/models/tools/list_tools.py @@ -30,7 +30,11 @@ @wrap_in_class( Tool, transform=lambda d: { - d["type"]: {**d.pop("spec"), "name": d["name"]}, + d["type"]: { + **d.pop("spec"), + "name": d["name"], + "description": d["description"], + }, **d, }, ) @@ -58,6 +62,7 @@ def list_tools( name, type, spec, + description, updated_at, created_at, ] := input[agent_id], @@ -67,6 +72,7 @@ def list_tools( name, type, spec, + description, updated_at, created_at, }} diff --git a/agents-api/agents_api/models/tools/patch_tool.py b/agents-api/agents_api/models/tools/patch_tool.py index 5bbfe1c91..0d8304d7d 100644 --- a/agents-api/agents_api/models/tools/patch_tool.py +++ b/agents-api/agents_api/models/tools/patch_tool.py @@ -40,16 +40,16 @@ def patch_tool( *, developer_id: UUID, agent_id: UUID, tool_id: UUID, data: PatchToolRequest ) -> tuple[list[str], dict]: """ - # Execute the datalog query and return the results as a DataFrame + Execute the datalog query and return the results as a DataFrame Updates the tool information for a given agent and tool ID in the 'cozodb' database. Parameters: - - agent_id (UUID): The unique identifier of the agent. - - tool_id (UUID): The unique identifier of the tool to be updated. - - data (PatchToolRequest): The request payload containing the updated tool information. + agent_id (UUID): The unique identifier of the agent. + tool_id (UUID): The unique identifier of the tool to be updated. + data (PatchToolRequest): The request payload containing the updated tool information. Returns: - - ResourceUpdatedResponse: The updated tool data. + ResourceUpdatedResponse: The updated tool data. """ agent_id = str(agent_id) diff --git a/agents-api/agents_api/models/user/create_or_update_user.py b/agents-api/agents_api/models/user/create_or_update_user.py index 9e9045e74..97db913c5 100644 --- a/agents-api/agents_api/models/user/create_or_update_user.py +++ b/agents-api/agents_api/models/user/create_or_update_user.py @@ -44,15 +44,15 @@ def create_or_update_user( Constructs and executes a datalog query to create a new user in the database. Parameters: - - user_id (UUID): The unique identifier for the user. - - developer_id (UUID): The unique identifier for the developer creating the user. - - name (str): The name of the user. - - about (str): A description of the user. - - metadata (dict, optional): A dictionary of metadata for the user. Defaults to an empty dict. - - client (CozoClient, optional): The CozoDB client instance to use for the query. Defaults to a preconfigured client instance. + user_id (UUID): The unique identifier for the user. + developer_id (UUID): The unique identifier for the developer creating the user. + name (str): The name of the user. + about (str): A description of the user. + metadata (dict, optional): A dictionary of metadata for the user. Defaults to an empty dict. + client (CozoClient, optional): The CozoDB client instance to use for the query. Defaults to a preconfigured client instance. Returns: - User: The newly created user record. + User: The newly created user record. """ # Extract the user data from the payload diff --git a/agents-api/agents_api/models/user/delete_user.py b/agents-api/agents_api/models/user/delete_user.py index b5fcb8424..0532f5cfa 100644 --- a/agents-api/agents_api/models/user/delete_user.py +++ b/agents-api/agents_api/models/user/delete_user.py @@ -49,12 +49,12 @@ def delete_user(*, developer_id: UUID, user_id: UUID) -> tuple[list[str], dict]: Constructs and returns a datalog query for deleting an user and its default settings from the database. Parameters: - - developer_id (UUID): The UUID of the developer owning the user. - - user_id (UUID): The UUID of the user to be deleted. - - client (CozoClient, optional): An instance of the CozoClient to execute the query. + developer_id (UUID): The UUID of the developer owning the user. + user_id (UUID): The UUID of the user to be deleted. + client (CozoClient, optional): An instance of the CozoClient to execute the query. Returns: - - ResourceDeletedResponse: The response indicating the deletion of the user. + ResourceDeletedResponse: The response indicating the deletion of the user. """ queries = [ diff --git a/agents-api/agents_api/models/user/get_user.py b/agents-api/agents_api/models/user/get_user.py index cc7c6f970..2b4f59c83 100644 --- a/agents-api/agents_api/models/user/get_user.py +++ b/agents-api/agents_api/models/user/get_user.py @@ -67,7 +67,10 @@ def get_user( created_at, updated_at, metadata, - }""" + } + + :limit 1 + """ queries = [ verify_developer_id_query(developer_id), diff --git a/agents-api/agents_api/models/user/list_users.py b/agents-api/agents_api/models/user/list_users.py index 57dc9b8c8..2a810b8e0 100644 --- a/agents-api/agents_api/models/user/list_users.py +++ b/agents-api/agents_api/models/user/list_users.py @@ -43,13 +43,13 @@ def list_users( Queries the 'cozodb' database to list users associated with a specific developer. Parameters: - - developer_id (UUID): The unique identifier of the developer. - - limit (int): The maximum number of users to return. Defaults to 100. - - offset (int): The number of users to skip before starting to collect the result set. Defaults to 0. - - metadata_filter (dict[str, Any]): A dictionary representing filters to apply on user metadata. + developer_id (UUID): The unique identifier of the developer. + limit (int): The maximum number of users to return. Defaults to 100. + offset (int): The number of users to skip before starting to collect the result set. Defaults to 0. + metadata_filter (dict[str, Any]): A dictionary representing filters to apply on user metadata. Returns: - - pd.DataFrame: A DataFrame containing the queried user data. + pd.DataFrame: A DataFrame containing the queried user data. """ # Construct a filter string for the metadata based on the provided dictionary. metadata_filter_str = ", ".join( diff --git a/agents-api/agents_api/models/user/patch_user.py b/agents-api/agents_api/models/user/patch_user.py index faf38298c..4498c6ded 100644 --- a/agents-api/agents_api/models/user/patch_user.py +++ b/agents-api/agents_api/models/user/patch_user.py @@ -49,12 +49,12 @@ def patch_user( Generates a datalog query for updating a user's information. Parameters: - - developer_id (UUID): The UUID of the developer. - - user_id (UUID): The UUID of the user to be updated. - - **update_data: Arbitrary keyword arguments representing the data to be updated. + developer_id (UUID): The UUID of the developer. + user_id (UUID): The UUID of the user to be updated. + **update_data: Arbitrary keyword arguments representing the data to be updated. Returns: - - tuple[str, dict]: A pandas DataFrame containing the results of the query execution. + tuple[str, dict]: A pandas DataFrame containing the results of the query execution. """ update_data = data.model_dump(exclude_unset=True) diff --git a/agents-api/agents_api/models/user/update_user.py b/agents-api/agents_api/models/user/update_user.py index 9a13d9369..fd8e7e2c8 100644 --- a/agents-api/agents_api/models/user/update_user.py +++ b/agents-api/agents_api/models/user/update_user.py @@ -39,7 +39,8 @@ def update_user( *, developer_id: UUID, user_id: UUID, data: UpdateUserRequest ) -> tuple[list[str], dict]: - """Updates user information in the 'cozodb' database. + """ + Updates user information in the 'cozodb' database. Parameters: developer_id (UUID): The developer's unique identifier. diff --git a/agents-api/agents_api/models/utils.py b/agents-api/agents_api/models/utils.py index c97d92451..c163642c0 100644 --- a/agents-api/agents_api/models/utils.py +++ b/agents-api/agents_api/models/utils.py @@ -127,6 +127,8 @@ def verify_developer_id_query(developer_id: UUID | str) -> str: matched[num], exists = num > 0, assert(exists, "Developer does not exist") + + :limit 1 """ @@ -162,6 +164,8 @@ def verify_developer_owns_resource_query( found[num], exists = num > 0, assert(exists, "Developer does not own resource {resource} with {resource_id_key} {resource_id_value}") + + :limit 1 """ rule = rule_head + rule_body + assertion diff --git a/agents-api/agents_api/routers/agents/create_agent.py b/agents-api/agents_api/routers/agents/create_agent.py index a662bef15..2e1c4df0a 100644 --- a/agents-api/agents_api/routers/agents/create_agent.py +++ b/agents-api/agents_api/routers/agents/create_agent.py @@ -4,13 +4,12 @@ from fastapi import Depends from starlette.status import HTTP_201_CREATED -import agents_api.models as models - from ...autogen.openapi_model import ( CreateAgentRequest, ResourceCreatedResponse, ) from ...dependencies.developer_id import get_developer_id +from ...models.agent.create_agent import create_agent as create_agent_query from .router import router @@ -20,7 +19,7 @@ async def create_agent( data: CreateAgentRequest, ) -> ResourceCreatedResponse: # TODO: Validate model name - agent = models.agent.create_agent( + agent = create_agent_query( developer_id=x_developer_id, data=data, ) diff --git a/agents-api/agents_api/routers/agents/list_agents.py b/agents-api/agents_api/routers/agents/list_agents.py index 21cd736b5..ef9bb09db 100644 --- a/agents-api/agents_api/routers/agents/list_agents.py +++ b/agents-api/agents_api/routers/agents/list_agents.py @@ -1,12 +1,11 @@ -import json -from json import JSONDecodeError from typing import Annotated, Literal from uuid import UUID -from fastapi import Depends, HTTPException, status +from fastapi import Depends from ...autogen.openapi_model import Agent, ListResponse from ...dependencies.developer_id import get_developer_id +from ...dependencies.query_filter import create_filter_extractor from ...models.agent.list_agents import list_agents as list_agents_query from .router import router @@ -14,27 +13,24 @@ @router.get("/agents", tags=["agents"]) async def list_agents( x_developer_id: Annotated[UUID, Depends(get_developer_id)], + # Expects the dot notation of object in query params + # Example: + # > ?metadata_filter.name=John&metadata_filter.age=30 + metadata_filter: Annotated[ + dict, Depends(create_filter_extractor("metadata_filter")) + ], limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", - metadata_filter: str = "{}", ) -> ListResponse[Agent]: - try: - metadata_filter = json.loads(metadata_filter) - except JSONDecodeError: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail="metadata_filter is not a valid JSON", - ) - agents = list_agents_query( developer_id=x_developer_id, limit=limit, offset=offset, sort_by=sort_by, direction=direction, - metadata_filter=metadata_filter, + metadata_filter=metadata_filter or {}, ) return ListResponse[Agent](items=agents) diff --git a/agents-api/agents_api/routers/docs/list_docs.py b/agents-api/agents_api/routers/docs/list_docs.py index 2ba99a932..a4701646d 100644 --- a/agents-api/agents_api/routers/docs/list_docs.py +++ b/agents-api/agents_api/routers/docs/list_docs.py @@ -1,12 +1,11 @@ -import json -from json import JSONDecodeError from typing import Annotated, Literal from uuid import UUID -from fastapi import Depends, HTTPException, status +from fastapi import Depends from ...autogen.openapi_model import Doc, ListResponse from ...dependencies.developer_id import get_developer_id +from ...dependencies.query_filter import create_filter_extractor from ...models.docs.list_docs import list_docs as list_docs_query from .router import router @@ -14,21 +13,15 @@ @router.get("/users/{user_id}/docs", tags=["docs"]) async def list_user_docs( x_developer_id: Annotated[UUID, Depends(get_developer_id)], + metadata_filter: Annotated[ + dict, Depends(create_filter_extractor("metadata_filter")) + ], user_id: UUID, limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", - metadata_filter: str = "{}", ) -> ListResponse[Doc]: - try: - metadata_filter = json.loads(metadata_filter) - except JSONDecodeError: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail="metadata_filter is not a valid JSON", - ) - docs = list_docs_query( developer_id=x_developer_id, owner_type="user", @@ -37,7 +30,7 @@ async def list_user_docs( offset=offset, sort_by=sort_by, direction=direction, - metadata_filter=metadata_filter, + metadata_filter=metadata_filter or {}, ) return ListResponse[Doc](items=docs) @@ -46,21 +39,15 @@ async def list_user_docs( @router.get("/agents/{agent_id}/docs", tags=["docs"]) async def list_agent_docs( x_developer_id: Annotated[UUID, Depends(get_developer_id)], + metadata_filter: Annotated[ + dict, Depends(create_filter_extractor("metadata_filter")) + ], agent_id: UUID, limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", - metadata_filter: str = "{}", ) -> ListResponse[Doc]: - try: - metadata_filter = json.loads(metadata_filter) - except JSONDecodeError: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail="metadata_filter is not a valid JSON", - ) - docs = list_docs_query( developer_id=x_developer_id, owner_type="agent", @@ -69,7 +56,7 @@ async def list_agent_docs( offset=offset, sort_by=sort_by, direction=direction, - metadata_filter=metadata_filter, + metadata_filter=metadata_filter or {}, ) return ListResponse[Doc](items=docs) diff --git a/agents-api/agents_api/routers/jobs/routers.py b/agents-api/agents_api/routers/jobs/routers.py index 8bff6c7cc..dff4bed7b 100644 --- a/agents-api/agents_api/routers/jobs/routers.py +++ b/agents-api/agents_api/routers/jobs/routers.py @@ -4,8 +4,8 @@ from fastapi import APIRouter from temporalio.client import WorkflowExecutionStatus -from agents_api.autogen.openapi_model import JobStatus -from agents_api.clients.temporal import get_client +from ...autogen.openapi_model import JobStatus +from ...clients.temporal import get_client router: APIRouter = APIRouter() diff --git a/agents-api/agents_api/routers/sessions/list_sessions.py b/agents-api/agents_api/routers/sessions/list_sessions.py index 21d7b643b..6a4555e6e 100644 --- a/agents-api/agents_api/routers/sessions/list_sessions.py +++ b/agents-api/agents_api/routers/sessions/list_sessions.py @@ -1,12 +1,11 @@ -import json -from json import JSONDecodeError from typing import Annotated, Literal from uuid import UUID -from fastapi import Depends, HTTPException, status +from fastapi import Depends from ...autogen.openapi_model import ListResponse, Session from ...dependencies.developer_id import get_developer_id +from ...dependencies.query_filter import create_filter_extractor from ...models.session.list_sessions import list_sessions as list_sessions_query from .router import router @@ -14,27 +13,21 @@ @router.get("/sessions", tags=["sessions"]) async def list_sessions( x_developer_id: Annotated[UUID, Depends(get_developer_id)], + metadata_filter: Annotated[ + dict, Depends(create_filter_extractor("metadata_filter")) + ] = {}, limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", - metadata_filter: str = "{}", ) -> ListResponse[Session]: - try: - metadata_filter = json.loads(metadata_filter) - except JSONDecodeError: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail="metadata_filter is not a valid JSON", - ) - sessions = list_sessions_query( developer_id=x_developer_id, limit=limit, offset=offset, sort_by=sort_by, direction=direction, - metadata_filter=metadata_filter, + metadata_filter=metadata_filter or {}, ) return ListResponse[Session](items=sessions) diff --git a/agents-api/agents_api/routers/tasks/create_or_update_task.py b/agents-api/agents_api/routers/tasks/create_or_update_task.py index e5245670a..50dbf19d9 100644 --- a/agents-api/agents_api/routers/tasks/create_or_update_task.py +++ b/agents-api/agents_api/routers/tasks/create_or_update_task.py @@ -6,15 +6,14 @@ from jsonschema.exceptions import SchemaError, ValidationError from starlette.status import HTTP_201_CREATED -from agents_api.autogen.openapi_model import ( +from ...autogen.openapi_model import ( CreateOrUpdateTaskRequest, ResourceUpdatedResponse, ) -from agents_api.dependencies.developer_id import get_developer_id -from agents_api.models.task.create_or_update_task import ( +from ...dependencies.developer_id import get_developer_id +from ...models.task.create_or_update_task import ( create_or_update_task as create_or_update_task_query, ) - from .router import router diff --git a/agents-api/agents_api/routers/tasks/get_execution_details.py b/agents-api/agents_api/routers/tasks/get_execution_details.py index 8da7b98c8..95bccbc07 100644 --- a/agents-api/agents_api/routers/tasks/get_execution_details.py +++ b/agents-api/agents_api/routers/tasks/get_execution_details.py @@ -1,12 +1,11 @@ from uuid import UUID -from agents_api.autogen.openapi_model import ( +from ...autogen.openapi_model import ( Execution, ) -from agents_api.models.execution.get_execution import ( +from ...models.execution.get_execution import ( get_execution as get_execution_query, ) - from .router import router diff --git a/agents-api/agents_api/routers/tasks/list_execution_transitions.py b/agents-api/agents_api/routers/tasks/list_execution_transitions.py index fd7be992a..9ce169509 100644 --- a/agents-api/agents_api/routers/tasks/list_execution_transitions.py +++ b/agents-api/agents_api/routers/tasks/list_execution_transitions.py @@ -1,14 +1,13 @@ from typing import Literal from uuid import UUID -from agents_api.autogen.openapi_model import ( +from ...autogen.openapi_model import ( ListResponse, Transition, ) -from agents_api.models.execution.list_execution_transitions import ( +from ...models.execution.list_execution_transitions import ( list_execution_transitions as list_execution_transitions_query, ) - from .router import router diff --git a/agents-api/agents_api/routers/tasks/list_task_executions.py b/agents-api/agents_api/routers/tasks/list_task_executions.py index f2961e54a..72cbd9b40 100644 --- a/agents-api/agents_api/routers/tasks/list_task_executions.py +++ b/agents-api/agents_api/routers/tasks/list_task_executions.py @@ -3,15 +3,14 @@ from fastapi import Depends -from agents_api.autogen.openapi_model import ( +from ...autogen.openapi_model import ( Execution, ListResponse, ) -from agents_api.dependencies.developer_id import get_developer_id -from agents_api.models.execution.list_executions import ( +from ...dependencies.developer_id import get_developer_id +from ...models.execution.list_executions import ( list_executions as list_task_executions_query, ) - from .router import router diff --git a/agents-api/agents_api/routers/tasks/list_tasks.py b/agents-api/agents_api/routers/tasks/list_tasks.py index 43a7e9158..a53983006 100644 --- a/agents-api/agents_api/routers/tasks/list_tasks.py +++ b/agents-api/agents_api/routers/tasks/list_tasks.py @@ -3,13 +3,12 @@ from fastapi import Depends -from agents_api.autogen.openapi_model import ( +from ...autogen.openapi_model import ( ListResponse, Task, ) -from agents_api.dependencies.developer_id import get_developer_id -from agents_api.models.task.list_tasks import list_tasks as list_tasks_query - +from ...dependencies.developer_id import get_developer_id +from ...models.task.list_tasks import list_tasks as list_tasks_query from .router import router diff --git a/agents-api/agents_api/routers/tasks/patch_execution.py b/agents-api/agents_api/routers/tasks/patch_execution.py index 0eb159c83..3cc45ee37 100644 --- a/agents-api/agents_api/routers/tasks/patch_execution.py +++ b/agents-api/agents_api/routers/tasks/patch_execution.py @@ -3,15 +3,14 @@ from fastapi import Depends -from agents_api.autogen.openapi_model import ( +from ...autogen.openapi_model import ( ResourceUpdatedResponse, UpdateExecutionRequest, ) -from agents_api.dependencies.developer_id import get_developer_id -from agents_api.models.execution.update_execution import ( +from ...dependencies.developer_id import get_developer_id +from ...models.execution.update_execution import ( update_execution as update_execution_query, ) - from .router import router diff --git a/agents-api/agents_api/routers/tasks/update_execution.py b/agents-api/agents_api/routers/tasks/update_execution.py index 968b6bdfb..d887c455d 100644 --- a/agents-api/agents_api/routers/tasks/update_execution.py +++ b/agents-api/agents_api/routers/tasks/update_execution.py @@ -4,19 +4,18 @@ from fastapi import Depends, HTTPException -from agents_api.autogen.openapi_model import ( +from ...autogen.openapi_model import ( ResumeExecutionRequest, StopExecutionRequest, ) -from agents_api.clients.temporal import get_client -from agents_api.dependencies.developer_id import get_developer_id -from agents_api.models.execution.get_paused_execution_token import ( +from ...clients.temporal import get_client +from ...dependencies.developer_id import get_developer_id +from ...models.execution.get_paused_execution_token import ( get_paused_execution_token, ) -from agents_api.models.execution.get_temporal_workflow_data import ( +from ...models.execution.get_temporal_workflow_data import ( get_temporal_workflow_data, ) - from .router import router diff --git a/agents-api/agents_api/worker/worker.py b/agents-api/agents_api/worker/worker.py index 77698364d..dc02cb4a7 100644 --- a/agents-api/agents_api/worker/worker.py +++ b/agents-api/agents_api/worker/worker.py @@ -15,7 +15,9 @@ def create_worker(client: Client) -> Any: from ..activities import task_steps from ..activities.demo import demo_activity from ..activities.embed_docs import embed_docs + from ..activities.excecute_api_call import execute_api_call from ..activities.execute_integration import execute_integration + from ..activities.execute_system import execute_system from ..activities.mem_mgmt import mem_mgmt from ..activities.mem_rating import mem_rating from ..activities.summarization import summarization @@ -52,6 +54,8 @@ def create_worker(client: Client) -> Any: demo_activity, embed_docs, execute_integration, + execute_system, + execute_api_call, mem_mgmt, mem_rating, summarization, diff --git a/agents-api/agents_api/workflows/task_execution/__init__.py b/agents-api/agents_api/workflows/task_execution/__init__.py index 253696622..f88bc7258 100644 --- a/agents-api/agents_api/workflows/task_execution/__init__.py +++ b/agents-api/agents_api/workflows/task_execution/__init__.py @@ -12,8 +12,11 @@ # Import necessary modules and types with workflow.unsafe.imports_passed_through(): from ...activities import task_steps + from ...activities.excecute_api_call import execute_api_call from ...activities.execute_integration import execute_integration + from ...activities.execute_system import execute_system from ...autogen.openapi_model import ( + ApiCallDef, EmbedStep, ErrorWorkflowStep, EvaluateStep, @@ -38,6 +41,7 @@ WorkflowStep, YieldStep, ) + from ...autogen.Tools import SystemDef from ...common.protocol.tasks import ( ExecutionInput, PartialTransition, @@ -514,9 +518,66 @@ async def run( state = PartialTransition(output=tool_call_response) - case ToolCallStep(), StepOutcome(output=_): - # FIXME: Handle system/api_call tool_calls - raise ApplicationError("Not implemented") + case ToolCallStep(), StepOutcome(output=tool_call) if tool_call[ + "type" + ] == "api_call": + call = tool_call["api_call"] + tool_name = call["name"] + arguments = call["arguments"] + apicall_spec = next( + (t for t in context.tools if t.name == tool_name), None + ) + + if apicall_spec is None: + raise ApplicationError(f"Integration {tool_name} not found") + + api_call = ApiCallDef( + method=apicall_spec.spec["method"], + url=apicall_spec.spec["url"], + headers=apicall_spec.spec["headers"], + follow_redirects=apicall_spec.spec["follow_redirects"], + ) + + if "json_" in arguments: + arguments["json"] = arguments["json_"] + del arguments["json_"] + + # Execute the API call using the `execute_api_call` function + tool_call_response = await workflow.execute_activity( + execute_api_call, + args=[ + api_call, + arguments, + ], + schedule_to_close_timeout=timedelta( + seconds=30 if debug or testing else 600 + ), + ) + + state = PartialTransition(output=tool_call_response) + + case ToolCallStep(), StepOutcome(output=tool_call) if tool_call[ + "type" + ] == "system": + call = tool_call.get("system") + + system_call = SystemDef(**call) + tool_call_response = await workflow.execute_activity( + execute_system, + args=[context, system_call], + schedule_to_close_timeout=timedelta( + seconds=30 if debug or testing else 600 + ), + ) + + # FIXME: This is a hack to make the output of the system call match + # the expected output format (convert uuid/datetime to strings) + def model_dump(obj): + if isinstance(obj, list): + return [model_dump(item) for item in obj] + return obj.model_dump(mode="json") + + state = PartialTransition(output=model_dump(tool_call_response)) case _: workflow.logger.error( diff --git a/agents-api/migrations/migrate_1727922523_add_description_to_tools.py b/agents-api/migrations/migrate_1727922523_add_description_to_tools.py new file mode 100644 index 000000000..1d6724090 --- /dev/null +++ b/agents-api/migrations/migrate_1727922523_add_description_to_tools.py @@ -0,0 +1,64 @@ +# /usr/bin/env python3 + +MIGRATION_ID = "add_description_to_tools" +CREATED_AT = 1727922523.283493 + + +add_description_to_tools = dict( + up=""" + ?[agent_id, tool_id, type, name, description, spec, updated_at, created_at] := *tools { + agent_id, tool_id, type, name, spec, updated_at, created_at + }, description = null + + :replace tools { + agent_id: Uuid, + tool_id: Uuid, + => + type: String, + name: String, + description: String?, + spec: Json, + + updated_at: Float default now(), + created_at: Float default now(), + } + """, + down=""" + ?[agent_id, tool_id, type, name, spec, updated_at, created_at] := *tools { + agent_id, tool_id, type, name, spec, updated_at, created_at + } + + :replace tools { + agent_id: Uuid, + tool_id: Uuid, + => + type: String, + name: String, + spec: Json, + + updated_at: Float default now(), + created_at: Float default now(), + } + """, +) + + +queries_to_run = [ + add_description_to_tools, +] + + +def run(client, *queries): + joiner = "}\n\n{" + + query = joiner.join(queries) + query = f"{{\n{query}\n}}" + client.run(query) + + +def up(client): + run(client, *[q["up"] for q in queries_to_run]) + + +def down(client): + run(client, *[q["down"] for q in reversed(queries_to_run)]) diff --git a/agents-api/tests/fixtures.py b/agents-api/tests/fixtures.py index d5b032311..9ae198c78 100644 --- a/agents-api/tests/fixtures.py +++ b/agents-api/tests/fixtures.py @@ -36,8 +36,7 @@ from agents_api.models.user.create_user import create_user from agents_api.models.user.delete_user import delete_user from agents_api.web import app - -from .utils import patch_embed_acompletion as patch_embed_acompletion_ctx +from tests.utils import patch_embed_acompletion as patch_embed_acompletion_ctx EMBEDDING_SIZE: int = 1024 diff --git a/agents-api/tests/test_activities.py b/agents-api/tests/test_activities.py index 6f65cd034..f6e2f4c76 100644 --- a/agents-api/tests/test_activities.py +++ b/agents-api/tests/test_activities.py @@ -7,6 +7,7 @@ from agents_api.clients import temporal from agents_api.env import temporal_task_queue from agents_api.workflows.demo import DemoWorkflow + from agents_api.workflows.task_execution.helpers import DEFAULT_RETRY_POLICY from .fixtures import ( diff --git a/agents-api/tests/test_docs_queries.py b/agents-api/tests/test_docs_queries.py index fcf7f9bd6..b0f886c4f 100644 --- a/agents-api/tests/test_docs_queries.py +++ b/agents-api/tests/test_docs_queries.py @@ -41,6 +41,7 @@ def _( ) +# TODO: Execute embedding workflow to fix this test and other docs tests @test("model: get docs") def _(client=cozo_client, doc=test_doc, developer_id=test_developer_id): get_doc( diff --git a/agents-api/tests/test_docs_routes.py b/agents-api/tests/test_docs_routes.py index d4b677d05..d61bfbcb7 100644 --- a/agents-api/tests/test_docs_routes.py +++ b/agents-api/tests/test_docs_routes.py @@ -1,6 +1,6 @@ from ward import test -from .fixtures import ( +from tests.fixtures import ( make_request, patch_embed_acompletion, test_agent, @@ -8,7 +8,7 @@ test_user, test_user_doc, ) -from .utils import patch_testing_temporal +from tests.utils import patch_testing_temporal @test("route: create user doc") diff --git a/agents-api/tests/test_execution_queries.py b/agents-api/tests/test_execution_queries.py index 29ddcbd86..42904776d 100644 --- a/agents-api/tests/test_execution_queries.py +++ b/agents-api/tests/test_execution_queries.py @@ -15,8 +15,7 @@ from agents_api.models.execution.get_execution import get_execution from agents_api.models.execution.list_executions import list_executions from agents_api.models.execution.lookup_temporal_data import lookup_temporal_data - -from .fixtures import ( +from tests.fixtures import ( cozo_client, test_developer_id, test_execution, diff --git a/agents-api/tests/test_execution_workflow.py b/agents-api/tests/test_execution_workflow.py index b6394f1bc..c701a2e2f 100644 --- a/agents-api/tests/test_execution_workflow.py +++ b/agents-api/tests/test_execution_workflow.py @@ -14,9 +14,8 @@ ) from agents_api.models.task.create_task import create_task from agents_api.routers.tasks.create_task_execution import start_execution - -from .fixtures import cozo_client, test_agent, test_developer_id -from .utils import patch_integration_service, patch_testing_temporal +from tests.fixtures import cozo_client, test_agent, test_developer_id +from tests.utils import patch_integration_service, patch_testing_temporal EMBEDDING_SIZE: int = 1024 @@ -441,6 +440,125 @@ async def _( assert result["hello"] == data.input["test"] +@test("workflow: system call - list agents") +async def _( + client=cozo_client, + developer_id=test_developer_id, + agent=test_agent, +): + data = CreateExecutionRequest(input={}) + + task = create_task( + developer_id=developer_id, + agent_id=agent.id, + data=CreateTaskRequest( + **{ + "name": "Test system tool task", + "description": "List agents using system call", + "input_schema": {"type": "object"}, + "tools": [ + { + "name": "list_agents", + "description": "List all agents", + "type": "system", + "system": {"resource": "agent", "operation": "list"}, + }, + ], + "main": [ + { + "tool": "list_agents", + "arguments": { + "limit": "10", + }, + }, + ], + } + ), + client=client, + ) + + async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): + execution, handle = await start_execution( + developer_id=developer_id, + task_id=task.id, + data=data, + client=client, + ) + + assert handle is not None + assert execution.task_id == task.id + assert execution.input == data.input + mock_run_task_execution_workflow.assert_called_once() + + result = await handle.result() + assert isinstance(result, list) + # Result's length should be less than or equal to the limit + assert len(result) <= 10 + # Check if all items are agent dictionaries + assert all(isinstance(agent, dict) for agent in result) + # Check if each agent has an 'id' field + assert all("id" in agent for agent in result) + + +@test("workflow: tool call api_call") +async def _( + client=cozo_client, + developer_id=test_developer_id, + agent=test_agent, +): + data = CreateExecutionRequest(input={"test": "input"}) + + task = create_task( + developer_id=developer_id, + agent_id=agent.id, + data=CreateTaskRequest( + **{ + "name": "test task", + "description": "test task about", + "input_schema": {"type": "object", "additionalProperties": True}, + "tools": [ + { + "type": "api_call", + "name": "hello", + "api_call": { + "method": "GET", + "url": "https://httpbin.org/get", + }, + } + ], + "main": [ + { + "tool": "hello", + "arguments": { + "params": {"test": "_.test"}, + }, + }, + { + "evaluate": {"hello": "_.json.args.test"}, + }, + ], + } + ), + client=client, + ) + + async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): + execution, handle = await start_execution( + developer_id=developer_id, + task_id=task.id, + data=data, + client=client, + ) + + assert handle is not None + assert execution.task_id == task.id + assert execution.input == data.input + mock_run_task_execution_workflow.assert_called_once() + + result = await handle.result() + assert result["hello"] == data.input["test"] + + @test("workflow: tool call integration dummy") async def _( client=cozo_client, diff --git a/agents-api/tests/test_task_queries.py b/agents-api/tests/test_task_queries.py index 2399416db..e61489df8 100644 --- a/agents-api/tests/test_task_queries.py +++ b/agents-api/tests/test_task_queries.py @@ -15,8 +15,7 @@ from agents_api.models.task.get_task import get_task from agents_api.models.task.list_tasks import list_tasks from agents_api.models.task.update_task import update_task - -from .fixtures import cozo_client, test_agent, test_developer_id, test_task +from tests.fixtures import cozo_client, test_agent, test_developer_id, test_task @test("model: create task") diff --git a/agents-api/tests/test_task_routes.py b/agents-api/tests/test_task_routes.py index 4ab708560..5d3c2f998 100644 --- a/agents-api/tests/test_task_routes.py +++ b/agents-api/tests/test_task_routes.py @@ -4,14 +4,14 @@ from ward import test -from .fixtures import ( +from tests.fixtures import ( client, make_request, test_agent, test_execution, test_task, ) -from .utils import patch_testing_temporal +from tests.utils import patch_testing_temporal @test("route: unauthorized should fail") diff --git a/agents-api/tests/test_tool_queries.py b/agents-api/tests/test_tool_queries.py index c21b7fbfb..b41125aaf 100644 --- a/agents-api/tests/test_tool_queries.py +++ b/agents-api/tests/test_tool_queries.py @@ -142,6 +142,7 @@ def _( ): update_data = UpdateToolRequest( name="updated_tool", + description="An updated description", type="function", function={ "description": "An updated function that prints hello world", diff --git a/agents-api/tests/test_workflow_routes.py b/agents-api/tests/test_workflow_routes.py index 34aa0101c..d1538535d 100644 --- a/agents-api/tests/test_workflow_routes.py +++ b/agents-api/tests/test_workflow_routes.py @@ -4,8 +4,8 @@ from ward import test -from .fixtures import cozo_client, test_agent, test_developer_id -from .utils import patch_http_client_with_temporal +from tests.fixtures import cozo_client, test_agent, test_developer_id +from tests.utils import patch_http_client_with_temporal @test("workflow route: evaluate step single") diff --git a/agents-api/tests/utils.py b/agents-api/tests/utils.py index 3f0f1f94a..dc1007d13 100644 --- a/agents-api/tests/utils.py +++ b/agents-api/tests/utils.py @@ -10,6 +10,7 @@ from agents_api.worker.codec import pydantic_data_converter from agents_api.worker.worker import create_worker +# Replicated here to prevent circular import EMBEDDING_SIZE: int = 1024 diff --git a/gateway/traefik.yml.template b/gateway/traefik.yml.template index 7423e3fde..4ab3b4367 100644 --- a/gateway/traefik.yml.template +++ b/gateway/traefik.yml.template @@ -36,7 +36,16 @@ http: middlewares: - agents-api-strip-prefix-api service: service-agents-api - priority: 2 + priority: 2 + + agents-api-redirect-to-docs: + entryPoints: + - web + rule: Path(`/`) + middlewares: + - agents-api-redirect-to-docs + service: service-agents-api + priority: 3 middlewares: corsHeaders: @@ -46,6 +55,11 @@ http: accessControlAllowOriginList: "*" addVaryHeader: true + agents-api-redirect-to-docs: + redirectRegex: + regex: "^(.*)$" + replacement: "/api/docs" + agents-api-add-headers: headers: customrequestheaders: diff --git a/sdks/node-sdk b/sdks/node-sdk index 8f190fd7c..1317978f9 160000 --- a/sdks/node-sdk +++ b/sdks/node-sdk @@ -1 +1 @@ -Subproject commit 8f190fd7c36f32aeb112ead95ba40254c8cbbc46 +Subproject commit 1317978f98661b5ae5b23d9c47a0a8d18f6f5718 diff --git a/sdks/python-sdk b/sdks/python-sdk index 872b15062..1b8c9fc9c 160000 --- a/sdks/python-sdk +++ b/sdks/python-sdk @@ -1 +1 @@ -Subproject commit 872b150629d33e563740095125a2276c1be023e8 +Subproject commit 1b8c9fc9c7b1fd2dc5eb60bbc908283bce99a1b2 diff --git a/typespec/.gitignore b/typespec/.gitignore index 98d4239d8..d0791ce2c 100644 --- a/typespec/.gitignore +++ b/typespec/.gitignore @@ -1 +1,8 @@ -/tsp-output/ +# Ignore everything in tsp-output +tsp-output/**/*.* + +# Don't ignore the openapi3 directory +!tsp-output/@typespec/openapi3/ + +# But don't ignore openapi-*.yaml files in tsp-output/@typespec/openapi3/ +!tsp-output/@typespec/openapi3/openapi-*.yaml diff --git a/typespec/common/interfaces.tsp b/typespec/common/interfaces.tsp index d44d8aab0..d9e4a9e2e 100644 --- a/typespec/common/interfaces.tsp +++ b/typespec/common/interfaces.tsp @@ -136,7 +136,7 @@ interface ChildLimitOffsetPagination< ...PaginationOptions, ): { - results: T[]; + items: T[]; }; } diff --git a/typespec/common/scalars.tsp b/typespec/common/scalars.tsp index 76ccef2d3..dc206fa02 100644 --- a/typespec/common/scalars.tsp +++ b/typespec/common/scalars.tsp @@ -7,6 +7,8 @@ namespace Common; @format("uuid") scalar uuid extends string; +alias concreteType = numeric | string | boolean | null; + /** * For Unicode character safety * See: https://unicode.org/reports/tr31/ @@ -69,3 +71,6 @@ alias integrationProvider = ( // | "webpage" // | "requests" ); + +/** A valid HTTP method */ +alias httpMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "CONNECT" | "TRACE"; diff --git a/typespec/common/types.tsp b/typespec/common/types.tsp index 7d954a80e..dd331e98c 100644 --- a/typespec/common/types.tsp +++ b/typespec/common/types.tsp @@ -11,6 +11,7 @@ namespace Common; // alias Metadata = Record; +alias MetadataFilter = Record; model ResourceCreatedResponse { @doc("ID of created resource") @@ -48,6 +49,6 @@ model PaginationOptions { /** Sort direction */ @query direction: sortDirection = "asc", - /** JSON string of object that should be used to filter objects by metadata */ - @query metadata_filter: string = "{}", + /** Object to filter results by metadata */ + @query metadata_filter: MetadataFilter, } \ No newline at end of file diff --git a/typespec/tasks/steps.tsp b/typespec/tasks/steps.tsp index 2267ae320..7a5f6d5b9 100644 --- a/typespec/tasks/steps.tsp +++ b/typespec/tasks/steps.tsp @@ -82,7 +82,7 @@ model ToolCallStepDef { tool: validPythonIdentifier; /** The input parameters for the tool (defaults to last step output) */ - arguments: ExpressionObject | "_" = "_"; + arguments: NestedExpressionObject | "_" = "_"; } model PromptStep extends BaseWorkflowStep<"prompt"> { diff --git a/typespec/tools/models.tsp b/typespec/tools/models.tsp index 8a8cead44..61918a4f7 100644 --- a/typespec/tools/models.tsp +++ b/typespec/tools/models.tsp @@ -34,8 +34,8 @@ model FunctionDef { /** DO NOT USE: This will be overriden by the tool name. Here only for compatibility reasons. */ name?: null = null; - /** Description of the function */ - description?: string; + /** DO NOT USE: This will be overriden by the tool description. Here only for compatibility reasons. */ + description?: null = null; /** The parameters the function accepts */ parameters?: FunctionParameters; @@ -50,9 +50,6 @@ model IntegrationDef { /** The specific method of the integration to call */ method?: string; - /** Optional description of the integration */ - description?: string; - /** The setup parameters the integration accepts */ setup?: FunctionParameters; @@ -60,28 +57,112 @@ model IntegrationDef { arguments?: FunctionParameters; } +// +// SYSTEM TOOL MODELS +// + +alias resourceType = ( + | "agent" + | "user" + | "task" + | "execution" + | "doc" + | "session" + | "job" +); + +alias subresourceType = ( + | "tool" + | "doc" + | "execution" + | "transition" +); + +alias operationType = ( + | "create" + | "update" + | "patch" + | "create_or_update" + | "embed" + | "change_status" + | "search" + | "chat" + | "history" + | "delete" + | "get" + | "list" +); + /** System definition */ model SystemDef { - /** The name of the system call */ - call: string; + /** Resource is the name of the resource to use */ + resource: resourceType; - /** Optional description of the system call */ - description?: string; + /** Operation is the name of the operation to perform */ + operation: operationType; + + /** Resource id (if applicable) */ + resource_id?: uuid; + + /** Sub-resource type (if applicable) */ + subresource?: subresourceType; /** The arguments to pre-apply to the system call */ arguments?: FunctionParameters; } -// TODO: We should use this model for all tools, not just functions and discriminate on the type +/** API call definition */ +model ApiCallDef { + /** The HTTP method to use */ + method: httpMethod; + + /** The URL to call */ + url: url; + + /** The headers to send with the request */ + headers?: Record; + + /** The content as base64 to send with the request */ + content?: string; + + /** The data to send as form data */ + data?: Record; + + /** JSON body to send with the request */ + json?: Record; + + /** Cookies */ + cookies?: Record; + + /** The parameters to send with the request */ + params?: string | Record; + + /** Follow redirects */ + follow_redirects?: boolean; + + /** The timeout for the request */ + timeout?: uint8; +} + + model Tool { /** Name of the tool (must be unique for this agent and a valid python identifier string )*/ name: validPythonIdentifier; + /** Description of the tool */ + description?: string; + /** The function to call */ function?: FunctionDef; + + /** The integration to call */ integration?: IntegrationDef; + + /** The system to call */ system?: SystemDef; - api_call?: never; // TODO: Implement + + /** The API call to make */ + api_call?: ApiCallDef; ...HasTimestamps; ...HasId; @@ -94,9 +175,9 @@ model FunctionCallOption { model NamedToolChoice { function?: FunctionCallOption; - integration?: never; // TODO: Implement - system?: never; // TODO: Implement - api_call?: never; // TODO: Implement + integration?: never; + system?: never; + api_call?: never; } model ToolResponse { @@ -128,9 +209,9 @@ model ChosenToolCall { type: ToolType; function?: FunctionCallOption; - integration?: never; // TODO: Implement - system?: never; // TODO: Implement - api_call?: never; // TODO: Implement + integration?: never; + system?: never; + api_call?: never; ...HasId; } diff --git a/typespec/tsp-output/@typespec/openapi3/openapi-0.4.0.yaml b/typespec/tsp-output/@typespec/openapi3/openapi-0.4.0.yaml new file mode 100644 index 000000000..7a7afc3e9 --- /dev/null +++ b/typespec/tsp-output/@typespec/openapi3/openapi-0.4.0.yaml @@ -0,0 +1,6350 @@ +openapi: 3.0.0 +info: + title: Julep API + termsOfService: https://julep.ai/terms + contact: + name: Julep AI + url: https://julep.ai + email: developers@julep.ai + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + summary: A backend for creating stateful AI apps + description: Julep is a backend for creating stateful AI apps with background tasks and long-term memory easily. + version: 0.4.0 +externalDocs: + url: https://docs.julep.ai + description: Julep API documentation +tags: [] +paths: + /agents: + get: + operationId: AgentsRoute_list + description: List Agents (paginated) + parameters: + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Agents.Agent' + required: + - items + post: + operationId: AgentsRoute_create + description: Create a new Agent + parameters: [] + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.CreateAgentRequest' + /agents/{id}: + post: + operationId: AgentsRoute_createOrUpdate + description: Create or update an Agent + parameters: + - $ref: '#/components/parameters/Agents.CreateOrUpdateAgentRequest.id' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.UpdateAgentRequest' + put: + operationId: AgentsRoute_update + description: Update an existing Agent by id (overwrites existing values; use PATCH for merging instead) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.UpdateAgentRequest' + patch: + operationId: AgentsRoute_patch + description: Update an existing Agent by id (merges with existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.PatchAgentRequest' + delete: + operationId: AgentsRoute_delete + description: Delete Agent by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + get: + operationId: AgentsRoute_get + description: Get an Agent by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.Agent' + /agents/{id}/docs: + get: + operationId: AgentDocsRoute_list + description: List Docs owned by an Agent + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Docs.Doc' + required: + - items + post: + operationId: AgentDocsRoute_create + description: Create a Doc for this Agent + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.CreateDocRequest' + /agents/{id}/docs/{child_id}: + delete: + operationId: AgentDocsRoute_delete + description: Delete a Doc for this Agent + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be deleted + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + /agents/{id}/search: + post: + operationId: AgentsDocsSearchRoute_search + description: Search Docs owned by an Agent + parameters: + - name: id + in: path + required: true + description: ID of the parent + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.DocSearchResponse' + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + body: + anyOf: + - $ref: '#/components/schemas/Docs.VectorDocSearchRequest' + - $ref: '#/components/schemas/Docs.TextOnlyDocSearchRequest' + - $ref: '#/components/schemas/Docs.HybridDocSearchRequest' + required: + - body + /agents/{id}/tasks: + get: + operationId: TasksRoute_list + description: List tasks (paginated) + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Tasks.Task' + required: + - items + post: + operationId: TasksRoute_create + description: Create a new task + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + text/x-yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + text/yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + application/json: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + /agents/{id}/tasks/{child_id}: + put: + operationId: TasksRoute_update + description: Update an existing task (overwrite existing values) + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be updated + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Tasks.UpdateTaskRequest' + patch: + operationId: TasksRoute_patch + description: Update an existing task (merges with existing values) + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be patched + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Tasks.PatchTaskRequest' + delete: + operationId: TasksRoute_delete + description: Delete a task by its id + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be deleted + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + /agents/{id}/tools: + get: + operationId: AgentToolsRoute_list + description: List tools of the given agent + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Tools.Tool' + required: + - items + post: + operationId: AgentToolsRoute_create + description: Create a new tool for this agent + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.CreateAgentRequest' + /agents/{id}/tools/{child_id}: + put: + operationId: AgentToolsRoute_update + description: Update an existing tool (overwrite existing values) + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be updated + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Tools.UpdateToolRequest' + patch: + operationId: AgentToolsRoute_patch + description: Update an existing tool (merges with existing values) + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be patched + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Tools.PatchToolRequest' + delete: + operationId: AgentToolsRoute_delete + description: Delete an existing tool by id + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be deleted + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + /agents/{parent_id}/tasks/{id}: + post: + operationId: TasksCreateOrUpdateRoute_createOrUpdate + description: Create or update a task + parameters: + - name: parent_id + in: path + required: true + description: ID of the agent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Tasks.CreateOrUpdateTaskRequest.id' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + text/x-yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + text/yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + application/json: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + /docs/{id}: + get: + operationId: IndividualDocsRoute_get + description: Get Doc by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.Doc' + /embed: + post: + operationId: EmbedRoute_embed + description: Embed a query for search + parameters: [] + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.EmbedQueryResponse' + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + body: + $ref: '#/components/schemas/Docs.EmbedQueryRequest' + required: + - body + /executions: + post: + operationId: ExecutionsRoute_resumeWithTaskToken + description: Resume an execution with a task token + parameters: + - name: task_token + in: query + required: true + description: A Task Token is a unique identifier for a specific Task Execution. + schema: + type: string + explode: false + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Executions.TaskTokenResumeExecutionRequest' + description: Request to resume an execution with a task token + security: + - {} + /executions/{id}: + get: + operationId: ExecutionsRoute_get + description: Get an Execution by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Executions.Execution' + put: + operationId: ExecutionsRoute_update + description: Update an existing Execution + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Executions.UpdateExecutionRequest' + /executions/{id}/transitions: + get: + operationId: ExecutionTransitionsRoute_list + description: List the Transitions of an Execution by id + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + type: object + properties: + transitions: + type: array + items: + $ref: '#/components/schemas/Executions.Transition' + required: + - transitions + required: + - items + /executions/{id}/transitions.stream: + get: + operationId: ExecutionTransitionsStreamRoute_stream + description: Stream events emitted by the given execution + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - name: next_token + in: query + required: true + description: Next page token + schema: + type: string + nullable: true + default: null + explode: false + responses: + '200': + description: The request has succeeded. + content: + text/event-stream: + schema: + $ref: '#/components/schemas/Executions.TransitionEvent' + /jobs/{id}: + get: + operationId: JobRoute_get + description: Get the status of an existing Job by its id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Jobs.JobStatus' + /sessions: + get: + operationId: SessionsRoute_list + description: List sessions (paginated) + parameters: + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Sessions.Session' + required: + - items + post: + operationId: SessionsRoute_create + description: Create a new session + parameters: [] + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.CreateSessionRequest' + /sessions/{id}: + post: + operationId: SessionsRoute_createOrUpdate + description: Create or update a session + parameters: + - $ref: '#/components/parameters/Sessions.CreateOrUpdateSessionRequest.id' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.CreateSessionRequest' + put: + operationId: SessionsRoute_update + description: Update an existing session by its id (overwrites all existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.UpdateSessionRequest' + patch: + operationId: SessionsRoute_patch + description: Update an existing session by its id (merges with existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.PatchSessionRequest' + delete: + operationId: SessionsRoute_delete + description: Delete a session by its id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + get: + operationId: SessionsRoute_get + description: Get a session by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.Session' + /sessions/{id}/chat: + post: + operationId: ChatRoute_generate + description: Generate a response from the model + parameters: + - name: id + in: path + required: true + description: The session ID + schema: + $ref: '#/components/schemas/Common.uuid' + - name: x-custom-api-key + in: header + required: false + description: Custom API key + schema: + type: string + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/Chat.ChunkChatResponse' + - $ref: '#/components/schemas/Chat.MessageChatResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Chat.ChatInput' + description: Request to generate a response from the model + /sessions/{id}/history: + delete: + operationId: HistoryRoute_delete + description: Clear the history of a Session (resets the Session) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + get: + operationId: HistoryRoute_history + description: Get history of a Session + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Entries.History' + /tasks/{id}/executions: + post: + operationId: TaskExecutionsRoute_create + description: Create an execution for the given task + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Executions.CreateExecutionRequest' + get: + operationId: TaskExecutionsRoute_list + description: List executions of the given task + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Executions.Execution' + required: + - items + /users: + get: + operationId: UsersRoute_list + description: List users (paginated) + parameters: + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Users.User' + required: + - items + post: + operationId: UsersRoute_create + description: Create a new user + parameters: [] + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Users.CreateUserRequest' + /users/{id}: + post: + operationId: UsersRoute_createOrUpdate + description: Create or update a user + parameters: + - $ref: '#/components/parameters/Users.CreateOrUpdateUserRequest' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Users.CreateUserRequest' + put: + operationId: UsersRoute_update + description: Update an existing user by id (overwrite existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Users.UpdateUserRequest' + patch: + operationId: UsersRoute_patch + description: Update an existing user by id (merge with existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Users.PatchUserRequest' + delete: + operationId: UsersRoute_delete + description: Delete a user by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + get: + operationId: UsersRoute_get + description: Get a user by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Users.User' + /users/{id}/docs: + get: + operationId: UserDocsRoute_list + description: List Docs owned by a User + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Docs.Doc' + required: + - items + post: + operationId: UserDocsRoute_create + description: Create a Doc for this User + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.CreateDocRequest' + /users/{id}/docs/{child_id}: + delete: + operationId: UserDocsRoute_delete + description: Delete a Doc for this User + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be deleted + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + /users/{id}/search: + post: + operationId: UserDocsSearchRoute_search + description: Search Docs owned by a User + parameters: + - name: id + in: path + required: true + description: ID of the parent + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.DocSearchResponse' + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + body: + anyOf: + - $ref: '#/components/schemas/Docs.VectorDocSearchRequest' + - $ref: '#/components/schemas/Docs.TextOnlyDocSearchRequest' + - $ref: '#/components/schemas/Docs.HybridDocSearchRequest' + required: + - body +security: + - ApiKeyAuth: [] + - ApiKeyAuth_: [] +components: + parameters: + Agents.CreateOrUpdateAgentRequest.id: + name: id + in: path + required: true + schema: + $ref: '#/components/schemas/Common.uuid' + Common.PaginationOptions.direction: + name: direction + in: query + required: true + description: Sort direction + schema: + type: string + enum: + - asc + - desc + default: asc + explode: false + Common.PaginationOptions.limit: + name: limit + in: query + required: true + description: Limit the number of items returned + schema: + $ref: '#/components/schemas/Common.limit' + default: 100 + explode: false + Common.PaginationOptions.metadata_filter: + name: metadata_filter + in: query + required: true + description: Object to filter results by metadata + schema: + type: object + additionalProperties: + anyOf: + - type: number + - type: string + - type: boolean + nullable: true + explode: false + Common.PaginationOptions.offset: + name: offset + in: query + required: true + description: Offset the items returned + schema: + $ref: '#/components/schemas/Common.offset' + default: 0 + explode: false + Common.PaginationOptions.sort_by: + name: sort_by + in: query + required: true + description: Sort by a field + schema: + type: string + enum: + - created_at + - updated_at + default: created_at + explode: false + Sessions.CreateOrUpdateSessionRequest.id: + name: id + in: path + required: true + schema: + $ref: '#/components/schemas/Common.uuid' + Tasks.CreateOrUpdateTaskRequest.id: + name: id + in: path + required: true + schema: + $ref: '#/components/schemas/Common.uuid' + Users.CreateOrUpdateUserRequest: + name: id + in: path + required: true + schema: + $ref: '#/components/schemas/Common.uuid' + schemas: + Agents.Agent: + type: object + required: + - id + - created_at + - updated_at + - name + - about + - model + - instructions + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + Agents.CreateAgentRequest: + type: object + required: + - name + - about + - model + - instructions + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + description: Payload for creating a agent (and associated documents) + Agents.CreateOrUpdateAgentRequest: + type: object + required: + - id + - name + - about + - model + - instructions + properties: + id: + $ref: '#/components/schemas/Common.uuid' + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + allOf: + - $ref: '#/components/schemas/Agents.CreateAgentRequest' + Agents.PatchAgentRequest: + type: object + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + description: Payload for patching a agent + Agents.UpdateAgentRequest: + type: object + required: + - name + - about + - model + - instructions + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + description: Payload for updating a agent + Chat.BaseChatOutput: + type: object + required: + - index + - finish_reason + properties: + index: + type: integer + format: uint32 + finish_reason: + allOf: + - $ref: '#/components/schemas/Chat.FinishReason' + description: The reason the model stopped generating tokens + default: stop + logprobs: + allOf: + - $ref: '#/components/schemas/Chat.LogProbResponse' + description: The log probabilities of tokens + Chat.BaseChatResponse: + type: object + required: + - jobs + - docs + - created_at + - id + properties: + usage: + allOf: + - $ref: '#/components/schemas/Chat.CompetionUsage' + description: Usage statistics for the completion request + jobs: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + description: Background job IDs that may have been spawned from this interaction. + default: [] + readOnly: true + docs: + type: array + items: + $ref: '#/components/schemas/Docs.DocReference' + description: Documents referenced for this request (for citation purposes). + default: [] + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + Chat.BaseTokenLogProb: + type: object + required: + - token + - logprob + properties: + token: + type: string + logprob: + type: number + format: float + description: The log probability of the token + bytes: + type: array + items: + type: integer + format: uint16 + Chat.ChatInput: + type: object + required: + - remember + - recall + - save + - stream + - stop + properties: + remember: + type: boolean + description: 'DISABLED: Whether this interaction should form new memories or not (will be enabled in a future release)' + default: false + readOnly: true + recall: + type: boolean + description: Whether previous memories and docs should be recalled or not + default: true + save: + type: boolean + description: Whether this interaction should be stored in the session history or not + default: true + model: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Identifier of the model to be used + stream: + type: boolean + description: Indicates if the server should stream the response as it's generated + default: false + stop: + type: array + items: + type: string + maxItems: 4 + description: Up to 4 sequences where the API will stop generating further tokens. + default: [] + seed: + type: integer + format: int16 + minimum: -1 + maximum: 1000 + description: If specified, the system will make a best effort to sample deterministically for that particular seed value + max_tokens: + type: integer + format: uint32 + minimum: 1 + description: The maximum number of tokens to generate in the chat completion + logit_bias: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.logit_bias' + description: Modify the likelihood of specified tokens appearing in the completion + response_format: + anyOf: + - $ref: '#/components/schemas/Chat.SimpleCompletionResponseFormat' + - $ref: '#/components/schemas/Chat.SchemaCompletionResponseFormat' + description: Response format (set to `json_object` to restrict output to JSON) + agent: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Agent ID of the agent to use for this interaction. (Only applicable for multi-agent sessions) + repetition_penalty: + type: number + format: float + minimum: 0 + maximum: 2 + description: Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + length_penalty: + type: number + format: float + minimum: 0 + maximum: 2 + description: Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. + min_p: + type: number + format: float + minimum: 0 + maximum: 1 + description: Minimum probability compared to leading token to be considered + frequency_penalty: + type: number + format: float + minimum: -2 + maximum: 2 + description: Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + presence_penalty: + type: number + format: float + minimum: -2 + maximum: 2 + description: Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + temperature: + type: number + format: float + minimum: 0 + maximum: 5 + description: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. + top_p: + type: number + format: float + minimum: 0 + maximum: 1 + description: Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. + allOf: + - $ref: '#/components/schemas/Chat.ChatInputData' + Chat.ChatInputData: + type: object + required: + - messages + - tools + properties: + messages: + type: array + items: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - type: string + - type: array + items: + type: string + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + continue: + type: boolean + description: Whether to continue this message or return a new one + minItems: 1 + description: A list of new input messages comprising the conversation so far. + tools: + type: array + items: + $ref: '#/components/schemas/Tools.Tool' + description: (Advanced) List of tools that are provided in addition to agent's default set of tools. + default: [] + tool_choice: + anyOf: + - type: string + enum: + - auto + - none + - $ref: '#/components/schemas/Tools.NamedToolChoice' + description: Can be one of existing tools given to the agent earlier or the ones provided in this request. + Chat.ChatOutputChunk: + type: object + required: + - delta + properties: + delta: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - type: string + - type: array + items: + type: string + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + continue: + type: boolean + description: Whether to continue this message or return a new one + description: The message generated by the model + allOf: + - $ref: '#/components/schemas/Chat.BaseChatOutput' + description: Streaming chat completion output + Chat.ChatSettings: + type: object + required: + - stream + - stop + properties: + model: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Identifier of the model to be used + stream: + type: boolean + description: Indicates if the server should stream the response as it's generated + default: false + stop: + type: array + items: + type: string + maxItems: 4 + description: Up to 4 sequences where the API will stop generating further tokens. + default: [] + seed: + type: integer + format: int16 + minimum: -1 + maximum: 1000 + description: If specified, the system will make a best effort to sample deterministically for that particular seed value + max_tokens: + type: integer + format: uint32 + minimum: 1 + description: The maximum number of tokens to generate in the chat completion + logit_bias: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.logit_bias' + description: Modify the likelihood of specified tokens appearing in the completion + response_format: + anyOf: + - $ref: '#/components/schemas/Chat.SimpleCompletionResponseFormat' + - $ref: '#/components/schemas/Chat.SchemaCompletionResponseFormat' + description: Response format (set to `json_object` to restrict output to JSON) + agent: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Agent ID of the agent to use for this interaction. (Only applicable for multi-agent sessions) + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + Chat.ChunkChatResponse: + type: object + required: + - choices + properties: + choices: + type: array + items: + $ref: '#/components/schemas/Chat.ChatOutputChunk' + description: The deltas generated by the model + allOf: + - $ref: '#/components/schemas/Chat.BaseChatResponse' + Chat.CompetionUsage: + type: object + properties: + completion_tokens: + type: integer + format: uint32 + description: Number of tokens in the generated completion + readOnly: true + prompt_tokens: + type: integer + format: uint32 + description: Number of tokens in the prompt + readOnly: true + total_tokens: + type: integer + format: uint32 + description: Total number of tokens used in the request (prompt + completion) + readOnly: true + description: Usage statistics for the completion request + Chat.DefaultChatSettings: + type: object + properties: + repetition_penalty: + type: number + format: float + minimum: 0 + maximum: 2 + description: Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + length_penalty: + type: number + format: float + minimum: 0 + maximum: 2 + description: Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. + min_p: + type: number + format: float + minimum: 0 + maximum: 1 + description: Minimum probability compared to leading token to be considered + allOf: + - $ref: '#/components/schemas/Chat.OpenAISettings' + description: Default settings for the chat session (also used by the agent) + Chat.FinishReason: + type: string + enum: + - stop + - length + - content_filter + - tool_calls + description: |- + The reason the model stopped generating tokens. This will be `stop` + if the model hit a natural stop point or a provided stop sequence, + `length` if the maximum number of tokens specified in the request + was reached, `content_filter` if content was omitted due to a flag + from our content filters, `tool_calls` if the model called a tool. + Chat.LogProbResponse: + type: object + required: + - content + properties: + content: + type: array + items: + $ref: '#/components/schemas/Chat.TokenLogProb' + nullable: true + description: The log probabilities of the tokens + Chat.MessageChatResponse: + type: object + required: + - choices + properties: + choices: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Chat.SingleChatOutput' + - $ref: '#/components/schemas/Chat.MultipleChatOutput' + description: The deltas generated by the model + allOf: + - $ref: '#/components/schemas/Chat.BaseChatResponse' + Chat.MultipleChatOutput: + type: object + required: + - messages + properties: + messages: + type: array + items: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - type: string + - type: array + items: + type: string + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + tool_calls: + type: array + items: + $ref: '#/components/schemas/Tools.ChosenToolCall' + nullable: true + description: Tool calls generated by the model. + default: [] + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + minItems: 1 + readOnly: true + allOf: + - $ref: '#/components/schemas/Chat.BaseChatOutput' + description: The output returned by the model. Note that, depending on the model provider, they might return more than one message. + Chat.OpenAISettings: + type: object + properties: + frequency_penalty: + type: number + format: float + minimum: -2 + maximum: 2 + description: Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + presence_penalty: + type: number + format: float + minimum: -2 + maximum: 2 + description: Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + temperature: + type: number + format: float + minimum: 0 + maximum: 5 + description: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. + top_p: + type: number + format: float + minimum: 0 + maximum: 1 + description: Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. + Chat.SchemaCompletionResponseFormat: + type: object + required: + - type + - json_schema + properties: + type: + type: string + enum: + - json_schema + description: The format of the response + default: json_schema + json_schema: + type: object + additionalProperties: {} + description: The schema of the response + Chat.SimpleCompletionResponseFormat: + type: object + required: + - type + properties: + type: + type: string + enum: + - text + - json_object + description: The format of the response + default: text + Chat.SingleChatOutput: + type: object + required: + - message + properties: + message: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - type: string + - type: array + items: + type: string + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + tool_calls: + type: array + items: + $ref: '#/components/schemas/Tools.ChosenToolCall' + nullable: true + description: Tool calls generated by the model. + default: [] + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + allOf: + - $ref: '#/components/schemas/Chat.BaseChatOutput' + description: The output returned by the model. Note that, depending on the model provider, they might return more than one message. + Chat.TokenLogProb: + type: object + required: + - top_logprobs + properties: + top_logprobs: + type: array + items: + $ref: '#/components/schemas/Chat.BaseTokenLogProb' + minItems: 1 + description: The log probabilities of the tokens + readOnly: true + allOf: + - $ref: '#/components/schemas/Chat.BaseTokenLogProb' + Common.JinjaTemplate: + type: string + description: A valid jinja template. + Common.PyExpression: + type: string + description: A simple python expression compatible with SimpleEval. + Common.ResourceCreatedResponse: + type: object + required: + - id + - created_at + - jobs + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: ID of created resource + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + jobs: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + description: IDs (if any) of jobs created as part of this request + default: [] + readOnly: true + Common.ResourceDeletedResponse: + type: object + required: + - id + - deleted_at + - jobs + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: ID of deleted resource + deleted_at: + type: string + format: date-time + description: When this resource was deleted as UTC date-time + readOnly: true + jobs: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + description: IDs (if any) of jobs created as part of this request + default: [] + readOnly: true + Common.ResourceUpdatedResponse: + type: object + required: + - id + - updated_at + - jobs + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: ID of updated resource + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + jobs: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + description: IDs (if any) of jobs created as part of this request + default: [] + readOnly: true + Common.identifierSafeUnicode: + type: string + maxLength: 120 + pattern: ^[\p{L}\p{Nl}\p{Pattern_Syntax}\p{Pattern_White_Space}]+[\p{ID_Start}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\p{Pattern_Syntax}\p{Pattern_White_Space}]*$ + description: |- + For Unicode character safety + See: https://unicode.org/reports/tr31/ + See: https://www.unicode.org/reports/tr39/#Identifier_Characters + Common.limit: + type: integer + format: uint16 + minimum: 1 + maximum: 1000 + exclusiveMaximum: true + description: Limit the number of results + Common.logit_bias: + type: number + format: float + minimum: -100 + maximum: 100 + Common.offset: + type: integer + format: uint32 + minimum: 0 + description: Offset to apply to the results + Common.uuid: + type: string + format: uuid + Common.validPythonIdentifier: + type: string + maxLength: 40 + pattern: ^[^\W0-9]\w*$ + description: Valid python identifier names + Docs.BaseDocSearchRequest: + type: object + required: + - limit + - lang + properties: + limit: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + default: 10 + lang: + type: string + enum: + - en-US + description: The language to be used for text-only search. Support for other languages coming soon. + default: en-US + Docs.CreateDocRequest: + type: object + required: + - title + - content + properties: + metadata: + type: object + additionalProperties: {} + title: + type: string + maxLength: 800 + description: Title describing what this document contains + content: + anyOf: + - type: string + - type: array + items: + type: string + description: Contents of the document + description: Payload for creating a doc + Docs.Doc: + type: object + required: + - id + - created_at + - title + - content + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + title: + type: string + maxLength: 800 + description: Title describing what this document contains + content: + anyOf: + - type: string + - type: array + items: + type: string + description: Contents of the document + embeddings: + anyOf: + - type: array + items: + type: number + format: float + - type: array + items: + type: array + items: + type: number + format: float + description: Embeddings for the document + readOnly: true + Docs.DocOwner: + type: object + required: + - id + - role + properties: + id: + anyOf: + - allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + - allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + role: + type: string + enum: + - user + - agent + Docs.DocReference: + type: object + required: + - owner + - id + - snippets + - distance + properties: + owner: + allOf: + - $ref: '#/components/schemas/Docs.DocOwner' + description: The owner of this document. + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + description: ID of the document + title: + type: string + snippets: + type: array + items: + $ref: '#/components/schemas/Docs.Snippet' + minItems: 1 + distance: + type: number + nullable: true + default: null + Docs.DocSearchResponse: + type: object + required: + - docs + - time + properties: + docs: + type: array + items: + $ref: '#/components/schemas/Docs.DocReference' + description: The documents that were found + time: + type: number + minimum: 0 + exclusiveMinimum: true + description: The time taken to search in seconds + Docs.EmbedQueryRequest: + type: object + required: + - text + properties: + text: + anyOf: + - type: string + - type: array + items: + type: string + description: Text or texts to embed + Docs.EmbedQueryResponse: + type: object + required: + - vectors + properties: + vectors: + type: array + items: + type: array + items: + type: number + description: The embedded vectors + Docs.HybridDocSearchRequest: + type: object + required: + - confidence + - alpha + - text + - vector + properties: + confidence: + type: number + minimum: 0 + maximum: 1 + description: The confidence cutoff level + default: 0.5 + alpha: + type: number + minimum: 0 + maximum: 1 + description: The weight to apply to BM25 vs Vector search results. 0 => pure BM25; 1 => pure vector; + default: 0.75 + text: + type: string + description: Text to use in the search. In `hybrid` search mode, either `text` or both `text` and `vector` fields are required. + vector: + type: array + items: + type: number + description: Vector to use in the search. Must be the same dimensions as the embedding model or else an error will be thrown. + allOf: + - $ref: '#/components/schemas/Docs.BaseDocSearchRequest' + Docs.Snippet: + type: object + required: + - index + - content + properties: + index: + type: integer + format: uint16 + content: + type: string + Docs.TextOnlyDocSearchRequest: + type: object + required: + - text + properties: + text: + type: string + description: Text to use in the search. + allOf: + - $ref: '#/components/schemas/Docs.BaseDocSearchRequest' + Docs.VectorDocSearchRequest: + type: object + required: + - confidence + - vector + properties: + confidence: + type: number + minimum: 0 + maximum: 1 + description: The confidence cutoff level + default: 0.5 + vector: + type: array + items: + type: number + description: Vector to use in the search. Must be the same dimensions as the embedding model or else an error will be thrown. + allOf: + - $ref: '#/components/schemas/Docs.BaseDocSearchRequest' + Entries.BaseEntry: + type: object + required: + - role + - name + - content + - source + - tokenizer + - token_count + - timestamp + properties: + role: + $ref: '#/components/schemas/Entries.ChatMLRole' + name: + type: string + nullable: true + default: null + content: + anyOf: + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + - $ref: '#/components/schemas/Tools.Tool' + - $ref: '#/components/schemas/Tools.ChosenToolCall' + - type: string + - $ref: '#/components/schemas/Tools.ToolResponse' + - type: array + items: + anyOf: + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + - $ref: '#/components/schemas/Tools.Tool' + - $ref: '#/components/schemas/Tools.ChosenToolCall' + - type: string + - $ref: '#/components/schemas/Tools.ToolResponse' + source: + type: string + enum: + - api_request + - api_response + - tool_response + - internal + - summarizer + - meta + tokenizer: + type: string + token_count: + type: integer + format: uint16 + timestamp: + type: number + minimum: 0 + description: This is the time that this event refers to. + Entries.ChatMLRole: + type: string + enum: + - user + - assistant + - system + - function + - function_response + - function_call + - auto + description: ChatML role (system|assistant|user|function_call|function|function_response|auto) + Entries.Entry: + type: object + required: + - created_at + - id + properties: + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + allOf: + - $ref: '#/components/schemas/Entries.BaseEntry' + Entries.History: + type: object + required: + - entries + - relations + - session_id + - created_at + properties: + entries: + type: array + items: + $ref: '#/components/schemas/Entries.Entry' + relations: + type: array + items: + $ref: '#/components/schemas/Entries.Relation' + session_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + Entries.ImageDetail: + type: string + enum: + - low + - high + - auto + description: Image detail level + Entries.Relation: + type: object + required: + - head + - relation + - tail + properties: + head: + $ref: '#/components/schemas/Common.uuid' + relation: + type: string + tail: + $ref: '#/components/schemas/Common.uuid' + Executions.CreateExecutionRequest: + type: object + required: + - input + properties: + input: + type: object + additionalProperties: {} + description: The input to the execution + output: + description: The output of the execution if it succeeded + error: + type: string + description: The error of the execution if it failed + metadata: + type: object + additionalProperties: {} + description: Payload for creating an execution + Executions.Execution: + type: object + required: + - task_id + - status + - input + - created_at + - updated_at + - id + properties: + task_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + description: The ID of the task that the execution is running + status: + type: string + enum: + - queued + - starting + - running + - awaiting_input + - succeeded + - failed + - cancelled + description: The status of the execution + readOnly: true + input: + type: object + additionalProperties: {} + description: The input to the execution + output: + description: The output of the execution if it succeeded + error: + type: string + description: The error of the execution if it failed + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + metadata: + type: object + additionalProperties: {} + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + Executions.ResumeExecutionRequest: + type: object + required: + - status + properties: + status: + type: string + enum: + - running + default: running + input: + type: object + additionalProperties: {} + description: The input to resume the execution with + allOf: + - $ref: '#/components/schemas/Executions.UpdateExecutionRequest' + Executions.StopExecutionRequest: + type: object + required: + - status + - reason + properties: + status: + type: string + enum: + - cancelled + default: cancelled + reason: + type: string + nullable: true + description: The reason for stopping the execution + default: null + allOf: + - $ref: '#/components/schemas/Executions.UpdateExecutionRequest' + Executions.TaskTokenResumeExecutionRequest: + type: object + required: + - status + properties: + status: + type: string + enum: + - running + default: running + input: + type: object + additionalProperties: {} + description: The input to resume the execution with + Executions.Transition: + type: object + required: + - execution_id + - current + - next + - id + properties: + execution_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + current: + allOf: + - $ref: '#/components/schemas/Executions.TransitionTarget' + readOnly: true + next: + type: object + allOf: + - $ref: '#/components/schemas/Executions.TransitionTarget' + nullable: true + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + allOf: + - $ref: '#/components/schemas/Executions.TransitionEvent' + Executions.TransitionEvent: + type: object + required: + - type + - output + - created_at + - updated_at + properties: + type: + type: string + enum: + - init + - init_branch + - finish + - finish_branch + - wait + - resume + - error + - step + - cancelled + readOnly: true + output: + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + Executions.TransitionTarget: + type: object + required: + - workflow + - step + properties: + workflow: + $ref: '#/components/schemas/Common.identifierSafeUnicode' + step: + type: integer + format: uint16 + Executions.UpdateExecutionRequest: + type: object + required: + - status + properties: + status: + type: string + enum: + - queued + - starting + - running + - awaiting_input + - succeeded + - failed + - cancelled + discriminator: + propertyName: status + mapping: + cancelled: '#/components/schemas/Executions.StopExecutionRequest' + running: '#/components/schemas/Executions.ResumeExecutionRequest' + Jobs.JobState: + type: string + enum: + - pending + - in_progress + - retrying + - succeeded + - aborted + - failed + - unknown + description: 'Current state (one of: pending, in_progress, retrying, succeeded, aborted, failed)' + Jobs.JobStatus: + type: object + required: + - id + - created_at + - updated_at + - name + - reason + - has_progress + - progress + - state + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the job + default: '' + reason: + type: string + description: Reason for the current state of the job + default: '' + has_progress: + type: boolean + description: Whether this Job supports progress updates + default: false + progress: + type: number + format: float + minimum: 0 + maximum: 100 + description: Progress percentage + default: 0 + state: + allOf: + - $ref: '#/components/schemas/Jobs.JobState' + description: Current state of the job + default: pending + Sessions.ContextOverflowType: + type: string + enum: + - truncate + - adaptive + Sessions.CreateOrUpdateSessionRequest: + type: object + required: + - id + - situation + - render_templates + - token_budget + - context_overflow + - forward_tool_results + properties: + id: + $ref: '#/components/schemas/Common.uuid' + user: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: User ID of user associated with this session + users: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + agent: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Agent ID of agent associated with this session + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + metadata: + type: object + additionalProperties: {} + allOf: + - $ref: '#/components/schemas/Sessions.CreateSessionRequest' + Sessions.CreateSessionRequest: + type: object + required: + - situation + - render_templates + - token_budget + - context_overflow + - forward_tool_results + properties: + user: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: User ID of user associated with this session + users: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + agent: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Agent ID of agent associated with this session + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + metadata: + type: object + additionalProperties: {} + description: Payload for creating a session + Sessions.MultiAgentMultiUserSession: + type: object + required: + - agents + - users + properties: + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + users: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.MultiAgentNoUserSession: + type: object + required: + - agents + properties: + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.MultiAgentSingleUserSession: + type: object + required: + - agents + - user + properties: + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + user: + $ref: '#/components/schemas/Common.uuid' + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.PatchSessionRequest: + type: object + properties: + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + metadata: + type: object + additionalProperties: {} + description: Payload for patching a session + Sessions.Session: + type: object + required: + - situation + - summary + - render_templates + - token_budget + - context_overflow + - forward_tool_results + - id + - created_at + - updated_at + properties: + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + summary: + type: string + nullable: true + description: Summary (null at the beginning) - generated automatically after every interaction + default: null + readOnly: true + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + kind: + type: string + description: Discriminator property for Session. + discriminator: + propertyName: kind + mapping: + single_agent_no_user: '#/components/schemas/Sessions.SingleAgentNoUserSession' + single_agent_single_user: '#/components/schemas/Sessions.SingleAgentSingleUserSession' + single_agent_multi_user: '#/components/schemas/Sessions.SingleAgentMultiUserSession' + multi_agent_no_user: '#/components/schemas/Sessions.MultiAgentNoUserSession' + multi_agent_single_user: '#/components/schemas/Sessions.MultiAgentSingleUserSession' + multi_agent_multi_user: '#/components/schemas/Sessions.MultiAgentMultiUserSession' + Sessions.SingleAgentMultiUserSession: + type: object + required: + - agent + - users + properties: + agent: + $ref: '#/components/schemas/Common.uuid' + users: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.SingleAgentNoUserSession: + type: object + required: + - agent + properties: + agent: + $ref: '#/components/schemas/Common.uuid' + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.SingleAgentSingleUserSession: + type: object + required: + - agent + - user + properties: + agent: + $ref: '#/components/schemas/Common.uuid' + user: + $ref: '#/components/schemas/Common.uuid' + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.UpdateSessionRequest: + type: object + required: + - situation + - render_templates + - token_budget + - context_overflow + - forward_tool_results + properties: + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + metadata: + type: object + additionalProperties: {} + description: Payload for updating a session + Tasks.CaseThen: + type: object + required: + - case + - then + properties: + case: + anyOf: + - $ref: '#/components/schemas/Common.PyExpression' + - type: string + enum: + - _ + description: The condition to evaluate + then: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + description: The steps to run if the condition is true + Tasks.CaseThenUpdateItem: + type: object + required: + - case + - then + properties: + case: + anyOf: + - $ref: '#/components/schemas/Common.PyExpression' + - type: string + enum: + - _ + description: The condition to evaluate + then: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + description: The steps to run if the condition is true + Tasks.CreateTaskRequest: + type: object + required: + - name + - description + - main + - input_schema + - tools + - inherit_tools + properties: + name: + type: string + description: + type: string + default: '' + main: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + minItems: 1 + description: The entrypoint of the task. + input_schema: + type: object + additionalProperties: {} + nullable: true + description: The schema for the input to the task. `null` means all inputs are valid. + default: null + tools: + type: array + items: + $ref: '#/components/schemas/Tasks.TaskTool' + description: Tools defined specifically for this task not included in the Agent itself. + default: [] + inherit_tools: + type: boolean + description: Whether to inherit tools from the parent agent or not. Defaults to true. + default: true + metadata: + type: object + additionalProperties: {} + additionalProperties: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + description: Payload for creating a task + Tasks.EmbedStep: + type: object + required: + - kind_ + - embed + properties: + kind_: + type: string + enum: + - embed + default: embed + readOnly: true + embed: + allOf: + - $ref: '#/components/schemas/Docs.EmbedQueryRequest' + description: The text to embed + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - embed + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ErrorWorkflowStep: + type: object + required: + - kind_ + - error + properties: + kind_: + type: string + enum: + - error + default: error + readOnly: true + error: + type: string + description: The error message + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - error + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.EvaluateStep: + type: object + required: + - kind_ + - evaluate + properties: + kind_: + type: string + enum: + - evaluate + default: evaluate + readOnly: true + evaluate: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + description: The expression to evaluate + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - evaluate + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ForeachDo: + type: object + required: + - in + - do + properties: + in: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The variable to iterate over. + VALIDATION: Should NOT return more than 1000 elements. + do: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + Tasks.ForeachDoUpdateItem: + type: object + required: + - in + - do + properties: + in: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The variable to iterate over. + VALIDATION: Should NOT return more than 1000 elements. + do: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + Tasks.ForeachStep: + type: object + required: + - kind_ + - foreach + properties: + kind_: + type: string + enum: + - foreach + default: foreach + readOnly: true + foreach: + allOf: + - $ref: '#/components/schemas/Tasks.ForeachDo' + description: The steps to run for each iteration + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - foreach + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ForeachStepUpdateItem: + type: object + required: + - foreach + properties: + foreach: + allOf: + - $ref: '#/components/schemas/Tasks.ForeachDoUpdateItem' + description: The steps to run for each iteration + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.GetStep: + type: object + required: + - kind_ + - get + properties: + kind_: + type: string + enum: + - get + default: get + readOnly: true + get: + type: string + description: The key to get + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - get + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.IfElseWorkflowStep: + type: object + required: + - kind_ + - if + - then + - else + properties: + kind_: + type: string + enum: + - if_else + default: if_else + readOnly: true + if: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The condition to evaluate + then: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + description: The steps to run if the condition is true + else: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + nullable: true + description: The steps to run if the condition is false + default: null + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - if_else + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.IfElseWorkflowStepUpdateItem: + type: object + required: + - if + - then + - else + properties: + if: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The condition to evaluate + then: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + description: The steps to run if the condition is true + else: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + nullable: true + description: The steps to run if the condition is false + default: null + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.LogStep: + type: object + required: + - kind_ + - log + properties: + kind_: + type: string + enum: + - log + default: log + readOnly: true + log: + allOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + description: The value to log + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - log + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ParallelStep: + type: object + required: + - kind_ + - parallel + properties: + kind_: + type: string + enum: + - parallel + default: parallel + readOnly: true + parallel: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + maxItems: 100 + description: The steps to run in parallel. Max concurrency will depend on the platform. + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - parallel + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ParallelStepUpdateItem: + type: object + required: + - parallel + properties: + parallel: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + maxItems: 100 + description: The steps to run in parallel. Max concurrency will depend on the platform. + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.PatchTaskRequest: + type: object + properties: + description: + type: string + default: '' + main: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStepUpdateItem' + - $ref: '#/components/schemas/Tasks.SwitchStepUpdateItem' + - $ref: '#/components/schemas/Tasks.ForeachStepUpdateItem' + - $ref: '#/components/schemas/Tasks.ParallelStepUpdateItem' + - type: object + required: + - over + - map + properties: + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + minItems: 1 + description: The entrypoint of the task. + input_schema: + type: object + additionalProperties: {} + nullable: true + description: The schema for the input to the task. `null` means all inputs are valid. + default: null + tools: + type: array + items: + $ref: '#/components/schemas/Tasks.TaskTool' + description: Tools defined specifically for this task not included in the Agent itself. + default: [] + inherit_tools: + type: boolean + description: Whether to inherit tools from the parent agent or not. Defaults to true. + default: true + metadata: + type: object + additionalProperties: {} + additionalProperties: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStepUpdateItem' + - $ref: '#/components/schemas/Tasks.SwitchStepUpdateItem' + - $ref: '#/components/schemas/Tasks.ForeachStepUpdateItem' + - $ref: '#/components/schemas/Tasks.ParallelStepUpdateItem' + - type: object + required: + - over + - map + properties: + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + description: Payload for patching a task + Tasks.PromptStep: + type: object + required: + - kind_ + - prompt + - tools + - forward_tool_results + properties: + kind_: + type: string + enum: + - prompt + default: prompt + readOnly: true + prompt: + anyOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + $ref: '#/components/schemas/Common.JinjaTemplate' + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + continue: + type: boolean + description: Whether to continue this message or return a new one + description: The prompt to run + tools: + anyOf: + - type: string + enum: + - all + - type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.ToolRef' + - $ref: '#/components/schemas/Tools.CreateToolRequest' + description: The tools to use for the prompt + default: [] + tool_choice: + anyOf: + - type: string + enum: + - auto + - none + - $ref: '#/components/schemas/Tools.NamedToolChoice' + description: The tool choice for the prompt + settings: + allOf: + - $ref: '#/components/schemas/Chat.ChatSettings' + description: Settings for the prompt + unwrap: + type: boolean + description: Whether to unwrap the output of the prompt step, equivalent to `response.choices[0].message.content` + default: false + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be used as the model's input. + If a tool call is not made, the model's output will be used as the next step's input. + default: null + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - prompt + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.PromptStepUpdateItem: + type: object + required: + - prompt + - tools + - forward_tool_results + properties: + prompt: + anyOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + $ref: '#/components/schemas/Common.JinjaTemplate' + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + continue: + type: boolean + description: Whether to continue this message or return a new one + description: The prompt to run + tools: + anyOf: + - type: string + enum: + - all + - type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.ToolRefUpdateItem' + - $ref: '#/components/schemas/Tools.CreateToolRequest' + description: The tools to use for the prompt + default: [] + tool_choice: + anyOf: + - type: string + enum: + - auto + - none + - $ref: '#/components/schemas/Tools.NamedToolChoice' + description: The tool choice for the prompt + settings: + allOf: + - $ref: '#/components/schemas/Chat.ChatSettings' + description: Settings for the prompt + unwrap: + type: boolean + description: Whether to unwrap the output of the prompt step, equivalent to `response.choices[0].message.content` + default: false + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be used as the model's input. + If a tool call is not made, the model's output will be used as the next step's input. + default: null + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ReturnStep: + type: object + required: + - kind_ + - return + properties: + kind_: + type: string + enum: + - return + default: return + readOnly: true + return: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + description: The value to return + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - return + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.SearchStep: + type: object + required: + - kind_ + - search + properties: + kind_: + type: string + enum: + - search + default: search + readOnly: true + search: + anyOf: + - $ref: '#/components/schemas/Docs.VectorDocSearchRequest' + - $ref: '#/components/schemas/Docs.TextOnlyDocSearchRequest' + - $ref: '#/components/schemas/Docs.HybridDocSearchRequest' + description: The search query + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - search + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.SetStep: + type: object + required: + - kind_ + - set + properties: + kind_: + type: string + enum: + - set + default: set + readOnly: true + set: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + description: The value to set + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - set + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.SleepFor: + type: object + required: + - seconds + - minutes + - hours + - days + properties: + seconds: + type: integer + format: uint16 + minimum: 0 + maximum: 60 + description: The number of seconds to sleep for + default: 0 + minutes: + type: integer + format: uint16 + minimum: 0 + maximum: 60 + description: The number of minutes to sleep for + default: 0 + hours: + type: integer + format: uint16 + minimum: 0 + maximum: 24 + description: The number of hours to sleep for + default: 0 + days: + type: integer + format: uint16 + minimum: 0 + maximum: 30 + description: The number of days to sleep for + default: 0 + Tasks.SleepStep: + type: object + required: + - kind_ + - sleep + properties: + kind_: + type: string + enum: + - sleep + default: sleep + readOnly: true + sleep: + allOf: + - $ref: '#/components/schemas/Tasks.SleepFor' + description: The duration to sleep for (max 31 days) + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - sleep + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.SwitchStep: + type: object + required: + - kind_ + - switch + properties: + kind_: + type: string + enum: + - switch + default: switch + readOnly: true + switch: + type: array + items: + $ref: '#/components/schemas/Tasks.CaseThen' + minItems: 1 + description: The cond tree + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - switch + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.SwitchStepUpdateItem: + type: object + required: + - switch + properties: + switch: + type: array + items: + $ref: '#/components/schemas/Tasks.CaseThenUpdateItem' + minItems: 1 + description: The cond tree + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.Task: + type: object + required: + - name + - description + - main + - input_schema + - tools + - inherit_tools + - id + - created_at + - updated_at + properties: + name: + type: string + description: + type: string + default: '' + main: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + minItems: 1 + description: The entrypoint of the task. + input_schema: + type: object + additionalProperties: {} + nullable: true + description: The schema for the input to the task. `null` means all inputs are valid. + default: null + tools: + type: array + items: + $ref: '#/components/schemas/Tasks.TaskTool' + description: Tools defined specifically for this task not included in the Agent itself. + default: [] + inherit_tools: + type: boolean + description: Whether to inherit tools from the parent agent or not. Defaults to true. + default: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + metadata: + type: object + additionalProperties: {} + additionalProperties: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + description: Object describing a Task + Tasks.TaskTool: + type: object + properties: + inherited: + type: boolean + description: 'Read-only: Whether the tool was inherited or not. Only applies within tasks.' + default: false + readOnly: true + allOf: + - $ref: '#/components/schemas/Tools.CreateToolRequest' + Tasks.ToolCallStep: + type: object + required: + - kind_ + - tool + - arguments + properties: + kind_: + type: string + enum: + - tool_call + default: tool_call + readOnly: true + tool: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: The tool to run + arguments: + anyOf: + - type: object + additionalProperties: + anyOf: + - $ref: '#/components/schemas/Common.PyExpression' + - type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + - type: string + enum: + - _ + description: The input parameters for the tool (defaults to last step output) + default: _ + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - tool_call + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ToolRef: + type: object + required: + - ref + properties: + ref: + anyOf: + - $ref: '#/components/schemas/Tasks.ToolRefById' + - $ref: '#/components/schemas/Tasks.ToolRefByName' + description: Reference to a tool + Tasks.ToolRefById: + type: object + properties: + id: + $ref: '#/components/schemas/Common.uuid' + description: Reference to a tool by id + Tasks.ToolRefByName: + type: object + properties: + name: + $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Reference to a tool by name + Tasks.ToolRefUpdateItem: + type: object + description: Reference to a tool + Tasks.UpdateTaskRequest: + type: object + required: + - description + - main + - input_schema + - tools + - inherit_tools + properties: + description: + type: string + default: '' + main: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + minItems: 1 + description: The entrypoint of the task. + input_schema: + type: object + additionalProperties: {} + nullable: true + description: The schema for the input to the task. `null` means all inputs are valid. + default: null + tools: + type: array + items: + $ref: '#/components/schemas/Tasks.TaskTool' + description: Tools defined specifically for this task not included in the Agent itself. + default: [] + inherit_tools: + type: boolean + description: Whether to inherit tools from the parent agent or not. Defaults to true. + default: true + metadata: + type: object + additionalProperties: {} + additionalProperties: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + description: Payload for updating a task + Tasks.WaitForInputInfo: + type: object + required: + - info + properties: + info: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + description: Any additional info or data + Tasks.WaitForInputStep: + type: object + required: + - kind_ + - wait_for_input + properties: + kind_: + type: string + enum: + - wait_for_input + default: wait_for_input + readOnly: true + wait_for_input: + allOf: + - $ref: '#/components/schemas/Tasks.WaitForInputInfo' + description: Any additional info or data + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - wait_for_input + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.YieldStep: + type: object + required: + - kind_ + - workflow + - arguments + properties: + kind_: + type: string + enum: + - yield + default: yield + readOnly: true + workflow: + type: string + description: |- + The subworkflow to run. + VALIDATION: Should resolve to a defined subworkflow. + arguments: + anyOf: + - type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + - type: string + enum: + - _ + description: The input parameters for the subworkflow (defaults to last step output) + default: _ + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - yield + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tools.ApiCallDef: + type: object + required: + - method + - url + properties: + method: + type: string + enum: + - GET + - POST + - PUT + - DELETE + - PATCH + - HEAD + - OPTIONS + - CONNECT + - TRACE + description: The HTTP method to use + url: + type: string + format: uri + description: The URL to call + headers: + type: object + additionalProperties: + type: string + description: The headers to send with the request + content: + type: string + description: The content as base64 to send with the request + data: + type: object + additionalProperties: {} + description: The data to send as form data + json: + type: object + additionalProperties: {} + description: JSON body to send with the request + cookies: + type: object + additionalProperties: + type: string + description: Cookies + params: + anyOf: + - type: string + - type: object + additionalProperties: {} + description: The parameters to send with the request + follow_redirects: + type: boolean + description: Follow redirects + timeout: + type: integer + format: uint8 + description: The timeout for the request + description: API call definition + Tools.ApiCallDefUpdate: + type: object + properties: + method: + type: string + enum: + - GET + - POST + - PUT + - DELETE + - PATCH + - HEAD + - OPTIONS + - CONNECT + - TRACE + description: The HTTP method to use + url: + type: string + format: uri + description: The URL to call + headers: + type: object + additionalProperties: + type: string + description: The headers to send with the request + content: + type: string + description: The content as base64 to send with the request + data: + type: object + additionalProperties: {} + description: The data to send as form data + json: + type: object + additionalProperties: {} + description: JSON body to send with the request + cookies: + type: object + additionalProperties: + type: string + description: Cookies + params: + anyOf: + - type: string + - type: object + additionalProperties: {} + description: The parameters to send with the request + follow_redirects: + type: boolean + description: Follow redirects + timeout: + type: integer + format: uint8 + description: The timeout for the request + description: API call definition + Tools.ChosenFunctionCall: + type: object + required: + - type + - function + properties: + type: + type: string + enum: + - function + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionCallOption' + description: The function to call + allOf: + - $ref: '#/components/schemas/Tools.ChosenToolCall' + Tools.ChosenToolCall: + type: object + required: + - type + - id + properties: + type: + allOf: + - $ref: '#/components/schemas/Tools.ToolType' + description: Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) + function: + $ref: '#/components/schemas/Tools.FunctionCallOption' + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + discriminator: + propertyName: type + mapping: + function: '#/components/schemas/Tools.ChosenFunctionCall' + description: The response tool value generated by the model + Tools.CreateToolRequest: + type: object + required: + - name + properties: + name: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Name of the tool (must be unique for this agent and a valid python identifier string ) + description: + type: string + description: Description of the tool + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionDef' + description: The function to call + integration: + allOf: + - $ref: '#/components/schemas/Tools.IntegrationDef' + description: The integration to call + system: + allOf: + - $ref: '#/components/schemas/Tools.SystemDef' + description: The system to call + api_call: + allOf: + - $ref: '#/components/schemas/Tools.ApiCallDef' + description: The API call to make + description: Payload for creating a tool + Tools.FunctionCallOption: + type: object + required: + - name + properties: + name: + type: string + description: The name of the function + Tools.FunctionDef: + type: object + properties: + name: + nullable: true + description: 'DO NOT USE: This will be overriden by the tool name. Here only for compatibility reasons.' + default: null + description: + nullable: true + description: 'DO NOT USE: This will be overriden by the tool description. Here only for compatibility reasons.' + default: null + parameters: + type: object + additionalProperties: {} + description: The parameters the function accepts + description: Function definition + Tools.IntegrationDef: + type: object + required: + - provider + properties: + provider: + anyOf: + - type: string + enum: + - dummy + - hacker_news + - weather + - wikipedia + - spider + - brave + - browserbase + - type: string + description: The provider of the integration + method: + type: string + description: The specific method of the integration to call + setup: + type: object + additionalProperties: {} + description: The setup parameters the integration accepts + arguments: + type: object + additionalProperties: {} + description: The arguments to pre-apply to the integration call + description: Integration definition + Tools.IntegrationDefUpdate: + type: object + properties: + provider: + anyOf: + - type: string + enum: + - dummy + - hacker_news + - weather + - wikipedia + - spider + - brave + - browserbase + - type: string + description: The provider of the integration + method: + type: string + description: The specific method of the integration to call + setup: + type: object + additionalProperties: {} + description: The setup parameters the integration accepts + arguments: + type: object + additionalProperties: {} + description: The arguments to pre-apply to the integration call + description: Integration definition + Tools.NamedToolChoice: + type: object + properties: + function: + $ref: '#/components/schemas/Tools.FunctionCallOption' + Tools.PatchToolRequest: + type: object + properties: + name: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Name of the tool (must be unique for this agent and a valid python identifier string ) + description: + type: string + description: Description of the tool + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionDef' + description: The function to call + integration: + allOf: + - $ref: '#/components/schemas/Tools.IntegrationDefUpdate' + description: The integration to call + system: + allOf: + - $ref: '#/components/schemas/Tools.SystemDefUpdate' + description: The system to call + api_call: + allOf: + - $ref: '#/components/schemas/Tools.ApiCallDefUpdate' + description: The API call to make + description: Payload for patching a tool + Tools.SystemDef: + type: object + required: + - resource + - operation + properties: + resource: + type: string + enum: + - agent + - user + - task + - execution + - doc + - session + - job + description: Resource is the name of the resource to use + operation: + type: string + enum: + - create + - update + - patch + - create_or_update + - embed + - change_status + - search + - chat + - history + - delete + - get + - list + description: Operation is the name of the operation to perform + resource_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Resource id (if applicable) + subresource: + type: string + enum: + - tool + - doc + - execution + - transition + description: Sub-resource type (if applicable) + arguments: + type: object + additionalProperties: {} + description: The arguments to pre-apply to the system call + description: System definition + Tools.SystemDefUpdate: + type: object + properties: + resource: + type: string + enum: + - agent + - user + - task + - execution + - doc + - session + - job + description: Resource is the name of the resource to use + operation: + type: string + enum: + - create + - update + - patch + - create_or_update + - embed + - change_status + - search + - chat + - history + - delete + - get + - list + description: Operation is the name of the operation to perform + resource_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Resource id (if applicable) + subresource: + type: string + enum: + - tool + - doc + - execution + - transition + description: Sub-resource type (if applicable) + arguments: + type: object + additionalProperties: {} + description: The arguments to pre-apply to the system call + description: System definition + Tools.Tool: + type: object + required: + - name + - created_at + - updated_at + - id + properties: + name: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Name of the tool (must be unique for this agent and a valid python identifier string ) + description: + type: string + description: Description of the tool + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionDef' + description: The function to call + integration: + allOf: + - $ref: '#/components/schemas/Tools.IntegrationDef' + description: The integration to call + system: + allOf: + - $ref: '#/components/schemas/Tools.SystemDef' + description: The system to call + api_call: + allOf: + - $ref: '#/components/schemas/Tools.ApiCallDef' + description: The API call to make + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + Tools.ToolResponse: + type: object + required: + - id + - output + properties: + id: + $ref: '#/components/schemas/Common.uuid' + output: + type: object + additionalProperties: {} + description: The output of the tool + Tools.ToolType: + type: string + enum: + - function + - integration + - system + - api_call + Tools.UpdateToolRequest: + type: object + required: + - name + properties: + name: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Name of the tool (must be unique for this agent and a valid python identifier string ) + description: + type: string + description: Description of the tool + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionDef' + description: The function to call + integration: + allOf: + - $ref: '#/components/schemas/Tools.IntegrationDef' + description: The integration to call + system: + allOf: + - $ref: '#/components/schemas/Tools.SystemDef' + description: The system to call + api_call: + allOf: + - $ref: '#/components/schemas/Tools.ApiCallDef' + description: The API call to make + description: Payload for updating a tool + Users.CreateOrUpdateUserRequest: + type: object + required: + - id + properties: + id: + $ref: '#/components/schemas/Common.uuid' + allOf: + - $ref: '#/components/schemas/Users.CreateUserRequest' + Users.CreateUserRequest: + type: object + required: + - name + - about + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the user + default: '' + about: + type: string + description: About the user + default: '' + description: Payload for creating a user (and associated documents) + Users.PatchUserRequest: + type: object + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the user + default: '' + about: + type: string + description: About the user + default: '' + description: Payload for patching a user + Users.UpdateUserRequest: + type: object + required: + - name + - about + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the user + default: '' + about: + type: string + description: About the user + default: '' + description: Payload for updating a user + Users.User: + type: object + required: + - id + - created_at + - updated_at + - name + - about + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the user + default: '' + about: + type: string + description: About the user + default: '' + securitySchemes: + ApiKeyAuth: + type: apiKey + in: header + name: Authorization + ApiKeyAuth_: + type: apiKey + in: header + name: X-Auth-Key +servers: + - url: https://{serverEnv}.julep.ai/api + description: The julep cloud service endpoint + variables: + serverEnv: + default: api-alpha + description: The environment to use + enum: + - api + - api-alpha diff --git a/typespec/tsp-output/@typespec/openapi3/openapi-1.0.0.yaml b/typespec/tsp-output/@typespec/openapi3/openapi-1.0.0.yaml new file mode 100644 index 000000000..d82540194 --- /dev/null +++ b/typespec/tsp-output/@typespec/openapi3/openapi-1.0.0.yaml @@ -0,0 +1,6350 @@ +openapi: 3.0.0 +info: + title: Julep API + termsOfService: https://julep.ai/terms + contact: + name: Julep AI + url: https://julep.ai + email: developers@julep.ai + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + summary: A backend for creating stateful AI apps + description: Julep is a backend for creating stateful AI apps with background tasks and long-term memory easily. + version: 1.0.0 +externalDocs: + url: https://docs.julep.ai + description: Julep API documentation +tags: [] +paths: + /agents: + get: + operationId: AgentsRoute_list + description: List Agents (paginated) + parameters: + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Agents.Agent' + required: + - items + post: + operationId: AgentsRoute_create + description: Create a new Agent + parameters: [] + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.CreateAgentRequest' + /agents/{id}: + post: + operationId: AgentsRoute_createOrUpdate + description: Create or update an Agent + parameters: + - $ref: '#/components/parameters/Agents.CreateOrUpdateAgentRequest.id' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.UpdateAgentRequest' + put: + operationId: AgentsRoute_update + description: Update an existing Agent by id (overwrites existing values; use PATCH for merging instead) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.UpdateAgentRequest' + patch: + operationId: AgentsRoute_patch + description: Update an existing Agent by id (merges with existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.PatchAgentRequest' + delete: + operationId: AgentsRoute_delete + description: Delete Agent by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + get: + operationId: AgentsRoute_get + description: Get an Agent by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.Agent' + /agents/{id}/docs: + get: + operationId: AgentDocsRoute_list + description: List Docs owned by an Agent + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Docs.Doc' + required: + - items + post: + operationId: AgentDocsRoute_create + description: Create a Doc for this Agent + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.CreateDocRequest' + /agents/{id}/docs/{child_id}: + delete: + operationId: AgentDocsRoute_delete + description: Delete a Doc for this Agent + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be deleted + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + /agents/{id}/search: + post: + operationId: AgentsDocsSearchRoute_search + description: Search Docs owned by an Agent + parameters: + - name: id + in: path + required: true + description: ID of the parent + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.DocSearchResponse' + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + body: + anyOf: + - $ref: '#/components/schemas/Docs.VectorDocSearchRequest' + - $ref: '#/components/schemas/Docs.TextOnlyDocSearchRequest' + - $ref: '#/components/schemas/Docs.HybridDocSearchRequest' + required: + - body + /agents/{id}/tasks: + get: + operationId: TasksRoute_list + description: List tasks (paginated) + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Tasks.Task' + required: + - items + post: + operationId: TasksRoute_create + description: Create a new task + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + text/x-yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + text/yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + application/json: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + /agents/{id}/tasks/{child_id}: + put: + operationId: TasksRoute_update + description: Update an existing task (overwrite existing values) + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be updated + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Tasks.UpdateTaskRequest' + patch: + operationId: TasksRoute_patch + description: Update an existing task (merges with existing values) + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be patched + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Tasks.PatchTaskRequest' + delete: + operationId: TasksRoute_delete + description: Delete a task by its id + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be deleted + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + /agents/{id}/tools: + get: + operationId: AgentToolsRoute_list + description: List tools of the given agent + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Tools.Tool' + required: + - items + post: + operationId: AgentToolsRoute_create + description: Create a new tool for this agent + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.CreateAgentRequest' + /agents/{id}/tools/{child_id}: + put: + operationId: AgentToolsRoute_update + description: Update an existing tool (overwrite existing values) + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be updated + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Tools.UpdateToolRequest' + patch: + operationId: AgentToolsRoute_patch + description: Update an existing tool (merges with existing values) + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be patched + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Tools.PatchToolRequest' + delete: + operationId: AgentToolsRoute_delete + description: Delete an existing tool by id + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be deleted + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + /agents/{parent_id}/tasks/{id}: + post: + operationId: TasksCreateOrUpdateRoute_createOrUpdate + description: Create or update a task + parameters: + - name: parent_id + in: path + required: true + description: ID of the agent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Tasks.CreateOrUpdateTaskRequest.id' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + text/x-yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + text/yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + application/json: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + /docs/{id}: + get: + operationId: IndividualDocsRoute_get + description: Get Doc by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.Doc' + /embed: + post: + operationId: EmbedRoute_embed + description: Embed a query for search + parameters: [] + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.EmbedQueryResponse' + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + body: + $ref: '#/components/schemas/Docs.EmbedQueryRequest' + required: + - body + /executions: + post: + operationId: ExecutionsRoute_resumeWithTaskToken + description: Resume an execution with a task token + parameters: + - name: task_token + in: query + required: true + description: A Task Token is a unique identifier for a specific Task Execution. + schema: + type: string + explode: false + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Executions.TaskTokenResumeExecutionRequest' + description: Request to resume an execution with a task token + security: + - {} + /executions/{id}: + get: + operationId: ExecutionsRoute_get + description: Get an Execution by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Executions.Execution' + put: + operationId: ExecutionsRoute_update + description: Update an existing Execution + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Executions.UpdateExecutionRequest' + /executions/{id}/transitions: + get: + operationId: ExecutionTransitionsRoute_list + description: List the Transitions of an Execution by id + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + type: object + properties: + transitions: + type: array + items: + $ref: '#/components/schemas/Executions.Transition' + required: + - transitions + required: + - items + /executions/{id}/transitions.stream: + get: + operationId: ExecutionTransitionsStreamRoute_stream + description: Stream events emitted by the given execution + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - name: next_token + in: query + required: true + description: Next page token + schema: + type: string + nullable: true + default: null + explode: false + responses: + '200': + description: The request has succeeded. + content: + text/event-stream: + schema: + $ref: '#/components/schemas/Executions.TransitionEvent' + /jobs/{id}: + get: + operationId: JobRoute_get + description: Get the status of an existing Job by its id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Jobs.JobStatus' + /sessions: + get: + operationId: SessionsRoute_list + description: List sessions (paginated) + parameters: + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Sessions.Session' + required: + - items + post: + operationId: SessionsRoute_create + description: Create a new session + parameters: [] + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.CreateSessionRequest' + /sessions/{id}: + post: + operationId: SessionsRoute_createOrUpdate + description: Create or update a session + parameters: + - $ref: '#/components/parameters/Sessions.CreateOrUpdateSessionRequest.id' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.CreateSessionRequest' + put: + operationId: SessionsRoute_update + description: Update an existing session by its id (overwrites all existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.UpdateSessionRequest' + patch: + operationId: SessionsRoute_patch + description: Update an existing session by its id (merges with existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.PatchSessionRequest' + delete: + operationId: SessionsRoute_delete + description: Delete a session by its id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + get: + operationId: SessionsRoute_get + description: Get a session by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.Session' + /sessions/{id}/chat: + post: + operationId: ChatRoute_generate + description: Generate a response from the model + parameters: + - name: id + in: path + required: true + description: The session ID + schema: + $ref: '#/components/schemas/Common.uuid' + - name: x-custom-api-key + in: header + required: false + description: Custom API key + schema: + type: string + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/Chat.ChunkChatResponse' + - $ref: '#/components/schemas/Chat.MessageChatResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Chat.ChatInput' + description: Request to generate a response from the model + /sessions/{id}/history: + delete: + operationId: HistoryRoute_delete + description: Clear the history of a Session (resets the Session) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + get: + operationId: HistoryRoute_history + description: Get history of a Session + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Entries.History' + /tasks/{id}/executions: + post: + operationId: TaskExecutionsRoute_create + description: Create an execution for the given task + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Executions.CreateExecutionRequest' + get: + operationId: TaskExecutionsRoute_list + description: List executions of the given task + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Executions.Execution' + required: + - items + /users: + get: + operationId: UsersRoute_list + description: List users (paginated) + parameters: + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Users.User' + required: + - items + post: + operationId: UsersRoute_create + description: Create a new user + parameters: [] + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Users.CreateUserRequest' + /users/{id}: + post: + operationId: UsersRoute_createOrUpdate + description: Create or update a user + parameters: + - $ref: '#/components/parameters/Users.CreateOrUpdateUserRequest' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Users.CreateUserRequest' + put: + operationId: UsersRoute_update + description: Update an existing user by id (overwrite existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Users.UpdateUserRequest' + patch: + operationId: UsersRoute_patch + description: Update an existing user by id (merge with existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Users.PatchUserRequest' + delete: + operationId: UsersRoute_delete + description: Delete a user by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + get: + operationId: UsersRoute_get + description: Get a user by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Users.User' + /users/{id}/docs: + get: + operationId: UserDocsRoute_list + description: List Docs owned by a User + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Docs.Doc' + required: + - items + post: + operationId: UserDocsRoute_create + description: Create a Doc for this User + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.CreateDocRequest' + /users/{id}/docs/{child_id}: + delete: + operationId: UserDocsRoute_delete + description: Delete a Doc for this User + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be deleted + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + /users/{id}/search: + post: + operationId: UserDocsSearchRoute_search + description: Search Docs owned by a User + parameters: + - name: id + in: path + required: true + description: ID of the parent + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.DocSearchResponse' + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + body: + anyOf: + - $ref: '#/components/schemas/Docs.VectorDocSearchRequest' + - $ref: '#/components/schemas/Docs.TextOnlyDocSearchRequest' + - $ref: '#/components/schemas/Docs.HybridDocSearchRequest' + required: + - body +security: + - ApiKeyAuth: [] + - ApiKeyAuth_: [] +components: + parameters: + Agents.CreateOrUpdateAgentRequest.id: + name: id + in: path + required: true + schema: + $ref: '#/components/schemas/Common.uuid' + Common.PaginationOptions.direction: + name: direction + in: query + required: true + description: Sort direction + schema: + type: string + enum: + - asc + - desc + default: asc + explode: false + Common.PaginationOptions.limit: + name: limit + in: query + required: true + description: Limit the number of items returned + schema: + $ref: '#/components/schemas/Common.limit' + default: 100 + explode: false + Common.PaginationOptions.metadata_filter: + name: metadata_filter + in: query + required: true + description: Object to filter results by metadata + schema: + type: object + additionalProperties: + anyOf: + - type: number + - type: string + - type: boolean + nullable: true + explode: false + Common.PaginationOptions.offset: + name: offset + in: query + required: true + description: Offset the items returned + schema: + $ref: '#/components/schemas/Common.offset' + default: 0 + explode: false + Common.PaginationOptions.sort_by: + name: sort_by + in: query + required: true + description: Sort by a field + schema: + type: string + enum: + - created_at + - updated_at + default: created_at + explode: false + Sessions.CreateOrUpdateSessionRequest.id: + name: id + in: path + required: true + schema: + $ref: '#/components/schemas/Common.uuid' + Tasks.CreateOrUpdateTaskRequest.id: + name: id + in: path + required: true + schema: + $ref: '#/components/schemas/Common.uuid' + Users.CreateOrUpdateUserRequest: + name: id + in: path + required: true + schema: + $ref: '#/components/schemas/Common.uuid' + schemas: + Agents.Agent: + type: object + required: + - id + - created_at + - updated_at + - name + - about + - model + - instructions + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + Agents.CreateAgentRequest: + type: object + required: + - name + - about + - model + - instructions + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + description: Payload for creating a agent (and associated documents) + Agents.CreateOrUpdateAgentRequest: + type: object + required: + - id + - name + - about + - model + - instructions + properties: + id: + $ref: '#/components/schemas/Common.uuid' + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + allOf: + - $ref: '#/components/schemas/Agents.CreateAgentRequest' + Agents.PatchAgentRequest: + type: object + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + description: Payload for patching a agent + Agents.UpdateAgentRequest: + type: object + required: + - name + - about + - model + - instructions + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + description: Payload for updating a agent + Chat.BaseChatOutput: + type: object + required: + - index + - finish_reason + properties: + index: + type: integer + format: uint32 + finish_reason: + allOf: + - $ref: '#/components/schemas/Chat.FinishReason' + description: The reason the model stopped generating tokens + default: stop + logprobs: + allOf: + - $ref: '#/components/schemas/Chat.LogProbResponse' + description: The log probabilities of tokens + Chat.BaseChatResponse: + type: object + required: + - jobs + - docs + - created_at + - id + properties: + usage: + allOf: + - $ref: '#/components/schemas/Chat.CompetionUsage' + description: Usage statistics for the completion request + jobs: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + description: Background job IDs that may have been spawned from this interaction. + default: [] + readOnly: true + docs: + type: array + items: + $ref: '#/components/schemas/Docs.DocReference' + description: Documents referenced for this request (for citation purposes). + default: [] + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + Chat.BaseTokenLogProb: + type: object + required: + - token + - logprob + properties: + token: + type: string + logprob: + type: number + format: float + description: The log probability of the token + bytes: + type: array + items: + type: integer + format: uint16 + Chat.ChatInput: + type: object + required: + - remember + - recall + - save + - stream + - stop + properties: + remember: + type: boolean + description: 'DISABLED: Whether this interaction should form new memories or not (will be enabled in a future release)' + default: false + readOnly: true + recall: + type: boolean + description: Whether previous memories and docs should be recalled or not + default: true + save: + type: boolean + description: Whether this interaction should be stored in the session history or not + default: true + model: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Identifier of the model to be used + stream: + type: boolean + description: Indicates if the server should stream the response as it's generated + default: false + stop: + type: array + items: + type: string + maxItems: 4 + description: Up to 4 sequences where the API will stop generating further tokens. + default: [] + seed: + type: integer + format: int16 + minimum: -1 + maximum: 1000 + description: If specified, the system will make a best effort to sample deterministically for that particular seed value + max_tokens: + type: integer + format: uint32 + minimum: 1 + description: The maximum number of tokens to generate in the chat completion + logit_bias: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.logit_bias' + description: Modify the likelihood of specified tokens appearing in the completion + response_format: + anyOf: + - $ref: '#/components/schemas/Chat.SimpleCompletionResponseFormat' + - $ref: '#/components/schemas/Chat.SchemaCompletionResponseFormat' + description: Response format (set to `json_object` to restrict output to JSON) + agent: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Agent ID of the agent to use for this interaction. (Only applicable for multi-agent sessions) + repetition_penalty: + type: number + format: float + minimum: 0 + maximum: 2 + description: Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + length_penalty: + type: number + format: float + minimum: 0 + maximum: 2 + description: Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. + min_p: + type: number + format: float + minimum: 0 + maximum: 1 + description: Minimum probability compared to leading token to be considered + frequency_penalty: + type: number + format: float + minimum: -2 + maximum: 2 + description: Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + presence_penalty: + type: number + format: float + minimum: -2 + maximum: 2 + description: Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + temperature: + type: number + format: float + minimum: 0 + maximum: 5 + description: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. + top_p: + type: number + format: float + minimum: 0 + maximum: 1 + description: Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. + allOf: + - $ref: '#/components/schemas/Chat.ChatInputData' + Chat.ChatInputData: + type: object + required: + - messages + - tools + properties: + messages: + type: array + items: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - type: string + - type: array + items: + type: string + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + continue: + type: boolean + description: Whether to continue this message or return a new one + minItems: 1 + description: A list of new input messages comprising the conversation so far. + tools: + type: array + items: + $ref: '#/components/schemas/Tools.Tool' + description: (Advanced) List of tools that are provided in addition to agent's default set of tools. + default: [] + tool_choice: + anyOf: + - type: string + enum: + - auto + - none + - $ref: '#/components/schemas/Tools.NamedToolChoice' + description: Can be one of existing tools given to the agent earlier or the ones provided in this request. + Chat.ChatOutputChunk: + type: object + required: + - delta + properties: + delta: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - type: string + - type: array + items: + type: string + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + continue: + type: boolean + description: Whether to continue this message or return a new one + description: The message generated by the model + allOf: + - $ref: '#/components/schemas/Chat.BaseChatOutput' + description: Streaming chat completion output + Chat.ChatSettings: + type: object + required: + - stream + - stop + properties: + model: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Identifier of the model to be used + stream: + type: boolean + description: Indicates if the server should stream the response as it's generated + default: false + stop: + type: array + items: + type: string + maxItems: 4 + description: Up to 4 sequences where the API will stop generating further tokens. + default: [] + seed: + type: integer + format: int16 + minimum: -1 + maximum: 1000 + description: If specified, the system will make a best effort to sample deterministically for that particular seed value + max_tokens: + type: integer + format: uint32 + minimum: 1 + description: The maximum number of tokens to generate in the chat completion + logit_bias: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.logit_bias' + description: Modify the likelihood of specified tokens appearing in the completion + response_format: + anyOf: + - $ref: '#/components/schemas/Chat.SimpleCompletionResponseFormat' + - $ref: '#/components/schemas/Chat.SchemaCompletionResponseFormat' + description: Response format (set to `json_object` to restrict output to JSON) + agent: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Agent ID of the agent to use for this interaction. (Only applicable for multi-agent sessions) + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + Chat.ChunkChatResponse: + type: object + required: + - choices + properties: + choices: + type: array + items: + $ref: '#/components/schemas/Chat.ChatOutputChunk' + description: The deltas generated by the model + allOf: + - $ref: '#/components/schemas/Chat.BaseChatResponse' + Chat.CompetionUsage: + type: object + properties: + completion_tokens: + type: integer + format: uint32 + description: Number of tokens in the generated completion + readOnly: true + prompt_tokens: + type: integer + format: uint32 + description: Number of tokens in the prompt + readOnly: true + total_tokens: + type: integer + format: uint32 + description: Total number of tokens used in the request (prompt + completion) + readOnly: true + description: Usage statistics for the completion request + Chat.DefaultChatSettings: + type: object + properties: + repetition_penalty: + type: number + format: float + minimum: 0 + maximum: 2 + description: Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + length_penalty: + type: number + format: float + minimum: 0 + maximum: 2 + description: Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. + min_p: + type: number + format: float + minimum: 0 + maximum: 1 + description: Minimum probability compared to leading token to be considered + allOf: + - $ref: '#/components/schemas/Chat.OpenAISettings' + description: Default settings for the chat session (also used by the agent) + Chat.FinishReason: + type: string + enum: + - stop + - length + - content_filter + - tool_calls + description: |- + The reason the model stopped generating tokens. This will be `stop` + if the model hit a natural stop point or a provided stop sequence, + `length` if the maximum number of tokens specified in the request + was reached, `content_filter` if content was omitted due to a flag + from our content filters, `tool_calls` if the model called a tool. + Chat.LogProbResponse: + type: object + required: + - content + properties: + content: + type: array + items: + $ref: '#/components/schemas/Chat.TokenLogProb' + nullable: true + description: The log probabilities of the tokens + Chat.MessageChatResponse: + type: object + required: + - choices + properties: + choices: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Chat.SingleChatOutput' + - $ref: '#/components/schemas/Chat.MultipleChatOutput' + description: The deltas generated by the model + allOf: + - $ref: '#/components/schemas/Chat.BaseChatResponse' + Chat.MultipleChatOutput: + type: object + required: + - messages + properties: + messages: + type: array + items: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - type: string + - type: array + items: + type: string + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + tool_calls: + type: array + items: + $ref: '#/components/schemas/Tools.ChosenToolCall' + nullable: true + description: Tool calls generated by the model. + default: [] + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + minItems: 1 + readOnly: true + allOf: + - $ref: '#/components/schemas/Chat.BaseChatOutput' + description: The output returned by the model. Note that, depending on the model provider, they might return more than one message. + Chat.OpenAISettings: + type: object + properties: + frequency_penalty: + type: number + format: float + minimum: -2 + maximum: 2 + description: Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + presence_penalty: + type: number + format: float + minimum: -2 + maximum: 2 + description: Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + temperature: + type: number + format: float + minimum: 0 + maximum: 5 + description: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. + top_p: + type: number + format: float + minimum: 0 + maximum: 1 + description: Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. + Chat.SchemaCompletionResponseFormat: + type: object + required: + - type + - json_schema + properties: + type: + type: string + enum: + - json_schema + description: The format of the response + default: json_schema + json_schema: + type: object + additionalProperties: {} + description: The schema of the response + Chat.SimpleCompletionResponseFormat: + type: object + required: + - type + properties: + type: + type: string + enum: + - text + - json_object + description: The format of the response + default: text + Chat.SingleChatOutput: + type: object + required: + - message + properties: + message: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - type: string + - type: array + items: + type: string + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + tool_calls: + type: array + items: + $ref: '#/components/schemas/Tools.ChosenToolCall' + nullable: true + description: Tool calls generated by the model. + default: [] + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + allOf: + - $ref: '#/components/schemas/Chat.BaseChatOutput' + description: The output returned by the model. Note that, depending on the model provider, they might return more than one message. + Chat.TokenLogProb: + type: object + required: + - top_logprobs + properties: + top_logprobs: + type: array + items: + $ref: '#/components/schemas/Chat.BaseTokenLogProb' + minItems: 1 + description: The log probabilities of the tokens + readOnly: true + allOf: + - $ref: '#/components/schemas/Chat.BaseTokenLogProb' + Common.JinjaTemplate: + type: string + description: A valid jinja template. + Common.PyExpression: + type: string + description: A simple python expression compatible with SimpleEval. + Common.ResourceCreatedResponse: + type: object + required: + - id + - created_at + - jobs + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: ID of created resource + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + jobs: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + description: IDs (if any) of jobs created as part of this request + default: [] + readOnly: true + Common.ResourceDeletedResponse: + type: object + required: + - id + - deleted_at + - jobs + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: ID of deleted resource + deleted_at: + type: string + format: date-time + description: When this resource was deleted as UTC date-time + readOnly: true + jobs: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + description: IDs (if any) of jobs created as part of this request + default: [] + readOnly: true + Common.ResourceUpdatedResponse: + type: object + required: + - id + - updated_at + - jobs + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: ID of updated resource + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + jobs: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + description: IDs (if any) of jobs created as part of this request + default: [] + readOnly: true + Common.identifierSafeUnicode: + type: string + maxLength: 120 + pattern: ^[\p{L}\p{Nl}\p{Pattern_Syntax}\p{Pattern_White_Space}]+[\p{ID_Start}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\p{Pattern_Syntax}\p{Pattern_White_Space}]*$ + description: |- + For Unicode character safety + See: https://unicode.org/reports/tr31/ + See: https://www.unicode.org/reports/tr39/#Identifier_Characters + Common.limit: + type: integer + format: uint16 + minimum: 1 + maximum: 1000 + exclusiveMaximum: true + description: Limit the number of results + Common.logit_bias: + type: number + format: float + minimum: -100 + maximum: 100 + Common.offset: + type: integer + format: uint32 + minimum: 0 + description: Offset to apply to the results + Common.uuid: + type: string + format: uuid + Common.validPythonIdentifier: + type: string + maxLength: 40 + pattern: ^[^\W0-9]\w*$ + description: Valid python identifier names + Docs.BaseDocSearchRequest: + type: object + required: + - limit + - lang + properties: + limit: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + default: 10 + lang: + type: string + enum: + - en-US + description: The language to be used for text-only search. Support for other languages coming soon. + default: en-US + Docs.CreateDocRequest: + type: object + required: + - title + - content + properties: + metadata: + type: object + additionalProperties: {} + title: + type: string + maxLength: 800 + description: Title describing what this document contains + content: + anyOf: + - type: string + - type: array + items: + type: string + description: Contents of the document + description: Payload for creating a doc + Docs.Doc: + type: object + required: + - id + - created_at + - title + - content + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + title: + type: string + maxLength: 800 + description: Title describing what this document contains + content: + anyOf: + - type: string + - type: array + items: + type: string + description: Contents of the document + embeddings: + anyOf: + - type: array + items: + type: number + format: float + - type: array + items: + type: array + items: + type: number + format: float + description: Embeddings for the document + readOnly: true + Docs.DocOwner: + type: object + required: + - id + - role + properties: + id: + anyOf: + - allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + - allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + role: + type: string + enum: + - user + - agent + Docs.DocReference: + type: object + required: + - owner + - id + - snippets + - distance + properties: + owner: + allOf: + - $ref: '#/components/schemas/Docs.DocOwner' + description: The owner of this document. + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + description: ID of the document + title: + type: string + snippets: + type: array + items: + $ref: '#/components/schemas/Docs.Snippet' + minItems: 1 + distance: + type: number + nullable: true + default: null + Docs.DocSearchResponse: + type: object + required: + - docs + - time + properties: + docs: + type: array + items: + $ref: '#/components/schemas/Docs.DocReference' + description: The documents that were found + time: + type: number + minimum: 0 + exclusiveMinimum: true + description: The time taken to search in seconds + Docs.EmbedQueryRequest: + type: object + required: + - text + properties: + text: + anyOf: + - type: string + - type: array + items: + type: string + description: Text or texts to embed + Docs.EmbedQueryResponse: + type: object + required: + - vectors + properties: + vectors: + type: array + items: + type: array + items: + type: number + description: The embedded vectors + Docs.HybridDocSearchRequest: + type: object + required: + - confidence + - alpha + - text + - vector + properties: + confidence: + type: number + minimum: 0 + maximum: 1 + description: The confidence cutoff level + default: 0.5 + alpha: + type: number + minimum: 0 + maximum: 1 + description: The weight to apply to BM25 vs Vector search results. 0 => pure BM25; 1 => pure vector; + default: 0.75 + text: + type: string + description: Text to use in the search. In `hybrid` search mode, either `text` or both `text` and `vector` fields are required. + vector: + type: array + items: + type: number + description: Vector to use in the search. Must be the same dimensions as the embedding model or else an error will be thrown. + allOf: + - $ref: '#/components/schemas/Docs.BaseDocSearchRequest' + Docs.Snippet: + type: object + required: + - index + - content + properties: + index: + type: integer + format: uint16 + content: + type: string + Docs.TextOnlyDocSearchRequest: + type: object + required: + - text + properties: + text: + type: string + description: Text to use in the search. + allOf: + - $ref: '#/components/schemas/Docs.BaseDocSearchRequest' + Docs.VectorDocSearchRequest: + type: object + required: + - confidence + - vector + properties: + confidence: + type: number + minimum: 0 + maximum: 1 + description: The confidence cutoff level + default: 0.5 + vector: + type: array + items: + type: number + description: Vector to use in the search. Must be the same dimensions as the embedding model or else an error will be thrown. + allOf: + - $ref: '#/components/schemas/Docs.BaseDocSearchRequest' + Entries.BaseEntry: + type: object + required: + - role + - name + - content + - source + - tokenizer + - token_count + - timestamp + properties: + role: + $ref: '#/components/schemas/Entries.ChatMLRole' + name: + type: string + nullable: true + default: null + content: + anyOf: + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + - $ref: '#/components/schemas/Tools.Tool' + - $ref: '#/components/schemas/Tools.ChosenToolCall' + - type: string + - $ref: '#/components/schemas/Tools.ToolResponse' + - type: array + items: + anyOf: + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + - $ref: '#/components/schemas/Tools.Tool' + - $ref: '#/components/schemas/Tools.ChosenToolCall' + - type: string + - $ref: '#/components/schemas/Tools.ToolResponse' + source: + type: string + enum: + - api_request + - api_response + - tool_response + - internal + - summarizer + - meta + tokenizer: + type: string + token_count: + type: integer + format: uint16 + timestamp: + type: number + minimum: 0 + description: This is the time that this event refers to. + Entries.ChatMLRole: + type: string + enum: + - user + - assistant + - system + - function + - function_response + - function_call + - auto + description: ChatML role (system|assistant|user|function_call|function|function_response|auto) + Entries.Entry: + type: object + required: + - created_at + - id + properties: + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + allOf: + - $ref: '#/components/schemas/Entries.BaseEntry' + Entries.History: + type: object + required: + - entries + - relations + - session_id + - created_at + properties: + entries: + type: array + items: + $ref: '#/components/schemas/Entries.Entry' + relations: + type: array + items: + $ref: '#/components/schemas/Entries.Relation' + session_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + Entries.ImageDetail: + type: string + enum: + - low + - high + - auto + description: Image detail level + Entries.Relation: + type: object + required: + - head + - relation + - tail + properties: + head: + $ref: '#/components/schemas/Common.uuid' + relation: + type: string + tail: + $ref: '#/components/schemas/Common.uuid' + Executions.CreateExecutionRequest: + type: object + required: + - input + properties: + input: + type: object + additionalProperties: {} + description: The input to the execution + output: + description: The output of the execution if it succeeded + error: + type: string + description: The error of the execution if it failed + metadata: + type: object + additionalProperties: {} + description: Payload for creating an execution + Executions.Execution: + type: object + required: + - task_id + - status + - input + - created_at + - updated_at + - id + properties: + task_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + description: The ID of the task that the execution is running + status: + type: string + enum: + - queued + - starting + - running + - awaiting_input + - succeeded + - failed + - cancelled + description: The status of the execution + readOnly: true + input: + type: object + additionalProperties: {} + description: The input to the execution + output: + description: The output of the execution if it succeeded + error: + type: string + description: The error of the execution if it failed + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + metadata: + type: object + additionalProperties: {} + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + Executions.ResumeExecutionRequest: + type: object + required: + - status + properties: + status: + type: string + enum: + - running + default: running + input: + type: object + additionalProperties: {} + description: The input to resume the execution with + allOf: + - $ref: '#/components/schemas/Executions.UpdateExecutionRequest' + Executions.StopExecutionRequest: + type: object + required: + - status + - reason + properties: + status: + type: string + enum: + - cancelled + default: cancelled + reason: + type: string + nullable: true + description: The reason for stopping the execution + default: null + allOf: + - $ref: '#/components/schemas/Executions.UpdateExecutionRequest' + Executions.TaskTokenResumeExecutionRequest: + type: object + required: + - status + properties: + status: + type: string + enum: + - running + default: running + input: + type: object + additionalProperties: {} + description: The input to resume the execution with + Executions.Transition: + type: object + required: + - execution_id + - current + - next + - id + properties: + execution_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + current: + allOf: + - $ref: '#/components/schemas/Executions.TransitionTarget' + readOnly: true + next: + type: object + allOf: + - $ref: '#/components/schemas/Executions.TransitionTarget' + nullable: true + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + allOf: + - $ref: '#/components/schemas/Executions.TransitionEvent' + Executions.TransitionEvent: + type: object + required: + - type + - output + - created_at + - updated_at + properties: + type: + type: string + enum: + - init + - init_branch + - finish + - finish_branch + - wait + - resume + - error + - step + - cancelled + readOnly: true + output: + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + Executions.TransitionTarget: + type: object + required: + - workflow + - step + properties: + workflow: + $ref: '#/components/schemas/Common.identifierSafeUnicode' + step: + type: integer + format: uint16 + Executions.UpdateExecutionRequest: + type: object + required: + - status + properties: + status: + type: string + enum: + - queued + - starting + - running + - awaiting_input + - succeeded + - failed + - cancelled + discriminator: + propertyName: status + mapping: + cancelled: '#/components/schemas/Executions.StopExecutionRequest' + running: '#/components/schemas/Executions.ResumeExecutionRequest' + Jobs.JobState: + type: string + enum: + - pending + - in_progress + - retrying + - succeeded + - aborted + - failed + - unknown + description: 'Current state (one of: pending, in_progress, retrying, succeeded, aborted, failed)' + Jobs.JobStatus: + type: object + required: + - id + - created_at + - updated_at + - name + - reason + - has_progress + - progress + - state + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the job + default: '' + reason: + type: string + description: Reason for the current state of the job + default: '' + has_progress: + type: boolean + description: Whether this Job supports progress updates + default: false + progress: + type: number + format: float + minimum: 0 + maximum: 100 + description: Progress percentage + default: 0 + state: + allOf: + - $ref: '#/components/schemas/Jobs.JobState' + description: Current state of the job + default: pending + Sessions.ContextOverflowType: + type: string + enum: + - truncate + - adaptive + Sessions.CreateOrUpdateSessionRequest: + type: object + required: + - id + - situation + - render_templates + - token_budget + - context_overflow + - forward_tool_results + properties: + id: + $ref: '#/components/schemas/Common.uuid' + user: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: User ID of user associated with this session + users: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + agent: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Agent ID of agent associated with this session + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + metadata: + type: object + additionalProperties: {} + allOf: + - $ref: '#/components/schemas/Sessions.CreateSessionRequest' + Sessions.CreateSessionRequest: + type: object + required: + - situation + - render_templates + - token_budget + - context_overflow + - forward_tool_results + properties: + user: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: User ID of user associated with this session + users: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + agent: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Agent ID of agent associated with this session + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + metadata: + type: object + additionalProperties: {} + description: Payload for creating a session + Sessions.MultiAgentMultiUserSession: + type: object + required: + - agents + - users + properties: + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + users: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.MultiAgentNoUserSession: + type: object + required: + - agents + properties: + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.MultiAgentSingleUserSession: + type: object + required: + - agents + - user + properties: + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + user: + $ref: '#/components/schemas/Common.uuid' + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.PatchSessionRequest: + type: object + properties: + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + metadata: + type: object + additionalProperties: {} + description: Payload for patching a session + Sessions.Session: + type: object + required: + - situation + - summary + - render_templates + - token_budget + - context_overflow + - forward_tool_results + - id + - created_at + - updated_at + properties: + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + summary: + type: string + nullable: true + description: Summary (null at the beginning) - generated automatically after every interaction + default: null + readOnly: true + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + kind: + type: string + description: Discriminator property for Session. + discriminator: + propertyName: kind + mapping: + single_agent_no_user: '#/components/schemas/Sessions.SingleAgentNoUserSession' + single_agent_single_user: '#/components/schemas/Sessions.SingleAgentSingleUserSession' + single_agent_multi_user: '#/components/schemas/Sessions.SingleAgentMultiUserSession' + multi_agent_no_user: '#/components/schemas/Sessions.MultiAgentNoUserSession' + multi_agent_single_user: '#/components/schemas/Sessions.MultiAgentSingleUserSession' + multi_agent_multi_user: '#/components/schemas/Sessions.MultiAgentMultiUserSession' + Sessions.SingleAgentMultiUserSession: + type: object + required: + - agent + - users + properties: + agent: + $ref: '#/components/schemas/Common.uuid' + users: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.SingleAgentNoUserSession: + type: object + required: + - agent + properties: + agent: + $ref: '#/components/schemas/Common.uuid' + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.SingleAgentSingleUserSession: + type: object + required: + - agent + - user + properties: + agent: + $ref: '#/components/schemas/Common.uuid' + user: + $ref: '#/components/schemas/Common.uuid' + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.UpdateSessionRequest: + type: object + required: + - situation + - render_templates + - token_budget + - context_overflow + - forward_tool_results + properties: + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + metadata: + type: object + additionalProperties: {} + description: Payload for updating a session + Tasks.CaseThen: + type: object + required: + - case + - then + properties: + case: + anyOf: + - $ref: '#/components/schemas/Common.PyExpression' + - type: string + enum: + - _ + description: The condition to evaluate + then: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + description: The steps to run if the condition is true + Tasks.CaseThenUpdateItem: + type: object + required: + - case + - then + properties: + case: + anyOf: + - $ref: '#/components/schemas/Common.PyExpression' + - type: string + enum: + - _ + description: The condition to evaluate + then: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + description: The steps to run if the condition is true + Tasks.CreateTaskRequest: + type: object + required: + - name + - description + - main + - input_schema + - tools + - inherit_tools + properties: + name: + type: string + description: + type: string + default: '' + main: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + minItems: 1 + description: The entrypoint of the task. + input_schema: + type: object + additionalProperties: {} + nullable: true + description: The schema for the input to the task. `null` means all inputs are valid. + default: null + tools: + type: array + items: + $ref: '#/components/schemas/Tasks.TaskTool' + description: Tools defined specifically for this task not included in the Agent itself. + default: [] + inherit_tools: + type: boolean + description: Whether to inherit tools from the parent agent or not. Defaults to true. + default: true + metadata: + type: object + additionalProperties: {} + additionalProperties: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + description: Payload for creating a task + Tasks.EmbedStep: + type: object + required: + - kind_ + - embed + properties: + kind_: + type: string + enum: + - embed + default: embed + readOnly: true + embed: + allOf: + - $ref: '#/components/schemas/Docs.EmbedQueryRequest' + description: The text to embed + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - embed + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ErrorWorkflowStep: + type: object + required: + - kind_ + - error + properties: + kind_: + type: string + enum: + - error + default: error + readOnly: true + error: + type: string + description: The error message + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - error + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.EvaluateStep: + type: object + required: + - kind_ + - evaluate + properties: + kind_: + type: string + enum: + - evaluate + default: evaluate + readOnly: true + evaluate: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + description: The expression to evaluate + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - evaluate + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ForeachDo: + type: object + required: + - in + - do + properties: + in: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The variable to iterate over. + VALIDATION: Should NOT return more than 1000 elements. + do: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + Tasks.ForeachDoUpdateItem: + type: object + required: + - in + - do + properties: + in: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The variable to iterate over. + VALIDATION: Should NOT return more than 1000 elements. + do: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + Tasks.ForeachStep: + type: object + required: + - kind_ + - foreach + properties: + kind_: + type: string + enum: + - foreach + default: foreach + readOnly: true + foreach: + allOf: + - $ref: '#/components/schemas/Tasks.ForeachDo' + description: The steps to run for each iteration + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - foreach + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ForeachStepUpdateItem: + type: object + required: + - foreach + properties: + foreach: + allOf: + - $ref: '#/components/schemas/Tasks.ForeachDoUpdateItem' + description: The steps to run for each iteration + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.GetStep: + type: object + required: + - kind_ + - get + properties: + kind_: + type: string + enum: + - get + default: get + readOnly: true + get: + type: string + description: The key to get + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - get + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.IfElseWorkflowStep: + type: object + required: + - kind_ + - if + - then + - else + properties: + kind_: + type: string + enum: + - if_else + default: if_else + readOnly: true + if: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The condition to evaluate + then: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + description: The steps to run if the condition is true + else: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + nullable: true + description: The steps to run if the condition is false + default: null + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - if_else + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.IfElseWorkflowStepUpdateItem: + type: object + required: + - if + - then + - else + properties: + if: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The condition to evaluate + then: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + description: The steps to run if the condition is true + else: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + nullable: true + description: The steps to run if the condition is false + default: null + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.LogStep: + type: object + required: + - kind_ + - log + properties: + kind_: + type: string + enum: + - log + default: log + readOnly: true + log: + allOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + description: The value to log + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - log + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ParallelStep: + type: object + required: + - kind_ + - parallel + properties: + kind_: + type: string + enum: + - parallel + default: parallel + readOnly: true + parallel: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + maxItems: 100 + description: The steps to run in parallel. Max concurrency will depend on the platform. + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - parallel + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ParallelStepUpdateItem: + type: object + required: + - parallel + properties: + parallel: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + maxItems: 100 + description: The steps to run in parallel. Max concurrency will depend on the platform. + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.PatchTaskRequest: + type: object + properties: + description: + type: string + default: '' + main: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStepUpdateItem' + - $ref: '#/components/schemas/Tasks.SwitchStepUpdateItem' + - $ref: '#/components/schemas/Tasks.ForeachStepUpdateItem' + - $ref: '#/components/schemas/Tasks.ParallelStepUpdateItem' + - type: object + required: + - over + - map + properties: + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + minItems: 1 + description: The entrypoint of the task. + input_schema: + type: object + additionalProperties: {} + nullable: true + description: The schema for the input to the task. `null` means all inputs are valid. + default: null + tools: + type: array + items: + $ref: '#/components/schemas/Tasks.TaskTool' + description: Tools defined specifically for this task not included in the Agent itself. + default: [] + inherit_tools: + type: boolean + description: Whether to inherit tools from the parent agent or not. Defaults to true. + default: true + metadata: + type: object + additionalProperties: {} + additionalProperties: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStepUpdateItem' + - $ref: '#/components/schemas/Tasks.SwitchStepUpdateItem' + - $ref: '#/components/schemas/Tasks.ForeachStepUpdateItem' + - $ref: '#/components/schemas/Tasks.ParallelStepUpdateItem' + - type: object + required: + - over + - map + properties: + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + description: Payload for patching a task + Tasks.PromptStep: + type: object + required: + - kind_ + - prompt + - tools + - forward_tool_results + properties: + kind_: + type: string + enum: + - prompt + default: prompt + readOnly: true + prompt: + anyOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + $ref: '#/components/schemas/Common.JinjaTemplate' + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + continue: + type: boolean + description: Whether to continue this message or return a new one + description: The prompt to run + tools: + anyOf: + - type: string + enum: + - all + - type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.ToolRef' + - $ref: '#/components/schemas/Tools.CreateToolRequest' + description: The tools to use for the prompt + default: [] + tool_choice: + anyOf: + - type: string + enum: + - auto + - none + - $ref: '#/components/schemas/Tools.NamedToolChoice' + description: The tool choice for the prompt + settings: + allOf: + - $ref: '#/components/schemas/Chat.ChatSettings' + description: Settings for the prompt + unwrap: + type: boolean + description: Whether to unwrap the output of the prompt step, equivalent to `response.choices[0].message.content` + default: false + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be used as the model's input. + If a tool call is not made, the model's output will be used as the next step's input. + default: null + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - prompt + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.PromptStepUpdateItem: + type: object + required: + - prompt + - tools + - forward_tool_results + properties: + prompt: + anyOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + $ref: '#/components/schemas/Common.JinjaTemplate' + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + continue: + type: boolean + description: Whether to continue this message or return a new one + description: The prompt to run + tools: + anyOf: + - type: string + enum: + - all + - type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.ToolRefUpdateItem' + - $ref: '#/components/schemas/Tools.CreateToolRequest' + description: The tools to use for the prompt + default: [] + tool_choice: + anyOf: + - type: string + enum: + - auto + - none + - $ref: '#/components/schemas/Tools.NamedToolChoice' + description: The tool choice for the prompt + settings: + allOf: + - $ref: '#/components/schemas/Chat.ChatSettings' + description: Settings for the prompt + unwrap: + type: boolean + description: Whether to unwrap the output of the prompt step, equivalent to `response.choices[0].message.content` + default: false + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be used as the model's input. + If a tool call is not made, the model's output will be used as the next step's input. + default: null + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ReturnStep: + type: object + required: + - kind_ + - return + properties: + kind_: + type: string + enum: + - return + default: return + readOnly: true + return: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + description: The value to return + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - return + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.SearchStep: + type: object + required: + - kind_ + - search + properties: + kind_: + type: string + enum: + - search + default: search + readOnly: true + search: + anyOf: + - $ref: '#/components/schemas/Docs.VectorDocSearchRequest' + - $ref: '#/components/schemas/Docs.TextOnlyDocSearchRequest' + - $ref: '#/components/schemas/Docs.HybridDocSearchRequest' + description: The search query + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - search + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.SetStep: + type: object + required: + - kind_ + - set + properties: + kind_: + type: string + enum: + - set + default: set + readOnly: true + set: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + description: The value to set + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - set + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.SleepFor: + type: object + required: + - seconds + - minutes + - hours + - days + properties: + seconds: + type: integer + format: uint16 + minimum: 0 + maximum: 60 + description: The number of seconds to sleep for + default: 0 + minutes: + type: integer + format: uint16 + minimum: 0 + maximum: 60 + description: The number of minutes to sleep for + default: 0 + hours: + type: integer + format: uint16 + minimum: 0 + maximum: 24 + description: The number of hours to sleep for + default: 0 + days: + type: integer + format: uint16 + minimum: 0 + maximum: 30 + description: The number of days to sleep for + default: 0 + Tasks.SleepStep: + type: object + required: + - kind_ + - sleep + properties: + kind_: + type: string + enum: + - sleep + default: sleep + readOnly: true + sleep: + allOf: + - $ref: '#/components/schemas/Tasks.SleepFor' + description: The duration to sleep for (max 31 days) + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - sleep + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.SwitchStep: + type: object + required: + - kind_ + - switch + properties: + kind_: + type: string + enum: + - switch + default: switch + readOnly: true + switch: + type: array + items: + $ref: '#/components/schemas/Tasks.CaseThen' + minItems: 1 + description: The cond tree + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - switch + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.SwitchStepUpdateItem: + type: object + required: + - switch + properties: + switch: + type: array + items: + $ref: '#/components/schemas/Tasks.CaseThenUpdateItem' + minItems: 1 + description: The cond tree + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.Task: + type: object + required: + - name + - description + - main + - input_schema + - tools + - inherit_tools + - id + - created_at + - updated_at + properties: + name: + type: string + description: + type: string + default: '' + main: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + minItems: 1 + description: The entrypoint of the task. + input_schema: + type: object + additionalProperties: {} + nullable: true + description: The schema for the input to the task. `null` means all inputs are valid. + default: null + tools: + type: array + items: + $ref: '#/components/schemas/Tasks.TaskTool' + description: Tools defined specifically for this task not included in the Agent itself. + default: [] + inherit_tools: + type: boolean + description: Whether to inherit tools from the parent agent or not. Defaults to true. + default: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + metadata: + type: object + additionalProperties: {} + additionalProperties: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + description: Object describing a Task + Tasks.TaskTool: + type: object + properties: + inherited: + type: boolean + description: 'Read-only: Whether the tool was inherited or not. Only applies within tasks.' + default: false + readOnly: true + allOf: + - $ref: '#/components/schemas/Tools.CreateToolRequest' + Tasks.ToolCallStep: + type: object + required: + - kind_ + - tool + - arguments + properties: + kind_: + type: string + enum: + - tool_call + default: tool_call + readOnly: true + tool: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: The tool to run + arguments: + anyOf: + - type: object + additionalProperties: + anyOf: + - $ref: '#/components/schemas/Common.PyExpression' + - type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + - type: string + enum: + - _ + description: The input parameters for the tool (defaults to last step output) + default: _ + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - tool_call + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ToolRef: + type: object + required: + - ref + properties: + ref: + anyOf: + - $ref: '#/components/schemas/Tasks.ToolRefById' + - $ref: '#/components/schemas/Tasks.ToolRefByName' + description: Reference to a tool + Tasks.ToolRefById: + type: object + properties: + id: + $ref: '#/components/schemas/Common.uuid' + description: Reference to a tool by id + Tasks.ToolRefByName: + type: object + properties: + name: + $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Reference to a tool by name + Tasks.ToolRefUpdateItem: + type: object + description: Reference to a tool + Tasks.UpdateTaskRequest: + type: object + required: + - description + - main + - input_schema + - tools + - inherit_tools + properties: + description: + type: string + default: '' + main: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + minItems: 1 + description: The entrypoint of the task. + input_schema: + type: object + additionalProperties: {} + nullable: true + description: The schema for the input to the task. `null` means all inputs are valid. + default: null + tools: + type: array + items: + $ref: '#/components/schemas/Tasks.TaskTool' + description: Tools defined specifically for this task not included in the Agent itself. + default: [] + inherit_tools: + type: boolean + description: Whether to inherit tools from the parent agent or not. Defaults to true. + default: true + metadata: + type: object + additionalProperties: {} + additionalProperties: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.EmbedStep' + - $ref: '#/components/schemas/Tasks.SearchStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + description: Payload for updating a task + Tasks.WaitForInputInfo: + type: object + required: + - info + properties: + info: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + description: Any additional info or data + Tasks.WaitForInputStep: + type: object + required: + - kind_ + - wait_for_input + properties: + kind_: + type: string + enum: + - wait_for_input + default: wait_for_input + readOnly: true + wait_for_input: + allOf: + - $ref: '#/components/schemas/Tasks.WaitForInputInfo' + description: Any additional info or data + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - wait_for_input + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.YieldStep: + type: object + required: + - kind_ + - workflow + - arguments + properties: + kind_: + type: string + enum: + - yield + default: yield + readOnly: true + workflow: + type: string + description: |- + The subworkflow to run. + VALIDATION: Should resolve to a defined subworkflow. + arguments: + anyOf: + - type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + - type: string + enum: + - _ + description: The input parameters for the subworkflow (defaults to last step output) + default: _ + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - yield + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tools.ApiCallDef: + type: object + required: + - method + - url + properties: + method: + type: string + enum: + - GET + - POST + - PUT + - DELETE + - PATCH + - HEAD + - OPTIONS + - CONNECT + - TRACE + description: The HTTP method to use + url: + type: string + format: uri + description: The URL to call + headers: + type: object + additionalProperties: + type: string + description: The headers to send with the request + content: + type: string + description: The content as base64 to send with the request + data: + type: object + additionalProperties: {} + description: The data to send as form data + json: + type: object + additionalProperties: {} + description: JSON body to send with the request + cookies: + type: object + additionalProperties: + type: string + description: Cookies + params: + anyOf: + - type: string + - type: object + additionalProperties: {} + description: The parameters to send with the request + follow_redirects: + type: boolean + description: Follow redirects + timeout: + type: integer + format: uint8 + description: The timeout for the request + description: API call definition + Tools.ApiCallDefUpdate: + type: object + properties: + method: + type: string + enum: + - GET + - POST + - PUT + - DELETE + - PATCH + - HEAD + - OPTIONS + - CONNECT + - TRACE + description: The HTTP method to use + url: + type: string + format: uri + description: The URL to call + headers: + type: object + additionalProperties: + type: string + description: The headers to send with the request + content: + type: string + description: The content as base64 to send with the request + data: + type: object + additionalProperties: {} + description: The data to send as form data + json: + type: object + additionalProperties: {} + description: JSON body to send with the request + cookies: + type: object + additionalProperties: + type: string + description: Cookies + params: + anyOf: + - type: string + - type: object + additionalProperties: {} + description: The parameters to send with the request + follow_redirects: + type: boolean + description: Follow redirects + timeout: + type: integer + format: uint8 + description: The timeout for the request + description: API call definition + Tools.ChosenFunctionCall: + type: object + required: + - type + - function + properties: + type: + type: string + enum: + - function + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionCallOption' + description: The function to call + allOf: + - $ref: '#/components/schemas/Tools.ChosenToolCall' + Tools.ChosenToolCall: + type: object + required: + - type + - id + properties: + type: + allOf: + - $ref: '#/components/schemas/Tools.ToolType' + description: Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) + function: + $ref: '#/components/schemas/Tools.FunctionCallOption' + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + discriminator: + propertyName: type + mapping: + function: '#/components/schemas/Tools.ChosenFunctionCall' + description: The response tool value generated by the model + Tools.CreateToolRequest: + type: object + required: + - name + properties: + name: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Name of the tool (must be unique for this agent and a valid python identifier string ) + description: + type: string + description: Description of the tool + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionDef' + description: The function to call + integration: + allOf: + - $ref: '#/components/schemas/Tools.IntegrationDef' + description: The integration to call + system: + allOf: + - $ref: '#/components/schemas/Tools.SystemDef' + description: The system to call + api_call: + allOf: + - $ref: '#/components/schemas/Tools.ApiCallDef' + description: The API call to make + description: Payload for creating a tool + Tools.FunctionCallOption: + type: object + required: + - name + properties: + name: + type: string + description: The name of the function + Tools.FunctionDef: + type: object + properties: + name: + nullable: true + description: 'DO NOT USE: This will be overriden by the tool name. Here only for compatibility reasons.' + default: null + description: + nullable: true + description: 'DO NOT USE: This will be overriden by the tool description. Here only for compatibility reasons.' + default: null + parameters: + type: object + additionalProperties: {} + description: The parameters the function accepts + description: Function definition + Tools.IntegrationDef: + type: object + required: + - provider + properties: + provider: + anyOf: + - type: string + enum: + - dummy + - hacker_news + - weather + - wikipedia + - spider + - brave + - browserbase + - type: string + description: The provider of the integration + method: + type: string + description: The specific method of the integration to call + setup: + type: object + additionalProperties: {} + description: The setup parameters the integration accepts + arguments: + type: object + additionalProperties: {} + description: The arguments to pre-apply to the integration call + description: Integration definition + Tools.IntegrationDefUpdate: + type: object + properties: + provider: + anyOf: + - type: string + enum: + - dummy + - hacker_news + - weather + - wikipedia + - spider + - brave + - browserbase + - type: string + description: The provider of the integration + method: + type: string + description: The specific method of the integration to call + setup: + type: object + additionalProperties: {} + description: The setup parameters the integration accepts + arguments: + type: object + additionalProperties: {} + description: The arguments to pre-apply to the integration call + description: Integration definition + Tools.NamedToolChoice: + type: object + properties: + function: + $ref: '#/components/schemas/Tools.FunctionCallOption' + Tools.PatchToolRequest: + type: object + properties: + name: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Name of the tool (must be unique for this agent and a valid python identifier string ) + description: + type: string + description: Description of the tool + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionDef' + description: The function to call + integration: + allOf: + - $ref: '#/components/schemas/Tools.IntegrationDefUpdate' + description: The integration to call + system: + allOf: + - $ref: '#/components/schemas/Tools.SystemDefUpdate' + description: The system to call + api_call: + allOf: + - $ref: '#/components/schemas/Tools.ApiCallDefUpdate' + description: The API call to make + description: Payload for patching a tool + Tools.SystemDef: + type: object + required: + - resource + - operation + properties: + resource: + type: string + enum: + - agent + - user + - task + - execution + - doc + - session + - job + description: Resource is the name of the resource to use + operation: + type: string + enum: + - create + - update + - patch + - create_or_update + - embed + - change_status + - search + - chat + - history + - delete + - get + - list + description: Operation is the name of the operation to perform + resource_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Resource id (if applicable) + subresource: + type: string + enum: + - tool + - doc + - execution + - transition + description: Sub-resource type (if applicable) + arguments: + type: object + additionalProperties: {} + description: The arguments to pre-apply to the system call + description: System definition + Tools.SystemDefUpdate: + type: object + properties: + resource: + type: string + enum: + - agent + - user + - task + - execution + - doc + - session + - job + description: Resource is the name of the resource to use + operation: + type: string + enum: + - create + - update + - patch + - create_or_update + - embed + - change_status + - search + - chat + - history + - delete + - get + - list + description: Operation is the name of the operation to perform + resource_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Resource id (if applicable) + subresource: + type: string + enum: + - tool + - doc + - execution + - transition + description: Sub-resource type (if applicable) + arguments: + type: object + additionalProperties: {} + description: The arguments to pre-apply to the system call + description: System definition + Tools.Tool: + type: object + required: + - name + - created_at + - updated_at + - id + properties: + name: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Name of the tool (must be unique for this agent and a valid python identifier string ) + description: + type: string + description: Description of the tool + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionDef' + description: The function to call + integration: + allOf: + - $ref: '#/components/schemas/Tools.IntegrationDef' + description: The integration to call + system: + allOf: + - $ref: '#/components/schemas/Tools.SystemDef' + description: The system to call + api_call: + allOf: + - $ref: '#/components/schemas/Tools.ApiCallDef' + description: The API call to make + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + Tools.ToolResponse: + type: object + required: + - id + - output + properties: + id: + $ref: '#/components/schemas/Common.uuid' + output: + type: object + additionalProperties: {} + description: The output of the tool + Tools.ToolType: + type: string + enum: + - function + - integration + - system + - api_call + Tools.UpdateToolRequest: + type: object + required: + - name + properties: + name: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Name of the tool (must be unique for this agent and a valid python identifier string ) + description: + type: string + description: Description of the tool + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionDef' + description: The function to call + integration: + allOf: + - $ref: '#/components/schemas/Tools.IntegrationDef' + description: The integration to call + system: + allOf: + - $ref: '#/components/schemas/Tools.SystemDef' + description: The system to call + api_call: + allOf: + - $ref: '#/components/schemas/Tools.ApiCallDef' + description: The API call to make + description: Payload for updating a tool + Users.CreateOrUpdateUserRequest: + type: object + required: + - id + properties: + id: + $ref: '#/components/schemas/Common.uuid' + allOf: + - $ref: '#/components/schemas/Users.CreateUserRequest' + Users.CreateUserRequest: + type: object + required: + - name + - about + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the user + default: '' + about: + type: string + description: About the user + default: '' + description: Payload for creating a user (and associated documents) + Users.PatchUserRequest: + type: object + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the user + default: '' + about: + type: string + description: About the user + default: '' + description: Payload for patching a user + Users.UpdateUserRequest: + type: object + required: + - name + - about + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the user + default: '' + about: + type: string + description: About the user + default: '' + description: Payload for updating a user + Users.User: + type: object + required: + - id + - created_at + - updated_at + - name + - about + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the user + default: '' + about: + type: string + description: About the user + default: '' + securitySchemes: + ApiKeyAuth: + type: apiKey + in: header + name: Authorization + ApiKeyAuth_: + type: apiKey + in: header + name: X-Auth-Key +servers: + - url: https://{serverEnv}.julep.ai/api + description: The julep cloud service endpoint + variables: + serverEnv: + default: api-alpha + description: The environment to use + enum: + - api + - api-alpha diff --git a/typespec/versions.tsp b/typespec/versions.tsp index 590e07a59..4739bbdf2 100644 --- a/typespec/versions.tsp +++ b/typespec/versions.tsp @@ -2,4 +2,5 @@ namespace Versions; enum ApiVersions { v0_4: "0.4.0", + v1_0: "1.0.0", }