From 0aff4b62652bf495f02b9b679f11886dc67937b0 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 17 Apr 2026 17:33:56 +0000 Subject: [PATCH 1/8] perf(client): optimize file structure copying in multipart requests --- src/tabstack/_files.py | 56 ++++++++++++++++++- src/tabstack/_utils/__init__.py | 1 - src/tabstack/_utils/_utils.py | 15 ----- tests/test_deepcopy.py | 58 ------------------- tests/test_files.py | 99 ++++++++++++++++++++++++++++++++- 5 files changed, 151 insertions(+), 78 deletions(-) delete mode 100644 tests/test_deepcopy.py diff --git a/src/tabstack/_files.py b/src/tabstack/_files.py index cc14c14..0fdce17 100644 --- a/src/tabstack/_files.py +++ b/src/tabstack/_files.py @@ -3,8 +3,8 @@ import io import os import pathlib -from typing import overload -from typing_extensions import TypeGuard +from typing import Sequence, cast, overload +from typing_extensions import TypeVar, TypeGuard import anyio @@ -17,7 +17,9 @@ HttpxFileContent, HttpxRequestFiles, ) -from ._utils import is_tuple_t, is_mapping_t, is_sequence_t +from ._utils import is_list, is_mapping, is_tuple_t, is_mapping_t, is_sequence_t + +_T = TypeVar("_T") def is_base64_file_input(obj: object) -> TypeGuard[Base64FileInput]: @@ -121,3 +123,51 @@ async def async_read_file_content(file: FileContent) -> HttpxFileContent: return await anyio.Path(file).read_bytes() return file + + +def deepcopy_with_paths(item: _T, paths: Sequence[Sequence[str]]) -> _T: + """Copy only the containers along the given paths. + + Used to guard against mutation by extract_files without copying the entire structure. + Only dicts and lists that lie on a path are copied; everything else + is returned by reference. + + For example, given paths=[["foo", "files", "file"]] and the structure: + { + "foo": { + "bar": {"baz": {}}, + "files": {"file": } + } + } + The root dict, "foo", and "files" are copied (they lie on the path). + "bar" and "baz" are returned by reference (off the path). + """ + return _deepcopy_with_paths(item, paths, 0) + + +def _deepcopy_with_paths(item: _T, paths: Sequence[Sequence[str]], index: int) -> _T: + if not paths: + return item + if is_mapping(item): + key_to_paths: dict[str, list[Sequence[str]]] = {} + for path in paths: + if index < len(path): + key_to_paths.setdefault(path[index], []).append(path) + + # if no path continues through this mapping, it won't be mutated and copying it is redundant + if not key_to_paths: + return item + + result = dict(item) + for key, subpaths in key_to_paths.items(): + if key in result: + result[key] = _deepcopy_with_paths(result[key], subpaths, index + 1) + return cast(_T, result) + if is_list(item): + array_paths = [path for path in paths if index < len(path) and path[index] == ""] + + # if no path expects a list here, nothing will be mutated inside it - return by reference + if not array_paths: + return cast(_T, item) + return cast(_T, [_deepcopy_with_paths(entry, array_paths, index + 1) for entry in item]) + return item diff --git a/src/tabstack/_utils/__init__.py b/src/tabstack/_utils/__init__.py index 10cb66d..1c090e5 100644 --- a/src/tabstack/_utils/__init__.py +++ b/src/tabstack/_utils/__init__.py @@ -24,7 +24,6 @@ coerce_integer as coerce_integer, file_from_path as file_from_path, strip_not_given as strip_not_given, - deepcopy_minimal as deepcopy_minimal, get_async_library as get_async_library, maybe_coerce_float as maybe_coerce_float, get_required_header as get_required_header, diff --git a/src/tabstack/_utils/_utils.py b/src/tabstack/_utils/_utils.py index 63b8cd6..771859f 100644 --- a/src/tabstack/_utils/_utils.py +++ b/src/tabstack/_utils/_utils.py @@ -177,21 +177,6 @@ def is_iterable(obj: object) -> TypeGuard[Iterable[object]]: return isinstance(obj, Iterable) -def deepcopy_minimal(item: _T) -> _T: - """Minimal reimplementation of copy.deepcopy() that will only copy certain object types: - - - mappings, e.g. `dict` - - list - - This is done for performance reasons. - """ - if is_mapping(item): - return cast(_T, {k: deepcopy_minimal(v) for k, v in item.items()}) - if is_list(item): - return cast(_T, [deepcopy_minimal(entry) for entry in item]) - return item - - # copied from https://github.com/Rapptz/RoboDanny def human_join(seq: Sequence[str], *, delim: str = ", ", final: str = "or") -> str: size = len(seq) diff --git a/tests/test_deepcopy.py b/tests/test_deepcopy.py deleted file mode 100644 index 6cd1056..0000000 --- a/tests/test_deepcopy.py +++ /dev/null @@ -1,58 +0,0 @@ -from tabstack._utils import deepcopy_minimal - - -def assert_different_identities(obj1: object, obj2: object) -> None: - assert obj1 == obj2 - assert id(obj1) != id(obj2) - - -def test_simple_dict() -> None: - obj1 = {"foo": "bar"} - obj2 = deepcopy_minimal(obj1) - assert_different_identities(obj1, obj2) - - -def test_nested_dict() -> None: - obj1 = {"foo": {"bar": True}} - obj2 = deepcopy_minimal(obj1) - assert_different_identities(obj1, obj2) - assert_different_identities(obj1["foo"], obj2["foo"]) - - -def test_complex_nested_dict() -> None: - obj1 = {"foo": {"bar": [{"hello": "world"}]}} - obj2 = deepcopy_minimal(obj1) - assert_different_identities(obj1, obj2) - assert_different_identities(obj1["foo"], obj2["foo"]) - assert_different_identities(obj1["foo"]["bar"], obj2["foo"]["bar"]) - assert_different_identities(obj1["foo"]["bar"][0], obj2["foo"]["bar"][0]) - - -def test_simple_list() -> None: - obj1 = ["a", "b", "c"] - obj2 = deepcopy_minimal(obj1) - assert_different_identities(obj1, obj2) - - -def test_nested_list() -> None: - obj1 = ["a", [1, 2, 3]] - obj2 = deepcopy_minimal(obj1) - assert_different_identities(obj1, obj2) - assert_different_identities(obj1[1], obj2[1]) - - -class MyObject: ... - - -def test_ignores_other_types() -> None: - # custom classes - my_obj = MyObject() - obj1 = {"foo": my_obj} - obj2 = deepcopy_minimal(obj1) - assert_different_identities(obj1, obj2) - assert obj1["foo"] is my_obj - - # tuples - obj3 = ("a", "b") - obj4 = deepcopy_minimal(obj3) - assert obj3 is obj4 diff --git a/tests/test_files.py b/tests/test_files.py index 3b6d5b1..cd25fef 100644 --- a/tests/test_files.py +++ b/tests/test_files.py @@ -4,7 +4,8 @@ import pytest from dirty_equals import IsDict, IsList, IsBytes, IsTuple -from tabstack._files import to_httpx_files, async_to_httpx_files +from tabstack._files import to_httpx_files, deepcopy_with_paths, async_to_httpx_files +from tabstack._utils import extract_files readme_path = Path(__file__).parent.parent.joinpath("README.md") @@ -49,3 +50,99 @@ def test_string_not_allowed() -> None: "file": "foo", # type: ignore } ) + + +def assert_different_identities(obj1: object, obj2: object) -> None: + assert obj1 == obj2 + assert obj1 is not obj2 + + +class TestDeepcopyWithPaths: + def test_copies_top_level_dict(self) -> None: + original = {"file": b"data", "other": "value"} + result = deepcopy_with_paths(original, [["file"]]) + assert_different_identities(result, original) + + def test_file_value_is_same_reference(self) -> None: + file_bytes = b"contents" + original = {"file": file_bytes} + result = deepcopy_with_paths(original, [["file"]]) + assert_different_identities(result, original) + assert result["file"] is file_bytes + + def test_list_popped_wholesale(self) -> None: + files = [b"f1", b"f2"] + original = {"files": files, "title": "t"} + result = deepcopy_with_paths(original, [["files", ""]]) + assert_different_identities(result, original) + result_files = result["files"] + assert isinstance(result_files, list) + assert_different_identities(result_files, files) + + def test_nested_array_path_copies_list_and_elements(self) -> None: + elem1 = {"file": b"f1", "extra": 1} + elem2 = {"file": b"f2", "extra": 2} + original = {"items": [elem1, elem2]} + result = deepcopy_with_paths(original, [["items", "", "file"]]) + assert_different_identities(result, original) + result_items = result["items"] + assert isinstance(result_items, list) + assert_different_identities(result_items, original["items"]) + assert_different_identities(result_items[0], elem1) + assert_different_identities(result_items[1], elem2) + + def test_empty_paths_returns_same_object(self) -> None: + original = {"foo": "bar"} + result = deepcopy_with_paths(original, []) + assert result is original + + def test_multiple_paths(self) -> None: + f1 = b"file1" + f2 = b"file2" + original = {"a": f1, "b": f2, "c": "unchanged"} + result = deepcopy_with_paths(original, [["a"], ["b"]]) + assert_different_identities(result, original) + assert result["a"] is f1 + assert result["b"] is f2 + assert result["c"] is original["c"] + + def test_extract_files_does_not_mutate_original_top_level(self) -> None: + file_bytes = b"contents" + original = {"file": file_bytes, "other": "value"} + + copied = deepcopy_with_paths(original, [["file"]]) + extracted = extract_files(copied, paths=[["file"]]) + + assert extracted == [("file", file_bytes)] + assert original == {"file": file_bytes, "other": "value"} + assert copied == {"other": "value"} + + def test_extract_files_does_not_mutate_original_nested_array_path(self) -> None: + file1 = b"f1" + file2 = b"f2" + original = { + "items": [ + {"file": file1, "extra": 1}, + {"file": file2, "extra": 2}, + ], + "title": "example", + } + + copied = deepcopy_with_paths(original, [["items", "", "file"]]) + extracted = extract_files(copied, paths=[["items", "", "file"]]) + + assert extracted == [("items[][file]", file1), ("items[][file]", file2)] + assert original == { + "items": [ + {"file": file1, "extra": 1}, + {"file": file2, "extra": 2}, + ], + "title": "example", + } + assert copied == { + "items": [ + {"extra": 1}, + {"extra": 2}, + ], + "title": "example", + } From 216247282393d0a8d1a4c200a0601766402d3447 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 23:35:54 +0000 Subject: [PATCH 2/8] feat(api): api update --- .stats.yml | 4 ++-- src/tabstack/types/research_event.py | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.stats.yml b/.stats.yml index 63f86b6..752b99f 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 6 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/mozilla%2Ftabstack-ab135cad4c10edc98bbe45d18a1ca23d2d4aa4b2ba2e4554e6991e322ce46231.yml -openapi_spec_hash: 3e8185dfbbd4e83d5f05ded9ce9c5b06 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/mozilla%2Ftabstack-6ef93fb464917451c04572612d951cf5bb08311e06a37ed38ce087812231830b.yml +openapi_spec_hash: f65702021150811f175dc7e9a73aa71c config_hash: 57c64e5e8fe99c1bd7af536d82af4ad9 diff --git a/src/tabstack/types/research_event.py b/src/tabstack/types/research_event.py index 04ee453..dc6c7b6 100644 --- a/src/tabstack/types/research_event.py +++ b/src/tabstack/types/research_event.py @@ -1,7 +1,6 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. from typing import Optional -from typing_extensions import Literal from .._models import BaseModel @@ -12,5 +11,5 @@ class ResearchEvent(BaseModel): data: Optional[object] = None """Event payload data""" - event: Optional[Literal["phase", "progress", "complete", "error"]] = None - """The event type: phase, progress, complete, or error""" + event: Optional[str] = None + """The event type (e.g., start, planning:start, searching:end, complete)""" From 318ffd399a88d629031487c9652b27850fbeaa16 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 13:55:58 +0000 Subject: [PATCH 3/8] chore(internal): more robust bootstrap script --- scripts/bootstrap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/bootstrap b/scripts/bootstrap index 4638ec6..5a23841 100755 --- a/scripts/bootstrap +++ b/scripts/bootstrap @@ -4,7 +4,7 @@ set -e cd "$(dirname "$0")/.." -if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "$SKIP_BREW" != "1" ] && [ -t 0 ]; then +if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "${SKIP_BREW:-}" != "1" ] && [ -t 0 ]; then brew bundle check >/dev/null 2>&1 || { echo -n "==> Install Homebrew dependencies? (y/N): " read -r response From c43bc047af5b2380a7bbe12a4d2a5825f68b7e48 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 21:39:42 +0000 Subject: [PATCH 4/8] feat(api): api update --- .stats.yml | 4 +- README.md | 5 +- src/tabstack/resources/agent.py | 10 +- src/tabstack/types/automate_event.py | 2650 +++++++++++++++++++++++++- src/tabstack/types/research_event.py | 906 ++++++++- 5 files changed, 3551 insertions(+), 24 deletions(-) diff --git a/.stats.yml b/.stats.yml index 752b99f..bed33bc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 6 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/mozilla%2Ftabstack-6ef93fb464917451c04572612d951cf5bb08311e06a37ed38ce087812231830b.yml -openapi_spec_hash: f65702021150811f175dc7e9a73aa71c +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/mozilla%2Ftabstack-139ca0066d95afae65fdd53c58ff3a695bcc069e629fab7267611aa23e25167d.yml +openapi_spec_hash: d23e528c36d57c4c0660161da2609801 config_hash: 57c64e5e8fe99c1bd7af536d82af4ad9 diff --git a/README.md b/README.md index 3933628..c5c172a 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,6 @@ client = Tabstack( automate_event = client.agent.automate( task="Find the top 3 trending repositories and extract their names, descriptions, and star counts", ) -print(automate_event.data) ``` While you can provide an `api_key` keyword argument, @@ -70,7 +69,6 @@ async def main() -> None: automate_event = await client.agent.automate( task="Find the top 3 trending repositories and extract their names, descriptions, and star counts", ) - print(automate_event.data) asyncio.run(main()) @@ -106,7 +104,6 @@ async def main() -> None: automate_event = await client.agent.automate( task="Find the top 3 trending repositories and extract their names, descriptions, and star counts", ) - print(automate_event.data) asyncio.run(main()) @@ -272,7 +269,7 @@ response = client.agent.with_raw_response.automate( print(response.headers.get('X-My-Header')) agent = response.parse() # get the object that `agent.automate()` would have returned -print(agent.data) +print(agent) ``` These methods return an [`APIResponse`](https://github.com/Mozilla-Ocho/tabstack-python/tree/main/src/tabstack/_response.py) object. diff --git a/src/tabstack/resources/agent.py b/src/tabstack/resources/agent.py index 1ae07c4..77e4a0c 100644 --- a/src/tabstack/resources/agent.py +++ b/src/tabstack/resources/agent.py @@ -2,7 +2,7 @@ from __future__ import annotations -from typing import Iterable +from typing import Any, Iterable, cast from typing_extensions import Literal import httpx @@ -135,7 +135,7 @@ def automate( timeout=timeout, synthesize_event_and_data=True, ), - cast_to=AutomateEvent, + cast_to=cast(Any, AutomateEvent), # Union types cannot be passed in as arguments in the type system stream=True, stream_cls=Stream[AutomateEvent], ) @@ -269,7 +269,7 @@ def research( timeout=timeout, synthesize_event_and_data=True, ), - cast_to=ResearchEvent, + cast_to=cast(Any, ResearchEvent), # Union types cannot be passed in as arguments in the type system stream=True, stream_cls=Stream[ResearchEvent], ) @@ -383,7 +383,7 @@ async def automate( timeout=timeout, synthesize_event_and_data=True, ), - cast_to=AutomateEvent, + cast_to=cast(Any, AutomateEvent), # Union types cannot be passed in as arguments in the type system stream=True, stream_cls=AsyncStream[AutomateEvent], ) @@ -517,7 +517,7 @@ async def research( timeout=timeout, synthesize_event_and_data=True, ), - cast_to=ResearchEvent, + cast_to=cast(Any, ResearchEvent), # Union types cannot be passed in as arguments in the type system stream=True, stream_cls=AsyncStream[ResearchEvent], ) diff --git a/src/tabstack/types/automate_event.py b/src/tabstack/types/automate_event.py index 64b7d7e..3367aea 100644 --- a/src/tabstack/types/automate_event.py +++ b/src/tabstack/types/automate_event.py @@ -1,15 +1,2653 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import Optional +import builtins +from typing import TYPE_CHECKING, Dict, List, Union, Optional +from typing_extensions import Literal, Annotated, TypeAlias +from pydantic import Field as FieldInfo + +from .._utils import PropertyInfo from .._models import BaseModel -__all__ = ["AutomateEvent"] +__all__ = [ + "AutomateEvent", + "V1AutomateEventAgentAction", + "V1AutomateEventAgentActionData", + "V1AutomateEventAgentExtracted", + "V1AutomateEventAgentExtractedData", + "V1AutomateEventAgentProcessing", + "V1AutomateEventAgentProcessingData", + "V1AutomateEventAgentReasoned", + "V1AutomateEventAgentReasonedData", + "V1AutomateEventAgentStatus", + "V1AutomateEventAgentStatusData", + "V1AutomateEventAgentStep", + "V1AutomateEventAgentStepData", + "V1AutomateEventAgentWaiting", + "V1AutomateEventAgentWaitingData", + "V1AutomateEventAIGeneration", + "V1AutomateEventAIGenerationData", + "V1AutomateEventAIGenerationDataUsage", + "V1AutomateEventAIGenerationDataMessage", + "V1AutomateEventAIGenerationDataMessageUnionMember0", + "V1AutomateEventAIGenerationDataMessageUnionMember1", + "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1", + "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember0", + "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1", + "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1Image", + "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageUnionMember1", + "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageUnionMember1Buffer", + "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageByteLength", + "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageV1GlobalBuffer", + "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageV1GlobalBufferBuffer", + "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2", + "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2Data", + "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataUnionMember1", + "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataUnionMember1Buffer", + "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataByteLength", + "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataV1GlobalBuffer", + "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataV1GlobalBufferBuffer", + "V1AutomateEventAIGenerationDataMessageUnionMember2", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember0", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1Data", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataUnionMember1", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataUnionMember1Buffer", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataByteLength", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataV1GlobalBuffer", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataV1GlobalBufferBuffer", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember2", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember3", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4Output", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember0", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember1", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember2", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember3", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember4", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5Value", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember0", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember1", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember2", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember3", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember4", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember5", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember6", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember7", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember8", + "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember5", + "V1AutomateEventAIGenerationDataMessageUnionMember3", + "V1AutomateEventAIGenerationDataMessageUnionMember3Content", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Output", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember0", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember1", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember2", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember3", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember4", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5Value", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember0", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember1", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember2", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember3", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember4", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember5", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember6", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember7", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember8", + "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember1", + "V1AutomateEventAIGenerationError", + "V1AutomateEventAIGenerationErrorData", + "V1AutomateEventBrowserActionCompleted", + "V1AutomateEventBrowserActionCompletedData", + "V1AutomateEventBrowserActionStarted", + "V1AutomateEventBrowserActionStartedData", + "V1AutomateEventBrowserNavigated", + "V1AutomateEventBrowserNavigatedData", + "V1AutomateEventBrowserReconnected", + "V1AutomateEventBrowserReconnectedData", + "V1AutomateEventBrowserScreenshotCaptured", + "V1AutomateEventBrowserScreenshotCapturedData", + "V1AutomateEventBrowserScreenshotCapturedImage", + "V1AutomateEventBrowserScreenshotCapturedImageData", + "V1AutomateEventCdpEndpointConnected", + "V1AutomateEventCdpEndpointConnectedData", + "V1AutomateEventCdpEndpointCycle", + "V1AutomateEventCdpEndpointCycleData", + "V1AutomateEventInteractiveFormDataError", + "V1AutomateEventInteractiveFormDataErrorData", + "V1AutomateEventInteractiveFormDataErrorDataField", + "V1AutomateEventInteractiveFormDataRequest", + "V1AutomateEventInteractiveFormDataRequestData", + "V1AutomateEventInteractiveFormDataRequestDataField", + "V1AutomateEventSystemDebugCompression", + "V1AutomateEventSystemDebugCompressionData", + "V1AutomateEventSystemDebugMessage", + "V1AutomateEventSystemDebugMessageData", + "V1AutomateEventTaskAborted", + "V1AutomateEventTaskAbortedData", + "V1AutomateEventTaskCompleted", + "V1AutomateEventTaskCompletedData", + "V1AutomateEventTaskMetrics", + "V1AutomateEventTaskMetricsData", + "V1AutomateEventTaskMetricsIncremental", + "V1AutomateEventTaskMetricsIncrementalData", + "V1AutomateEventTaskSetup", + "V1AutomateEventTaskSetupData", + "V1AutomateEventTaskStarted", + "V1AutomateEventTaskStartedData", + "V1AutomateEventTaskValidated", + "V1AutomateEventTaskValidatedData", + "V1AutomateEventTaskValidationError", + "V1AutomateEventTaskValidationErrorData", +] + + +class V1AutomateEventAgentActionData(BaseModel): + """Event data for action execution""" + + action: str + + iteration_id: str = FieldInfo(alias="iterationId") + + timestamp: float + + ref: Optional[str] = None + + value: Optional[str] = None + + +class V1AutomateEventAgentAction(BaseModel): + """Envelope for the "agent:action" event from /v1/automate.""" + + data: V1AutomateEventAgentActionData + """Event data for action execution""" + + event: Literal["agent:action"] + + +class V1AutomateEventAgentExtractedData(BaseModel): + """Event data for extracted data""" + + extracted_data: str = FieldInfo(alias="extractedData") + + iteration_id: str = FieldInfo(alias="iterationId") + + timestamp: float + + +class V1AutomateEventAgentExtracted(BaseModel): + """Envelope for the "agent:extracted" event from /v1/automate.""" + + data: V1AutomateEventAgentExtractedData + """Event data for extracted data""" + + event: Literal["agent:extracted"] + + +class V1AutomateEventAgentProcessingData(BaseModel): + """Event data for when the agent is waiting for model generation""" + + has_screenshot: bool = FieldInfo(alias="hasScreenshot") + + iteration_id: str = FieldInfo(alias="iterationId") + + operation: str + + timestamp: float + + +class V1AutomateEventAgentProcessing(BaseModel): + """Envelope for the "agent:processing" event from /v1/automate.""" + + data: V1AutomateEventAgentProcessingData + """Event data for when the agent is waiting for model generation""" + + event: Literal["agent:processing"] + + +class V1AutomateEventAgentReasonedData(BaseModel): + """Event data for agent reasoning""" + + iteration_id: str = FieldInfo(alias="iterationId") + + reasoning: str + + timestamp: float + + +class V1AutomateEventAgentReasoned(BaseModel): + """Envelope for the "agent:reasoned" event from /v1/automate.""" + + data: V1AutomateEventAgentReasonedData + """Event data for agent reasoning""" + + event: Literal["agent:reasoned"] + + +class V1AutomateEventAgentStatusData(BaseModel): + """Event data for status messages""" + + iteration_id: str = FieldInfo(alias="iterationId") + + message: str + + timestamp: float + + +class V1AutomateEventAgentStatus(BaseModel): + """Envelope for the "agent:status" event from /v1/automate.""" + + data: V1AutomateEventAgentStatusData + """Event data for status messages""" + + event: Literal["agent:status"] + + +class V1AutomateEventAgentStepData(BaseModel): + """Event data for agent step tracking (each loop iteration)""" + + current_iteration: float = FieldInfo(alias="currentIteration") + + iteration_id: str = FieldInfo(alias="iterationId") + + timestamp: float + + +class V1AutomateEventAgentStep(BaseModel): + """Envelope for the "agent:step" event from /v1/automate.""" + + data: V1AutomateEventAgentStepData + """Event data for agent step tracking (each loop iteration)""" + + event: Literal["agent:step"] + + +class V1AutomateEventAgentWaitingData(BaseModel): + """Event data for waiting notifications""" + + iteration_id: str = FieldInfo(alias="iterationId") + + seconds: float + + timestamp: float + + +class V1AutomateEventAgentWaiting(BaseModel): + """Envelope for the "agent:waiting" event from /v1/automate.""" + + data: V1AutomateEventAgentWaitingData + """Event data for waiting notifications""" + + event: Literal["agent:waiting"] + + +class V1AutomateEventAIGenerationDataUsage(BaseModel): + input_tokens: Optional[float] = FieldInfo(alias="inputTokens", default=None) + + output_tokens: Optional[float] = FieldInfo(alias="outputTokens", default=None) + + total_tokens: Optional[float] = FieldInfo(alias="totalTokens", default=None) + + +class V1AutomateEventAIGenerationDataMessageUnionMember0(BaseModel): + """A system message. It can contain system information. + + Note: using the "system" part of the prompt is strongly preferred to increase the resilience against prompt injection attacks, and because not all providers support several system messages. + """ + + content: str + + role: Literal["system"] + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Additional provider-specific metadata. + + They are passed through to the provider from the AI SDK and enable + provider-specific functionality that can be fully encapsulated in the provider. + """ + + +class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember0(BaseModel): + """Text content part of a prompt. It contains a string of text.""" + + text: str + """The text content.""" + + type: Literal["text"] + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Additional provider-specific metadata. + + They are passed through to the provider from the AI SDK and enable + provider-specific functionality that can be fully encapsulated in the provider. + """ + + +class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageUnionMember1Buffer( + BaseModel +): + byte_length: float = FieldInfo(alias="byteLength") + + +class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageUnionMember1(BaseModel): + buffer: V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageUnionMember1Buffer + + byte_length: float = FieldInfo(alias="byteLength") + + byte_offset: float = FieldInfo(alias="byteOffset") + + bytes_per_element: float = FieldInfo(alias="BYTES_PER_ELEMENT") + + length: float + + if TYPE_CHECKING: + # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a + # value to this field, so for compatibility we avoid doing it at runtime. + __pydantic_extra__: Dict[str, float] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] + + # Stub to indicate that arbitrary properties are accepted. + # To access properties that are not valid identifiers you can use `getattr`, e.g. + # `getattr(obj, '$type')` + def __getattr__(self, attr: str) -> float: ... + else: + __pydantic_extra__: Dict[str, float] + + +class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageByteLength(BaseModel): + byte_length: float = FieldInfo(alias="byteLength") + + +class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageV1GlobalBufferBuffer( + BaseModel +): + byte_length: float = FieldInfo(alias="byteLength") + + +class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageV1GlobalBuffer(BaseModel): + buffer: V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageV1GlobalBufferBuffer + + byte_length: float = FieldInfo(alias="byteLength") + + byte_offset: float = FieldInfo(alias="byteOffset") + + bytes_per_element: float = FieldInfo(alias="BYTES_PER_ELEMENT") + + length: float + + if TYPE_CHECKING: + # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a + # value to this field, so for compatibility we avoid doing it at runtime. + __pydantic_extra__: Dict[str, float] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] + + # Stub to indicate that arbitrary properties are accepted. + # To access properties that are not valid identifiers you can use `getattr`, e.g. + # `getattr(obj, '$type')` + def __getattr__(self, attr: str) -> float: ... + else: + __pydantic_extra__: Dict[str, float] + + +V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1Image: TypeAlias = Union[ + str, + V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageUnionMember1, + V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageByteLength, + V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageV1GlobalBuffer, +] + + +class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1(BaseModel): + """Image content part of a prompt. It contains an image.""" + + image: V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1Image + """Image data. Can either be: + + - data: a base64-encoded string, a Uint8Array, an ArrayBuffer, or a Buffer + - URL: a URL that points to the image + """ + + type: Literal["image"] + + media_type: Optional[str] = FieldInfo(alias="mediaType", default=None) + """Optional IANA media type of the image.""" + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Additional provider-specific metadata. + + They are passed through to the provider from the AI SDK and enable + provider-specific functionality that can be fully encapsulated in the provider. + """ + + +class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataUnionMember1Buffer( + BaseModel +): + byte_length: float = FieldInfo(alias="byteLength") + + +class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataUnionMember1(BaseModel): + buffer: V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataUnionMember1Buffer + + byte_length: float = FieldInfo(alias="byteLength") + + byte_offset: float = FieldInfo(alias="byteOffset") + + bytes_per_element: float = FieldInfo(alias="BYTES_PER_ELEMENT") + + length: float + + if TYPE_CHECKING: + # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a + # value to this field, so for compatibility we avoid doing it at runtime. + __pydantic_extra__: Dict[str, float] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] + + # Stub to indicate that arbitrary properties are accepted. + # To access properties that are not valid identifiers you can use `getattr`, e.g. + # `getattr(obj, '$type')` + def __getattr__(self, attr: str) -> float: ... + else: + __pydantic_extra__: Dict[str, float] + + +class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataByteLength(BaseModel): + byte_length: float = FieldInfo(alias="byteLength") + + +class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataV1GlobalBufferBuffer( + BaseModel +): + byte_length: float = FieldInfo(alias="byteLength") + + +class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataV1GlobalBuffer(BaseModel): + buffer: V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataV1GlobalBufferBuffer + + byte_length: float = FieldInfo(alias="byteLength") + + byte_offset: float = FieldInfo(alias="byteOffset") + + bytes_per_element: float = FieldInfo(alias="BYTES_PER_ELEMENT") + + length: float + + if TYPE_CHECKING: + # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a + # value to this field, so for compatibility we avoid doing it at runtime. + __pydantic_extra__: Dict[str, float] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] + + # Stub to indicate that arbitrary properties are accepted. + # To access properties that are not valid identifiers you can use `getattr`, e.g. + # `getattr(obj, '$type')` + def __getattr__(self, attr: str) -> float: ... + else: + __pydantic_extra__: Dict[str, float] + + +V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2Data: TypeAlias = Union[ + str, + V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataUnionMember1, + V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataByteLength, + V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataV1GlobalBuffer, +] + + +class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2(BaseModel): + """File content part of a prompt. It contains a file.""" + + data: V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2Data + """File data. Can either be: + + - data: a base64-encoded string, a Uint8Array, an ArrayBuffer, or a Buffer + - URL: a URL that points to the image + """ + + media_type: str = FieldInfo(alias="mediaType") + """IANA media type of the file.""" + + type: Literal["file"] + + filename: Optional[str] = None + """Optional filename of the file.""" + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Additional provider-specific metadata. + + They are passed through to the provider from the AI SDK and enable + provider-specific functionality that can be fully encapsulated in the provider. + """ + + +V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1: TypeAlias = Union[ + V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember0, + V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1, + V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2, +] + + +class V1AutomateEventAIGenerationDataMessageUnionMember1(BaseModel): + """A user message. It can contain text or a combination of text and images.""" + + content: Union[str, List[V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1]] + """Content of a user message. + + It can be a string or an array of text and image parts. + """ + + role: Literal["user"] + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Additional provider-specific metadata. + + They are passed through to the provider from the AI SDK and enable + provider-specific functionality that can be fully encapsulated in the provider. + """ + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember0(BaseModel): + """Text content part of a prompt. It contains a string of text.""" + + text: str + """The text content.""" + + type: Literal["text"] + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Additional provider-specific metadata. + + They are passed through to the provider from the AI SDK and enable + provider-specific functionality that can be fully encapsulated in the provider. + """ + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataUnionMember1Buffer( + BaseModel +): + byte_length: float = FieldInfo(alias="byteLength") + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataUnionMember1(BaseModel): + buffer: V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataUnionMember1Buffer + + byte_length: float = FieldInfo(alias="byteLength") + + byte_offset: float = FieldInfo(alias="byteOffset") + + bytes_per_element: float = FieldInfo(alias="BYTES_PER_ELEMENT") + + length: float + + if TYPE_CHECKING: + # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a + # value to this field, so for compatibility we avoid doing it at runtime. + __pydantic_extra__: Dict[str, float] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] + + # Stub to indicate that arbitrary properties are accepted. + # To access properties that are not valid identifiers you can use `getattr`, e.g. + # `getattr(obj, '$type')` + def __getattr__(self, attr: str) -> float: ... + else: + __pydantic_extra__: Dict[str, float] + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataByteLength(BaseModel): + byte_length: float = FieldInfo(alias="byteLength") + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataV1GlobalBufferBuffer( + BaseModel +): + byte_length: float = FieldInfo(alias="byteLength") + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataV1GlobalBuffer(BaseModel): + buffer: V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataV1GlobalBufferBuffer + + byte_length: float = FieldInfo(alias="byteLength") + + byte_offset: float = FieldInfo(alias="byteOffset") + + bytes_per_element: float = FieldInfo(alias="BYTES_PER_ELEMENT") + + length: float + + if TYPE_CHECKING: + # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a + # value to this field, so for compatibility we avoid doing it at runtime. + __pydantic_extra__: Dict[str, float] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride] + + # Stub to indicate that arbitrary properties are accepted. + # To access properties that are not valid identifiers you can use `getattr`, e.g. + # `getattr(obj, '$type')` + def __getattr__(self, attr: str) -> float: ... + else: + __pydantic_extra__: Dict[str, float] + + +V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1Data: TypeAlias = Union[ + str, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataUnionMember1, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataByteLength, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataV1GlobalBuffer, +] + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1(BaseModel): + """File content part of a prompt. It contains a file.""" + + data: V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1Data + """File data. Can either be: + + - data: a base64-encoded string, a Uint8Array, an ArrayBuffer, or a Buffer + - URL: a URL that points to the image + """ + + media_type: str = FieldInfo(alias="mediaType") + """IANA media type of the file.""" + + type: Literal["file"] + + filename: Optional[str] = None + """Optional filename of the file.""" + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Additional provider-specific metadata. + + They are passed through to the provider from the AI SDK and enable + provider-specific functionality that can be fully encapsulated in the provider. + """ + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember2(BaseModel): + """Reasoning content part of a prompt. It contains a reasoning.""" + + text: str + """The reasoning text.""" + + type: Literal["reasoning"] + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Additional provider-specific metadata. + + They are passed through to the provider from the AI SDK and enable + provider-specific functionality that can be fully encapsulated in the provider. + """ + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember3(BaseModel): + """Tool call content part of a prompt. + + It contains a tool call (usually generated by the AI model). + """ + + input: object + """Arguments of the tool call. + + This is a JSON-serializable object that matches the tool's input schema. + """ + + tool_call_id: str = FieldInfo(alias="toolCallId") + """ID of the tool call. + + This ID is used to match the tool call with the tool result. + """ + + tool_name: str = FieldInfo(alias="toolName") + """Name of the tool that is being called.""" + + type: Literal["tool-call"] + + provider_executed: Optional[bool] = FieldInfo(alias="providerExecuted", default=None) + """Whether the tool call was executed by the provider.""" + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Additional provider-specific metadata. + + They are passed through to the provider from the AI SDK and enable + provider-specific functionality that can be fully encapsulated in the provider. + """ + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember0(BaseModel): + type: Literal["text"] + """Text tool output that should be directly sent to the API.""" + + value: str + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember1(BaseModel): + type: Literal["json"] + + value: Union[ + str, + float, + bool, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + List[Union[str, float, bool, List[object], object]], + object, + ] + """A JSON value can be a string, number, boolean, object, array, or null. + + JSON values can be serialized and deserialized by the JSON.stringify and + JSON.parse methods. + """ + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember2(BaseModel): + type: Literal["execution-denied"] + """Type when the user has denied the execution of the tool call.""" + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + reason: Optional[str] = None + """Optional reason for the execution denial.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember3(BaseModel): + type: Literal["error-text"] + + value: str + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember4(BaseModel): + type: Literal["error-json"] + + value: Union[ + str, + float, + bool, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + List[Union[str, float, bool, List[object], object]], + object, + ] + """A JSON value can be a string, number, boolean, object, array, or null. + + JSON values can be serialized and deserialized by the JSON.stringify and + JSON.parse methods. + """ + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember0( + BaseModel +): + text: str + """Text content.""" + + type: Literal["text"] + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember1( + BaseModel +): + data: str + + media_type: str = FieldInfo(alias="mediaType") + + type: Literal["media"] + """Deprecated. Use image-data or file-data instead.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember2( + BaseModel +): + data: str + """Base-64 encoded media data.""" + + media_type: str = FieldInfo(alias="mediaType") + """IANA media type.""" + + type: Literal["file-data"] + + filename: Optional[str] = None + """Optional filename of the file.""" + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember3( + BaseModel +): + type: Literal["file-url"] + + url: str + """URL of the file.""" + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember4( + BaseModel +): + file_id: Union[str, Dict[str, str]] = FieldInfo(alias="fileId") + """ID of the file. + + If you use multiple providers, you need to specify the provider specific ids + using the Record option. The key is the provider name, e.g. 'openai' or + 'anthropic'. + """ + + type: Literal["file-id"] + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember5( + BaseModel +): + data: str + """Base-64 encoded image data.""" + + media_type: str = FieldInfo(alias="mediaType") + """IANA media type.""" + + type: Literal["image-data"] + """Images that are referenced using base64 encoded data.""" + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember6( + BaseModel +): + type: Literal["image-url"] + """Images that are referenced using a URL.""" + + url: str + """URL of the image.""" + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember7( + BaseModel +): + file_id: Union[str, Dict[str, str]] = FieldInfo(alias="fileId") + """Image that is referenced using a provider file id. + + If you use multiple providers, you need to specify the provider specific ids + using the Record option. The key is the provider name, e.g. 'openai' or + 'anthropic'. + """ + + type: Literal["image-file-id"] + """Images that are referenced using a provider file id.""" + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember8( + BaseModel +): + type: Literal["custom"] + """Custom content part. + + This can be used to implement provider-specific content parts. + """ + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5Value: TypeAlias = Union[ + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember0, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember1, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember2, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember3, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember4, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember5, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember6, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember7, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember8, +] + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5(BaseModel): + type: Literal["content"] + + value: List[ + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5Value + ] + + +V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4Output: TypeAlias = Union[ + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember0, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember1, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember2, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember3, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember4, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5, +] + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4(BaseModel): + """Tool result content part of a prompt. + + It contains the result of the tool call with the matching ID. + """ + + output: V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4Output + """Result of the tool call. This is a JSON-serializable object.""" + + tool_call_id: str = FieldInfo(alias="toolCallId") + """ID of the tool call that this result is associated with.""" + + tool_name: str = FieldInfo(alias="toolName") + """Name of the tool that generated this result.""" + + type: Literal["tool-result"] + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Additional provider-specific metadata. + + They are passed through to the provider from the AI SDK and enable + provider-specific functionality that can be fully encapsulated in the provider. + """ + + +class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember5(BaseModel): + """Tool approval request prompt part.""" + + approval_id: str = FieldInfo(alias="approvalId") + """ID of the tool approval.""" + + tool_call_id: str = FieldInfo(alias="toolCallId") + """ID of the tool call that the approval request is for.""" + + type: Literal["tool-approval-request"] + + +V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1: TypeAlias = Union[ + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember0, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember2, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember3, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4, + V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember5, +] + + +class V1AutomateEventAIGenerationDataMessageUnionMember2(BaseModel): + """An assistant message. + + It can contain text, tool calls, or a combination of text and tool calls. + """ + + content: Union[str, List[V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1]] + """Content of an assistant message. + + It can be a string or an array of text, image, reasoning, redacted reasoning, + and tool call parts. + """ + + role: Literal["assistant"] + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Additional provider-specific metadata. + + They are passed through to the provider from the AI SDK and enable + provider-specific functionality that can be fully encapsulated in the provider. + """ + + +class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember0(BaseModel): + type: Literal["text"] + """Text tool output that should be directly sent to the API.""" + + value: str + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember1(BaseModel): + type: Literal["json"] + + value: Union[ + str, + float, + bool, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + List[Union[str, float, bool, List[object], object]], + object, + ] + """A JSON value can be a string, number, boolean, object, array, or null. + + JSON values can be serialized and deserialized by the JSON.stringify and + JSON.parse methods. + """ + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember2(BaseModel): + type: Literal["execution-denied"] + """Type when the user has denied the execution of the tool call.""" + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + reason: Optional[str] = None + """Optional reason for the execution denial.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember3(BaseModel): + type: Literal["error-text"] + + value: str + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember4(BaseModel): + type: Literal["error-json"] + + value: Union[ + str, + float, + bool, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + List[Union[str, float, bool, List[object], object]], + object, + ] + """A JSON value can be a string, number, boolean, object, array, or null. + + JSON values can be serialized and deserialized by the JSON.stringify and + JSON.parse methods. + """ + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember0( + BaseModel +): + text: str + """Text content.""" + + type: Literal["text"] + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember1( + BaseModel +): + data: str + + media_type: str = FieldInfo(alias="mediaType") + + type: Literal["media"] + """Deprecated. Use image-data or file-data instead.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember2( + BaseModel +): + data: str + """Base-64 encoded media data.""" + + media_type: str = FieldInfo(alias="mediaType") + """IANA media type.""" + + type: Literal["file-data"] + + filename: Optional[str] = None + """Optional filename of the file.""" + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember3( + BaseModel +): + type: Literal["file-url"] + + url: str + """URL of the file.""" + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember4( + BaseModel +): + file_id: Union[str, Dict[str, str]] = FieldInfo(alias="fileId") + """ID of the file. + + If you use multiple providers, you need to specify the provider specific ids + using the Record option. The key is the provider name, e.g. 'openai' or + 'anthropic'. + """ + + type: Literal["file-id"] + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember5( + BaseModel +): + data: str + """Base-64 encoded image data.""" + + media_type: str = FieldInfo(alias="mediaType") + """IANA media type.""" + + type: Literal["image-data"] + """Images that are referenced using base64 encoded data.""" + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember6( + BaseModel +): + type: Literal["image-url"] + """Images that are referenced using a URL.""" + + url: str + """URL of the image.""" + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember7( + BaseModel +): + file_id: Union[str, Dict[str, str]] = FieldInfo(alias="fileId") + """Image that is referenced using a provider file id. + + If you use multiple providers, you need to specify the provider specific ids + using the Record option. The key is the provider name, e.g. 'openai' or + 'anthropic'. + """ + + type: Literal["image-file-id"] + """Images that are referenced using a provider file id.""" + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember8( + BaseModel +): + type: Literal["custom"] + """Custom content part. + + This can be used to implement provider-specific content parts. + """ + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Provider-specific options.""" + + +V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5Value: TypeAlias = Union[ + V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember0, + V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember1, + V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember2, + V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember3, + V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember4, + V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember5, + V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember6, + V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember7, + V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember8, +] + + +class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5(BaseModel): + type: Literal["content"] + + value: List[V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5Value] + + +V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Output: TypeAlias = Union[ + V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember0, + V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember1, + V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember2, + V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember3, + V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember4, + V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5, +] + + +class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0(BaseModel): + """Tool result content part of a prompt. + + It contains the result of the tool call with the matching ID. + """ + + output: V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Output + """Result of the tool call. This is a JSON-serializable object.""" + + tool_call_id: str = FieldInfo(alias="toolCallId") + """ID of the tool call that this result is associated with.""" + + tool_name: str = FieldInfo(alias="toolName") + """Name of the tool that generated this result.""" + + type: Literal["tool-result"] + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Additional provider-specific metadata. + + They are passed through to the provider from the AI SDK and enable + provider-specific functionality that can be fully encapsulated in the provider. + """ + + +class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember1(BaseModel): + """Tool approval response prompt part.""" + + approval_id: str = FieldInfo(alias="approvalId") + """ID of the tool approval.""" + + approved: bool + """Flag indicating whether the approval was granted or denied.""" + + type: Literal["tool-approval-response"] + + provider_executed: Optional[bool] = FieldInfo(alias="providerExecuted", default=None) + """Flag indicating whether the tool call is provider-executed. + + Only provider-executed tool approval responses should be sent to the model. + """ + + reason: Optional[str] = None + """Optional reason for the approval or denial.""" + + +V1AutomateEventAIGenerationDataMessageUnionMember3Content: TypeAlias = Union[ + V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0, + V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember1, +] + + +class V1AutomateEventAIGenerationDataMessageUnionMember3(BaseModel): + """A tool message. It contains the result of one or more tool calls.""" + + content: List[V1AutomateEventAIGenerationDataMessageUnionMember3Content] + """Content of a tool message. It is an array of tool result parts.""" + + role: Literal["tool"] + + provider_options: Optional[ + Dict[ + str, + Dict[ + str, + Union[ + str, + float, + bool, + Dict[str, Union[str, float, bool, List[object], object, object, object]], + List[Union[str, float, bool, List[object], object]], + object, + object, + ], + ], + ] + ] = FieldInfo(alias="providerOptions", default=None) + """Additional provider-specific metadata. + + They are passed through to the provider from the AI SDK and enable + provider-specific functionality that can be fully encapsulated in the provider. + """ + + +V1AutomateEventAIGenerationDataMessage: TypeAlias = Union[ + V1AutomateEventAIGenerationDataMessageUnionMember0, + V1AutomateEventAIGenerationDataMessageUnionMember1, + V1AutomateEventAIGenerationDataMessageUnionMember2, + V1AutomateEventAIGenerationDataMessageUnionMember3, +] + + +class V1AutomateEventAIGenerationData(BaseModel): + """Event data when AI generation occurs""" + + finish_reason: Literal["stop", "length", "content-filter", "tool-calls", "error", "other"] = FieldInfo( + alias="finishReason" + ) + + iteration_id: str = FieldInfo(alias="iterationId") + + prompt: str + + schema_: object = FieldInfo(alias="schema") + + timestamp: float + + usage: V1AutomateEventAIGenerationDataUsage + + messages: Optional[List[V1AutomateEventAIGenerationDataMessage]] = None + + object: Optional[builtins.object] = None + + provider_metadata: Optional[Dict[str, builtins.object]] = FieldInfo(alias="providerMetadata", default=None) + + temperature: Optional[float] = None + + warnings: Optional[List[builtins.object]] = None + + +class V1AutomateEventAIGeneration(BaseModel): + """Envelope for the "ai:generation" event from /v1/automate.""" + + data: V1AutomateEventAIGenerationData + """Event data when AI generation occurs""" + + event: Literal["ai:generation"] + + +class V1AutomateEventAIGenerationErrorData(BaseModel): + """Event data when AI generation error occurs""" + + error: str + + iteration_id: str = FieldInfo(alias="iterationId") + + prompt: str + + schema_: object = FieldInfo(alias="schema") + + timestamp: float + + messages: Optional[List[object]] = None + + +class V1AutomateEventAIGenerationError(BaseModel): + """Envelope for the "ai:generation:error" event from /v1/automate.""" + data: V1AutomateEventAIGenerationErrorData + """Event data when AI generation error occurs""" + + event: Literal["ai:generation:error"] + + +class V1AutomateEventBrowserActionCompletedData(BaseModel): + """Event data for action results""" + + iteration_id: str = FieldInfo(alias="iterationId") + + success: bool + + timestamp: float + + error: Optional[str] = None + + +class V1AutomateEventBrowserActionCompleted(BaseModel): + """Envelope for the "browser:action_completed" event from /v1/automate.""" + + data: V1AutomateEventBrowserActionCompletedData + """Event data for action results""" + + event: Literal["browser:action_completed"] + + +class V1AutomateEventBrowserActionStartedData(BaseModel): + """Event data for action execution""" + + action: str + + iteration_id: str = FieldInfo(alias="iterationId") + + timestamp: float + + ref: Optional[str] = None + + value: Optional[str] = None + + +class V1AutomateEventBrowserActionStarted(BaseModel): + """Envelope for the "browser:action_started" event from /v1/automate.""" + + data: V1AutomateEventBrowserActionStartedData + """Event data for action execution""" + + event: Literal["browser:action_started"] + + +class V1AutomateEventBrowserNavigatedData(BaseModel): + """Event data when navigating to a page""" + + iteration_id: str = FieldInfo(alias="iterationId") + + timestamp: float + + title: str + + url: str + + +class V1AutomateEventBrowserNavigated(BaseModel): + """Envelope for the "browser:navigated" event from /v1/automate.""" + + data: V1AutomateEventBrowserNavigatedData + """Event data when navigating to a page""" + + event: Literal["browser:navigated"] + + +class V1AutomateEventBrowserReconnectedData(BaseModel): + """Event data when the browser reconnects after a mid-task disconnect""" + + endpoint_index: float = FieldInfo(alias="endpointIndex") + """1-based index of the CDP endpoint now in use""" + + iteration_id: str = FieldInfo(alias="iterationId") + + starting_url: str = FieldInfo(alias="startingUrl") + """The original starting URL the agent is restarting execution from""" + + timestamp: float + + total: float + """Total number of configured CDP endpoints""" + + +class V1AutomateEventBrowserReconnected(BaseModel): + """Envelope for the "browser:reconnected" event from /v1/automate.""" + + data: V1AutomateEventBrowserReconnectedData + """Event data when the browser reconnects after a mid-task disconnect""" + + event: Literal["browser:reconnected"] + + +class V1AutomateEventBrowserScreenshotCapturedData(BaseModel): + """Event data for screenshot capture""" + + format: Literal["jpeg", "png"] + + iteration_id: str = FieldInfo(alias="iterationId") + + size: float + + timestamp: float + + +class V1AutomateEventBrowserScreenshotCaptured(BaseModel): + """Envelope for the "browser:screenshot_captured" event from /v1/automate.""" + + data: V1AutomateEventBrowserScreenshotCapturedData + """Event data for screenshot capture""" + + event: Literal["browser:screenshot_captured"] + + +class V1AutomateEventBrowserScreenshotCapturedImageData(BaseModel): + """ + Event data for screenshot image capture with full image data This event contains the complete screenshot and can be very large + """ + + image: str + + iteration_id: str = FieldInfo(alias="iterationId") + + media_type: Literal["image/jpeg", "image/png"] = FieldInfo(alias="mediaType") + + timestamp: float + + +class V1AutomateEventBrowserScreenshotCapturedImage(BaseModel): + """Envelope for the "browser:screenshot_captured_image" event from /v1/automate.""" + + data: V1AutomateEventBrowserScreenshotCapturedImageData + """ + Event data for screenshot image capture with full image data This event contains + the complete screenshot and can be very large + """ + + event: Literal["browser:screenshot_captured_image"] + + +class V1AutomateEventCdpEndpointConnectedData(BaseModel): + """Event data when a CDP endpoint is successfully connected to""" + + endpoint_index: float = FieldInfo(alias="endpointIndex") + """1-based index of the endpoint that connected""" + + iteration_id: str = FieldInfo(alias="iterationId") + + timestamp: float + + total: float + """Total number of configured CDP endpoints""" + + +class V1AutomateEventCdpEndpointConnected(BaseModel): + """Envelope for the "cdp:endpoint_connected" event from /v1/automate.""" + + data: V1AutomateEventCdpEndpointConnectedData + """Event data when a CDP endpoint is successfully connected to""" + + event: Literal["cdp:endpoint_connected"] + + +class V1AutomateEventCdpEndpointCycleData(BaseModel): + """Event data when a CDP endpoint fails and the next one is being tried""" + + attempt: float + """1-based index of the endpoint attempt that failed""" + + error: str + """ + Sanitized error identifier from the failed connection attempt (error.name, not + error.message — full messages may contain endpoint URLs) + """ + + iteration_id: str = FieldInfo(alias="iterationId") + + timestamp: float + + total: float + """Total number of configured CDP endpoints""" + + +class V1AutomateEventCdpEndpointCycle(BaseModel): + """Envelope for the "cdp:endpoint_cycle" event from /v1/automate.""" + + data: V1AutomateEventCdpEndpointCycleData + """Event data when a CDP endpoint fails and the next one is being tried""" + + event: Literal["cdp:endpoint_cycle"] + + +class V1AutomateEventInteractiveFormDataErrorDataField(BaseModel): + """A single form field the agent needs data for.""" + + field_type: Literal[ + "text", "email", "phone", "date", "number", "select", "checkbox", "radio", "textarea", "password", "other" + ] = FieldInfo(alias="fieldType") + """Semantic field type""" + + label: str + """The field's visible label""" + + ref: str + """Element ref from the accessibility tree (e.g., "E42")""" + + required: bool + """Whether this field must be filled""" + + current_value: Optional[str] = FieldInfo(alias="currentValue", default=None) + """Current value if already partially filled""" + + description: Optional[str] = None + """Additional context (e.g., validation error message on re-request)""" + + options: Optional[List[str]] = None + """Available options for select/radio fields""" + + +class V1AutomateEventInteractiveFormDataErrorData(BaseModel): + """Event data when form validation fails and the agent re-requests data. + + Carries both the error context and the fields that need new values. Callers respond to this the same way as a request event. + """ + + field_errors: Dict[str, str] = FieldInfo(alias="fieldErrors") + """Per-field error messages from validation (field ref -> error text)""" + + fields: List[V1AutomateEventInteractiveFormDataErrorDataField] + + form_description: str = FieldInfo(alias="formDescription") + + iteration_id: str = FieldInfo(alias="iterationId") + + page_title: str = FieldInfo(alias="pageTitle") + + page_url: str = FieldInfo(alias="pageUrl") + + request_id: str = FieldInfo(alias="requestId") + + timestamp: float + + +class V1AutomateEventInteractiveFormDataError(BaseModel): + """Envelope for the "interactive:form_data:error" event from /v1/automate.""" + + data: V1AutomateEventInteractiveFormDataErrorData + """Event data when form validation fails and the agent re-requests data. + + Carries both the error context and the fields that need new values. Callers + respond to this the same way as a request event. + """ + + event: Literal["interactive:form_data:error"] + + +class V1AutomateEventInteractiveFormDataRequestDataField(BaseModel): + """A single form field the agent needs data for.""" + + field_type: Literal[ + "text", "email", "phone", "date", "number", "select", "checkbox", "radio", "textarea", "password", "other" + ] = FieldInfo(alias="fieldType") + """Semantic field type""" + + label: str + """The field's visible label""" + + ref: str + """Element ref from the accessibility tree (e.g., "E42")""" + + required: bool + """Whether this field must be filled""" + + current_value: Optional[str] = FieldInfo(alias="currentValue", default=None) + """Current value if already partially filled""" + + description: Optional[str] = None + """Additional context (e.g., validation error message on re-request)""" + + options: Optional[List[str]] = None + """Available options for select/radio fields""" + + +class V1AutomateEventInteractiveFormDataRequestData(BaseModel): + """Event data when the agent requests user data for form fields""" + + fields: List[V1AutomateEventInteractiveFormDataRequestDataField] + + form_description: str = FieldInfo(alias="formDescription") + + iteration_id: str = FieldInfo(alias="iterationId") + + page_title: str = FieldInfo(alias="pageTitle") + + page_url: str = FieldInfo(alias="pageUrl") + + request_id: str = FieldInfo(alias="requestId") + + timestamp: float + + +class V1AutomateEventInteractiveFormDataRequest(BaseModel): + """Envelope for the "interactive:form_data:request" event from /v1/automate.""" + + data: V1AutomateEventInteractiveFormDataRequestData + """Event data when the agent requests user data for form fields""" + + event: Literal["interactive:form_data:request"] + + +class V1AutomateEventSystemDebugCompressionData(BaseModel): + """Event data for compression debug info""" + + compressed_size: float = FieldInfo(alias="compressedSize") + + compression_percent: float = FieldInfo(alias="compressionPercent") + + iteration_id: str = FieldInfo(alias="iterationId") + + original_size: float = FieldInfo(alias="originalSize") + + timestamp: float + + +class V1AutomateEventSystemDebugCompression(BaseModel): + """Envelope for the "system:debug_compression" event from /v1/automate.""" + + data: V1AutomateEventSystemDebugCompressionData + """Event data for compression debug info""" + + event: Literal["system:debug_compression"] + + +class V1AutomateEventSystemDebugMessageData(BaseModel): + """Event data for message debug info""" + + iteration_id: str = FieldInfo(alias="iterationId") + + messages: List[object] + + timestamp: float + + +class V1AutomateEventSystemDebugMessage(BaseModel): + """Envelope for the "system:debug_message" event from /v1/automate.""" + + data: V1AutomateEventSystemDebugMessageData + """Event data for message debug info""" + + event: Literal["system:debug_message"] + + +class V1AutomateEventTaskAbortedData(BaseModel): + """Event data when a task is aborted""" + + final_answer: str = FieldInfo(alias="finalAnswer") + + iteration_id: str = FieldInfo(alias="iterationId") + + reason: str + + timestamp: float + + +class V1AutomateEventTaskAborted(BaseModel): + """Envelope for the "task:aborted" event from /v1/automate.""" + + data: V1AutomateEventTaskAbortedData + """Event data when a task is aborted""" + + event: Literal["task:aborted"] + + +class V1AutomateEventTaskCompletedData(BaseModel): + """Event data when a task is completed""" + + final_answer: Optional[str] = FieldInfo(alias="finalAnswer", default=None) + + iteration_id: str = FieldInfo(alias="iterationId") + + timestamp: float + + success: Optional[bool] = None + + +class V1AutomateEventTaskCompleted(BaseModel): + """Envelope for the "task:completed" event from /v1/automate.""" + + data: V1AutomateEventTaskCompletedData + """Event data when a task is completed""" + + event: Literal["task:completed"] + + +class V1AutomateEventTaskMetricsData(BaseModel): + ai_generation_count: float = FieldInfo(alias="aiGenerationCount") + + ai_generation_error_count: float = FieldInfo(alias="aiGenerationErrorCount") + + event_counts: Dict[str, float] = FieldInfo(alias="eventCounts") + + iteration_id: str = FieldInfo(alias="iterationId") + + step_count: float = FieldInfo(alias="stepCount") + + timestamp: float + + total_input_tokens: float = FieldInfo(alias="totalInputTokens") + + total_output_tokens: float = FieldInfo(alias="totalOutputTokens") + + +class V1AutomateEventTaskMetrics(BaseModel): + """Envelope for the "task:metrics" event from /v1/automate.""" + + data: V1AutomateEventTaskMetricsData + + event: Literal["task:metrics"] + + +class V1AutomateEventTaskMetricsIncrementalData(BaseModel): + ai_generation_count: float = FieldInfo(alias="aiGenerationCount") + + ai_generation_error_count: float = FieldInfo(alias="aiGenerationErrorCount") + + event_counts: Dict[str, float] = FieldInfo(alias="eventCounts") + + iteration_id: str = FieldInfo(alias="iterationId") + + step_count: float = FieldInfo(alias="stepCount") + + timestamp: float + + total_input_tokens: float = FieldInfo(alias="totalInputTokens") + + total_output_tokens: float = FieldInfo(alias="totalOutputTokens") + + +class V1AutomateEventTaskMetricsIncremental(BaseModel): + """Envelope for the "task:metrics_incremental" event from /v1/automate.""" + + data: V1AutomateEventTaskMetricsIncrementalData + + event: Literal["task:metrics_incremental"] + + +class V1AutomateEventTaskSetupData(BaseModel): + """Event data when a task is setup""" + + browser_name: str = FieldInfo(alias="browserName") + + iteration_id: str = FieldInfo(alias="iterationId") + + task: str + + timestamp: float -class AutomateEvent(BaseModel): data: Optional[object] = None - """Event payload data""" - event: Optional[str] = None - """The event type (e.g., start, agent:processing, complete)""" + guardrails: Optional[str] = None + + has_api_key: Optional[bool] = FieldInfo(alias="hasApiKey", default=None) + + key_source: Optional[Literal["global", "env", "not_set"]] = FieldInfo(alias="keySource", default=None) + + model: Optional[str] = None + + provider: Optional[str] = None + + proxy: Optional[str] = None + + pw_cdp_endpoint: Optional[str] = FieldInfo(alias="pwCdpEndpoint", default=None) + + pw_cdp_endpoint_count: Optional[float] = FieldInfo(alias="pwCdpEndpointCount", default=None) + """Total number of CDP endpoints configured (index, not URLs)""" + + pw_cdp_endpoints: Optional[List[str]] = FieldInfo(alias="pwCdpEndpoints", default=None) + + pw_endpoint: Optional[str] = FieldInfo(alias="pwEndpoint", default=None) + + url: Optional[str] = None + + vision: Optional[bool] = None + + +class V1AutomateEventTaskSetup(BaseModel): + """Envelope for the "task:setup" event from /v1/automate.""" + + data: V1AutomateEventTaskSetupData + """Event data when a task is setup""" + + event: Literal["task:setup"] + + +class V1AutomateEventTaskStartedData(BaseModel): + """Event data when a task is started""" + + iteration_id: str = FieldInfo(alias="iterationId") + + plan: str + + success_criteria: str = FieldInfo(alias="successCriteria") + + task: str + + timestamp: float + + url: str + + action_items: Optional[List[str]] = FieldInfo(alias="actionItems", default=None) + + +class V1AutomateEventTaskStarted(BaseModel): + """Envelope for the "task:started" event from /v1/automate.""" + + data: V1AutomateEventTaskStartedData + """Event data when a task is started""" + + event: Literal["task:started"] + + +class V1AutomateEventTaskValidatedData(BaseModel): + """Event data for task validation""" + + completion_quality: Literal["failed", "partial", "complete", "excellent"] = FieldInfo(alias="completionQuality") + + final_answer: str = FieldInfo(alias="finalAnswer") + + iteration_id: str = FieldInfo(alias="iterationId") + + observation: str + + timestamp: float + + feedback: Optional[str] = None + + +class V1AutomateEventTaskValidated(BaseModel): + """Envelope for the "task:validated" event from /v1/automate.""" + + data: V1AutomateEventTaskValidatedData + """Event data for task validation""" + + event: Literal["task:validated"] + + +class V1AutomateEventTaskValidationErrorData(BaseModel): + """Event data for validation errors during action response processing""" + + errors: List[str] + + iteration_id: str = FieldInfo(alias="iterationId") + + raw_response: object = FieldInfo(alias="rawResponse") + + retry_count: float = FieldInfo(alias="retryCount") + + timestamp: float + + +class V1AutomateEventTaskValidationError(BaseModel): + """Envelope for the "task:validation_error" event from /v1/automate.""" + + data: V1AutomateEventTaskValidationErrorData + """Event data for validation errors during action response processing""" + + event: Literal["task:validation_error"] + + +AutomateEvent: TypeAlias = Annotated[ + Union[ + V1AutomateEventAgentAction, + V1AutomateEventAgentExtracted, + V1AutomateEventAgentProcessing, + V1AutomateEventAgentReasoned, + V1AutomateEventAgentStatus, + V1AutomateEventAgentStep, + V1AutomateEventAgentWaiting, + V1AutomateEventAIGeneration, + V1AutomateEventAIGenerationError, + V1AutomateEventBrowserActionCompleted, + V1AutomateEventBrowserActionStarted, + V1AutomateEventBrowserNavigated, + V1AutomateEventBrowserReconnected, + V1AutomateEventBrowserScreenshotCaptured, + V1AutomateEventBrowserScreenshotCapturedImage, + V1AutomateEventCdpEndpointConnected, + V1AutomateEventCdpEndpointCycle, + V1AutomateEventInteractiveFormDataError, + V1AutomateEventInteractiveFormDataRequest, + V1AutomateEventSystemDebugCompression, + V1AutomateEventSystemDebugMessage, + V1AutomateEventTaskAborted, + V1AutomateEventTaskCompleted, + V1AutomateEventTaskMetrics, + V1AutomateEventTaskMetricsIncremental, + V1AutomateEventTaskSetup, + V1AutomateEventTaskStarted, + V1AutomateEventTaskValidated, + V1AutomateEventTaskValidationError, + ], + PropertyInfo(discriminator="event"), +] diff --git a/src/tabstack/types/research_event.py b/src/tabstack/types/research_event.py index dc6c7b6..c4c03aa 100644 --- a/src/tabstack/types/research_event.py +++ b/src/tabstack/types/research_event.py @@ -1,15 +1,907 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import Optional +from typing import Dict, List, Union, Optional +from typing_extensions import Literal, Annotated, TypeAlias +from pydantic import Field as FieldInfo + +from .._utils import PropertyInfo from .._models import BaseModel -__all__ = ["ResearchEvent"] +__all__ = [ + "ResearchEvent", + "V1ResearchEventAnalyzingEnd", + "V1ResearchEventAnalyzingEndData", + "V1ResearchEventAnalyzingEndDataSample", + "V1ResearchEventAnalyzingStart", + "V1ResearchEventAnalyzingStartData", + "V1ResearchEventComplete", + "V1ResearchEventCompleteData", + "V1ResearchEventCompleteDataMetadata", + "V1ResearchEventCompleteDataMetadataCitedPage", + "V1ResearchEventCompleteDataMetadataGapEvaluation", + "V1ResearchEventCompleteDataMetadataGapEvaluationQuestionAssessment", + "V1ResearchEventCompleteDataMetadataJudgment", + "V1ResearchEventCompleteDataMetadataMetrics", + "V1ResearchEventCompleteDataMetadataMetricsPhases", + "V1ResearchEventCompleteDataMetadataMetricsSuccessRates", + "V1ResearchEventCompleteDataMetadataMetricsTokens", + "V1ResearchEventCompleteDataMetadataOutline", + "V1ResearchEventCompleteDataMetadataURLSources", + "V1ResearchEventError", + "V1ResearchEventErrorData", + "V1ResearchEventErrorDataError", + "V1ResearchEventEvaluatingEnd", + "V1ResearchEventEvaluatingEndData", + "V1ResearchEventEvaluatingEndDataQuestionAssessment", + "V1ResearchEventEvaluatingStart", + "V1ResearchEventEvaluatingStartData", + "V1ResearchEventFollowingEnd", + "V1ResearchEventFollowingEndData", + "V1ResearchEventFollowingEndDataSample", + "V1ResearchEventFollowingStart", + "V1ResearchEventFollowingStartData", + "V1ResearchEventIterationEnd", + "V1ResearchEventIterationEndData", + "V1ResearchEventIterationStart", + "V1ResearchEventIterationStartData", + "V1ResearchEventJudgingEnd", + "V1ResearchEventJudgingEndData", + "V1ResearchEventJudgingStart", + "V1ResearchEventJudgingStartData", + "V1ResearchEventOutliningEnd", + "V1ResearchEventOutliningEndData", + "V1ResearchEventOutliningStart", + "V1ResearchEventOutliningStartData", + "V1ResearchEventPlanningEnd", + "V1ResearchEventPlanningEndData", + "V1ResearchEventPlanningStart", + "V1ResearchEventPlanningStartData", + "V1ResearchEventPrefetchingEnd", + "V1ResearchEventPrefetchingEndData", + "V1ResearchEventPrefetchingStart", + "V1ResearchEventPrefetchingStartData", + "V1ResearchEventSearchingEnd", + "V1ResearchEventSearchingEndData", + "V1ResearchEventSearchingStart", + "V1ResearchEventSearchingStartData", + "V1ResearchEventStart", + "V1ResearchEventStartData", + "V1ResearchEventWritingEnd", + "V1ResearchEventWritingEndData", + "V1ResearchEventWritingStart", + "V1ResearchEventWritingStartData", +] + + +class V1ResearchEventAnalyzingEndDataSample(BaseModel): + """Page sample - lightweight representation for event payloads""" + + domain: str + + title: str + + url: str + + url_source: Literal["user-input", "search-result", "extracted-link"] = FieldInfo(alias="urlSource") + """URL source tracking - where a URL came from""" + + relevance: Optional[Literal["low", "medium", "high"]] = None + + reliability: Optional[Literal["low", "medium", "high"]] = None + + summary: Optional[str] = None + + +class V1ResearchEventAnalyzingEndData(BaseModel): + analyzed: float + + failed: float + + iteration: float + + message: str + + samples: List[V1ResearchEventAnalyzingEndDataSample] + + timestamp: float + + +class V1ResearchEventAnalyzingEnd(BaseModel): + """Envelope for the "analyzing:end" event from /v1/research.""" + + data: V1ResearchEventAnalyzingEndData + + event: Literal["analyzing:end"] + + +class V1ResearchEventAnalyzingStartData(BaseModel): + iteration: float + + message: str + + page_count: float = FieldInfo(alias="pageCount") + + timestamp: float + + +class V1ResearchEventAnalyzingStart(BaseModel): + """Envelope for the "analyzing:start" event from /v1/research.""" + + data: V1ResearchEventAnalyzingStartData + + event: Literal["analyzing:start"] + + +class V1ResearchEventCompleteDataMetadataCitedPage(BaseModel): + id: str + + claims: List[str] + + source_queries: List[str] = FieldInfo(alias="sourceQueries") + + url: str + + depth: Optional[float] = None + + full_text: Optional[str] = FieldInfo(alias="fullText", default=None) + """Full page text (fetched markdown or search excerpts). + + Only populated when `includeFullText: true` in ResearchOptions. + + - Fast mode: Parallel API excerpts (~5000 chars) + - Other modes: Fetched page markdown + """ + + parent_url: Optional[str] = FieldInfo(alias="parentUrl", default=None) + + relevance: Optional[Literal["low", "medium", "high"]] = None + + reliability: Optional[Literal["low", "medium", "high"]] = None + + summary: Optional[str] = None + """LLM-generated summary. Undefined in fast mode (no content analysis).""" + + title: Optional[str] = None + + url_source: Optional[Literal["user-input", "search-result", "extracted-link"]] = FieldInfo( + alias="urlSource", default=None + ) + """URL source tracking - where a URL came from""" + + +class V1ResearchEventCompleteDataMetadataGapEvaluationQuestionAssessment(BaseModel): + """Assessment of a single research question""" + + findings: str + """What we learned (if answered/partial) or what's missing (if unanswered)""" + + question: str + """The research question being assessed""" + + status: Literal["answered", "partial", "unanswered"] + """ + Status: answered (clear info), partial (some info, gaps remain), unanswered (no + relevant info) + """ + + +class V1ResearchEventCompleteDataMetadataGapEvaluation(BaseModel): + """Gap evaluation results from research strategist""" + + gap_description: str = FieldInfo(alias="gapDescription") + """ + Based on unanswered/partial questions, what specific information is still + needed? + """ + + question_assessments: List[V1ResearchEventCompleteDataMetadataGapEvaluationQuestionAssessment] = FieldInfo( + alias="questionAssessments" + ) + """Assessment of each research question's status and findings""" + + research_coverage: Literal["Light", "Moderate", "Solid", "Comprehensive"] = FieldInfo(alias="researchCoverage") + """Research coverage level - assesses quality across all questions. + + Hierarchy: Light < Moderate < Solid < Comprehensive + + - **Light**: Basic info on some questions, most need more depth → Continue + - **Moderate**: Multiple questions answered, some remain partial → Continue + - **Solid**: Most questions well-answered with validated sources → Sufficient to + stop + - **Comprehensive**: All questions thoroughly answered, exceptional depth → + Definitely stop + """ + + should_continue_research: bool = FieldInfo(alias="shouldContinueResearch") + """Explicit decision: should research continue with another iteration? + + - Considers: how many questions unanswered/partial, coverage for mode, remaining + iterations + - Drives query generation: true → generate queries, false → stop researching + """ + + new_research_questions: Optional[List[str]] = FieldInfo(alias="newResearchQuestions", default=None) + """New research questions to add (optional, use sparingly) + + - Only if original decomposition missed something critical + - Maximum 2-3 new questions total across all iterations + - Most iterations should return empty array or omit this field + """ + + search_queries: Optional[List[str]] = FieldInfo(alias="searchQueries", default=None) + """ + Search queries to address identified gaps (only when shouldContinueResearch is + true) + + - Target unanswered questions first, then partial questions + - 3-10 targeted queries if shouldContinueResearch is true + - Omit or provide empty array if shouldContinueResearch is false + """ + + +class V1ResearchEventCompleteDataMetadataJudgment(BaseModel): + """Judgment result from research judge""" + + approved: bool + + observation: str + + score: float + + feedback: Optional[str] = None + + +class V1ResearchEventCompleteDataMetadataMetricsPhases(BaseModel): + duration: float + + +class V1ResearchEventCompleteDataMetadataMetricsSuccessRates(BaseModel): + """Success rates (0-1) for various operations""" + + analyzes: float + + fetches: float + + searches: float + + +class V1ResearchEventCompleteDataMetadataMetricsTokens(BaseModel): + """Token usage for a specific model""" + + input: float + + output: float + + +class V1ResearchEventCompleteDataMetadataMetrics(BaseModel): + """Complete research metrics""" + + cached_fetches: float = FieldInfo(alias="cachedFetches") + """Cached fetch count (subset of fetches)""" + + cached_searches: Dict[str, float] = FieldInfo(alias="cachedSearches") + """Cached search count by provider name (subset of searches)""" + + fetches: float + """Fetch count (number of pages fetched)""" + + iterations: float + """Number of research iterations performed""" + + phases: Dict[str, V1ResearchEventCompleteDataMetadataMetricsPhases] + """Phase timings with duration in milliseconds""" + + robots_blocked: float = FieldInfo(alias="robotsBlocked") + """Number of URLs blocked by robots.txt""" + + searches: Dict[str, float] + """Search count by provider name (e.g., "bright-data", "parallel")""" + + success_rates: V1ResearchEventCompleteDataMetadataMetricsSuccessRates = FieldInfo(alias="successRates") + """Success rates (0-1) for various operations""" + + tokens: Dict[str, V1ResearchEventCompleteDataMetadataMetricsTokens] + """Token usage by model ID (e.g., "gemini-2.5-flash")""" + + total_duration: float = FieldInfo(alias="totalDuration") + """Total duration in milliseconds""" + + +class V1ResearchEventCompleteDataMetadataOutline(BaseModel): + """Report outline from research writer""" + + direct_answer: str = FieldInfo(alias="directAnswer") + + key_takeaways: List[str] = FieldInfo(alias="keyTakeaways") + + outline: str + + relevant_source_ids: List[str] = FieldInfo(alias="relevantSourceIds") + + +class V1ResearchEventCompleteDataMetadataURLSources(BaseModel): + extracted_links: float = FieldInfo(alias="extractedLinks") + + search_results: float = FieldInfo(alias="searchResults") + + user_provided: float = FieldInfo(alias="userProvided") + + +class V1ResearchEventCompleteDataMetadata(BaseModel): + """Research metadata + + Note: citedPages, gapEvaluations, outline, and judgments are optional to support fast mode, which skips these phases for maximum speed. + """ + + executed_queries: List[List[str]] = FieldInfo(alias="executedQueries") + + mode: Literal["fast", "balanced", "deep", "max", "ultra"] + """Research mode determines depth, thinking budget, and quality controls + + Modes (in order of cost/thoroughness): + + - **fast**: Quick answers with minimal validation (~$2, 1 iteration, no judge) + - **balanced**: Standard research with moderate depth (~$8, 3 iterations, Flash + models, no judge) + - **deep**: Thorough research with judge review (~$15, 5 iterations, Flash + models, with judge) + - **max**: Maximum quality with Pro models (~$40, 5 iterations, Pro models, with + judge) + - **ultra**: Ultimate tier - all Pro models, 10 iterations (expensive, for when + accuracy is paramount) + """ + + prompt: str + + query_complexity: Literal["simple", "moderate", "complex"] = FieldInfo(alias="queryComplexity") + + research_objective: str = FieldInfo(alias="researchObjective") + + research_plan: str = FieldInfo(alias="researchPlan") + + research_questions: List[str] = FieldInfo(alias="researchQuestions") + + total_pages_analyzed: float = FieldInfo(alias="totalPagesAnalyzed") + """Total pages analyzed across all iterations""" + + cited_pages: Optional[List[V1ResearchEventCompleteDataMetadataCitedPage]] = FieldInfo( + alias="citedPages", default=None + ) + """Pages cited in the report, ordered by first citation appearance""" + + gap_evaluations: Optional[List[V1ResearchEventCompleteDataMetadataGapEvaluation]] = FieldInfo( + alias="gapEvaluations", default=None + ) + + judgments: Optional[List[V1ResearchEventCompleteDataMetadataJudgment]] = None + + metrics: Optional[V1ResearchEventCompleteDataMetadataMetrics] = None + """Complete research metrics""" + + outline: Optional[V1ResearchEventCompleteDataMetadataOutline] = None + """Report outline from research writer""" + + url_sources: Optional[V1ResearchEventCompleteDataMetadataURLSources] = FieldInfo(alias="urlSources", default=None) + + +class V1ResearchEventCompleteData(BaseModel): + """complete - Research finished successfully""" + + message: str + + metadata: V1ResearchEventCompleteDataMetadata + """Research metadata + + Note: citedPages, gapEvaluations, outline, and judgments are optional to support + fast mode, which skips these phases for maximum speed. + """ + + report: str + + timestamp: float + + +class V1ResearchEventComplete(BaseModel): + """Envelope for the "complete" event from /v1/research.""" + + data: V1ResearchEventCompleteData + """complete - Research finished successfully""" + + event: Literal["complete"] + + +class V1ResearchEventErrorDataError(BaseModel): + message: str + + name: str + + stack: Optional[str] = None + + +class V1ResearchEventErrorData(BaseModel): + """error - Research failed""" + + error: V1ResearchEventErrorDataError + + message: str + + timestamp: float + + activity: Optional[ + Literal[ + "prefetching", + "planning", + "iteration", + "searching", + "analyzing", + "following", + "evaluating", + "outlining", + "writing", + "judging", + ] + ] = None + """Activity types for research workflow""" + + iteration: Optional[float] = None + + +class V1ResearchEventError(BaseModel): + """Envelope for the "error" event from /v1/research.""" + + data: V1ResearchEventErrorData + """error - Research failed""" + + event: Literal["error"] + + +class V1ResearchEventEvaluatingEndDataQuestionAssessment(BaseModel): + """Question assessment for evaluating:end payload""" + + findings: str + """What we learned (if answered/partial) or what's missing (if unanswered)""" + + question: str + """The research question being assessed""" + + status: Literal["answered", "partial", "unanswered"] + """ + Status: answered (clear info), partial (some info, gaps remain), unanswered (no + relevant info) + """ + + +class V1ResearchEventEvaluatingEndData(BaseModel): + coverage: Literal["Light", "Moderate", "Solid", "Comprehensive"] + + gaps: str + + iteration: float + + message: str + + next_queries: List[str] = FieldInfo(alias="nextQueries") + + question_assessments: List[V1ResearchEventEvaluatingEndDataQuestionAssessment] = FieldInfo( + alias="questionAssessments" + ) + + should_continue: bool = FieldInfo(alias="shouldContinue") + + timestamp: float + + +class V1ResearchEventEvaluatingEnd(BaseModel): + """Envelope for the "evaluating:end" event from /v1/research.""" + + data: V1ResearchEventEvaluatingEndData + + event: Literal["evaluating:end"] + + +class V1ResearchEventEvaluatingStartData(BaseModel): + iteration: float + + message: str + + pages_analyzed: float = FieldInfo(alias="pagesAnalyzed") + """Total pages analyzed so far (including this iteration)""" + + question_count: float = FieldInfo(alias="questionCount") + """Number of research questions being assessed""" + + timestamp: float + + +class V1ResearchEventEvaluatingStart(BaseModel): + """Envelope for the "evaluating:start" event from /v1/research.""" + + data: V1ResearchEventEvaluatingStartData + + event: Literal["evaluating:start"] + + +class V1ResearchEventFollowingEndDataSample(BaseModel): + """Page sample - lightweight representation for event payloads""" + + domain: str + + title: str + + url: str + + url_source: Literal["user-input", "search-result", "extracted-link"] = FieldInfo(alias="urlSource") + """URL source tracking - where a URL came from""" + + relevance: Optional[Literal["low", "medium", "high"]] = None + + reliability: Optional[Literal["low", "medium", "high"]] = None + + summary: Optional[str] = None + + +class V1ResearchEventFollowingEndData(BaseModel): + failed: float + + followed: float + + iteration: float + + message: str + + samples: List[V1ResearchEventFollowingEndDataSample] + + timestamp: float + + +class V1ResearchEventFollowingEnd(BaseModel): + """Envelope for the "following:end" event from /v1/research.""" + + data: V1ResearchEventFollowingEndData + + event: Literal["following:end"] + + +class V1ResearchEventFollowingStartData(BaseModel): + iteration: float + + link_count: float = FieldInfo(alias="linkCount") + + message: str + + timestamp: float + + +class V1ResearchEventFollowingStart(BaseModel): + """Envelope for the "following:start" event from /v1/research.""" + + data: V1ResearchEventFollowingStartData + + event: Literal["following:start"] + + +class V1ResearchEventIterationEndData(BaseModel): + is_last: bool = FieldInfo(alias="isLast") + """Whether this is the final iteration""" + + iteration: float + + message: str + + timestamp: float + + stop_reason: Optional[Literal["max_iterations", "coverage_sufficient"]] = FieldInfo( + alias="stopReason", default=None + ) + """Why research iterations stopped (only present when isLast is true)""" + + +class V1ResearchEventIterationEnd(BaseModel): + """Envelope for the "iteration:end" event from /v1/research.""" + + data: V1ResearchEventIterationEndData + + event: Literal["iteration:end"] + + +class V1ResearchEventIterationStartData(BaseModel): + iteration: float + + max_iterations: float = FieldInfo(alias="maxIterations") + """Maximum iterations for this research mode""" + + message: str + + queries: List[str] + """Search queries to execute in this iteration""" + + timestamp: float + + +class V1ResearchEventIterationStart(BaseModel): + """Envelope for the "iteration:start" event from /v1/research.""" + + data: V1ResearchEventIterationStartData + + event: Literal["iteration:start"] + + +class V1ResearchEventJudgingEndData(BaseModel): + approved: bool + + attempt: float + + message: str + + score: float + + timestamp: float + + feedback: Optional[str] = None + + +class V1ResearchEventJudgingEnd(BaseModel): + """Envelope for the "judging:end" event from /v1/research.""" + + data: V1ResearchEventJudgingEndData + + event: Literal["judging:end"] + + +class V1ResearchEventJudgingStartData(BaseModel): + attempt: float + + max_attempts: float = FieldInfo(alias="maxAttempts") + """Maximum attempts allowed (1 + maxRevisions)""" + + message: str + + timestamp: float + + +class V1ResearchEventJudgingStart(BaseModel): + """Envelope for the "judging:start" event from /v1/research.""" + + data: V1ResearchEventJudgingStartData + + event: Literal["judging:start"] + + +class V1ResearchEventOutliningEndData(BaseModel): + message: str + + sources_selected: float = FieldInfo(alias="sourcesSelected") + + timestamp: float + + +class V1ResearchEventOutliningEnd(BaseModel): + """Envelope for the "outlining:end" event from /v1/research.""" + + data: V1ResearchEventOutliningEndData + + event: Literal["outlining:end"] + + +class V1ResearchEventOutliningStartData(BaseModel): + message: str + + pages_analyzed: float = FieldInfo(alias="pagesAnalyzed") + """Total pages analyzed across all iterations""" + + quality_page_count: float = FieldInfo(alias="qualityPageCount") + """Pages that meet quality threshold (medium+ relevance and reliability)""" + + timestamp: float + + +class V1ResearchEventOutliningStart(BaseModel): + """Envelope for the "outlining:start" event from /v1/research.""" + + data: V1ResearchEventOutliningStartData + + event: Literal["outlining:start"] + + +class V1ResearchEventPlanningEndData(BaseModel): + complexity: Literal["simple", "moderate", "complex"] + + message: str + + objective: str + + plan: str + + queries: List[str] + + questions: List[str] + + timestamp: float + + +class V1ResearchEventPlanningEnd(BaseModel): + """Envelope for the "planning:end" event from /v1/research.""" + + data: V1ResearchEventPlanningEndData + + event: Literal["planning:end"] + + +class V1ResearchEventPlanningStartData(BaseModel): + has_prefetched_context: bool = FieldInfo(alias="hasPrefetchedContext") + """Whether prefetched user-provided URLs exist for context""" + + message: str + + timestamp: float + + +class V1ResearchEventPlanningStart(BaseModel): + """Envelope for the "planning:start" event from /v1/research.""" + + data: V1ResearchEventPlanningStartData + + event: Literal["planning:start"] + + +class V1ResearchEventPrefetchingEndData(BaseModel): + failed: float + + fetched: float + + message: str + + timestamp: float + + +class V1ResearchEventPrefetchingEnd(BaseModel): + """Envelope for the "prefetching:end" event from /v1/research.""" + + data: V1ResearchEventPrefetchingEndData + + event: Literal["prefetching:end"] + + +class V1ResearchEventPrefetchingStartData(BaseModel): + message: str + + timestamp: float + + url_count: float = FieldInfo(alias="urlCount") + + urls: List[str] + + +class V1ResearchEventPrefetchingStart(BaseModel): + """Envelope for the "prefetching:start" event from /v1/research.""" + + data: V1ResearchEventPrefetchingStartData + + event: Literal["prefetching:start"] + + +class V1ResearchEventSearchingEndData(BaseModel): + iteration: float + + message: str + + timestamp: float + + urls_found: float = FieldInfo(alias="urlsFound") + + urls_new: float = FieldInfo(alias="urlsNew") + + +class V1ResearchEventSearchingEnd(BaseModel): + """Envelope for the "searching:end" event from /v1/research.""" + + data: V1ResearchEventSearchingEndData + + event: Literal["searching:end"] + + +class V1ResearchEventSearchingStartData(BaseModel): + iteration: float + + message: str + + queries: List[str] + + timestamp: float + + +class V1ResearchEventSearchingStart(BaseModel): + """Envelope for the "searching:start" event from /v1/research.""" + + data: V1ResearchEventSearchingStartData + + event: Literal["searching:start"] + + +class V1ResearchEventStartData(BaseModel): + """start - Research begins""" + + message: str + + timestamp: float + + +class V1ResearchEventStart(BaseModel): + """Envelope for the "start" event from /v1/research.""" + + data: V1ResearchEventStartData + """start - Research begins""" + + event: Literal["start"] + + +class V1ResearchEventWritingEndData(BaseModel): + attempt: float + + message: str + + timestamp: float + + +class V1ResearchEventWritingEnd(BaseModel): + """Envelope for the "writing:end" event from /v1/research.""" + + data: V1ResearchEventWritingEndData + + event: Literal["writing:end"] + + +class V1ResearchEventWritingStartData(BaseModel): + attempt: float + + is_revision: bool = FieldInfo(alias="isRevision") + """Whether this is a revision attempt (attempt > 1)""" + + max_attempts: float = FieldInfo(alias="maxAttempts") + """Maximum attempts allowed (1 + maxRevisions)""" + + message: str + + timestamp: float + + previous_score: Optional[float] = FieldInfo(alias="previousScore", default=None) + """Previous judgment score if this is a revision""" + + +class V1ResearchEventWritingStart(BaseModel): + """Envelope for the "writing:start" event from /v1/research.""" + + data: V1ResearchEventWritingStartData + event: Literal["writing:start"] -class ResearchEvent(BaseModel): - data: Optional[object] = None - """Event payload data""" - event: Optional[str] = None - """The event type (e.g., start, planning:start, searching:end, complete)""" +ResearchEvent: TypeAlias = Annotated[ + Union[ + V1ResearchEventAnalyzingEnd, + V1ResearchEventAnalyzingStart, + V1ResearchEventComplete, + V1ResearchEventError, + V1ResearchEventEvaluatingEnd, + V1ResearchEventEvaluatingStart, + V1ResearchEventFollowingEnd, + V1ResearchEventFollowingStart, + V1ResearchEventIterationEnd, + V1ResearchEventIterationStart, + V1ResearchEventJudgingEnd, + V1ResearchEventJudgingStart, + V1ResearchEventOutliningEnd, + V1ResearchEventOutliningStart, + V1ResearchEventPlanningEnd, + V1ResearchEventPlanningStart, + V1ResearchEventPrefetchingEnd, + V1ResearchEventPrefetchingStart, + V1ResearchEventSearchingEnd, + V1ResearchEventSearchingStart, + V1ResearchEventStart, + V1ResearchEventWritingEnd, + V1ResearchEventWritingStart, + ], + PropertyInfo(discriminator="event"), +] From cd8e38c6bda53419e6fc2bdb33cf251b6498727b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 22:38:51 +0000 Subject: [PATCH 5/8] fix(codegen): OAS 3.0 compliance + local Spectral lint + Stainless PR check --- .stats.yml | 4 +- src/tabstack/types/automate_event.py | 239 +++++++++++---------------- src/tabstack/types/research_event.py | 6 +- 3 files changed, 103 insertions(+), 146 deletions(-) diff --git a/.stats.yml b/.stats.yml index bed33bc..92237d4 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 6 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/mozilla%2Ftabstack-139ca0066d95afae65fdd53c58ff3a695bcc069e629fab7267611aa23e25167d.yml -openapi_spec_hash: d23e528c36d57c4c0660161da2609801 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/mozilla%2Ftabstack-1b09003fafca4003c4c2d56f1e0a1d61ac1379a4fff78f6219dfdb4b874b99d9.yml +openapi_spec_hash: 0457975aae0fddf48ec4e9fd1e3aa639 config_hash: 57c64e5e8fe99c1bd7af536d82af4ad9 diff --git a/src/tabstack/types/automate_event.py b/src/tabstack/types/automate_event.py index 3367aea..6252dc9 100644 --- a/src/tabstack/types/automate_event.py +++ b/src/tabstack/types/automate_event.py @@ -312,9 +312,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember0(BaseModel): str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -344,9 +343,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -455,9 +453,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -569,9 +566,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -611,9 +607,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember1(BaseModel): str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -643,9 +638,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -757,9 +751,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -789,9 +782,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -839,9 +831,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -869,9 +860,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -893,15 +883,14 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], - List[Union[str, float, bool, List[object], object]], - object, - ] + List[Union[str, float, bool, List[object], object, None]], + None, + ] = None """A JSON value can be a string, number, boolean, object, array, or null. JSON values can be serialized and deserialized by the JSON.stringify and @@ -917,9 +906,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -941,9 +929,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -969,9 +956,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -993,15 +979,14 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], - List[Union[str, float, bool, List[object], object]], - object, - ] + List[Union[str, float, bool, List[object], object, None]], + None, + ] = None """A JSON value can be a string, number, boolean, object, array, or null. JSON values can be serialized and deserialized by the JSON.stringify and @@ -1017,9 +1002,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1045,9 +1029,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1090,9 +1073,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1118,9 +1100,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1151,9 +1132,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1183,9 +1163,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1212,9 +1191,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1246,9 +1224,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1275,9 +1252,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1343,9 +1319,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1404,9 +1379,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2(BaseModel): str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1434,9 +1408,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1458,15 +1431,14 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], - List[Union[str, float, bool, List[object], object]], - object, - ] + List[Union[str, float, bool, List[object], object, None]], + None, + ] = None """A JSON value can be a string, number, boolean, object, array, or null. JSON values can be serialized and deserialized by the JSON.stringify and @@ -1482,9 +1454,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1506,9 +1477,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1534,9 +1504,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1558,15 +1527,14 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], - List[Union[str, float, bool, List[object], object]], - object, - ] + List[Union[str, float, bool, List[object], object, None]], + None, + ] = None """A JSON value can be a string, number, boolean, object, array, or null. JSON values can be serialized and deserialized by the JSON.stringify and @@ -1582,9 +1550,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1610,9 +1577,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1655,9 +1621,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1683,9 +1648,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1716,9 +1680,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1748,9 +1711,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1777,9 +1739,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1811,9 +1772,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1840,9 +1800,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1906,9 +1865,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0(Base str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], @@ -1965,9 +1923,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3(BaseModel): str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object, object]], - List[Union[str, float, bool, List[object], object]], - object, + Dict[str, Union[str, float, bool, List[object], object, object]], + List[Union[str, float, bool, List[object], object, None]], object, ], ], diff --git a/src/tabstack/types/research_event.py b/src/tabstack/types/research_event.py index c4c03aa..a41f2e9 100644 --- a/src/tabstack/types/research_event.py +++ b/src/tabstack/types/research_event.py @@ -257,7 +257,7 @@ class V1ResearchEventCompleteDataMetadataMetricsPhases(BaseModel): class V1ResearchEventCompleteDataMetadataMetricsSuccessRates(BaseModel): - """Success rates (0-1) for various operations""" + """Success rate metrics""" analyzes: float @@ -299,7 +299,7 @@ class V1ResearchEventCompleteDataMetadataMetrics(BaseModel): """Search count by provider name (e.g., "bright-data", "parallel")""" success_rates: V1ResearchEventCompleteDataMetadataMetricsSuccessRates = FieldInfo(alias="successRates") - """Success rates (0-1) for various operations""" + """Success rate metrics""" tokens: Dict[str, V1ResearchEventCompleteDataMetadataMetricsTokens] """Token usage by model ID (e.g., "gemini-2.5-flash")""" @@ -457,7 +457,7 @@ class V1ResearchEventError(BaseModel): class V1ResearchEventEvaluatingEndDataQuestionAssessment(BaseModel): - """Question assessment for evaluating:end payload""" + """Assessment of a single research question""" findings: str """What we learned (if answered/partial) or what's missing (if unanswered)""" From 06f98a5fb555f03d5a467523e5abc6b7e2cad45d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 23:48:18 +0000 Subject: [PATCH 6/8] fix(codegen): reduce Stainless variant-naming and ambiguity warnings --- .stats.yml | 4 +- src/tabstack/types/automate_event.py | 595 ++++++++++++--------------- 2 files changed, 255 insertions(+), 344 deletions(-) diff --git a/.stats.yml b/.stats.yml index 92237d4..30e0a3d7 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 6 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/mozilla%2Ftabstack-1b09003fafca4003c4c2d56f1e0a1d61ac1379a4fff78f6219dfdb4b874b99d9.yml -openapi_spec_hash: 0457975aae0fddf48ec4e9fd1e3aa639 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/mozilla%2Ftabstack-60737542cc888d71b7b9ec5851c19660478cf60021cb352ff9e15c2611aa82e3.yml +openapi_spec_hash: 5e9219da9b8e23219d1d1e372df29648 config_hash: 57c64e5e8fe99c1bd7af536d82af4ad9 diff --git a/src/tabstack/types/automate_event.py b/src/tabstack/types/automate_event.py index 6252dc9..ce961d2 100644 --- a/src/tabstack/types/automate_event.py +++ b/src/tabstack/types/automate_event.py @@ -29,76 +29,76 @@ "V1AutomateEventAIGenerationData", "V1AutomateEventAIGenerationDataUsage", "V1AutomateEventAIGenerationDataMessage", - "V1AutomateEventAIGenerationDataMessageUnionMember0", - "V1AutomateEventAIGenerationDataMessageUnionMember1", - "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1", - "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember0", - "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1", - "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1Image", - "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageUnionMember1", - "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageUnionMember1Buffer", - "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageByteLength", - "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageV1GlobalBuffer", - "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageV1GlobalBufferBuffer", - "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2", - "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2Data", - "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataUnionMember1", - "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataUnionMember1Buffer", - "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataByteLength", - "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataV1GlobalBuffer", - "V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataV1GlobalBufferBuffer", - "V1AutomateEventAIGenerationDataMessageUnionMember2", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember0", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1Data", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataUnionMember1", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataUnionMember1Buffer", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataByteLength", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataV1GlobalBuffer", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataV1GlobalBufferBuffer", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember2", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember3", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4Output", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember0", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember1", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember2", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember3", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember4", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5Value", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember0", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember1", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember2", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember3", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember4", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember5", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember6", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember7", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember8", - "V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember5", - "V1AutomateEventAIGenerationDataMessageUnionMember3", - "V1AutomateEventAIGenerationDataMessageUnionMember3Content", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Output", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember0", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember1", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember2", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember3", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember4", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5Value", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember0", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember1", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember2", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember3", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember4", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember5", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember6", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember7", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember8", - "V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember1", + "V1AutomateEventAIGenerationDataMessageSystem", + "V1AutomateEventAIGenerationDataMessageUser", + "V1AutomateEventAIGenerationDataMessageUserContentUnionMember1", + "V1AutomateEventAIGenerationDataMessageUserContentUnionMember1Text", + "V1AutomateEventAIGenerationDataMessageUserContentUnionMember1Image", + "V1AutomateEventAIGenerationDataMessageUserContentUnionMember1ImageImage", + "V1AutomateEventAIGenerationDataMessageUserContentUnionMember1ImageImageUnionMember1", + "V1AutomateEventAIGenerationDataMessageUserContentUnionMember1ImageImageUnionMember1Buffer", + "V1AutomateEventAIGenerationDataMessageUserContentUnionMember1ImageImageByteLength", + "V1AutomateEventAIGenerationDataMessageUserContentUnionMember1ImageImageV1GlobalBuffer", + "V1AutomateEventAIGenerationDataMessageUserContentUnionMember1ImageImageV1GlobalBufferBuffer", + "V1AutomateEventAIGenerationDataMessageUserContentUnionMember1File", + "V1AutomateEventAIGenerationDataMessageUserContentUnionMember1FileData", + "V1AutomateEventAIGenerationDataMessageUserContentUnionMember1FileDataUnionMember1", + "V1AutomateEventAIGenerationDataMessageUserContentUnionMember1FileDataUnionMember1Buffer", + "V1AutomateEventAIGenerationDataMessageUserContentUnionMember1FileDataByteLength", + "V1AutomateEventAIGenerationDataMessageUserContentUnionMember1FileDataV1GlobalBuffer", + "V1AutomateEventAIGenerationDataMessageUserContentUnionMember1FileDataV1GlobalBufferBuffer", + "V1AutomateEventAIGenerationDataMessageAssistant", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1Text", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1File", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1FileData", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1FileDataUnionMember1", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1FileDataUnionMember1Buffer", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1FileDataByteLength", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1FileDataV1GlobalBuffer", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1FileDataV1GlobalBufferBuffer", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1Reasoning", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolCall", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResult", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutput", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputText", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputJson", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputExecutionDenied", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputErrorText", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputErrorJson", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContent", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValue", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueText", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueMedia", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueFileData", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueFileURL", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueFileID", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueImageData", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueImageURL", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueImageFileID", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueCustom", + "V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolApprovalRequest", + "V1AutomateEventAIGenerationDataMessageTool", + "V1AutomateEventAIGenerationDataMessageToolContent", + "V1AutomateEventAIGenerationDataMessageToolContentToolResult", + "V1AutomateEventAIGenerationDataMessageToolContentToolResultOutput", + "V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputText", + "V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputJson", + "V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputExecutionDenied", + "V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputErrorText", + "V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputErrorJson", + "V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContent", + "V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValue", + "V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueText", + "V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueMedia", + "V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueFileData", + "V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueFileURL", + "V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueFileID", + "V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueImageData", + "V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueImageURL", + "V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueImageFileID", + "V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueCustom", + "V1AutomateEventAIGenerationDataMessageToolContentToolApprovalResponse", "V1AutomateEventAIGenerationError", "V1AutomateEventAIGenerationErrorData", "V1AutomateEventBrowserActionCompleted", @@ -293,7 +293,7 @@ class V1AutomateEventAIGenerationDataUsage(BaseModel): total_tokens: Optional[float] = FieldInfo(alias="totalTokens", default=None) -class V1AutomateEventAIGenerationDataMessageUnionMember0(BaseModel): +class V1AutomateEventAIGenerationDataMessageSystem(BaseModel): """A system message. It can contain system information. Note: using the "system" part of the prompt is strongly preferred to increase the resilience against prompt injection attacks, and because not all providers support several system messages. @@ -312,9 +312,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember0(BaseModel): str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -326,7 +325,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember0(BaseModel): """ -class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember0(BaseModel): +class V1AutomateEventAIGenerationDataMessageUserContentUnionMember1Text(BaseModel): """Text content part of a prompt. It contains a string of text.""" text: str @@ -343,9 +342,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -357,14 +355,12 @@ class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1Union """ -class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageUnionMember1Buffer( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageUserContentUnionMember1ImageImageUnionMember1Buffer(BaseModel): byte_length: float = FieldInfo(alias="byteLength") -class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageUnionMember1(BaseModel): - buffer: V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageUnionMember1Buffer +class V1AutomateEventAIGenerationDataMessageUserContentUnionMember1ImageImageUnionMember1(BaseModel): + buffer: V1AutomateEventAIGenerationDataMessageUserContentUnionMember1ImageImageUnionMember1Buffer byte_length: float = FieldInfo(alias="byteLength") @@ -387,18 +383,16 @@ def __getattr__(self, attr: str) -> float: ... __pydantic_extra__: Dict[str, float] -class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageByteLength(BaseModel): +class V1AutomateEventAIGenerationDataMessageUserContentUnionMember1ImageImageByteLength(BaseModel): byte_length: float = FieldInfo(alias="byteLength") -class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageV1GlobalBufferBuffer( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageUserContentUnionMember1ImageImageV1GlobalBufferBuffer(BaseModel): byte_length: float = FieldInfo(alias="byteLength") -class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageV1GlobalBuffer(BaseModel): - buffer: V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageV1GlobalBufferBuffer +class V1AutomateEventAIGenerationDataMessageUserContentUnionMember1ImageImageV1GlobalBuffer(BaseModel): + buffer: V1AutomateEventAIGenerationDataMessageUserContentUnionMember1ImageImageV1GlobalBufferBuffer byte_length: float = FieldInfo(alias="byteLength") @@ -421,18 +415,18 @@ def __getattr__(self, attr: str) -> float: ... __pydantic_extra__: Dict[str, float] -V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1Image: TypeAlias = Union[ +V1AutomateEventAIGenerationDataMessageUserContentUnionMember1ImageImage: TypeAlias = Union[ str, - V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageUnionMember1, - V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageByteLength, - V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1ImageV1GlobalBuffer, + V1AutomateEventAIGenerationDataMessageUserContentUnionMember1ImageImageUnionMember1, + V1AutomateEventAIGenerationDataMessageUserContentUnionMember1ImageImageByteLength, + V1AutomateEventAIGenerationDataMessageUserContentUnionMember1ImageImageV1GlobalBuffer, ] -class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1(BaseModel): +class V1AutomateEventAIGenerationDataMessageUserContentUnionMember1Image(BaseModel): """Image content part of a prompt. It contains an image.""" - image: V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1Image + image: V1AutomateEventAIGenerationDataMessageUserContentUnionMember1ImageImage """Image data. Can either be: - data: a base64-encoded string, a Uint8Array, an ArrayBuffer, or a Buffer @@ -453,9 +447,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -467,14 +460,12 @@ class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1Union """ -class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataUnionMember1Buffer( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageUserContentUnionMember1FileDataUnionMember1Buffer(BaseModel): byte_length: float = FieldInfo(alias="byteLength") -class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataUnionMember1(BaseModel): - buffer: V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataUnionMember1Buffer +class V1AutomateEventAIGenerationDataMessageUserContentUnionMember1FileDataUnionMember1(BaseModel): + buffer: V1AutomateEventAIGenerationDataMessageUserContentUnionMember1FileDataUnionMember1Buffer byte_length: float = FieldInfo(alias="byteLength") @@ -497,18 +488,16 @@ def __getattr__(self, attr: str) -> float: ... __pydantic_extra__: Dict[str, float] -class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataByteLength(BaseModel): +class V1AutomateEventAIGenerationDataMessageUserContentUnionMember1FileDataByteLength(BaseModel): byte_length: float = FieldInfo(alias="byteLength") -class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataV1GlobalBufferBuffer( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageUserContentUnionMember1FileDataV1GlobalBufferBuffer(BaseModel): byte_length: float = FieldInfo(alias="byteLength") -class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataV1GlobalBuffer(BaseModel): - buffer: V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataV1GlobalBufferBuffer +class V1AutomateEventAIGenerationDataMessageUserContentUnionMember1FileDataV1GlobalBuffer(BaseModel): + buffer: V1AutomateEventAIGenerationDataMessageUserContentUnionMember1FileDataV1GlobalBufferBuffer byte_length: float = FieldInfo(alias="byteLength") @@ -531,18 +520,18 @@ def __getattr__(self, attr: str) -> float: ... __pydantic_extra__: Dict[str, float] -V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2Data: TypeAlias = Union[ +V1AutomateEventAIGenerationDataMessageUserContentUnionMember1FileData: TypeAlias = Union[ str, - V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataUnionMember1, - V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataByteLength, - V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2DataV1GlobalBuffer, + V1AutomateEventAIGenerationDataMessageUserContentUnionMember1FileDataUnionMember1, + V1AutomateEventAIGenerationDataMessageUserContentUnionMember1FileDataByteLength, + V1AutomateEventAIGenerationDataMessageUserContentUnionMember1FileDataV1GlobalBuffer, ] -class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2(BaseModel): +class V1AutomateEventAIGenerationDataMessageUserContentUnionMember1File(BaseModel): """File content part of a prompt. It contains a file.""" - data: V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2Data + data: V1AutomateEventAIGenerationDataMessageUserContentUnionMember1FileData """File data. Can either be: - data: a base64-encoded string, a Uint8Array, an ArrayBuffer, or a Buffer @@ -566,9 +555,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -580,17 +568,17 @@ class V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1Union """ -V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1: TypeAlias = Union[ - V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember0, - V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember1, - V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1UnionMember2, +V1AutomateEventAIGenerationDataMessageUserContentUnionMember1: TypeAlias = Union[ + V1AutomateEventAIGenerationDataMessageUserContentUnionMember1Text, + V1AutomateEventAIGenerationDataMessageUserContentUnionMember1Image, + V1AutomateEventAIGenerationDataMessageUserContentUnionMember1File, ] -class V1AutomateEventAIGenerationDataMessageUnionMember1(BaseModel): +class V1AutomateEventAIGenerationDataMessageUser(BaseModel): """A user message. It can contain text or a combination of text and images.""" - content: Union[str, List[V1AutomateEventAIGenerationDataMessageUnionMember1ContentUnionMember1]] + content: Union[str, List[V1AutomateEventAIGenerationDataMessageUserContentUnionMember1]] """Content of a user message. It can be a string or an array of text and image parts. @@ -607,9 +595,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember1(BaseModel): str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -621,7 +608,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember1(BaseModel): """ -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember0(BaseModel): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1Text(BaseModel): """Text content part of a prompt. It contains a string of text.""" text: str @@ -638,9 +625,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -652,14 +638,12 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """ -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataUnionMember1Buffer( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1FileDataUnionMember1Buffer(BaseModel): byte_length: float = FieldInfo(alias="byteLength") -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataUnionMember1(BaseModel): - buffer: V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataUnionMember1Buffer +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1FileDataUnionMember1(BaseModel): + buffer: V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1FileDataUnionMember1Buffer byte_length: float = FieldInfo(alias="byteLength") @@ -682,18 +666,16 @@ def __getattr__(self, attr: str) -> float: ... __pydantic_extra__: Dict[str, float] -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataByteLength(BaseModel): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1FileDataByteLength(BaseModel): byte_length: float = FieldInfo(alias="byteLength") -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataV1GlobalBufferBuffer( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1FileDataV1GlobalBufferBuffer(BaseModel): byte_length: float = FieldInfo(alias="byteLength") -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataV1GlobalBuffer(BaseModel): - buffer: V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataV1GlobalBufferBuffer +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1FileDataV1GlobalBuffer(BaseModel): + buffer: V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1FileDataV1GlobalBufferBuffer byte_length: float = FieldInfo(alias="byteLength") @@ -716,18 +698,18 @@ def __getattr__(self, attr: str) -> float: ... __pydantic_extra__: Dict[str, float] -V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1Data: TypeAlias = Union[ +V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1FileData: TypeAlias = Union[ str, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataUnionMember1, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataByteLength, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1DataV1GlobalBuffer, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1FileDataUnionMember1, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1FileDataByteLength, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1FileDataV1GlobalBuffer, ] -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1(BaseModel): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1File(BaseModel): """File content part of a prompt. It contains a file.""" - data: V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1Data + data: V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1FileData """File data. Can either be: - data: a base64-encoded string, a Uint8Array, an ArrayBuffer, or a Buffer @@ -751,9 +733,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -765,7 +746,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """ -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember2(BaseModel): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1Reasoning(BaseModel): """Reasoning content part of a prompt. It contains a reasoning.""" text: str @@ -782,9 +763,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -796,7 +776,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """ -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember3(BaseModel): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolCall(BaseModel): """Tool call content part of a prompt. It contains a tool call (usually generated by the AI model). @@ -831,9 +811,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -845,7 +824,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """ -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember0(BaseModel): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputText(BaseModel): type: Literal["text"] """Text tool output that should be directly sent to the API.""" @@ -860,9 +839,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -870,7 +848,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember1(BaseModel): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputJson(BaseModel): type: Literal["json"] value: Union[ @@ -883,9 +861,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], List[Union[str, float, bool, List[object], object, None]], @@ -906,9 +883,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -916,7 +892,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember2(BaseModel): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputExecutionDenied(BaseModel): type: Literal["execution-denied"] """Type when the user has denied the execution of the tool call.""" @@ -929,9 +905,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -942,7 +917,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """Optional reason for the execution denial.""" -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember3(BaseModel): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputErrorText(BaseModel): type: Literal["error-text"] value: str @@ -956,9 +931,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -966,7 +940,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember4(BaseModel): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputErrorJson(BaseModel): type: Literal["error-json"] value: Union[ @@ -979,9 +953,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], List[Union[str, float, bool, List[object], object, None]], @@ -1002,9 +975,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1012,9 +984,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember0( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueText(BaseModel): text: str """Text content.""" @@ -1029,9 +999,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1039,9 +1008,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember1( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueMedia(BaseModel): data: str media_type: str = FieldInfo(alias="mediaType") @@ -1050,9 +1017,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """Deprecated. Use image-data or file-data instead.""" -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember2( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueFileData(BaseModel): data: str """Base-64 encoded media data.""" @@ -1073,9 +1038,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1083,9 +1047,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember3( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueFileURL(BaseModel): type: Literal["file-url"] url: str @@ -1100,9 +1062,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1110,9 +1071,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember4( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueFileID(BaseModel): file_id: Union[str, Dict[str, str]] = FieldInfo(alias="fileId") """ID of the file. @@ -1132,9 +1091,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1142,7 +1100,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember5( +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueImageData( BaseModel ): data: str @@ -1163,9 +1121,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1173,9 +1130,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember6( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueImageURL(BaseModel): type: Literal["image-url"] """Images that are referenced using a URL.""" @@ -1191,9 +1146,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1201,7 +1155,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember7( +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueImageFileID( BaseModel ): file_id: Union[str, Dict[str, str]] = FieldInfo(alias="fileId") @@ -1224,9 +1178,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1234,9 +1187,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember8( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueCustom(BaseModel): type: Literal["custom"] """Custom content part. @@ -1252,9 +1203,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1262,44 +1212,42 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """Provider-specific options.""" -V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5Value: TypeAlias = Union[ - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember0, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember1, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember2, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember3, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember4, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember5, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember6, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember7, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5ValueUnionMember8, +V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValue: TypeAlias = Union[ + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueText, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueMedia, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueFileData, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueFileURL, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueFileID, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueImageData, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueImageURL, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueImageFileID, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValueCustom, ] -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5(BaseModel): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContent(BaseModel): type: Literal["content"] - value: List[ - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5Value - ] + value: List[V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContentValue] -V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4Output: TypeAlias = Union[ - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember0, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember1, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember2, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember3, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember4, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4OutputUnionMember5, +V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutput: TypeAlias = Union[ + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputText, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputJson, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputExecutionDenied, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputErrorText, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputErrorJson, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutputContent, ] -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4(BaseModel): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResult(BaseModel): """Tool result content part of a prompt. It contains the result of the tool call with the matching ID. """ - output: V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4Output + output: V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResultOutput """Result of the tool call. This is a JSON-serializable object.""" tool_call_id: str = FieldInfo(alias="toolCallId") @@ -1319,9 +1267,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1333,7 +1280,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union """ -class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember5(BaseModel): +class V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolApprovalRequest(BaseModel): """Tool approval request prompt part.""" approval_id: str = FieldInfo(alias="approvalId") @@ -1345,23 +1292,23 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1Union type: Literal["tool-approval-request"] -V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1: TypeAlias = Union[ - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember0, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember1, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember2, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember3, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember4, - V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1UnionMember5, +V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1: TypeAlias = Union[ + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1Text, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1File, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1Reasoning, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolCall, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolResult, + V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1ToolApprovalRequest, ] -class V1AutomateEventAIGenerationDataMessageUnionMember2(BaseModel): +class V1AutomateEventAIGenerationDataMessageAssistant(BaseModel): """An assistant message. It can contain text, tool calls, or a combination of text and tool calls. """ - content: Union[str, List[V1AutomateEventAIGenerationDataMessageUnionMember2ContentUnionMember1]] + content: Union[str, List[V1AutomateEventAIGenerationDataMessageAssistantContentUnionMember1]] """Content of an assistant message. It can be a string or an array of text, image, reasoning, redacted reasoning, @@ -1379,9 +1326,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2(BaseModel): str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1393,7 +1339,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember2(BaseModel): """ -class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember0(BaseModel): +class V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputText(BaseModel): type: Literal["text"] """Text tool output that should be directly sent to the API.""" @@ -1408,9 +1354,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1418,7 +1363,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember1(BaseModel): +class V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputJson(BaseModel): type: Literal["json"] value: Union[ @@ -1431,9 +1376,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], List[Union[str, float, bool, List[object], object, None]], @@ -1454,9 +1398,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1464,7 +1407,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember2(BaseModel): +class V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputExecutionDenied(BaseModel): type: Literal["execution-denied"] """Type when the user has denied the execution of the tool call.""" @@ -1477,9 +1420,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1490,7 +1432,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu """Optional reason for the execution denial.""" -class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember3(BaseModel): +class V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputErrorText(BaseModel): type: Literal["error-text"] value: str @@ -1504,9 +1446,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1514,7 +1455,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember4(BaseModel): +class V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputErrorJson(BaseModel): type: Literal["error-json"] value: Union[ @@ -1527,9 +1468,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], List[Union[str, float, bool, List[object], object, None]], @@ -1550,9 +1490,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1560,9 +1499,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember0( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueText(BaseModel): text: str """Text content.""" @@ -1577,9 +1514,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1587,9 +1523,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember1( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueMedia(BaseModel): data: str media_type: str = FieldInfo(alias="mediaType") @@ -1598,9 +1532,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu """Deprecated. Use image-data or file-data instead.""" -class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember2( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueFileData(BaseModel): data: str """Base-64 encoded media data.""" @@ -1621,9 +1553,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1631,9 +1562,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember3( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueFileURL(BaseModel): type: Literal["file-url"] url: str @@ -1648,9 +1577,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1658,9 +1586,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember4( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueFileID(BaseModel): file_id: Union[str, Dict[str, str]] = FieldInfo(alias="fileId") """ID of the file. @@ -1680,9 +1606,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1690,9 +1615,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember5( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueImageData(BaseModel): data: str """Base-64 encoded image data.""" @@ -1711,9 +1634,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1721,9 +1643,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember6( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueImageURL(BaseModel): type: Literal["image-url"] """Images that are referenced using a URL.""" @@ -1739,9 +1659,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1749,9 +1668,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember7( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueImageFileID(BaseModel): file_id: Union[str, Dict[str, str]] = FieldInfo(alias="fileId") """Image that is referenced using a provider file id. @@ -1772,9 +1689,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1782,9 +1698,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu """Provider-specific options.""" -class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember8( - BaseModel -): +class V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueCustom(BaseModel): type: Literal["custom"] """Custom content part. @@ -1800,9 +1714,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1810,42 +1723,42 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Outpu """Provider-specific options.""" -V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5Value: TypeAlias = Union[ - V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember0, - V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember1, - V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember2, - V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember3, - V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember4, - V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember5, - V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember6, - V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember7, - V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5ValueUnionMember8, +V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValue: TypeAlias = Union[ + V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueText, + V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueMedia, + V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueFileData, + V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueFileURL, + V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueFileID, + V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueImageData, + V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueImageURL, + V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueImageFileID, + V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValueCustom, ] -class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5(BaseModel): +class V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContent(BaseModel): type: Literal["content"] - value: List[V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5Value] + value: List[V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContentValue] -V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Output: TypeAlias = Union[ - V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember0, - V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember1, - V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember2, - V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember3, - V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember4, - V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0OutputUnionMember5, +V1AutomateEventAIGenerationDataMessageToolContentToolResultOutput: TypeAlias = Union[ + V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputText, + V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputJson, + V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputExecutionDenied, + V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputErrorText, + V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputErrorJson, + V1AutomateEventAIGenerationDataMessageToolContentToolResultOutputContent, ] -class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0(BaseModel): +class V1AutomateEventAIGenerationDataMessageToolContentToolResult(BaseModel): """Tool result content part of a prompt. It contains the result of the tool call with the matching ID. """ - output: V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0Output + output: V1AutomateEventAIGenerationDataMessageToolContentToolResultOutput """Result of the tool call. This is a JSON-serializable object.""" tool_call_id: str = FieldInfo(alias="toolCallId") @@ -1865,9 +1778,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0(Base str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1879,7 +1791,7 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0(Base """ -class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember1(BaseModel): +class V1AutomateEventAIGenerationDataMessageToolContentToolApprovalResponse(BaseModel): """Tool approval response prompt part.""" approval_id: str = FieldInfo(alias="approvalId") @@ -1900,16 +1812,16 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember1(Base """Optional reason for the approval or denial.""" -V1AutomateEventAIGenerationDataMessageUnionMember3Content: TypeAlias = Union[ - V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember0, - V1AutomateEventAIGenerationDataMessageUnionMember3ContentUnionMember1, +V1AutomateEventAIGenerationDataMessageToolContent: TypeAlias = Union[ + V1AutomateEventAIGenerationDataMessageToolContentToolResult, + V1AutomateEventAIGenerationDataMessageToolContentToolApprovalResponse, ] -class V1AutomateEventAIGenerationDataMessageUnionMember3(BaseModel): +class V1AutomateEventAIGenerationDataMessageTool(BaseModel): """A tool message. It contains the result of one or more tool calls.""" - content: List[V1AutomateEventAIGenerationDataMessageUnionMember3Content] + content: List[V1AutomateEventAIGenerationDataMessageToolContent] """Content of a tool message. It is an array of tool result parts.""" role: Literal["tool"] @@ -1923,9 +1835,8 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3(BaseModel): str, float, bool, - Dict[str, Union[str, float, bool, List[object], object, object]], + Dict[str, Union[str, float, bool, List[object], object]], List[Union[str, float, bool, List[object], object, None]], - object, ], ], ] @@ -1938,10 +1849,10 @@ class V1AutomateEventAIGenerationDataMessageUnionMember3(BaseModel): V1AutomateEventAIGenerationDataMessage: TypeAlias = Union[ - V1AutomateEventAIGenerationDataMessageUnionMember0, - V1AutomateEventAIGenerationDataMessageUnionMember1, - V1AutomateEventAIGenerationDataMessageUnionMember2, - V1AutomateEventAIGenerationDataMessageUnionMember3, + V1AutomateEventAIGenerationDataMessageSystem, + V1AutomateEventAIGenerationDataMessageUser, + V1AutomateEventAIGenerationDataMessageAssistant, + V1AutomateEventAIGenerationDataMessageTool, ] From d58bd1b115a88a89bfdb6cc86a9fc3c53f644764 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 23:58:06 +0000 Subject: [PATCH 7/8] docs(research): correct default mode from balanced to fast --- .stats.yml | 4 ++-- src/tabstack/resources/agent.py | 12 ++++++------ src/tabstack/types/agent_research_params.py | 2 +- tests/api_resources/test_agent.py | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.stats.yml b/.stats.yml index 30e0a3d7..3bd5bc6 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 6 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/mozilla%2Ftabstack-60737542cc888d71b7b9ec5851c19660478cf60021cb352ff9e15c2611aa82e3.yml -openapi_spec_hash: 5e9219da9b8e23219d1d1e372df29648 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/mozilla%2Ftabstack-d2de12285899c7d33692a21cca765f609d32e53a5c53703506b08fe0a5dc3060.yml +openapi_spec_hash: 07993ec20b4cbce1adac94c5cf9e0312 config_hash: 57c64e5e8fe99c1bd7af536d82af4ad9 diff --git a/src/tabstack/resources/agent.py b/src/tabstack/resources/agent.py index 77e4a0c..12486ed 100644 --- a/src/tabstack/resources/agent.py +++ b/src/tabstack/resources/agent.py @@ -223,8 +223,8 @@ def research( **Research Modes:** - - `fast` - Quick answers with minimal web searches - - `balanced` - Standard research with multiple iterations (default) + - `fast` - Quick answers with minimal web searches (default) + - `balanced` - Standard research with multiple iterations **Use Cases:** @@ -238,7 +238,7 @@ def research( fetch_timeout: Timeout in seconds for fetching web pages - mode: Research mode: fast (quick answers), balanced (standard research, default) + mode: Research mode: fast (quick answers, default), balanced (standard research) nocache: Skip cache and force fresh research @@ -471,8 +471,8 @@ async def research( **Research Modes:** - - `fast` - Quick answers with minimal web searches - - `balanced` - Standard research with multiple iterations (default) + - `fast` - Quick answers with minimal web searches (default) + - `balanced` - Standard research with multiple iterations **Use Cases:** @@ -486,7 +486,7 @@ async def research( fetch_timeout: Timeout in seconds for fetching web pages - mode: Research mode: fast (quick answers), balanced (standard research, default) + mode: Research mode: fast (quick answers, default), balanced (standard research) nocache: Skip cache and force fresh research diff --git a/src/tabstack/types/agent_research_params.py b/src/tabstack/types/agent_research_params.py index 10741a9..bd015b3 100644 --- a/src/tabstack/types/agent_research_params.py +++ b/src/tabstack/types/agent_research_params.py @@ -15,7 +15,7 @@ class AgentResearchParams(TypedDict, total=False): """Timeout in seconds for fetching web pages""" mode: Literal["fast", "balanced"] - """Research mode: fast (quick answers), balanced (standard research, default)""" + """Research mode: fast (quick answers, default), balanced (standard research)""" nocache: bool """Skip cache and force fresh research""" diff --git a/tests/api_resources/test_agent.py b/tests/api_resources/test_agent.py index e96224c..4bdca08 100644 --- a/tests/api_resources/test_agent.py +++ b/tests/api_resources/test_agent.py @@ -138,7 +138,7 @@ def test_method_research_with_all_params(self, client: Tabstack) -> None: agent_stream = client.agent.research( query="What are the latest developments in quantum computing?", fetch_timeout=30, - mode="balanced", + mode="fast", nocache=False, ) agent_stream.response.close() @@ -293,7 +293,7 @@ async def test_method_research_with_all_params(self, async_client: AsyncTabstack agent_stream = await async_client.agent.research( query="What are the latest developments in quantum computing?", fetch_timeout=30, - mode="balanced", + mode="fast", nocache=False, ) await agent_stream.response.aclose() From d55e8364f4006877a898c48cbdaa7087a4839a4f Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 23:58:26 +0000 Subject: [PATCH 8/8] release: 2.5.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 30 ++++++++++++++++++++++++++++++ pyproject.toml | 2 +- src/tabstack/_version.py | 2 +- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index b44b287..4dedeae 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.4.0" + ".": "2.5.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index aed943f..2c4e795 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,35 @@ # Changelog +## 2.5.0 (2026-04-22) + +Full Changelog: [v2.4.0...v2.5.0](https://github.com/Mozilla-Ocho/tabstack-python/compare/v2.4.0...v2.5.0) + +### Features + +* **api:** api update ([c43bc04](https://github.com/Mozilla-Ocho/tabstack-python/commit/c43bc047af5b2380a7bbe12a4d2a5825f68b7e48)) +* **api:** api update ([2162472](https://github.com/Mozilla-Ocho/tabstack-python/commit/216247282393d0a8d1a4c200a0601766402d3447)) + + +### Bug Fixes + +* **codegen:** OAS 3.0 compliance + local Spectral lint + Stainless PR check ([cd8e38c](https://github.com/Mozilla-Ocho/tabstack-python/commit/cd8e38c6bda53419e6fc2bdb33cf251b6498727b)) +* **codegen:** reduce Stainless variant-naming and ambiguity warnings ([06f98a5](https://github.com/Mozilla-Ocho/tabstack-python/commit/06f98a5fb555f03d5a467523e5abc6b7e2cad45d)) + + +### Performance Improvements + +* **client:** optimize file structure copying in multipart requests ([0aff4b6](https://github.com/Mozilla-Ocho/tabstack-python/commit/0aff4b62652bf495f02b9b679f11886dc67937b0)) + + +### Chores + +* **internal:** more robust bootstrap script ([318ffd3](https://github.com/Mozilla-Ocho/tabstack-python/commit/318ffd399a88d629031487c9652b27850fbeaa16)) + + +### Documentation + +* **research:** correct default mode from balanced to fast ([d58bd1b](https://github.com/Mozilla-Ocho/tabstack-python/commit/d58bd1b115a88a89bfdb6cc86a9fc3c53f644764)) + ## 2.4.0 (2026-04-10) Full Changelog: [v2.3.0...v2.4.0](https://github.com/Mozilla-Ocho/tabstack-python/compare/v2.3.0...v2.4.0) diff --git a/pyproject.toml b/pyproject.toml index c1383dd..10687dd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "tabstack" -version = "2.4.0" +version = "2.5.0" description = "The official Python library for the tabstack API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/tabstack/_version.py b/src/tabstack/_version.py index 1154ef9..448caed 100644 --- a/src/tabstack/_version.py +++ b/src/tabstack/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "tabstack" -__version__ = "2.4.0" # x-release-please-version +__version__ = "2.5.0" # x-release-please-version