From 32507c343b5e5c278621753181d595848d89ae60 Mon Sep 17 00:00:00 2001 From: yenkins-admin <5391010+yenkins-admin@users.noreply.github.com> Date: Sun, 19 Apr 2026 18:44:24 +0000 Subject: [PATCH 1/3] feat(gooddata-sdk): [AUTO] Add resolveLlmProviders endpoint and ResolvedLlmProvider schemas --- .../gooddata-sdk/src/gooddata_sdk/__init__.py | 6 + .../catalog/workspace/content_service.py | 24 ++ .../workspace/entity_model/resolved_llm.py | 79 ++++++ .../catalog/test_catalog_workspace_content.py | 68 ++++++ transcript-implement-C006.jsonl | 226 ++++++++++++++++++ 5 files changed, 403 insertions(+) create mode 100644 packages/gooddata-sdk/src/gooddata_sdk/catalog/workspace/entity_model/resolved_llm.py create mode 100644 transcript-implement-C006.jsonl diff --git a/packages/gooddata-sdk/src/gooddata_sdk/__init__.py b/packages/gooddata-sdk/src/gooddata_sdk/__init__.py index 77397b92d..2abe0eabe 100644 --- a/packages/gooddata-sdk/src/gooddata_sdk/__init__.py +++ b/packages/gooddata-sdk/src/gooddata_sdk/__init__.py @@ -264,6 +264,12 @@ CatalogDependentEntitiesResponse, CatalogEntityIdentifier, ) +from gooddata_sdk.catalog.workspace.entity_model.resolved_llm import ( + CatalogResolvedLlmEndpoint, + CatalogResolvedLlmModel, + CatalogResolvedLlmProvider, + CatalogResolvedLlms, +) from gooddata_sdk.catalog.workspace.entity_model.user_data_filter import ( CatalogUserDataFilter, CatalogUserDataFilterAttributes, diff --git a/packages/gooddata-sdk/src/gooddata_sdk/catalog/workspace/content_service.py b/packages/gooddata-sdk/src/gooddata_sdk/catalog/workspace/content_service.py index 7be97bee2..338444fb9 100644 --- a/packages/gooddata-sdk/src/gooddata_sdk/catalog/workspace/content_service.py +++ b/packages/gooddata-sdk/src/gooddata_sdk/catalog/workspace/content_service.py @@ -31,6 +31,7 @@ CatalogDependentEntitiesRequest, CatalogDependentEntitiesResponse, ) +from gooddata_sdk.catalog.workspace.entity_model.resolved_llm import CatalogResolvedLlms from gooddata_sdk.catalog.workspace.model_container import CatalogWorkspaceContent from gooddata_sdk.client import GoodDataApiClient from gooddata_sdk.compute.model.attribute import Attribute @@ -685,3 +686,26 @@ def get_label_elements( workspace_id, request, _check_return_type=False, **paging_params ) return [v["title"] for v in values["elements"]] + + def resolve_llm_providers(self, workspace_id: str) -> CatalogResolvedLlms: + """Resolve the active LLM configuration for a workspace. + + When the ``ENABLE_LLM_ENDPOINT_REPLACEMENT`` feature flag is enabled on the + GoodData server, the response contains a :class:`CatalogResolvedLlmProvider` + with its associated models. Otherwise it falls back to the legacy + :class:`CatalogResolvedLlmEndpoint`. The ``data`` field is ``None`` when no + LLM is configured for the workspace. + + Args: + workspace_id (str): + Workspace identification string e.g. "demo" + + Returns: + CatalogResolvedLlms: + The resolved LLM configuration for the workspace. + """ + response = self._actions_api.resolve_llm_providers( + workspace_id=workspace_id, + _check_return_type=False, + ) + return CatalogResolvedLlms.from_api(response.to_dict()) diff --git a/packages/gooddata-sdk/src/gooddata_sdk/catalog/workspace/entity_model/resolved_llm.py b/packages/gooddata-sdk/src/gooddata_sdk/catalog/workspace/entity_model/resolved_llm.py new file mode 100644 index 000000000..e7d607075 --- /dev/null +++ b/packages/gooddata-sdk/src/gooddata_sdk/catalog/workspace/entity_model/resolved_llm.py @@ -0,0 +1,79 @@ +# (C) 2026 GoodData Corporation +from __future__ import annotations + +from typing import Any, Union + +import attrs + +from gooddata_sdk.catalog.base import Base + + +@attrs.define(kw_only=True) +class CatalogResolvedLlmModel(Base): + """An LLM model available for a resolved LLM provider.""" + + id: str + family: str + + @classmethod + def from_api(cls, entity: dict[str, Any]) -> CatalogResolvedLlmModel: + return cls(id=entity["id"], family=entity["family"]) + + +@attrs.define(kw_only=True) +class CatalogResolvedLlmEndpoint(Base): + """Legacy resolved LLM endpoint returned when ENABLE_LLM_ENDPOINT_REPLACEMENT is disabled.""" + + id: str + title: str + + @classmethod + def from_api(cls, entity: dict[str, Any]) -> CatalogResolvedLlmEndpoint: + return cls(id=entity["id"], title=entity["title"]) + + +@attrs.define(kw_only=True) +class CatalogResolvedLlmProvider(Base): + """Resolved LLM provider with associated models, returned when ENABLE_LLM_ENDPOINT_REPLACEMENT is enabled.""" + + id: str + title: str + models: list[CatalogResolvedLlmModel] = attrs.field(factory=list) + + @classmethod + def from_api(cls, entity: dict[str, Any]) -> CatalogResolvedLlmProvider: + return cls( + id=entity["id"], + title=entity["title"], + models=[CatalogResolvedLlmModel.from_api(m) for m in entity.get("models", [])], + ) + + +CatalogResolvedLlmsData = Union[CatalogResolvedLlmEndpoint, CatalogResolvedLlmProvider] + + +def _resolved_llms_data_from_api(data: dict[str, Any]) -> CatalogResolvedLlmsData: + """Distinguish between endpoint and provider based on presence of the 'models' field.""" + if "models" in data: + return CatalogResolvedLlmProvider.from_api(data) + return CatalogResolvedLlmEndpoint.from_api(data) + + +@attrs.define(kw_only=True) +class CatalogResolvedLlms(Base): + """The resolved LLM configuration for a workspace. + + The ``data`` field is either a :class:`CatalogResolvedLlmProvider` (when + the ``ENABLE_LLM_ENDPOINT_REPLACEMENT`` feature flag is enabled) or a + :class:`CatalogResolvedLlmEndpoint` (legacy fallback), or ``None`` if no + LLM is configured for the workspace. + """ + + data: CatalogResolvedLlmsData | None = None + + @classmethod + def from_api(cls, entity: dict[str, Any]) -> CatalogResolvedLlms: + raw_data = entity.get("data") + if raw_data is None: + return cls(data=None) + return cls(data=_resolved_llms_data_from_api(raw_data)) diff --git a/packages/gooddata-sdk/tests/catalog/test_catalog_workspace_content.py b/packages/gooddata-sdk/tests/catalog/test_catalog_workspace_content.py index 312088e9f..0ebaa841f 100644 --- a/packages/gooddata-sdk/tests/catalog/test_catalog_workspace_content.py +++ b/packages/gooddata-sdk/tests/catalog/test_catalog_workspace_content.py @@ -18,6 +18,10 @@ CatalogDependsOn, CatalogDependsOnDateFilter, CatalogEntityIdentifier, + CatalogResolvedLlmEndpoint, + CatalogResolvedLlmModel, + CatalogResolvedLlmProvider, + CatalogResolvedLlms, CatalogValidateByItem, CatalogWorkspace, DataSourceValidator, @@ -502,3 +506,67 @@ def test_export_definition_analytics_layout(test_config): assert deep_eq(analytics_o.analytics.export_definitions, analytics_e.analytics.export_definitions) finally: safe_delete(_refresh_workspaces, sdk) + + +# --------------------------------------------------------------------------- +# Unit tests for CatalogResolvedLlms model deserialization +# --------------------------------------------------------------------------- + + +def test_resolved_llms_from_api_provider(): + """CatalogResolvedLlms.from_api returns a CatalogResolvedLlmProvider when 'models' is present.""" + data = { + "data": { + "id": "my-provider", + "title": "My Provider", + "models": [ + {"id": "gpt-5", "family": "OPENAI"}, + ], + } + } + result = CatalogResolvedLlms.from_api(data) + assert isinstance(result.data, CatalogResolvedLlmProvider) + assert result.data.id == "my-provider" + assert result.data.title == "My Provider" + assert len(result.data.models) == 1 + model = result.data.models[0] + assert isinstance(model, CatalogResolvedLlmModel) + assert model.id == "gpt-5" + assert model.family == "OPENAI" + + +def test_resolved_llms_from_api_endpoint(): + """CatalogResolvedLlms.from_api returns a CatalogResolvedLlmEndpoint when 'models' is absent.""" + data = { + "data": { + "id": "legacy-endpoint", + "title": "Legacy Endpoint", + } + } + result = CatalogResolvedLlms.from_api(data) + assert isinstance(result.data, CatalogResolvedLlmEndpoint) + assert result.data.id == "legacy-endpoint" + assert result.data.title == "Legacy Endpoint" + + +def test_resolved_llms_from_api_none(): + """CatalogResolvedLlms.from_api handles a missing 'data' field (no LLM configured).""" + result = CatalogResolvedLlms.from_api({}) + assert result.data is None + + +# --------------------------------------------------------------------------- +# Integration test – requires a VCR cassette recorded against a live server +# --------------------------------------------------------------------------- + + +@gd_vcr.use_cassette(str(_fixtures_dir / "test_resolve_llm_providers.yaml")) +def test_resolve_llm_providers_integration(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + result = sdk.catalog_workspace_content.resolve_llm_providers(test_config["workspace"]) + assert isinstance(result, CatalogResolvedLlms) + # data may be None if no LLM provider is configured in the test environment + if result.data is not None: + assert isinstance(result.data, (CatalogResolvedLlmEndpoint, CatalogResolvedLlmProvider)) + assert result.data.id + assert result.data.title diff --git a/transcript-implement-C006.jsonl b/transcript-implement-C006.jsonl new file mode 100644 index 000000000..a7af49bfd --- /dev/null +++ b/transcript-implement-C006.jsonl @@ -0,0 +1,226 @@ +{"ts": 1776623849.4119425, "type": "system"} +{"ts": 1776623851.2673814, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623851.391196, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623851.4217417, "type": "user", "blocks": []} +{"ts": 1776623854.0030005, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623854.1979706, "type": "user", "blocks": []} +{"ts": 1776623854.2692196, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623854.2826822, "type": "user", "blocks": []} +{"ts": 1776623856.0176854, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623856.1132045, "type": "user", "blocks": []} +{"ts": 1776623856.1179554, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623856.1389182, "type": "user", "blocks": []} +{"ts": 1776623858.654286, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623858.675151, "type": "user", "blocks": []} +{"ts": 1776623859.906732, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623859.920128, "type": "user", "blocks": []} +{"ts": 1776623861.231137, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623861.26393, "type": "user", "blocks": []} +{"ts": 1776623862.9961839, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623863.0253134, "type": "user", "blocks": []} +{"ts": 1776623864.8088672, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623864.8149877, "type": "user", "blocks": []} +{"ts": 1776623866.338654, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623866.3570783, "type": "user", "blocks": []} +{"ts": 1776623870.3864815, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623870.873381, "type": "user", "blocks": []} +{"ts": 1776623873.0127094, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623873.0129852, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623873.4692032, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623873.4879677, "type": "user", "blocks": []} +{"ts": 1776623875.1832352, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623875.1955056, "type": "user", "blocks": []} +{"ts": 1776623876.8356397, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623876.8452628, "type": "user", "blocks": []} +{"ts": 1776623878.204534, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623878.2145307, "type": "user", "blocks": []} +{"ts": 1776623879.9137917, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623879.9391422, "type": "user", "blocks": []} +{"ts": 1776623881.5655942, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623881.5749943, "type": "user", "blocks": []} +{"ts": 1776623883.3451498, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623883.3531559, "type": "user", "blocks": []} +{"ts": 1776623886.3306682, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623886.9959989, "type": "user", "blocks": []} +{"ts": 1776623887.0884871, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623887.1000526, "type": "user", "blocks": []} +{"ts": 1776623890.5949957, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623890.6279106, "type": "user", "blocks": []} +{"ts": 1776623893.0623617, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623893.0713067, "type": "user", "blocks": []} +{"ts": 1776623895.2965384, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623895.7006166, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623896.4810462, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623896.7282643, "type": "user", "blocks": []} +{"ts": 1776623896.735418, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623896.7629516, "type": "user", "blocks": []} +{"ts": 1776623899.5057085, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623899.772904, "type": "user", "blocks": []} +{"ts": 1776623899.7908137, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623899.798441, "type": "user", "blocks": []} +{"ts": 1776623901.8388405, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623902.325578, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623903.632152, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623904.1094906, "type": "user", "blocks": []} +{"ts": 1776623904.1223176, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623904.1325104, "type": "user", "blocks": []} +{"ts": 1776623906.1122625, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623906.950236, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623908.7447655, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623909.5811522, "type": "user", "blocks": []} +{"ts": 1776623909.6033547, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623909.6170685, "type": "user", "blocks": []} +{"ts": 1776623912.3961968, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623912.4047277, "type": "user", "blocks": []} +{"ts": 1776623914.056478, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623914.0710323, "type": "user", "blocks": []} +{"ts": 1776623915.6544306, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623916.136384, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623916.553333, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623916.5630853, "type": "user", "blocks": []} +{"ts": 1776623918.2682273, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623918.2775168, "type": "user", "blocks": []} +{"ts": 1776623922.6319723, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623922.6474314, "type": "user", "blocks": []} +{"ts": 1776623924.9896512, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623925.006255, "type": "user", "blocks": []} +{"ts": 1776623926.698975, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623927.5508611, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623928.8933432, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623928.9043908, "type": "user", "blocks": []} +{"ts": 1776623930.6632702, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623930.6835606, "type": "user", "blocks": []} +{"ts": 1776623931.979088, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623932.3901997, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623933.347344, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623933.396833, "type": "user", "blocks": []} +{"ts": 1776623934.9744508, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623934.9866707, "type": "user", "blocks": []} +{"ts": 1776623936.7645133, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623936.7942896, "type": "user", "blocks": []} +{"ts": 1776623938.6961935, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623938.733918, "type": "user", "blocks": []} +{"ts": 1776623941.75932, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623941.7818227, "type": "user", "blocks": []} +{"ts": 1776623954.7014546, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623954.800852, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623956.1355999, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623956.1553125, "type": "user", "blocks": []} +{"ts": 1776623957.9434347, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623957.9759912, "type": "user", "blocks": []} +{"ts": 1776623959.5144231, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623959.542546, "type": "user", "blocks": []} +{"ts": 1776623967.1442676, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623967.1447375, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623967.300222, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623967.3097153, "type": "user", "blocks": []} +{"ts": 1776623984.5759256, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623984.578765, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623984.968849, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776623984.9822013, "type": "user", "blocks": []} +{"ts": 1776624004.836477, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624004.8424208, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624005.7728093, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624005.7786198, "type": "user", "blocks": []} +{"ts": 1776624080.4759238, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624080.4845977, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624088.1026297, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624088.1153476, "type": "user", "blocks": []} +{"ts": 1776624089.8154943, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624091.8739545, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624091.8833904, "type": "user", "blocks": []} +{"ts": 1776624094.0500805, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624094.076628, "type": "user", "blocks": []} +{"ts": 1776624096.066902, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624096.1751108, "type": "user", "blocks": []} +{"ts": 1776624099.765658, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624099.7781248, "type": "user", "blocks": []} +{"ts": 1776624101.8540356, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624102.74553, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624102.7567108, "type": "user", "blocks": []} +{"ts": 1776624110.5060456, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624110.530258, "type": "user", "blocks": []} +{"ts": 1776624112.53716, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624113.0744612, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624113.0926392, "type": "user", "blocks": []} +{"ts": 1776624117.5864444, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624117.600158, "type": "user", "blocks": []} +{"ts": 1776624119.2928677, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624120.1841328, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624120.1947293, "type": "user", "blocks": []} +{"ts": 1776624121.871067, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624121.8855553, "type": "user", "blocks": []} +{"ts": 1776624123.638704, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624123.6721983, "type": "user", "blocks": []} +{"ts": 1776624126.8357573, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624131.709012, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624131.7220917, "type": "user", "blocks": []} +{"ts": 1776624133.3492289, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624133.8680205, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624133.8838725, "type": "user", "blocks": []} +{"ts": 1776624145.6435647, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624145.6512492, "type": "user", "blocks": []} +{"ts": 1776624147.0785072, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624149.035648, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624149.0668674, "type": "user", "blocks": []} +{"ts": 1776624151.9946997, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624152.023051, "type": "user", "blocks": []} +{"ts": 1776624153.839494, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624153.858893, "type": "user", "blocks": []} +{"ts": 1776624157.6330242, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624157.6506166, "type": "user", "blocks": []} +{"ts": 1776624159.87459, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624159.9445744, "type": "user", "blocks": []} +{"ts": 1776624161.7439473, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624161.7581496, "type": "user", "blocks": []} +{"ts": 1776624164.295778, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624168.0193284, "type": "system"} +{"ts": 1776624168.0194542, "type": "system"} +{"ts": 1776624168.0194783, "type": "user", "blocks": []} +{"ts": 1776624174.7117786, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624177.088119, "type": "user", "blocks": []} +{"ts": 1776624178.304703, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624179.4088683, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624179.6271915, "type": "user", "blocks": []} +{"ts": 1776624183.2856727, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624183.9982548, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624184.5360954, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624184.6659431, "type": "user", "blocks": []} +{"ts": 1776624187.570942, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624187.899418, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624188.0411441, "type": "user", "blocks": []} +{"ts": 1776624190.0196218, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624191.4440212, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624191.7133126, "type": "user", "blocks": []} +{"ts": 1776624193.5960422, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624195.1254778, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624195.147726, "type": "user", "blocks": []} +{"ts": 1776624198.049127, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624198.104561, "type": "user", "blocks": []} +{"ts": 1776624200.659363, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624201.285863, "type": "user", "blocks": []} +{"ts": 1776624204.0382314, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624204.0766597, "type": "user", "blocks": []} +{"ts": 1776624206.6127126, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624206.634773, "type": "user", "blocks": []} +{"ts": 1776624210.2589273, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624210.313206, "type": "user", "blocks": []} +{"ts": 1776624213.837471, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624214.0137758, "type": "user", "blocks": []} +{"ts": 1776624216.0136409, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624216.0490084, "type": "user", "blocks": []} +{"ts": 1776624217.8717623, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624217.8968134, "type": "user", "blocks": []} +{"ts": 1776624220.1560633, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624220.1792786, "type": "user", "blocks": []} +{"ts": 1776624221.860156, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624222.1517842, "type": "user", "blocks": []} +{"ts": 1776624225.2188628, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624227.1379645, "type": "user", "blocks": []} +{"ts": 1776624229.0186381, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624229.916306, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624229.9499817, "type": "user", "blocks": []} +{"ts": 1776624254.4486084, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624254.4802475, "type": "user", "blocks": []} +{"ts": 1776624263.7433248, "type": "assistant", "blocks": [{"type": ""}]} +{"ts": 1776624263.924292, "type": "result", "subtype": "success", "cost_usd": 2.470431599999999, "duration_ms": 414520, "num_turns": 92} From f153c4ef8a1bc2bbfda507e16dca1d6468793fad Mon Sep 17 00:00:00 2001 From: yenkins-admin <5391010+yenkins-admin@users.noreply.github.com> Date: Sun, 19 Apr 2026 18:46:10 +0000 Subject: [PATCH 2/3] chore(cassettes): record cassettes for auto-sync tests --- .../test_resolve_llm_providers.yaml | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/test_resolve_llm_providers.yaml diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/test_resolve_llm_providers.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/test_resolve_llm_providers.yaml new file mode 100644 index 000000000..c6e89780c --- /dev/null +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/test_resolve_llm_providers.yaml @@ -0,0 +1,34 @@ +interactions: + - request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - br, gzip, deflate + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + method: GET + uri: http://localhost:3000/api/v1/actions/workspaces/demo/ai/resolveLlmProviders + response: + body: + string: + data: null + headers: + Content-Type: + - application/json + DATE: &id001 + - PLACEHOLDER + Expires: + - '0' + Pragma: + - no-cache + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + status: + code: 200 + message: OK +version: 1 From 76047d65d8935f2698eb661d90a5b61562d70798 Mon Sep 17 00:00:00 2001 From: Jan Tychtl Date: Sun, 19 Apr 2026 20:55:14 +0200 Subject: [PATCH 3/3] chore(auto): remove leaked pipeline transcript The implement agent writes its message log to transcript-implement-C006.jsonl. This file was accidentally committed by 'git add -A' in the deliver step of sdk-py-openapi-sync.yml (gdc-nas). The workflow has been patched to write transcripts outside the sdk/ checkout so future auto-PRs won't contain them. --- transcript-implement-C006.jsonl | 226 -------------------------------- 1 file changed, 226 deletions(-) delete mode 100644 transcript-implement-C006.jsonl diff --git a/transcript-implement-C006.jsonl b/transcript-implement-C006.jsonl deleted file mode 100644 index a7af49bfd..000000000 --- a/transcript-implement-C006.jsonl +++ /dev/null @@ -1,226 +0,0 @@ -{"ts": 1776623849.4119425, "type": "system"} -{"ts": 1776623851.2673814, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623851.391196, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623851.4217417, "type": "user", "blocks": []} -{"ts": 1776623854.0030005, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623854.1979706, "type": "user", "blocks": []} -{"ts": 1776623854.2692196, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623854.2826822, "type": "user", "blocks": []} -{"ts": 1776623856.0176854, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623856.1132045, "type": "user", "blocks": []} -{"ts": 1776623856.1179554, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623856.1389182, "type": "user", "blocks": []} -{"ts": 1776623858.654286, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623858.675151, "type": "user", "blocks": []} -{"ts": 1776623859.906732, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623859.920128, "type": "user", "blocks": []} -{"ts": 1776623861.231137, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623861.26393, "type": "user", "blocks": []} -{"ts": 1776623862.9961839, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623863.0253134, "type": "user", "blocks": []} -{"ts": 1776623864.8088672, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623864.8149877, "type": "user", "blocks": []} -{"ts": 1776623866.338654, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623866.3570783, "type": "user", "blocks": []} -{"ts": 1776623870.3864815, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623870.873381, "type": "user", "blocks": []} -{"ts": 1776623873.0127094, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623873.0129852, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623873.4692032, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623873.4879677, "type": "user", "blocks": []} -{"ts": 1776623875.1832352, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623875.1955056, "type": "user", "blocks": []} -{"ts": 1776623876.8356397, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623876.8452628, "type": "user", "blocks": []} -{"ts": 1776623878.204534, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623878.2145307, "type": "user", "blocks": []} -{"ts": 1776623879.9137917, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623879.9391422, "type": "user", "blocks": []} -{"ts": 1776623881.5655942, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623881.5749943, "type": "user", "blocks": []} -{"ts": 1776623883.3451498, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623883.3531559, "type": "user", "blocks": []} -{"ts": 1776623886.3306682, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623886.9959989, "type": "user", "blocks": []} -{"ts": 1776623887.0884871, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623887.1000526, "type": "user", "blocks": []} -{"ts": 1776623890.5949957, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623890.6279106, "type": "user", "blocks": []} -{"ts": 1776623893.0623617, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623893.0713067, "type": "user", "blocks": []} -{"ts": 1776623895.2965384, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623895.7006166, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623896.4810462, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623896.7282643, "type": "user", "blocks": []} -{"ts": 1776623896.735418, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623896.7629516, "type": "user", "blocks": []} -{"ts": 1776623899.5057085, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623899.772904, "type": "user", "blocks": []} -{"ts": 1776623899.7908137, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623899.798441, "type": "user", "blocks": []} -{"ts": 1776623901.8388405, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623902.325578, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623903.632152, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623904.1094906, "type": "user", "blocks": []} -{"ts": 1776623904.1223176, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623904.1325104, "type": "user", "blocks": []} -{"ts": 1776623906.1122625, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623906.950236, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623908.7447655, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623909.5811522, "type": "user", "blocks": []} -{"ts": 1776623909.6033547, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623909.6170685, "type": "user", "blocks": []} -{"ts": 1776623912.3961968, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623912.4047277, "type": "user", "blocks": []} -{"ts": 1776623914.056478, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623914.0710323, "type": "user", "blocks": []} -{"ts": 1776623915.6544306, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623916.136384, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623916.553333, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623916.5630853, "type": "user", "blocks": []} -{"ts": 1776623918.2682273, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623918.2775168, "type": "user", "blocks": []} -{"ts": 1776623922.6319723, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623922.6474314, "type": "user", "blocks": []} -{"ts": 1776623924.9896512, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623925.006255, "type": "user", "blocks": []} -{"ts": 1776623926.698975, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623927.5508611, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623928.8933432, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623928.9043908, "type": "user", "blocks": []} -{"ts": 1776623930.6632702, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623930.6835606, "type": "user", "blocks": []} -{"ts": 1776623931.979088, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623932.3901997, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623933.347344, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623933.396833, "type": "user", "blocks": []} -{"ts": 1776623934.9744508, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623934.9866707, "type": "user", "blocks": []} -{"ts": 1776623936.7645133, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623936.7942896, "type": "user", "blocks": []} -{"ts": 1776623938.6961935, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623938.733918, "type": "user", "blocks": []} -{"ts": 1776623941.75932, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623941.7818227, "type": "user", "blocks": []} -{"ts": 1776623954.7014546, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623954.800852, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623956.1355999, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623956.1553125, "type": "user", "blocks": []} -{"ts": 1776623957.9434347, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623957.9759912, "type": "user", "blocks": []} -{"ts": 1776623959.5144231, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623959.542546, "type": "user", "blocks": []} -{"ts": 1776623967.1442676, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623967.1447375, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623967.300222, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623967.3097153, "type": "user", "blocks": []} -{"ts": 1776623984.5759256, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623984.578765, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623984.968849, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776623984.9822013, "type": "user", "blocks": []} -{"ts": 1776624004.836477, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624004.8424208, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624005.7728093, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624005.7786198, "type": "user", "blocks": []} -{"ts": 1776624080.4759238, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624080.4845977, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624088.1026297, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624088.1153476, "type": "user", "blocks": []} -{"ts": 1776624089.8154943, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624091.8739545, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624091.8833904, "type": "user", "blocks": []} -{"ts": 1776624094.0500805, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624094.076628, "type": "user", "blocks": []} -{"ts": 1776624096.066902, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624096.1751108, "type": "user", "blocks": []} -{"ts": 1776624099.765658, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624099.7781248, "type": "user", "blocks": []} -{"ts": 1776624101.8540356, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624102.74553, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624102.7567108, "type": "user", "blocks": []} -{"ts": 1776624110.5060456, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624110.530258, "type": "user", "blocks": []} -{"ts": 1776624112.53716, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624113.0744612, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624113.0926392, "type": "user", "blocks": []} -{"ts": 1776624117.5864444, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624117.600158, "type": "user", "blocks": []} -{"ts": 1776624119.2928677, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624120.1841328, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624120.1947293, "type": "user", "blocks": []} -{"ts": 1776624121.871067, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624121.8855553, "type": "user", "blocks": []} -{"ts": 1776624123.638704, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624123.6721983, "type": "user", "blocks": []} -{"ts": 1776624126.8357573, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624131.709012, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624131.7220917, "type": "user", "blocks": []} -{"ts": 1776624133.3492289, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624133.8680205, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624133.8838725, "type": "user", "blocks": []} -{"ts": 1776624145.6435647, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624145.6512492, "type": "user", "blocks": []} -{"ts": 1776624147.0785072, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624149.035648, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624149.0668674, "type": "user", "blocks": []} -{"ts": 1776624151.9946997, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624152.023051, "type": "user", "blocks": []} -{"ts": 1776624153.839494, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624153.858893, "type": "user", "blocks": []} -{"ts": 1776624157.6330242, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624157.6506166, "type": "user", "blocks": []} -{"ts": 1776624159.87459, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624159.9445744, "type": "user", "blocks": []} -{"ts": 1776624161.7439473, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624161.7581496, "type": "user", "blocks": []} -{"ts": 1776624164.295778, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624168.0193284, "type": "system"} -{"ts": 1776624168.0194542, "type": "system"} -{"ts": 1776624168.0194783, "type": "user", "blocks": []} -{"ts": 1776624174.7117786, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624177.088119, "type": "user", "blocks": []} -{"ts": 1776624178.304703, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624179.4088683, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624179.6271915, "type": "user", "blocks": []} -{"ts": 1776624183.2856727, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624183.9982548, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624184.5360954, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624184.6659431, "type": "user", "blocks": []} -{"ts": 1776624187.570942, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624187.899418, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624188.0411441, "type": "user", "blocks": []} -{"ts": 1776624190.0196218, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624191.4440212, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624191.7133126, "type": "user", "blocks": []} -{"ts": 1776624193.5960422, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624195.1254778, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624195.147726, "type": "user", "blocks": []} -{"ts": 1776624198.049127, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624198.104561, "type": "user", "blocks": []} -{"ts": 1776624200.659363, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624201.285863, "type": "user", "blocks": []} -{"ts": 1776624204.0382314, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624204.0766597, "type": "user", "blocks": []} -{"ts": 1776624206.6127126, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624206.634773, "type": "user", "blocks": []} -{"ts": 1776624210.2589273, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624210.313206, "type": "user", "blocks": []} -{"ts": 1776624213.837471, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624214.0137758, "type": "user", "blocks": []} -{"ts": 1776624216.0136409, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624216.0490084, "type": "user", "blocks": []} -{"ts": 1776624217.8717623, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624217.8968134, "type": "user", "blocks": []} -{"ts": 1776624220.1560633, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624220.1792786, "type": "user", "blocks": []} -{"ts": 1776624221.860156, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624222.1517842, "type": "user", "blocks": []} -{"ts": 1776624225.2188628, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624227.1379645, "type": "user", "blocks": []} -{"ts": 1776624229.0186381, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624229.916306, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624229.9499817, "type": "user", "blocks": []} -{"ts": 1776624254.4486084, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624254.4802475, "type": "user", "blocks": []} -{"ts": 1776624263.7433248, "type": "assistant", "blocks": [{"type": ""}]} -{"ts": 1776624263.924292, "type": "result", "subtype": "success", "cost_usd": 2.470431599999999, "duration_ms": 414520, "num_turns": 92}