From 4da43cb71c8378b528548e4aada5755a129ac9fc Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Thu, 29 Oct 2026 07:29:35 -0700 Subject: [PATCH] feat(python): preserve unknown fields and open-union variants in Interactions models Enable `preserveUnknownFields` and `modelSerializationMethods` in the Python SDK. Unknown fields are kept at every nesting level, in responses and in requests: unknown request fields are forwarded instead of silently dropped, so unsupported options such as `transcription_config.diarization` are rejected by the API rather than ignored (https://github.com/googleapis/python-genai/issues/3162), and fields missing from the SDK schema reach the API. Unknown steps, content blocks and annotations round-trip as the payload the server sent, including stateless multi-turn history sent back as SDK objects or as stored dicts; known variants with invalid payloads still raise locally. FUTURE_COPYBARA_INTEGRATE_REVIEW=https://github.com/googleapis/python-genai/pull/3209 from googleapis:release-please--branches--main 39c95f2f004970ff5d9fd941aef3a09a98d3a79e PiperOrigin-RevId: 1009673588 --- .github/workflows/mypy.yml | 2 +- google/genai/_gaos/credentials.py | 40 +- .../_gaos/models/cancelinteractionbyid.py | 53 +- google/genai/_gaos/models/createagent.py | 53 +- google/genai/_gaos/models/createcredential.py | 53 +- .../genai/_gaos/models/createenvironment.py | 53 +- .../genai/_gaos/models/createinteraction.py | 53 +- google/genai/_gaos/models/createtrigger.py | 53 +- google/genai/_gaos/models/createvoice.py | 53 +- google/genai/_gaos/models/createwebhook.py | 53 +- google/genai/_gaos/models/deleteagent.py | 53 +- google/genai/_gaos/models/deletecredential.py | 53 +- .../genai/_gaos/models/deleteenvironment.py | 53 +- .../genai/_gaos/models/deleteinteraction.py | 53 +- google/genai/_gaos/models/deletetrigger.py | 53 +- google/genai/_gaos/models/deletevoice.py | 53 +- google/genai/_gaos/models/deletewebhook.py | 53 +- google/genai/_gaos/models/getagent.py | 53 +- google/genai/_gaos/models/getcredential.py | 53 +- google/genai/_gaos/models/getenvironment.py | 53 +- .../genai/_gaos/models/getenvironmentfiles.py | 53 +- .../genai/_gaos/models/getinteractionbyid.py | 53 +- google/genai/_gaos/models/gettrigger.py | 53 +- google/genai/_gaos/models/getvoice.py | 53 +- google/genai/_gaos/models/getwebhook.py | 53 +- google/genai/_gaos/models/internal/globals.py | 35 +- google/genai/_gaos/models/listagents.py | 53 +- google/genai/_gaos/models/listcredentials.py | 53 +- google/genai/_gaos/models/listenvironments.py | 53 +- .../_gaos/models/listtriggerexecutions.py | 53 +- google/genai/_gaos/models/listtriggers.py | 53 +- google/genai/_gaos/models/listvoices.py | 53 +- google/genai/_gaos/models/listwebhooks.py | 53 +- google/genai/_gaos/models/pingwebhook.py | 53 +- .../genai/_gaos/models/rotatesigningsecret.py | 53 +- google/genai/_gaos/models/runtrigger.py | 53 +- .../models/startenvironmentfileupload.py | 60 ++- google/genai/_gaos/models/updatecredential.py | 53 +- google/genai/_gaos/models/updatetrigger.py | 53 +- google/genai/_gaos/models/updatewebhook.py | 53 +- google/genai/_gaos/types/__init__.py | 4 + google/genai/_gaos/types/agents/agent.py | 30 +- .../_gaos/types/agents/agentlistresponse.py | 30 +- google/genai/_gaos/types/agents/agenttool.py | 6 +- google/genai/_gaos/types/basemodel.py | 168 +++--- .../_gaos/types/credentials/credential.py | 36 +- .../credentials/credentiallistresponse.py | 30 +- .../credentials/environmentvariableconfig.py | 35 +- .../environmentvariableupdateconfig.py | 35 +- .../types/credentials/httpbearerconfig.py | 35 +- .../credentials/httpbearerupdateconfig.py | 35 +- .../_gaos/types/credentials/oauth2config.py | 35 +- .../types/credentials/oauth2updateconfig.py | 35 +- .../environments/createenvironmentrequest.py | 30 +- .../_gaos/types/environments/environment.py | 36 +- .../types/environments/environmentfile.py | 36 +- .../getenvironmentfilesresponse.py | 30 +- .../environments/listenvironmentsresponse.py | 30 +- .../_gaos/types/interactions/allowedtools.py | 30 +- .../types/interactions/allowlistentry.py | 30 +- .../_gaos/types/interactions/annotation.py | 6 +- .../interactions/antigravityagentconfig.py | 35 +- .../types/interactions/argumentsdelta.py | 35 +- .../_gaos/types/interactions/audiocontent.py | 35 +- .../_gaos/types/interactions/audiodelta.py | 41 +- .../types/interactions/audioresponseformat.py | 41 +- .../_gaos/types/interactions/codeexecution.py | 5 +- .../codeexecutioncallarguments.py | 36 +- .../interactions/codeexecutioncalldelta.py | 35 +- .../interactions/codeexecutioncallstep.py | 42 +- .../interactions/codeexecutionresultdelta.py | 35 +- .../interactions/codeexecutionresultstep.py | 42 +- .../interactions/codemenderagentconfig.py | 35 +- .../_gaos/types/interactions/computeruse.py | 41 +- .../genai/_gaos/types/interactions/content.py | 6 +- .../interactions/createagentinteraction.py | 30 +- .../interactions/createmodelinteraction.py | 30 +- .../interactions/deepresearchagentconfig.py | 41 +- .../types/interactions/documentcontent.py | 35 +- .../_gaos/types/interactions/documentdelta.py | 41 +- .../types/interactions/dynamicagentconfig.py | 3 + .../_gaos/types/interactions/environment.py | 41 +- .../environmentnetworkegressallowlist.py | 36 +- .../genai/_gaos/types/interactions/envvar.py | 30 +- .../genai/_gaos/types/interactions/error.py | 30 +- .../_gaos/types/interactions/errorevent.py | 35 +- .../types/interactions/exaaisearchconfig.py | 30 +- .../_gaos/types/interactions/filecitation.py | 33 +- .../_gaos/types/interactions/filecontent.py | 30 +- .../_gaos/types/interactions/filesearch.py | 35 +- .../types/interactions/filesearchcalldelta.py | 35 +- .../types/interactions/filesearchcallstep.py | 42 +- .../interactions/filesearchresultdelta.py | 35 +- .../interactions/filesearchresultstep.py | 42 +- .../genai/_gaos/types/interactions/filter_.py | 30 +- .../_gaos/types/interactions/findrequest.py | 36 +- .../_gaos/types/interactions/fixrequest.py | 30 +- .../_gaos/types/interactions/function.py | 33 +- .../types/interactions/functioncallstep.py | 3 + .../types/interactions/functionresultdelta.py | 35 +- .../types/interactions/functionresultstep.py | 35 +- .../interactions/functionresultsubcontent.py | 6 +- .../types/interactions/generationconfig.py | 30 +- .../_gaos/types/interactions/googlemaps.py | 35 +- .../interactions/googlemapscallarguments.py | 30 +- .../types/interactions/googlemapscalldelta.py | 35 +- .../types/interactions/googlemapscallstep.py | 42 +- .../types/interactions/googlemapsresult.py | 30 +- .../interactions/googlemapsresultdelta.py | 35 +- .../interactions/googlemapsresultplaces.py | 30 +- .../interactions/googlemapsresultstep.py | 42 +- .../_gaos/types/interactions/googlesearch.py | 41 +- .../interactions/googlesearchcallarguments.py | 30 +- .../interactions/googlesearchcalldelta.py | 35 +- .../interactions/googlesearchcallstep.py | 35 +- .../types/interactions/googlesearchresult.py | 30 +- .../interactions/googlesearchresultdelta.py | 35 +- .../interactions/googlesearchresultstep.py | 42 +- .../types/interactions/groundingtoolcount.py | 36 +- .../_gaos/types/interactions/hybridsearch.py | 30 +- .../_gaos/types/interactions/imageconfig.py | 36 +- .../_gaos/types/interactions/imagecontent.py | 35 +- .../_gaos/types/interactions/imagedelta.py | 41 +- .../types/interactions/imageresponseformat.py | 41 +- .../_gaos/types/interactions/interaction.py | 40 +- .../interactions/interactioncompletedevent.py | 35 +- .../interactions/interactioncreatedevent.py | 35 +- .../types/interactions/interactionsinput.py | 223 +++++++- .../types/interactions/interactionsseevent.py | 6 +- .../interactionsseeventinteraction.py | 36 +- .../interactions/interactionstatusupdate.py | 41 +- .../_gaos/types/interactions/mcpserver.py | 35 +- .../interactions/mcpservertoolcalldelta.py | 3 + .../interactions/mcpservertoolcallstep.py | 3 + .../interactions/mcpservertoolresultdelta.py | 35 +- .../interactions/mcpservertoolresultstep.py | 35 +- .../types/interactions/modalitytokens.py | 30 +- .../types/interactions/modeloutputstep.py | 35 +- .../interactions/parallelaisearchconfig.py | 30 +- .../_gaos/types/interactions/placecitation.py | 35 +- .../types/interactions/processingcalldelta.py | 35 +- .../types/interactions/processingcallstep.py | 42 +- .../interactions/processingresultdelta.py | 35 +- .../interactions/processingresultstep.py | 42 +- .../_gaos/types/interactions/ragresource.py | 30 +- .../types/interactions/ragretrievalconfig.py | 30 +- .../types/interactions/ragstoreconfig.py | 30 +- .../genai/_gaos/types/interactions/ranking.py | 35 +- .../_gaos/types/interactions/rankservice.py | 30 +- .../_gaos/types/interactions/retrieval.py | 41 +- .../interactions/retrievalcallarguments.py | 30 +- .../types/interactions/retrievalcalldelta.py | 41 +- .../types/interactions/retrievalcallstep.py | 35 +- .../interactions/retrievalresultdelta.py | 35 +- .../types/interactions/retrievalresultstep.py | 42 +- .../_gaos/types/interactions/reviewsnippet.py | 30 +- .../_gaos/types/interactions/safetysetting.py | 36 +- .../_gaos/types/interactions/sessionconfig.py | 30 +- .../interactions/smarttranscriptionmode.py | 5 +- .../genai/_gaos/types/interactions/source.py | 36 +- .../_gaos/types/interactions/speakerconfig.py | 30 +- .../types/interactions/speechannotation.py | 35 +- .../_gaos/types/interactions/speechconfig.py | 30 +- .../interactions/staticmediaprocessing.py | 35 +- .../genai/_gaos/types/interactions/status.py | 30 +- google/genai/_gaos/types/interactions/step.py | 6 +- .../_gaos/types/interactions/stepdelta.py | 35 +- .../_gaos/types/interactions/stepdeltadata.py | 6 +- .../types/interactions/stepdeltametadata.py | 30 +- .../_gaos/types/interactions/stepstart.py | 35 +- .../_gaos/types/interactions/stepstop.py | 35 +- .../types/interactions/textannotationdelta.py | 35 +- .../_gaos/types/interactions/textcontent.py | 35 +- .../_gaos/types/interactions/textdelta.py | 5 +- .../types/interactions/textresponseformat.py | 39 +- .../interactions/thoughtsignaturedelta.py | 35 +- .../_gaos/types/interactions/thoughtstep.py | 42 +- .../interactions/thoughtsummarycontent.py | 6 +- .../types/interactions/thoughtsummarydelta.py | 35 +- google/genai/_gaos/types/interactions/tool.py | 6 +- .../types/interactions/toolchoiceconfig.py | 30 +- .../types/interactions/transcriptionconfig.py | 36 +- .../types/interactions/transcriptionmode.py | 6 +- .../_gaos/types/interactions/urlcitation.py | 35 +- .../_gaos/types/interactions/urlcontext.py | 5 +- .../interactions/urlcontextcallarguments.py | 30 +- .../types/interactions/urlcontextcalldelta.py | 35 +- .../types/interactions/urlcontextcallstep.py | 42 +- .../types/interactions/urlcontextresult.py | 36 +- .../interactions/urlcontextresultdelta.py | 35 +- .../interactions/urlcontextresultstep.py | 42 +- .../genai/_gaos/types/interactions/usage.py | 30 +- .../_gaos/types/interactions/userinputstep.py | 35 +- .../interactions/verbatimtranscriptionmode.py | 35 +- .../interactions/vertexaisearchconfig.py | 30 +- .../_gaos/types/interactions/videoconfig.py | 36 +- .../_gaos/types/interactions/videocontent.py | 35 +- .../_gaos/types/interactions/videodelta.py | 41 +- .../types/interactions/videoresponseformat.py | 41 +- .../_gaos/types/interactions/webhookconfig.py | 30 +- .../_gaos/types/interactions/wordinfo.py | 35 +- google/genai/_gaos/types/security.py | 30 +- .../triggers/listtriggerexecutionsresponse.py | 30 +- .../types/triggers/listtriggersresponse.py | 30 +- google/genai/_gaos/types/triggers/trigger.py | 36 +- .../types/triggers/triggercreateparams.py | 30 +- .../_gaos/types/triggers/triggerexecution.py | 36 +- .../_gaos/types/triggers/triggerupdate.py | 30 +- .../_gaos/types/voices/createvoicerequest.py | 30 +- .../_gaos/types/voices/listvoicesresponse.py | 30 +- .../genai/_gaos/types/voices/promptedvoice.py | 30 +- .../genai/_gaos/types/voices/voice_input.py | 30 +- .../genai/_gaos/types/voices/voice_output.py | 30 +- .../webhooks/rotatesigningsecretrequest.py | 30 +- .../_gaos/types/webhooks/signingsecret.py | 30 +- google/genai/_gaos/types/webhooks/webhook.py | 59 ++- .../types/webhooks/webhooklistresponse.py | 30 +- .../webhookrotatesigningsecretresponse.py | 30 +- .../_gaos/types/webhooks/webhookupdate.py | 36 +- google/genai/_gaos/utils/__init__.py | 3 + google/genai/_gaos/utils/serializers.py | 10 +- google/genai/_gaos/utils/unions.py | 201 ++++++- google/genai/_gaos/voices.py | 4 +- .../gaos/test_serialization_requirements.py | 501 ++++++++++++++++++ .../genai/tests/gaos/test_unknown_fields.py | 430 +++++++++++++++ 225 files changed, 8040 insertions(+), 1117 deletions(-) create mode 100644 google/genai/tests/gaos/test_serialization_requirements.py create mode 100644 google/genai/tests/gaos/test_unknown_fields.py diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml index 69d7d12c09..b35fc8b3b4 100644 --- a/.github/workflows/mypy.yml +++ b/.github/workflows/mypy.yml @@ -10,7 +10,7 @@ on: - main env: - SPEAKEASY_VERSION: v2.952.4 + SPEAKEASY_VERSION: v2.955.0 jobs: mypy: diff --git a/google/genai/_gaos/credentials.py b/google/genai/_gaos/credentials.py index f132a9d5dd..e40a638aec 100644 --- a/google/genai/_gaos/credentials.py +++ b/google/genai/_gaos/credentials.py @@ -237,7 +237,7 @@ def create( :param refresh_token: Required. Input only. OAuth2 refresh token. Write-only; never returned in responses. :param scopes: Optional. List of OAuth2 scopes. :param token_url: Required. OAuth2 token endpoint URL for refreshing access tokens. - :param type: + :param type_: :param extra_headers: Additional headers to set or replace on requests. :param extra_query: Additional query parameters to append to requests. :param extra_body: Additional JSON object fields to merge into request bodies. @@ -268,7 +268,7 @@ def create( Accepts either a single location (e.g. \"header\") or an array of locations. :param trusted_domains: Optional. List of domains allowed to receive this environment variable value in HTTP requests. - :param type: + :param type_: :param value: Required. Input only. Secret value of the environment variable. Write-only; never returned in responses. :param extra_headers: Additional headers to set or replace on requests. @@ -301,7 +301,7 @@ def create( :param prefix: Optional. Prefix to prepend to the token. Defaults to 'Bearer'. Set to '' for no prefix. :param token: Required. Input only. The static bearer token. Write-only; never returned in responses. - :param type: + :param type_: :param extra_headers: Additional headers to set or replace on requests. :param extra_query: Additional query parameters to append to requests. :param extra_body: Additional JSON object fields to merge into request bodies. @@ -331,7 +331,7 @@ def create( :param refresh_token: Required. Input only. OAuth2 refresh token. Write-only; never returned in responses. :param scopes: Optional. List of OAuth2 scopes. :param token_url: Required. OAuth2 token endpoint URL for refreshing access tokens. - :param type: + :param type_: :param injection_location: Required. Locations where the environment variable can be injected in outgoing HTTP requests. Must contain at least one location. Accepts either a single location (e.g. \"header\") or an array of locations. @@ -372,7 +372,7 @@ def create( :param refresh_token: Required. Input only. OAuth2 refresh token. Write-only; never returned in responses. :param scopes: Optional. List of OAuth2 scopes. :param token_url: Required. OAuth2 token endpoint URL for refreshing access tokens. - :param type: + :param type_: :param injection_location: Required. Locations where the environment variable can be injected in outgoing HTTP requests. Must contain at least one location. Accepts either a single location (e.g. \"header\") or an array of locations. @@ -991,7 +991,7 @@ def update( :param refresh_token: Optional. Input only. OAuth2 refresh token. Write-only; never returned in responses. :param scopes: Optional. List of OAuth2 scopes. :param token_url: Optional. OAuth2 token endpoint URL for refreshing access tokens. - :param type: + :param type_: :param extra_headers: Additional headers to set or replace on requests. :param extra_query: Additional query parameters to append to requests. :param extra_body: Additional JSON object fields to merge into request bodies. @@ -1023,7 +1023,7 @@ def update( Accepts either a single location (e.g. \"header\") or an array of locations. :param trusted_domains: Optional. List of domains allowed to receive this environment variable value in HTTP requests. - :param type: + :param type_: :param value: Optional. Input only. Secret value of the environment variable. Write-only; never returned in responses. :param extra_headers: Additional headers to set or replace on requests. @@ -1057,7 +1057,7 @@ def update( :param prefix: Optional. Prefix to prepend to the token. Defaults to 'Bearer'. Set to '' for no prefix. :param token: Optional. Input only. The static bearer token. Write-only; never returned in responses. - :param type: + :param type_: :param extra_headers: Additional headers to set or replace on requests. :param extra_query: Additional query parameters to append to requests. :param extra_body: Additional JSON object fields to merge into request bodies. @@ -1089,7 +1089,7 @@ def update( :param refresh_token: Optional. Input only. OAuth2 refresh token. Write-only; never returned in responses. :param scopes: Optional. List of OAuth2 scopes. :param token_url: Optional. OAuth2 token endpoint URL for refreshing access tokens. - :param type: + :param type_: :param injection_location: Optional. Locations where the environment variable can be injected in outgoing HTTP requests. Accepts either a single location (e.g. \"header\") or an array of locations. @@ -1132,7 +1132,7 @@ def update( :param refresh_token: Optional. Input only. OAuth2 refresh token. Write-only; never returned in responses. :param scopes: Optional. List of OAuth2 scopes. :param token_url: Optional. OAuth2 token endpoint URL for refreshing access tokens. - :param type: + :param type_: :param injection_location: Optional. Locations where the environment variable can be injected in outgoing HTTP requests. Accepts either a single location (e.g. \"header\") or an array of locations. @@ -1650,7 +1650,7 @@ async def create( :param refresh_token: Required. Input only. OAuth2 refresh token. Write-only; never returned in responses. :param scopes: Optional. List of OAuth2 scopes. :param token_url: Required. OAuth2 token endpoint URL for refreshing access tokens. - :param type: + :param type_: :param extra_headers: Additional headers to set or replace on requests. :param extra_query: Additional query parameters to append to requests. :param extra_body: Additional JSON object fields to merge into request bodies. @@ -1681,7 +1681,7 @@ async def create( Accepts either a single location (e.g. \"header\") or an array of locations. :param trusted_domains: Optional. List of domains allowed to receive this environment variable value in HTTP requests. - :param type: + :param type_: :param value: Required. Input only. Secret value of the environment variable. Write-only; never returned in responses. :param extra_headers: Additional headers to set or replace on requests. @@ -1714,7 +1714,7 @@ async def create( :param prefix: Optional. Prefix to prepend to the token. Defaults to 'Bearer'. Set to '' for no prefix. :param token: Required. Input only. The static bearer token. Write-only; never returned in responses. - :param type: + :param type_: :param extra_headers: Additional headers to set or replace on requests. :param extra_query: Additional query parameters to append to requests. :param extra_body: Additional JSON object fields to merge into request bodies. @@ -1744,7 +1744,7 @@ async def create( :param refresh_token: Required. Input only. OAuth2 refresh token. Write-only; never returned in responses. :param scopes: Optional. List of OAuth2 scopes. :param token_url: Required. OAuth2 token endpoint URL for refreshing access tokens. - :param type: + :param type_: :param injection_location: Required. Locations where the environment variable can be injected in outgoing HTTP requests. Must contain at least one location. Accepts either a single location (e.g. \"header\") or an array of locations. @@ -1785,7 +1785,7 @@ async def create( :param refresh_token: Required. Input only. OAuth2 refresh token. Write-only; never returned in responses. :param scopes: Optional. List of OAuth2 scopes. :param token_url: Required. OAuth2 token endpoint URL for refreshing access tokens. - :param type: + :param type_: :param injection_location: Required. Locations where the environment variable can be injected in outgoing HTTP requests. Must contain at least one location. Accepts either a single location (e.g. \"header\") or an array of locations. @@ -2413,7 +2413,7 @@ async def update( :param refresh_token: Optional. Input only. OAuth2 refresh token. Write-only; never returned in responses. :param scopes: Optional. List of OAuth2 scopes. :param token_url: Optional. OAuth2 token endpoint URL for refreshing access tokens. - :param type: + :param type_: :param extra_headers: Additional headers to set or replace on requests. :param extra_query: Additional query parameters to append to requests. :param extra_body: Additional JSON object fields to merge into request bodies. @@ -2445,7 +2445,7 @@ async def update( Accepts either a single location (e.g. \"header\") or an array of locations. :param trusted_domains: Optional. List of domains allowed to receive this environment variable value in HTTP requests. - :param type: + :param type_: :param value: Optional. Input only. Secret value of the environment variable. Write-only; never returned in responses. :param extra_headers: Additional headers to set or replace on requests. @@ -2479,7 +2479,7 @@ async def update( :param prefix: Optional. Prefix to prepend to the token. Defaults to 'Bearer'. Set to '' for no prefix. :param token: Optional. Input only. The static bearer token. Write-only; never returned in responses. - :param type: + :param type_: :param extra_headers: Additional headers to set or replace on requests. :param extra_query: Additional query parameters to append to requests. :param extra_body: Additional JSON object fields to merge into request bodies. @@ -2511,7 +2511,7 @@ async def update( :param refresh_token: Optional. Input only. OAuth2 refresh token. Write-only; never returned in responses. :param scopes: Optional. List of OAuth2 scopes. :param token_url: Optional. OAuth2 token endpoint URL for refreshing access tokens. - :param type: + :param type_: :param injection_location: Optional. Locations where the environment variable can be injected in outgoing HTTP requests. Accepts either a single location (e.g. \"header\") or an array of locations. @@ -2554,7 +2554,7 @@ async def update( :param refresh_token: Optional. Input only. OAuth2 refresh token. Write-only; never returned in responses. :param scopes: Optional. List of OAuth2 scopes. :param token_url: Optional. OAuth2 token endpoint URL for refreshing access tokens. - :param type: + :param type_: :param injection_location: Optional. Locations where the environment variable can be injected in outgoing HTTP requests. Accepts either a single location (e.g. \"header\") or an array of locations. diff --git a/google/genai/_gaos/models/cancelinteractionbyid.py b/google/genai/_gaos/models/cancelinteractionbyid.py index bb27fa9b32..f37ebc95d5 100644 --- a/google/genai/_gaos/models/cancelinteractionbyid.py +++ b/google/genai/_gaos/models/cancelinteractionbyid.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata import pydantic from pydantic import model_serializer @@ -39,18 +44,35 @@ class CancelInteractionByIDGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -77,17 +99,34 @@ class CancelInteractionByIDRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/createagent.py b/google/genai/_gaos/models/createagent.py index bb99d3bd71..a750d83c63 100644 --- a/google/genai/_gaos/models/createagent.py +++ b/google/genai/_gaos/models/createagent.py @@ -18,8 +18,13 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ..types.agents import agent as agents_agent +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata, RequestMetadata from pydantic import model_serializer from typing import Optional @@ -39,18 +44,35 @@ class CreateAgentGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -76,17 +98,34 @@ class CreateAgentRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/createcredential.py b/google/genai/_gaos/models/createcredential.py index 91950ea86d..74d27dba16 100644 --- a/google/genai/_gaos/models/createcredential.py +++ b/google/genai/_gaos/models/createcredential.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..types.credentials import ( credentialcreateparams as credentials_credentialcreateparams, ) @@ -41,18 +46,35 @@ class CreateCredentialGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -78,17 +100,34 @@ class CreateCredentialRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/createenvironment.py b/google/genai/_gaos/models/createenvironment.py index 570f56ed53..2ee6ea7641 100644 --- a/google/genai/_gaos/models/createenvironment.py +++ b/google/genai/_gaos/models/createenvironment.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..types.environments import ( createenvironmentrequest as environments_createenvironmentrequest, ) @@ -41,18 +46,35 @@ class CreateEnvironmentGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -78,17 +100,34 @@ class CreateEnvironmentRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/createinteraction.py b/google/genai/_gaos/models/createinteraction.py index 63c3522904..16bac64b69 100644 --- a/google/genai/_gaos/models/createinteraction.py +++ b/google/genai/_gaos/models/createinteraction.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..types.interactions import ( createagentinteraction as interactions_createagentinteraction, createmodelinteraction as interactions_createmodelinteraction, @@ -45,18 +50,35 @@ class CreateInteractionGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -102,18 +124,35 @@ class CreateInteractionRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/createtrigger.py b/google/genai/_gaos/models/createtrigger.py index 4113d5febc..902f52624f 100644 --- a/google/genai/_gaos/models/createtrigger.py +++ b/google/genai/_gaos/models/createtrigger.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..types.triggers import triggercreateparams as triggers_triggercreateparams from ..utils import FieldMetadata, PathParamMetadata, RequestMetadata from pydantic import model_serializer @@ -39,18 +44,35 @@ class CreateTriggerGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -76,17 +98,34 @@ class CreateTriggerRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/createvoice.py b/google/genai/_gaos/models/createvoice.py index 9eb620455f..0f1b446fd0 100644 --- a/google/genai/_gaos/models/createvoice.py +++ b/google/genai/_gaos/models/createvoice.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..types.voices import createvoicerequest as voices_createvoicerequest from ..utils import FieldMetadata, PathParamMetadata, RequestMetadata from pydantic import model_serializer @@ -39,18 +44,35 @@ class CreateVoiceGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -76,17 +98,34 @@ class CreateVoiceRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/createwebhook.py b/google/genai/_gaos/models/createwebhook.py index 5ca65db468..c11dbe59bd 100644 --- a/google/genai/_gaos/models/createwebhook.py +++ b/google/genai/_gaos/models/createwebhook.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..types.webhooks import webhook as webhooks_webhook from ..utils import FieldMetadata, PathParamMetadata, RequestMetadata from pydantic import model_serializer @@ -39,18 +44,35 @@ class CreateWebhookGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -76,17 +98,34 @@ class CreateWebhookRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/deleteagent.py b/google/genai/_gaos/models/deleteagent.py index adb9761fec..1f7d8239b4 100644 --- a/google/genai/_gaos/models/deleteagent.py +++ b/google/genai/_gaos/models/deleteagent.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata import pydantic from pydantic import model_serializer @@ -39,18 +44,35 @@ class DeleteAgentGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -77,17 +99,34 @@ class DeleteAgentRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/deletecredential.py b/google/genai/_gaos/models/deletecredential.py index 58b725b8cf..30f15780ce 100644 --- a/google/genai/_gaos/models/deletecredential.py +++ b/google/genai/_gaos/models/deletecredential.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata from pydantic import model_serializer from typing import Optional @@ -38,18 +43,35 @@ class DeleteCredentialGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -78,17 +100,34 @@ class DeleteCredentialRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/deleteenvironment.py b/google/genai/_gaos/models/deleteenvironment.py index dcd26b9a2f..ecc92bd62c 100644 --- a/google/genai/_gaos/models/deleteenvironment.py +++ b/google/genai/_gaos/models/deleteenvironment.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata from pydantic import model_serializer from typing import Optional @@ -38,18 +43,35 @@ class DeleteEnvironmentGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -78,17 +100,34 @@ class DeleteEnvironmentRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/deleteinteraction.py b/google/genai/_gaos/models/deleteinteraction.py index 3a7dee4f00..44e59ff089 100644 --- a/google/genai/_gaos/models/deleteinteraction.py +++ b/google/genai/_gaos/models/deleteinteraction.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata import pydantic from pydantic import model_serializer @@ -39,18 +44,35 @@ class DeleteInteractionGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -77,17 +99,34 @@ class DeleteInteractionRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/deletetrigger.py b/google/genai/_gaos/models/deletetrigger.py index d1575ea0ce..a6b3646b84 100644 --- a/google/genai/_gaos/models/deletetrigger.py +++ b/google/genai/_gaos/models/deletetrigger.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata from pydantic import model_serializer from typing import Optional @@ -38,18 +43,35 @@ class DeleteTriggerGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -74,17 +96,34 @@ class DeleteTriggerRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/deletevoice.py b/google/genai/_gaos/models/deletevoice.py index cdbd9b80b4..04f29728be 100644 --- a/google/genai/_gaos/models/deletevoice.py +++ b/google/genai/_gaos/models/deletevoice.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata import pydantic from pydantic import model_serializer @@ -39,18 +44,35 @@ class DeleteVoiceGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -81,17 +103,34 @@ class DeleteVoiceRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/deletewebhook.py b/google/genai/_gaos/models/deletewebhook.py index 590f76d20b..e82fec5c51 100644 --- a/google/genai/_gaos/models/deletewebhook.py +++ b/google/genai/_gaos/models/deletewebhook.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata from pydantic import model_serializer from typing import Optional @@ -38,18 +43,35 @@ class DeleteWebhookGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -74,17 +96,34 @@ class DeleteWebhookRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/getagent.py b/google/genai/_gaos/models/getagent.py index 8c576574a6..1e77b94444 100644 --- a/google/genai/_gaos/models/getagent.py +++ b/google/genai/_gaos/models/getagent.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata import pydantic from pydantic import model_serializer @@ -39,18 +44,35 @@ class GetAgentGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -77,17 +99,34 @@ class GetAgentRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/getcredential.py b/google/genai/_gaos/models/getcredential.py index 9d67929621..c952d6de20 100644 --- a/google/genai/_gaos/models/getcredential.py +++ b/google/genai/_gaos/models/getcredential.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata from pydantic import model_serializer from typing import Optional @@ -38,18 +43,35 @@ class GetCredentialGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -78,17 +100,34 @@ class GetCredentialRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/getenvironment.py b/google/genai/_gaos/models/getenvironment.py index e30efdfef1..e43ca1d0c6 100644 --- a/google/genai/_gaos/models/getenvironment.py +++ b/google/genai/_gaos/models/getenvironment.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata from pydantic import model_serializer from typing import Optional @@ -38,18 +43,35 @@ class GetEnvironmentGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -78,17 +100,34 @@ class GetEnvironmentRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/getenvironmentfiles.py b/google/genai/_gaos/models/getenvironmentfiles.py index c72d9081c2..592f4f1e79 100644 --- a/google/genai/_gaos/models/getenvironmentfiles.py +++ b/google/genai/_gaos/models/getenvironmentfiles.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata, QueryParamMetadata from pydantic import model_serializer from typing import Optional @@ -38,18 +43,35 @@ class GetEnvironmentFilesGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -105,17 +127,34 @@ class GetEnvironmentFilesRequest(BaseModel): r"""Optional. If true and the path is a directory, recursively lists all files.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version", "page_size", "page_token", "recursive"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/getinteractionbyid.py b/google/genai/_gaos/models/getinteractionbyid.py index 62189cb124..d372a6bae9 100644 --- a/google/genai/_gaos/models/getinteractionbyid.py +++ b/google/genai/_gaos/models/getinteractionbyid.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..types.interactions import ( interaction as interactions_interaction, interactionsseevent as interactions_interactionsseevent, @@ -44,18 +49,35 @@ class GetInteractionByIDGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -110,20 +132,37 @@ class GetInteractionByIDRequest(BaseModel): r"""If true, streams the interaction events as Server-Sent Events.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( ["api_version", "include_input", "last_event_id", "stream"] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/gettrigger.py b/google/genai/_gaos/models/gettrigger.py index 22a1a80d6c..5a1fb5d16d 100644 --- a/google/genai/_gaos/models/gettrigger.py +++ b/google/genai/_gaos/models/gettrigger.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata from pydantic import model_serializer from typing import Optional @@ -38,18 +43,35 @@ class GetTriggerGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -74,17 +96,34 @@ class GetTriggerRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/getvoice.py b/google/genai/_gaos/models/getvoice.py index 33bfb46023..5e5262b76a 100644 --- a/google/genai/_gaos/models/getvoice.py +++ b/google/genai/_gaos/models/getvoice.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata import pydantic from pydantic import model_serializer @@ -39,18 +44,35 @@ class GetVoiceGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -81,17 +103,34 @@ class GetVoiceRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/getwebhook.py b/google/genai/_gaos/models/getwebhook.py index c5447888f8..4e8054dcf5 100644 --- a/google/genai/_gaos/models/getwebhook.py +++ b/google/genai/_gaos/models/getwebhook.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata from pydantic import model_serializer from typing import Optional @@ -38,18 +43,35 @@ class GetWebhookGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -74,17 +96,34 @@ class GetWebhookRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/internal/globals.py b/google/genai/_gaos/models/internal/globals.py index e3b59dcefc..77a6bc3c43 100644 --- a/google/genai/_gaos/models/internal/globals.py +++ b/google/genai/_gaos/models/internal/globals.py @@ -18,7 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ...types import BaseModel, UNSET_SENTINEL +from ...types import ( + BaseModel, + UNSET_SENTINEL, + current_exclude_none, + serialize_with_info, +) +from ...types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ...utils import FieldMetadata, HeaderMetadata, PathParamMetadata import pydantic from pydantic import model_serializer @@ -48,17 +58,34 @@ class Globals(BaseModel): r"""Quota project header to send with Google GenAI API requests.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version", "user_project"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/listagents.py b/google/genai/_gaos/models/listagents.py index 8e89986c68..f4f96cddf7 100644 --- a/google/genai/_gaos/models/listagents.py +++ b/google/genai/_gaos/models/listagents.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata, QueryParamMetadata from pydantic import model_serializer from typing import Optional @@ -38,18 +43,35 @@ class ListAgentsGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -91,17 +113,34 @@ class ListAgentsRequest(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version", "page_size", "page_token", "parent"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/listcredentials.py b/google/genai/_gaos/models/listcredentials.py index ecc0115837..393d2171c9 100644 --- a/google/genai/_gaos/models/listcredentials.py +++ b/google/genai/_gaos/models/listcredentials.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata, QueryParamMetadata from pydantic import model_serializer from typing import Optional @@ -38,18 +43,35 @@ class ListCredentialsGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -83,17 +105,34 @@ class ListCredentialsRequest(BaseModel): r"""Optional. Pagination token.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version", "page_size", "page_token"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/listenvironments.py b/google/genai/_gaos/models/listenvironments.py index 881fa6787b..53fae39289 100644 --- a/google/genai/_gaos/models/listenvironments.py +++ b/google/genai/_gaos/models/listenvironments.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata, QueryParamMetadata from pydantic import model_serializer from typing import Optional @@ -38,18 +43,35 @@ class ListEnvironmentsGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -87,17 +109,34 @@ class ListEnvironmentsRequest(BaseModel): r"""Optional. Pagination token.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version", "page_size", "page_token"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/listtriggerexecutions.py b/google/genai/_gaos/models/listtriggerexecutions.py index bc02bedb8d..3b7a29332d 100644 --- a/google/genai/_gaos/models/listtriggerexecutions.py +++ b/google/genai/_gaos/models/listtriggerexecutions.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata, QueryParamMetadata import pydantic from pydantic import model_serializer @@ -39,18 +44,35 @@ class ListTriggerExecutionsGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -93,17 +115,34 @@ class ListTriggerExecutionsRequest(BaseModel): r"""A page token from a previous ListTriggerExecutions call.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version", "page_size", "page_token"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/listtriggers.py b/google/genai/_gaos/models/listtriggers.py index 5c688dff1b..cd96675ba8 100644 --- a/google/genai/_gaos/models/listtriggers.py +++ b/google/genai/_gaos/models/listtriggers.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata, QueryParamMetadata import pydantic from pydantic import model_serializer @@ -39,18 +44,35 @@ class ListTriggersGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -93,17 +115,34 @@ class ListTriggersRequest(BaseModel): r"""Optional. A page token from a previous ListTriggers call.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version", "filter", "page_size", "page_token"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/listvoices.py b/google/genai/_gaos/models/listvoices.py index 57b2930dba..ff5bca5dc7 100644 --- a/google/genai/_gaos/models/listvoices.py +++ b/google/genai/_gaos/models/listvoices.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata, QueryParamMetadata import pydantic from pydantic import model_serializer @@ -39,18 +44,35 @@ class ListVoicesGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -235,6 +257,9 @@ class ListVoicesRequest(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -252,15 +277,29 @@ def serialize_model(self, handler): "type", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/listwebhooks.py b/google/genai/_gaos/models/listwebhooks.py index 8195c78439..82ac564a38 100644 --- a/google/genai/_gaos/models/listwebhooks.py +++ b/google/genai/_gaos/models/listwebhooks.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata, QueryParamMetadata from pydantic import model_serializer from typing import Optional @@ -38,18 +43,35 @@ class ListWebhooksGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -93,17 +115,34 @@ class ListWebhooksRequest(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version", "page_size", "page_token"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/pingwebhook.py b/google/genai/_gaos/models/pingwebhook.py index b51d8203de..37b8eb59d9 100644 --- a/google/genai/_gaos/models/pingwebhook.py +++ b/google/genai/_gaos/models/pingwebhook.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..types.webhooks import pingwebhookrequest as webhooks_pingwebhookrequest from ..utils import FieldMetadata, PathParamMetadata, RequestMetadata from pydantic import model_serializer @@ -39,18 +44,35 @@ class PingWebhookGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -83,17 +105,34 @@ class PingWebhookRequest(BaseModel): r"""The request body.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version", "body"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/rotatesigningsecret.py b/google/genai/_gaos/models/rotatesigningsecret.py index d82629b951..eb14f82ec6 100644 --- a/google/genai/_gaos/models/rotatesigningsecret.py +++ b/google/genai/_gaos/models/rotatesigningsecret.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..types.webhooks import ( rotatesigningsecretrequest as webhooks_rotatesigningsecretrequest, ) @@ -41,18 +46,35 @@ class RotateSigningSecretGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -85,17 +107,34 @@ class RotateSigningSecretRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/runtrigger.py b/google/genai/_gaos/models/runtrigger.py index 4e3d0fc473..00caefc856 100644 --- a/google/genai/_gaos/models/runtrigger.py +++ b/google/genai/_gaos/models/runtrigger.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import FieldMetadata, PathParamMetadata import pydantic from pydantic import model_serializer @@ -39,18 +44,35 @@ class RunTriggerGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -77,17 +99,34 @@ class RunTriggerRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/startenvironmentfileupload.py b/google/genai/_gaos/models/startenvironmentfileupload.py index 539a0ca044..0bfbdca742 100644 --- a/google/genai/_gaos/models/startenvironmentfileupload.py +++ b/google/genai/_gaos/models/startenvironmentfileupload.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..utils import ( FieldMetadata, HeaderMetadata, @@ -29,7 +34,7 @@ import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Dict, List, Literal, Optional +from typing import Any, Dict, List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -46,18 +51,35 @@ class StartEnvironmentFileUploadGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -140,19 +162,41 @@ class StartEnvironmentFileUploadRequest(BaseModel): ] = "resumable" r"""Resumable upload protocol selector.""" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update( + ["x_goog_upload_command", "x_goog_upload_protocol"] + ) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version", "extract", "overwrite"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/updatecredential.py b/google/genai/_gaos/models/updatecredential.py index 3dd675a673..c1d016fce2 100644 --- a/google/genai/_gaos/models/updatecredential.py +++ b/google/genai/_gaos/models/updatecredential.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..types.credentials import credentialupdate as credentials_credentialupdate from ..utils import ( FieldMetadata, @@ -44,18 +49,35 @@ class UpdateCredentialGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -100,17 +122,34 @@ class UpdateCredentialRequest(BaseModel): r"""Optional. The list of fields to update.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version", "update_mask"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/updatetrigger.py b/google/genai/_gaos/models/updatetrigger.py index 2a99af618b..81c0d09a55 100644 --- a/google/genai/_gaos/models/updatetrigger.py +++ b/google/genai/_gaos/models/updatetrigger.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..types.triggers import triggerupdate as triggers_triggerupdate from ..utils import FieldMetadata, PathParamMetadata, RequestMetadata from pydantic import model_serializer @@ -39,18 +44,35 @@ class UpdateTriggerGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -83,17 +105,34 @@ class UpdateTriggerRequest(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/models/updatewebhook.py b/google/genai/_gaos/models/updatewebhook.py index c80b710ee6..aa7f9391c5 100644 --- a/google/genai/_gaos/models/updatewebhook.py +++ b/google/genai/_gaos/models/updatewebhook.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ..types import BaseModel, UNSET_SENTINEL +from ..types import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..types.basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..types.webhooks import webhookupdate as webhooks_webhookupdate from ..utils import ( FieldMetadata, @@ -44,18 +49,35 @@ class UpdateWebhookGlobals(BaseModel): r"""API version for request routing.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -96,17 +118,34 @@ class UpdateWebhookRequest(BaseModel): r"""Optional list of fields to update.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_version", "update_mask"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/__init__.py b/google/genai/_gaos/types/__init__.py index 9e7116f832..aa1c66c27e 100644 --- a/google/genai/_gaos/types/__init__.py +++ b/google/genai/_gaos/types/__init__.py @@ -19,12 +19,14 @@ from .basemodel import ( BaseModel, + current_exclude_none, Nullable, OptionalNullable, UnrecognizedInt, UnrecognizedStr, UNSET, UNSET_SENTINEL, + serialize_with_info, ) from .base64fileinput import Base64EncodedString, Base64FileInput from typing import Any, TYPE_CHECKING @@ -55,6 +57,8 @@ "UNSET_SENTINEL", "UnrecognizedInt", "UnrecognizedStr", + "current_exclude_none", + "serialize_with_info", ] _dynamic_imports: dict[str, str] = { diff --git a/google/genai/_gaos/types/agents/agent.py b/google/genai/_gaos/types/agents/agent.py index b9b1ce10ea..fb5aee737e 100644 --- a/google/genai/_gaos/types/agents/agent.py +++ b/google/genai/_gaos/types/agents/agent.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..interactions import ( antigravityagentconfig as interactions_antigravityagentconfig, environment as interactions_environment, @@ -113,6 +118,9 @@ class Agent(BaseModel): r"""The tools available to the agent.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -125,15 +133,29 @@ def serialize_model(self, handler): "tools", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/agents/agentlistresponse.py b/google/genai/_gaos/types/agents/agentlistresponse.py index 27e91f7e04..f37f7a67c6 100644 --- a/google/genai/_gaos/types/agents/agentlistresponse.py +++ b/google/genai/_gaos/types/agents/agentlistresponse.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .agent import Agent, AgentParam from pydantic import model_serializer from typing import List, Optional @@ -40,17 +45,34 @@ class AgentListResponse(BaseModel): r"""A token to retrieve the next page of results.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["agents", "next_page_token"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/agents/agenttool.py b/google/genai/_gaos/types/agents/agenttool.py index b0bed887e4..ed08114eae 100644 --- a/google/genai/_gaos/types/agents/agenttool.py +++ b/google/genai/_gaos/types/agents/agenttool.py @@ -28,7 +28,7 @@ urlcontext as interactions_urlcontext, ) from functools import partial -from pydantic import ConfigDict +from pydantic import ConfigDict, model_serializer from pydantic.functional_validators import BeforeValidator from typing import Any, Literal, Union from typing_extensions import Annotated, TypeAliasType @@ -56,6 +56,10 @@ class UnknownAgentTool(BaseModel): model_config = ConfigDict(frozen=True) + @model_serializer + def serialize_model(self) -> Any: + return self.raw + _AGENT_TOOL_VARIANTS: dict[str, Any] = { "code_execution": interactions_codeexecution.CodeExecution, diff --git a/google/genai/_gaos/types/basemodel.py b/google/genai/_gaos/types/basemodel.py index e67d643bab..8abefea099 100644 --- a/google/genai/_gaos/types/basemodel.py +++ b/google/genai/_gaos/types/basemodel.py @@ -17,97 +17,19 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" -import json - +from contextvars import ContextVar from pydantic import ConfigDict, model_serializer from pydantic import BaseModel as PydanticBaseModel -from pydantic_core import core_schema, to_jsonable_python -from typing import TYPE_CHECKING, Any, Callable, Literal, Optional, TypeVar, Union +from pydantic_core import PydanticSerializationUnexpectedValue, core_schema +from typing import TYPE_CHECKING, Any, Callable, Literal, Optional, Type, TypeVar, Union from typing_extensions import TypeAliasType, TypeAlias class BaseModel(PydanticBaseModel): model_config = ConfigDict( - populate_by_name=True, - arbitrary_types_allowed=True, - protected_namespaces=(), - extra="allow", + populate_by_name=True, arbitrary_types_allowed=True, protected_namespaces=(), extra="allow" ) - def model_dump( - self, - *, - mode: Literal["json", "python"] | str = "python", - include: Any = None, - exclude: Any = None, - context: Any | None = None, - by_alias: bool | None = None, - exclude_unset: bool = False, - exclude_defaults: bool = False, - exclude_none: bool = False, - exclude_computed_fields: bool = False, - round_trip: bool = False, - warnings: bool | Literal["none", "warn", "error"] = True, - fallback: Callable[[Any], Any] | None = None, - serialize_as_any: bool = False, - ) -> dict[str, Any]: - dumped = super().model_dump( - mode=mode, - include=include, - exclude=exclude, - context=context, - by_alias=by_alias, - exclude_unset=exclude_unset, - exclude_defaults=exclude_defaults, - exclude_none=exclude_none, - exclude_computed_fields=exclude_computed_fields, - round_trip=round_trip, - warnings=warnings, - fallback=fallback, - serialize_as_any=serialize_as_any, - ) - extra = self.__pydantic_extra__ or {} - for key, value in extra.items(): - if key in dumped or (exclude_none and value is None): - continue - dumped[key] = to_jsonable_python(value) if mode == "json" else value - return dumped - - def model_dump_json( - self, - *, - indent: int | None = None, - ensure_ascii: bool = False, - include: Any = None, - exclude: Any = None, - context: Any | None = None, - by_alias: bool | None = None, - exclude_unset: bool = False, - exclude_defaults: bool = False, - exclude_none: bool = False, - exclude_computed_fields: bool = False, - round_trip: bool = False, - warnings: bool | Literal["none", "warn", "error"] = True, - fallback: Callable[[Any], Any] | None = None, - serialize_as_any: bool = False, - ) -> str: - dumped = self.model_dump( - mode="json", - include=include, - exclude=exclude, - context=context, - by_alias=by_alias, - exclude_unset=exclude_unset, - exclude_defaults=exclude_defaults, - exclude_none=exclude_none, - exclude_computed_fields=exclude_computed_fields, - round_trip=round_trip, - warnings=warnings, - fallback=fallback, - serialize_as_any=serialize_as_any, - ) - return json.dumps(dumped, indent=indent, ensure_ascii=ensure_ascii) - def to_dict( self, *, @@ -125,12 +47,13 @@ def to_dict( exclude_defaults=exclude_defaults, exclude_none=exclude_none, warnings=warnings, + context={SERIALIZATION_METHODS_DUMP: True}, ) def to_json( self, *, - indent: int | None = 2, + indent: Optional[int] = 2, use_api_names: bool = True, exclude_unset: bool = True, exclude_defaults: bool = False, @@ -144,10 +67,13 @@ def to_json( exclude_defaults=exclude_defaults, exclude_none=exclude_none, warnings=warnings, + context={SERIALIZATION_METHODS_DUMP: True}, ) class Unset(BaseModel): + model_config = ConfigDict(extra="ignore") + @model_serializer(mode="plain") def serialize_model(self): return UNSET_SENTINEL @@ -158,6 +84,7 @@ def __bool__(self) -> Literal[False]: UNSET = Unset() UNSET_SENTINEL = "~?~unset~?~sentinel~?~" +SERIALIZATION_METHODS_DUMP = "speakeasy_serialization_methods_dump" T = TypeVar("T") @@ -171,6 +98,73 @@ def __bool__(self) -> Literal[False]: ) +_exclude_none: ContextVar[Optional[bool]] = ContextVar("exclude_none", default=None) +_filtered_dump: ContextVar[bool] = ContextVar("filtered_dump", default=False) +_by_alias: ContextVar[Optional[bool]] = ContextVar("by_alias", default=None) +_serialization_methods_dump: ContextVar[bool] = ContextVar( + "serialization_methods_dump", default=False +) + + +def _is_serialization_methods_dump(info: core_schema.SerializationInfo) -> bool: + return isinstance(info.context, dict) and SERIALIZATION_METHODS_DUMP in info.context + + +def serialize_with_info( + serialize: Callable[[Any], Any], handler: Any, info: core_schema.SerializationInfo +) -> Any: + token = _exclude_none.set(info.exclude_none) + filtered_dump_token = _filtered_dump.set( + info.include is not None + or bool(info.exclude) + or info.exclude_unset + or info.exclude_defaults + ) + by_alias_token = _by_alias.set(info.by_alias) + serialization_methods_dump_token = _serialization_methods_dump.set( + _is_serialization_methods_dump(info) + ) + try: + return serialize(handler) + finally: + _serialization_methods_dump.reset(serialization_methods_dump_token) + _by_alias.reset(by_alias_token) + _filtered_dump.reset(filtered_dump_token) + _exclude_none.reset(token) + + +def current_exclude_none() -> Optional[bool]: + """Return the exclude_none option of the enclosing serialize_with_info call, or None outside of one.""" + return _exclude_none.get() + + +def current_filtered_dump() -> bool: + """Return whether the enclosing serialize_with_info call applies include, exclude, exclude_unset or exclude_defaults.""" + return _filtered_dump.get() + + +def current_by_alias() -> Optional[bool]: + """Return the by_alias option of the enclosing serialize_with_info call, or None outside of one.""" + return _by_alias.get() + + +def current_serialization_methods_dump() -> bool: + """Return whether the enclosing serialize_with_info call comes from to_dict() or to_json().""" + return _serialization_methods_dump.get() + + +def _unrecognized_serialization(cls: Type[Union[str, int]]) -> core_schema.PlainSerializerFunctionSerSchema: + def serialize(value: Any, info: core_schema.SerializationInfo) -> Any: + # Decline other values so union serialization tries the remaining members + if not isinstance(value, cls): + raise PydanticSerializationUnexpectedValue(f"Expected {cls.__name__}") + if not info.mode_is_json() and not _is_serialization_methods_dump(info): + return value + return str(value) if isinstance(value, str) else int(value) + + return core_schema.plain_serializer_function_ser_schema(serialize, info_arg=True) + + class UnrecognizedStr(str): @classmethod def __get_pydantic_core_schema__(cls, _source_type: Any, _handler: Any) -> core_schema.CoreSchema: @@ -190,9 +184,7 @@ def validate_lax(v: Any) -> 'UnrecognizedStr': core_schema.no_info_plain_validator_function(validate_lax) ]), strict_schema=core_schema.none_schema(), # Always fails in strict mode - serialization=core_schema.plain_serializer_function_ser_schema( - str - ), + serialization=_unrecognized_serialization(cls), ) @@ -211,7 +203,5 @@ def validate_lax(v: Any) -> 'UnrecognizedInt': core_schema.no_info_plain_validator_function(validate_lax) ]), strict_schema=core_schema.none_schema(), # Always fails in strict mode - serialization=core_schema.plain_serializer_function_ser_schema( - int - ), + serialization=_unrecognized_serialization(cls), ) diff --git a/google/genai/_gaos/types/credentials/credential.py b/google/genai/_gaos/types/credentials/credential.py index d9bd924ad5..d205ab3a86 100644 --- a/google/genai/_gaos/types/credentials/credential.py +++ b/google/genai/_gaos/types/credentials/credential.py @@ -18,7 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from datetime import datetime from pydantic import model_serializer from typing import Literal, Optional, Union @@ -80,17 +91,34 @@ class Credential(BaseModel): r"""Output only. The timestamp when the credential was last updated.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["create_time", "status", "type", "update_time"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/credentials/credentiallistresponse.py b/google/genai/_gaos/types/credentials/credentiallistresponse.py index 1ab56bbee2..981d5f3fd7 100644 --- a/google/genai/_gaos/types/credentials/credentiallistresponse.py +++ b/google/genai/_gaos/types/credentials/credentiallistresponse.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .credential import Credential, CredentialTypedDict from pydantic import model_serializer from typing import List, Optional @@ -36,17 +41,34 @@ class CredentialListResponse(BaseModel): next_page_token: Optional[str] = None @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["credentials", "next_page_token"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/credentials/environmentvariableconfig.py b/google/genai/_gaos/types/credentials/environmentvariableconfig.py index 5917c42646..b28392d1dd 100644 --- a/google/genai/_gaos/types/credentials/environmentvariableconfig.py +++ b/google/genai/_gaos/types/credentials/environmentvariableconfig.py @@ -18,13 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .injectionlocation_enum import InjectionLocationEnum import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional, Union +from typing import Any, List, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict @@ -97,19 +102,39 @@ class EnvironmentVariableConfig(BaseModel): pydantic.Field(alias="type"), ] = "environment_variable" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["trusted_domains"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/credentials/environmentvariableupdateconfig.py b/google/genai/_gaos/types/credentials/environmentvariableupdateconfig.py index 7623b0ef17..8488df1b72 100644 --- a/google/genai/_gaos/types/credentials/environmentvariableupdateconfig.py +++ b/google/genai/_gaos/types/credentials/environmentvariableupdateconfig.py @@ -18,13 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .injectionlocation_enum import InjectionLocationEnum import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional, Union +from typing import Any, List, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict @@ -98,19 +103,39 @@ class EnvironmentVariableUpdateConfig(BaseModel): returned in responses. """ + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["injection_location", "trusted_domains", "value"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/credentials/httpbearerconfig.py b/google/genai/_gaos/types/credentials/httpbearerconfig.py index c334f31f02..3fcb3e0f09 100644 --- a/google/genai/_gaos/types/credentials/httpbearerconfig.py +++ b/google/genai/_gaos/types/credentials/httpbearerconfig.py @@ -18,12 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -69,19 +74,39 @@ class HTTPBearerConfig(BaseModel): pydantic.Field(alias="type"), ] = "bearer_token" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["header_name", "prefix"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/credentials/httpbearerupdateconfig.py b/google/genai/_gaos/types/credentials/httpbearerupdateconfig.py index 34e94f8802..256aa5e6b5 100644 --- a/google/genai/_gaos/types/credentials/httpbearerupdateconfig.py +++ b/google/genai/_gaos/types/credentials/httpbearerupdateconfig.py @@ -18,12 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -66,19 +71,39 @@ class HTTPBearerUpdateConfig(BaseModel): pydantic.Field(alias="type"), ] = "bearer_token" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["header_name", "prefix", "token"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/credentials/oauth2config.py b/google/genai/_gaos/types/credentials/oauth2config.py index 45e40ad6ae..ac132fcb87 100644 --- a/google/genai/_gaos/types/credentials/oauth2config.py +++ b/google/genai/_gaos/types/credentials/oauth2config.py @@ -18,12 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional +from typing import Any, List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -69,19 +74,39 @@ class OAuth2Config(BaseModel): pydantic.Field(alias="type"), ] = "oauth2" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["scopes"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/credentials/oauth2updateconfig.py b/google/genai/_gaos/types/credentials/oauth2updateconfig.py index a7fb9d60a8..179fff7f2f 100644 --- a/google/genai/_gaos/types/credentials/oauth2updateconfig.py +++ b/google/genai/_gaos/types/credentials/oauth2updateconfig.py @@ -18,12 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional +from typing import Any, List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -66,21 +71,41 @@ class OAuth2UpdateConfig(BaseModel): pydantic.Field(alias="type"), ] = "oauth2" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( ["client_id", "client_secret", "refresh_token", "scopes", "token_url"] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/environments/createenvironmentrequest.py b/google/genai/_gaos/types/environments/createenvironmentrequest.py index 7b91432048..dbd81e43b5 100644 --- a/google/genai/_gaos/types/environments/createenvironmentrequest.py +++ b/google/genai/_gaos/types/environments/createenvironmentrequest.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..interactions import ( environmentnetworkegressallowlist as interactions_environmentnetworkegressallowlist, source as interactions_source, @@ -81,17 +86,34 @@ class CreateEnvironmentRequest(BaseModel): r"""Sources to be mounted into the environment.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["from_environment", "network", "sources"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/environments/environment.py b/google/genai/_gaos/types/environments/environment.py index 49f611598c..f7ec552282 100644 --- a/google/genai/_gaos/types/environments/environment.py +++ b/google/genai/_gaos/types/environments/environment.py @@ -18,8 +18,19 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) from ...utils import serialize_int, validate_int +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..interactions import ( environmentnetworkegressallowlist as interactions_environmentnetworkegressallowlist, source as interactions_source, @@ -138,6 +149,9 @@ class Environment(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -151,15 +165,29 @@ def serialize_model(self, handler): "updated", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/environments/environmentfile.py b/google/genai/_gaos/types/environments/environmentfile.py index 4897d9c244..8751cdc9a9 100644 --- a/google/genai/_gaos/types/environments/environmentfile.py +++ b/google/genai/_gaos/types/environments/environmentfile.py @@ -18,8 +18,19 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) from ...utils import serialize_int, validate_int +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from datetime import datetime from pydantic import model_serializer from pydantic.functional_serializers import PlainSerializer @@ -100,19 +111,36 @@ class EnvironmentFile(BaseModel): r"""Output only. The type of the entry.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( ["created", "mime_type", "modified", "name", "path", "size_bytes", "type"] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/environments/getenvironmentfilesresponse.py b/google/genai/_gaos/types/environments/getenvironmentfilesresponse.py index acbcbb2751..c39d37bfaf 100644 --- a/google/genai/_gaos/types/environments/getenvironmentfilesresponse.py +++ b/google/genai/_gaos/types/environments/getenvironmentfilesresponse.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .environmentfile import EnvironmentFile, EnvironmentFileTypedDict from pydantic import model_serializer from typing import List, Optional @@ -56,17 +61,34 @@ class GetEnvironmentFilesResponse(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["files", "next_page_token"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/environments/listenvironmentsresponse.py b/google/genai/_gaos/types/environments/listenvironmentsresponse.py index 4eb4a1da10..64dcfa9d44 100644 --- a/google/genai/_gaos/types/environments/listenvironmentsresponse.py +++ b/google/genai/_gaos/types/environments/listenvironmentsresponse.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .environment import Environment, EnvironmentTypedDict from pydantic import model_serializer from typing import List, Optional @@ -44,17 +49,34 @@ class ListEnvironmentsResponse(BaseModel): r"""Pagination token.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["environments", "next_page_token"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/allowedtools.py b/google/genai/_gaos/types/interactions/allowedtools.py index 1ec5733d13..ca04fe09c4 100644 --- a/google/genai/_gaos/types/interactions/allowedtools.py +++ b/google/genai/_gaos/types/interactions/allowedtools.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .toolchoicetype import ToolChoiceType from pydantic import model_serializer from typing import List, Optional @@ -42,17 +47,34 @@ class AllowedTools(BaseModel): r"""The names of the allowed tools.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["mode", "tools"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/allowlistentry.py b/google/genai/_gaos/types/interactions/allowlistentry.py index 324c8b4ecd..6860bc31e6 100644 --- a/google/genai/_gaos/types/interactions/allowlistentry.py +++ b/google/genai/_gaos/types/interactions/allowlistentry.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Dict, List, Optional, Union from typing_extensions import NotRequired, TypeAliasType, TypedDict @@ -62,17 +67,34 @@ class AllowlistEntry(BaseModel): r"""Headers to inject on all outbound requests matching this domain. Accepts a single dict or a list of dicts. The egress proxy injects these automatically.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["credential", "transform"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/annotation.py b/google/genai/_gaos/types/interactions/annotation.py index ab69453b71..c306040e8e 100644 --- a/google/genai/_gaos/types/interactions/annotation.py +++ b/google/genai/_gaos/types/interactions/annotation.py @@ -26,7 +26,7 @@ from .urlcitation import URLCitation, URLCitationParam from .wordinfo import WordInfo, WordInfoParam from functools import partial -from pydantic import ConfigDict +from pydantic import ConfigDict, model_serializer from pydantic.functional_validators import BeforeValidator from typing import Any, Literal, Union from typing_extensions import Annotated, TypeAliasType @@ -54,6 +54,10 @@ class UnknownAnnotation(BaseModel): model_config = ConfigDict(frozen=True) + @model_serializer + def serialize_model(self) -> Any: + return self.raw + _ANNOTATION_VARIANTS: dict[str, Any] = { "file_citation": FileCitation, diff --git a/google/genai/_gaos/types/interactions/antigravityagentconfig.py b/google/genai/_gaos/types/interactions/antigravityagentconfig.py index b6fcab9982..9aae23880a 100644 --- a/google/genai/_gaos/types/interactions/antigravityagentconfig.py +++ b/google/genai/_gaos/types/interactions/antigravityagentconfig.py @@ -18,13 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import serialize_int, validate_const, validate_int +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_serializers import PlainSerializer from pydantic.functional_validators import AfterValidator, BeforeValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -64,19 +69,39 @@ class AntigravityAgentConfig(BaseModel): pydantic.Field(alias="type"), ] = "antigravity" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["max_total_tokens", "model"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/argumentsdelta.py b/google/genai/_gaos/types/interactions/argumentsdelta.py index 391ccb9d20..df7d281608 100644 --- a/google/genai/_gaos/types/interactions/argumentsdelta.py +++ b/google/genai/_gaos/types/interactions/argumentsdelta.py @@ -18,12 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -43,19 +48,39 @@ class ArgumentsDelta(BaseModel): pydantic.Field(alias="type"), ] = "arguments_delta" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["arguments"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/audiocontent.py b/google/genai/_gaos/types/interactions/audiocontent.py index 6270ce303b..f7b645d069 100644 --- a/google/genai/_gaos/types/interactions/audiocontent.py +++ b/google/genai/_gaos/types/interactions/audiocontent.py @@ -24,12 +24,19 @@ BaseModel, UNSET_SENTINEL, UnrecognizedStr, + current_exclude_none, + serialize_with_info, ) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -93,19 +100,39 @@ class AudioContent(BaseModel): uri: Optional[str] = None r"""The URI of the audio.""" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["channels", "data", "mime_type", "sample_rate", "uri"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/audiodelta.py b/google/genai/_gaos/types/interactions/audiodelta.py index d6495a5427..c7aecb27e8 100644 --- a/google/genai/_gaos/types/interactions/audiodelta.py +++ b/google/genai/_gaos/types/interactions/audiodelta.py @@ -18,12 +18,23 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -86,21 +97,41 @@ class AudioDelta(BaseModel): uri: Optional[str] = None + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( ["channels", "data", "mime_type", "rate", "sample_rate", "uri"] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/audioresponseformat.py b/google/genai/_gaos/types/interactions/audioresponseformat.py index 972b9e3ff8..d151a1368c 100644 --- a/google/genai/_gaos/types/interactions/audioresponseformat.py +++ b/google/genai/_gaos/types/interactions/audioresponseformat.py @@ -18,12 +18,23 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -89,19 +100,39 @@ class AudioResponseFormat(BaseModel): pydantic.Field(alias="type"), ] = "audio" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["bit_rate", "delivery", "mime_type", "sample_rate"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/codeexecution.py b/google/genai/_gaos/types/interactions/codeexecution.py index d0261e37d1..eb6ef31318 100644 --- a/google/genai/_gaos/types/interactions/codeexecution.py +++ b/google/genai/_gaos/types/interactions/codeexecution.py @@ -22,7 +22,7 @@ from ...utils import validate_const import pydantic from pydantic.functional_validators import AfterValidator -from typing import Literal +from typing import Any, Literal from typing_extensions import Annotated, TypedDict @@ -42,6 +42,9 @@ class CodeExecution(BaseModel): pydantic.Field(alias="type"), ] = "code_execution" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + try: CodeExecution.model_rebuild() diff --git a/google/genai/_gaos/types/interactions/codeexecutioncallarguments.py b/google/genai/_gaos/types/interactions/codeexecutioncallarguments.py index 32022ebfb4..74a0022936 100644 --- a/google/genai/_gaos/types/interactions/codeexecutioncallarguments.py +++ b/google/genai/_gaos/types/interactions/codeexecutioncallarguments.py @@ -18,7 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Literal, Optional, Union from typing_extensions import NotRequired, TypedDict @@ -53,17 +64,34 @@ class CodeExecutionCallArguments(BaseModel): r"""Programming language of the `code`.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["code", "language"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/codeexecutioncalldelta.py b/google/genai/_gaos/types/interactions/codeexecutioncalldelta.py index 9d6c95f624..88aab0f2df 100644 --- a/google/genai/_gaos/types/interactions/codeexecutioncalldelta.py +++ b/google/genai/_gaos/types/interactions/codeexecutioncalldelta.py @@ -18,8 +18,13 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .codeexecutioncallarguments import ( CodeExecutionCallArguments, CodeExecutionCallArgumentsParam, @@ -27,7 +32,7 @@ import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -54,19 +59,39 @@ class CodeExecutionCallDelta(BaseModel): pydantic.Field(alias="type"), ] = "code_execution_call" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/codeexecutioncallstep.py b/google/genai/_gaos/types/interactions/codeexecutioncallstep.py index 0d31938a8b..5c2fc7ad09 100644 --- a/google/genai/_gaos/types/interactions/codeexecutioncallstep.py +++ b/google/genai/_gaos/types/interactions/codeexecutioncallstep.py @@ -18,8 +18,20 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import Base64EncodedString, Base64FileInput, BaseModel, UNSET_SENTINEL +from .. import ( + Base64EncodedString, + Base64FileInput, + BaseModel, + UNSET_SENTINEL, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .codeexecutioncallarguments import ( CodeExecutionCallArguments, CodeExecutionCallArgumentsParam, @@ -27,7 +39,7 @@ import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -63,19 +75,39 @@ class CodeExecutionCallStep(BaseModel): pydantic.Field(alias="type"), ] = "code_execution_call" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/codeexecutionresultdelta.py b/google/genai/_gaos/types/interactions/codeexecutionresultdelta.py index d014d83678..291238ce2f 100644 --- a/google/genai/_gaos/types/interactions/codeexecutionresultdelta.py +++ b/google/genai/_gaos/types/interactions/codeexecutionresultdelta.py @@ -18,12 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -51,19 +56,39 @@ class CodeExecutionResultDelta(BaseModel): pydantic.Field(alias="type"), ] = "code_execution_result" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["is_error", "signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/codeexecutionresultstep.py b/google/genai/_gaos/types/interactions/codeexecutionresultstep.py index c506a2a818..a45e54e001 100644 --- a/google/genai/_gaos/types/interactions/codeexecutionresultstep.py +++ b/google/genai/_gaos/types/interactions/codeexecutionresultstep.py @@ -18,12 +18,24 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import Base64EncodedString, Base64FileInput, BaseModel, UNSET_SENTINEL +from .. import ( + Base64EncodedString, + Base64FileInput, + BaseModel, + UNSET_SENTINEL, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -64,19 +76,39 @@ class CodeExecutionResultStep(BaseModel): pydantic.Field(alias="type"), ] = "code_execution_result" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["is_error", "signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/codemenderagentconfig.py b/google/genai/_gaos/types/interactions/codemenderagentconfig.py index cccaebd791..6c95b2699c 100644 --- a/google/genai/_gaos/types/interactions/codemenderagentconfig.py +++ b/google/genai/_gaos/types/interactions/codemenderagentconfig.py @@ -18,15 +18,20 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .findrequest import FindRequest, FindRequestParam from .fixrequest import FixRequest, FixRequestParam from .sessionconfig import SessionConfig, SessionConfigParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -87,21 +92,41 @@ class CodeMenderAgentConfig(BaseModel): pydantic.Field(alias="type"), ] = "code-mender" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( ["find_request", "fix_request", "model", "session_config", "session_id"] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/computeruse.py b/google/genai/_gaos/types/interactions/computeruse.py index fcee49797f..19bd209e31 100644 --- a/google/genai/_gaos/types/interactions/computeruse.py +++ b/google/genai/_gaos/types/interactions/computeruse.py @@ -18,12 +18,23 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional, Union +from typing import Any, List, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -92,7 +103,13 @@ class ComputerUse(BaseModel): pydantic.Field(alias="type"), ] = "computer_use" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -102,16 +119,30 @@ def serialize_model(self, handler): "excluded_predefined_functions", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/content.py b/google/genai/_gaos/types/interactions/content.py index 03a112a9ed..fa39e04769 100644 --- a/google/genai/_gaos/types/interactions/content.py +++ b/google/genai/_gaos/types/interactions/content.py @@ -26,7 +26,7 @@ from .textcontent import TextContent, TextContentParam from .videocontent import VideoContent, VideoContentParam from functools import partial -from pydantic import ConfigDict +from pydantic import ConfigDict, model_serializer from pydantic.functional_validators import BeforeValidator from typing import Any, Literal, Union from typing_extensions import Annotated, TypeAliasType @@ -54,6 +54,10 @@ class UnknownContent(BaseModel): model_config = ConfigDict(frozen=True) + @model_serializer + def serialize_model(self) -> Any: + return self.raw + _CONTENT_VARIANTS: dict[str, Any] = { "audio": AudioContent, diff --git a/google/genai/_gaos/types/interactions/createagentinteraction.py b/google/genai/_gaos/types/interactions/createagentinteraction.py index 1a8907717c..a9fd333e4e 100644 --- a/google/genai/_gaos/types/interactions/createagentinteraction.py +++ b/google/genai/_gaos/types/interactions/createagentinteraction.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .agentoption import AgentOption from .antigravityagentconfig import AntigravityAgentConfig, AntigravityAgentConfigParam from .codemenderagentconfig import CodeMenderAgentConfig, CodeMenderAgentConfigParam @@ -235,6 +240,9 @@ class CreateAgentInteraction(BaseModel): r"""Message for configuring webhook events for a request.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -257,15 +265,29 @@ def serialize_model(self, handler): "webhook_config", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/createmodelinteraction.py b/google/genai/_gaos/types/interactions/createmodelinteraction.py index 8964a0c2b1..e44cbacb8a 100644 --- a/google/genai/_gaos/types/interactions/createmodelinteraction.py +++ b/google/genai/_gaos/types/interactions/createmodelinteraction.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .environment import Environment, EnvironmentParam from .generationconfig import GenerationConfig, GenerationConfigParam from .interactionsinput import InteractionsInput, InteractionsInputParam @@ -215,6 +220,9 @@ class CreateModelInteraction(BaseModel): r"""Message for configuring webhook events for a request.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self._serialize_model, handler, info) + def _serialize_model(self, handler): optional_fields = set( [ @@ -238,15 +246,29 @@ def _serialize_model(self, handler): "webhook_config", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/deepresearchagentconfig.py b/google/genai/_gaos/types/interactions/deepresearchagentconfig.py index 4eec35d913..7ecac25128 100644 --- a/google/genai/_gaos/types/interactions/deepresearchagentconfig.py +++ b/google/genai/_gaos/types/interactions/deepresearchagentconfig.py @@ -18,13 +18,24 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .thinkingsummaries import ThinkingSummaries import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -80,7 +91,13 @@ class DeepResearchAgentConfig(BaseModel): visualization: Optional[Visualization] = None r"""Whether to include visualizations in the response.""" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -90,16 +107,30 @@ def serialize_model(self, handler): "visualization", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/documentcontent.py b/google/genai/_gaos/types/interactions/documentcontent.py index 565caf3097..d16c40e9c7 100644 --- a/google/genai/_gaos/types/interactions/documentcontent.py +++ b/google/genai/_gaos/types/interactions/documentcontent.py @@ -24,12 +24,19 @@ BaseModel, UNSET_SENTINEL, UnrecognizedStr, + current_exclude_none, + serialize_with_info, ) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -72,19 +79,39 @@ class DocumentContent(BaseModel): uri: Optional[str] = None r"""The URI of the document.""" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["data", "mime_type", "uri"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/documentdelta.py b/google/genai/_gaos/types/interactions/documentdelta.py index b2b957479f..eb608e7e36 100644 --- a/google/genai/_gaos/types/interactions/documentdelta.py +++ b/google/genai/_gaos/types/interactions/documentdelta.py @@ -18,12 +18,23 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -55,19 +66,39 @@ class DocumentDelta(BaseModel): uri: Optional[str] = None + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["data", "mime_type", "uri"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/dynamicagentconfig.py b/google/genai/_gaos/types/interactions/dynamicagentconfig.py index dfbe21b352..c19a2feedc 100644 --- a/google/genai/_gaos/types/interactions/dynamicagentconfig.py +++ b/google/genai/_gaos/types/interactions/dynamicagentconfig.py @@ -54,6 +54,9 @@ def additional_properties(self): def additional_properties(self, value): self.__pydantic_extra__ = value # pyright: ignore[reportIncompatibleVariableOverride] + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + try: DynamicAgentConfig.model_rebuild() diff --git a/google/genai/_gaos/types/interactions/environment.py b/google/genai/_gaos/types/interactions/environment.py index 544fbf51c3..534eb4360e 100644 --- a/google/genai/_gaos/types/interactions/environment.py +++ b/google/genai/_gaos/types/interactions/environment.py @@ -18,8 +18,19 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .environmentnetworkegressallowlist import ( EnvironmentNetworkEgressAllowlist, EnvironmentNetworkEgressAllowlistParam, @@ -29,7 +40,7 @@ import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Dict, List, Literal, Optional, Union +from typing import Any, Dict, List, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict @@ -90,19 +101,39 @@ class Environment(BaseModel): pydantic.Field(alias="type"), ] = "remote" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["env", "environment_id", "network", "sources"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/environmentnetworkegressallowlist.py b/google/genai/_gaos/types/interactions/environmentnetworkegressallowlist.py index d374d534d9..3fd34fde13 100644 --- a/google/genai/_gaos/types/interactions/environmentnetworkegressallowlist.py +++ b/google/genai/_gaos/types/interactions/environmentnetworkegressallowlist.py @@ -18,7 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .allowlistentry import AllowlistEntry, AllowlistEntryParam from pydantic import model_serializer from typing import List, Literal, Optional, Union @@ -60,17 +71,34 @@ class EnvironmentNetworkEgressAllowlist(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["allowlist"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/envvar.py b/google/genai/_gaos/types/interactions/envvar.py index 6605130c89..fe5b180cc8 100644 --- a/google/genai/_gaos/types/interactions/envvar.py +++ b/google/genai/_gaos/types/interactions/envvar.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict @@ -43,17 +48,34 @@ class EnvVar(BaseModel): r"""Direct string value for plain environment variables.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["credential", "value"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/error.py b/google/genai/_gaos/types/interactions/error.py index 0653db1b58..c0c0f50282 100644 --- a/google/genai/_gaos/types/interactions/error.py +++ b/google/genai/_gaos/types/interactions/error.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict @@ -43,17 +48,34 @@ class Error(BaseModel): r"""A human-readable error message.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["code", "message"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/errorevent.py b/google/genai/_gaos/types/interactions/errorevent.py index a4b4e76001..66c5afc8f3 100644 --- a/google/genai/_gaos/types/interactions/errorevent.py +++ b/google/genai/_gaos/types/interactions/errorevent.py @@ -18,13 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .error import Error, ErrorTypedDict import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -52,19 +57,39 @@ class ErrorEvent(BaseModel): pydantic.Field(alias="event_type"), ] = "error" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["event_type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["error", "event_id"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/exaaisearchconfig.py b/google/genai/_gaos/types/interactions/exaaisearchconfig.py index 214638d60d..83a956e45a 100644 --- a/google/genai/_gaos/types/interactions/exaaisearchconfig.py +++ b/google/genai/_gaos/types/interactions/exaaisearchconfig.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Any, Dict, Optional from typing_extensions import NotRequired, TypedDict @@ -43,17 +48,34 @@ class ExaAISearchConfig(BaseModel): r"""Optional. This field can be used to pass any parameter from the Exa.ai Search API.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["custom_config"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/filecitation.py b/google/genai/_gaos/types/interactions/filecitation.py index 14436c5de4..879a348ac4 100644 --- a/google/genai/_gaos/types/interactions/filecitation.py +++ b/google/genai/_gaos/types/interactions/filecitation.py @@ -18,8 +18,13 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator @@ -89,7 +94,13 @@ class FileCitation(BaseModel): pydantic.Field(alias="type"), ] = "file_citation" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -103,16 +114,30 @@ def serialize_model(self, handler): "start_index", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/filecontent.py b/google/genai/_gaos/types/interactions/filecontent.py index f4f4e72f52..7352f297b7 100644 --- a/google/genai/_gaos/types/interactions/filecontent.py +++ b/google/genai/_gaos/types/interactions/filecontent.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict @@ -43,17 +48,34 @@ class FileContent(BaseModel): r"""The relative path of the file from the project root.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["content", "path"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/filesearch.py b/google/genai/_gaos/types/interactions/filesearch.py index 11e80c2913..9c5a15b1f5 100644 --- a/google/genai/_gaos/types/interactions/filesearch.py +++ b/google/genai/_gaos/types/interactions/filesearch.py @@ -18,12 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional +from typing import Any, List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -58,19 +63,39 @@ class FileSearch(BaseModel): pydantic.Field(alias="type"), ] = "file_search" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["file_search_store_names", "metadata_filter", "top_k"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/filesearchcalldelta.py b/google/genai/_gaos/types/interactions/filesearchcalldelta.py index 259b72cd2b..bf01ef0d3c 100644 --- a/google/genai/_gaos/types/interactions/filesearchcalldelta.py +++ b/google/genai/_gaos/types/interactions/filesearchcalldelta.py @@ -18,12 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -45,19 +50,39 @@ class FileSearchCallDelta(BaseModel): pydantic.Field(alias="type"), ] = "file_search_call" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/filesearchcallstep.py b/google/genai/_gaos/types/interactions/filesearchcallstep.py index 5d13a301c8..23eb957ac2 100644 --- a/google/genai/_gaos/types/interactions/filesearchcallstep.py +++ b/google/genai/_gaos/types/interactions/filesearchcallstep.py @@ -18,12 +18,24 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import Base64EncodedString, Base64FileInput, BaseModel, UNSET_SENTINEL +from .. import ( + Base64EncodedString, + Base64FileInput, + BaseModel, + UNSET_SENTINEL, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -54,19 +66,39 @@ class FileSearchCallStep(BaseModel): pydantic.Field(alias="type"), ] = "file_search_call" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/filesearchresultdelta.py b/google/genai/_gaos/types/interactions/filesearchresultdelta.py index cf32e6bfbc..445689724a 100644 --- a/google/genai/_gaos/types/interactions/filesearchresultdelta.py +++ b/google/genai/_gaos/types/interactions/filesearchresultdelta.py @@ -18,13 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .filesearchresult import FileSearchResult, FileSearchResultTypedDict import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional +from typing import Any, List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -49,19 +54,39 @@ class FileSearchResultDelta(BaseModel): pydantic.Field(alias="type"), ] = "file_search_result" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/filesearchresultstep.py b/google/genai/_gaos/types/interactions/filesearchresultstep.py index d8496ddad8..ea1c0d1255 100644 --- a/google/genai/_gaos/types/interactions/filesearchresultstep.py +++ b/google/genai/_gaos/types/interactions/filesearchresultstep.py @@ -18,12 +18,24 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import Base64EncodedString, Base64FileInput, BaseModel, UNSET_SENTINEL +from .. import ( + Base64EncodedString, + Base64FileInput, + BaseModel, + UNSET_SENTINEL, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -54,19 +66,39 @@ class FileSearchResultStep(BaseModel): pydantic.Field(alias="type"), ] = "file_search_result" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/filter_.py b/google/genai/_gaos/types/interactions/filter_.py index a782b8a9fe..22bf39a3e5 100644 --- a/google/genai/_gaos/types/interactions/filter_.py +++ b/google/genai/_gaos/types/interactions/filter_.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict @@ -56,6 +61,9 @@ class Filter(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -64,15 +72,29 @@ def serialize_model(self, handler): "vector_similarity_threshold", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/findrequest.py b/google/genai/_gaos/types/interactions/findrequest.py index 0952b05a3b..9cc3930f87 100644 --- a/google/genai/_gaos/types/interactions/findrequest.py +++ b/google/genai/_gaos/types/interactions/findrequest.py @@ -18,7 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .filecontent import FileContent, FileContentParam from pydantic import model_serializer from typing import List, Literal, Optional, Union @@ -78,17 +89,34 @@ class FindRequest(BaseModel): r"""A list of source files to provide as context for the scan.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["description", "finding_id", "mode", "source_files"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/fixrequest.py b/google/genai/_gaos/types/interactions/fixrequest.py index 310b4fe4a4..74a974bb27 100644 --- a/google/genai/_gaos/types/interactions/fixrequest.py +++ b/google/genai/_gaos/types/interactions/fixrequest.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .filecontent import FileContent, FileContentParam from pydantic import model_serializer from typing import List, Optional @@ -65,17 +70,34 @@ class FixRequest(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["description", "finding_id", "source_files"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/function.py b/google/genai/_gaos/types/interactions/function.py index 58e95ddfed..00cde6edd8 100644 --- a/google/genai/_gaos/types/interactions/function.py +++ b/google/genai/_gaos/types/interactions/function.py @@ -18,8 +18,13 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator @@ -66,19 +71,39 @@ class Function(BaseModel): pydantic.Field(alias="type"), ] = "function" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["description", "name", "parameters"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/functioncallstep.py b/google/genai/_gaos/types/interactions/functioncallstep.py index 5f15e0d3e2..b72ac5e0ba 100644 --- a/google/genai/_gaos/types/interactions/functioncallstep.py +++ b/google/genai/_gaos/types/interactions/functioncallstep.py @@ -57,6 +57,9 @@ class FunctionCallStep(BaseModel): pydantic.Field(alias="type"), ] = "function_call" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + try: FunctionCallStep.model_rebuild() diff --git a/google/genai/_gaos/types/interactions/functionresultdelta.py b/google/genai/_gaos/types/interactions/functionresultdelta.py index 48a900658a..acc798efdc 100644 --- a/google/genai/_gaos/types/interactions/functionresultdelta.py +++ b/google/genai/_gaos/types/interactions/functionresultdelta.py @@ -18,8 +18,13 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .functionresultsubcontent import ( FunctionResultSubcontent, FunctionResultSubcontentParam, @@ -27,7 +32,7 @@ import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional, Union +from typing import Any, List, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict @@ -73,19 +78,39 @@ class FunctionResultDelta(BaseModel): pydantic.Field(alias="type"), ] = "function_result" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["is_error", "name"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/functionresultstep.py b/google/genai/_gaos/types/interactions/functionresultstep.py index 615919c011..4055149dda 100644 --- a/google/genai/_gaos/types/interactions/functionresultstep.py +++ b/google/genai/_gaos/types/interactions/functionresultstep.py @@ -18,8 +18,13 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .functionresultsubcontent import ( FunctionResultSubcontent, FunctionResultSubcontentParam, @@ -27,7 +32,7 @@ import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional, Union +from typing import Any, List, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict @@ -90,19 +95,39 @@ class FunctionResultStep(BaseModel): pydantic.Field(alias="type"), ] = "function_result" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["is_error", "name"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/functionresultsubcontent.py b/google/genai/_gaos/types/interactions/functionresultsubcontent.py index e49937d060..6cf51b21c5 100644 --- a/google/genai/_gaos/types/interactions/functionresultsubcontent.py +++ b/google/genai/_gaos/types/interactions/functionresultsubcontent.py @@ -26,7 +26,7 @@ from .textcontent import TextContent, TextContentParam from .videocontent import VideoContent, VideoContentParam from functools import partial -from pydantic import ConfigDict +from pydantic import ConfigDict, model_serializer from pydantic.functional_validators import BeforeValidator from typing import Any, Literal, Union from typing_extensions import Annotated, TypeAliasType @@ -53,6 +53,10 @@ class UnknownFunctionResultSubcontent(BaseModel): model_config = ConfigDict(frozen=True) + @model_serializer + def serialize_model(self) -> Any: + return self.raw + _FUNCTION_RESULT_SUBCONTENT_VARIANTS: dict[str, Any] = { "audio": AudioContent, diff --git a/google/genai/_gaos/types/interactions/generationconfig.py b/google/genai/_gaos/types/interactions/generationconfig.py index e09a5bbd59..5eaa075634 100644 --- a/google/genai/_gaos/types/interactions/generationconfig.py +++ b/google/genai/_gaos/types/interactions/generationconfig.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .imageconfig import ImageConfig, ImageConfigParam from .speakerconfig import SpeakerConfig, SpeakerConfigParam from .speechconfig import SpeechConfig, SpeechConfigParam @@ -136,6 +141,9 @@ class GenerationConfig(BaseModel): r"""Configuration options for video generation.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -153,15 +161,29 @@ def serialize_model(self, handler): "video_config", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/googlemaps.py b/google/genai/_gaos/types/interactions/googlemaps.py index c209d0fd8c..6a7b40e5a9 100644 --- a/google/genai/_gaos/types/interactions/googlemaps.py +++ b/google/genai/_gaos/types/interactions/googlemaps.py @@ -18,12 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -62,19 +67,39 @@ class GoogleMaps(BaseModel): pydantic.Field(alias="type"), ] = "google_maps" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["enable_widget", "latitude", "longitude"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/googlemapscallarguments.py b/google/genai/_gaos/types/interactions/googlemapscallarguments.py index 38c22b2b6c..683b72291b 100644 --- a/google/genai/_gaos/types/interactions/googlemapscallarguments.py +++ b/google/genai/_gaos/types/interactions/googlemapscallarguments.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict @@ -38,17 +43,34 @@ class GoogleMapsCallArguments(BaseModel): r"""The queries to be executed.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["queries"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/googlemapscalldelta.py b/google/genai/_gaos/types/interactions/googlemapscalldelta.py index e7889eb12c..f4ace47b48 100644 --- a/google/genai/_gaos/types/interactions/googlemapscalldelta.py +++ b/google/genai/_gaos/types/interactions/googlemapscalldelta.py @@ -18,8 +18,13 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .googlemapscallarguments import ( GoogleMapsCallArguments, GoogleMapsCallArgumentsParam, @@ -27,7 +32,7 @@ import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -54,19 +59,39 @@ class GoogleMapsCallDelta(BaseModel): pydantic.Field(alias="type"), ] = "google_maps_call" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["arguments", "signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/googlemapscallstep.py b/google/genai/_gaos/types/interactions/googlemapscallstep.py index c3196e5a12..7c54e99c46 100644 --- a/google/genai/_gaos/types/interactions/googlemapscallstep.py +++ b/google/genai/_gaos/types/interactions/googlemapscallstep.py @@ -18,8 +18,20 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import Base64EncodedString, Base64FileInput, BaseModel, UNSET_SENTINEL +from .. import ( + Base64EncodedString, + Base64FileInput, + BaseModel, + UNSET_SENTINEL, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .googlemapscallarguments import ( GoogleMapsCallArguments, GoogleMapsCallArgumentsParam, @@ -27,7 +39,7 @@ import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -63,19 +75,39 @@ class GoogleMapsCallStep(BaseModel): pydantic.Field(alias="type"), ] = "google_maps_call" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["arguments", "signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/googlemapsresult.py b/google/genai/_gaos/types/interactions/googlemapsresult.py index 5bf4a538d7..10c954ddbd 100644 --- a/google/genai/_gaos/types/interactions/googlemapsresult.py +++ b/google/genai/_gaos/types/interactions/googlemapsresult.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .googlemapsresultplaces import GoogleMapsResultPlaces, GoogleMapsResultPlacesParam from pydantic import model_serializer from typing import List, Optional @@ -40,17 +45,34 @@ class GoogleMapsResult(BaseModel): widget_context_token: Optional[str] = None @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["places", "widget_context_token"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/googlemapsresultdelta.py b/google/genai/_gaos/types/interactions/googlemapsresultdelta.py index e5386db09d..8238183a8a 100644 --- a/google/genai/_gaos/types/interactions/googlemapsresultdelta.py +++ b/google/genai/_gaos/types/interactions/googlemapsresultdelta.py @@ -18,13 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .googlemapsresult import GoogleMapsResult, GoogleMapsResultParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional +from typing import Any, List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -51,19 +56,39 @@ class GoogleMapsResultDelta(BaseModel): pydantic.Field(alias="type"), ] = "google_maps_result" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["result", "signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/googlemapsresultplaces.py b/google/genai/_gaos/types/interactions/googlemapsresultplaces.py index 8eef7b1a0c..9ea5959726 100644 --- a/google/genai/_gaos/types/interactions/googlemapsresultplaces.py +++ b/google/genai/_gaos/types/interactions/googlemapsresultplaces.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .reviewsnippet import ReviewSnippet, ReviewSnippetParam from pydantic import model_serializer from typing import List, Optional @@ -42,17 +47,34 @@ class GoogleMapsResultPlaces(BaseModel): url: Optional[str] = None @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["name", "place_id", "review_snippets", "url"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/googlemapsresultstep.py b/google/genai/_gaos/types/interactions/googlemapsresultstep.py index 950a02d64d..fd8b2e9096 100644 --- a/google/genai/_gaos/types/interactions/googlemapsresultstep.py +++ b/google/genai/_gaos/types/interactions/googlemapsresultstep.py @@ -18,13 +18,25 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import Base64EncodedString, Base64FileInput, BaseModel, UNSET_SENTINEL +from .. import ( + Base64EncodedString, + Base64FileInput, + BaseModel, + UNSET_SENTINEL, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .googlemapsresult import GoogleMapsResult, GoogleMapsResultParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional, Union +from typing import Any, List, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -58,19 +70,39 @@ class GoogleMapsResultStep(BaseModel): pydantic.Field(alias="type"), ] = "google_maps_result" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/googlesearch.py b/google/genai/_gaos/types/interactions/googlesearch.py index b6779e6f3b..319db2c9d0 100644 --- a/google/genai/_gaos/types/interactions/googlesearch.py +++ b/google/genai/_gaos/types/interactions/googlesearch.py @@ -18,12 +18,23 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional, Union +from typing import Any, List, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -58,19 +69,39 @@ class GoogleSearch(BaseModel): pydantic.Field(alias="type"), ] = "google_search" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["search_types"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/googlesearchcallarguments.py b/google/genai/_gaos/types/interactions/googlesearchcallarguments.py index 872c0194a9..7896c4bed6 100644 --- a/google/genai/_gaos/types/interactions/googlesearchcallarguments.py +++ b/google/genai/_gaos/types/interactions/googlesearchcallarguments.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict @@ -38,17 +43,34 @@ class GoogleSearchCallArguments(BaseModel): r"""Web search queries for the following-up web search.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["queries"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/googlesearchcalldelta.py b/google/genai/_gaos/types/interactions/googlesearchcalldelta.py index d18fda78de..09fee7f83b 100644 --- a/google/genai/_gaos/types/interactions/googlesearchcalldelta.py +++ b/google/genai/_gaos/types/interactions/googlesearchcalldelta.py @@ -18,8 +18,13 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .googlesearchcallarguments import ( GoogleSearchCallArguments, GoogleSearchCallArgumentsParam, @@ -27,7 +32,7 @@ import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -54,19 +59,39 @@ class GoogleSearchCallDelta(BaseModel): pydantic.Field(alias="type"), ] = "google_search_call" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/googlesearchcallstep.py b/google/genai/_gaos/types/interactions/googlesearchcallstep.py index edbd7e02c1..d9c25d7875 100644 --- a/google/genai/_gaos/types/interactions/googlesearchcallstep.py +++ b/google/genai/_gaos/types/interactions/googlesearchcallstep.py @@ -24,8 +24,15 @@ BaseModel, UNSET_SENTINEL, UnrecognizedStr, + current_exclude_none, + serialize_with_info, ) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .googlesearchcallarguments import ( GoogleSearchCallArguments, GoogleSearchCallArgumentsParam, @@ -33,7 +40,7 @@ import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -85,19 +92,39 @@ class GoogleSearchCallStep(BaseModel): pydantic.Field(alias="type"), ] = "google_search_call" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["search_type", "signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/googlesearchresult.py b/google/genai/_gaos/types/interactions/googlesearchresult.py index e11a1c3194..966eb65671 100644 --- a/google/genai/_gaos/types/interactions/googlesearchresult.py +++ b/google/genai/_gaos/types/interactions/googlesearchresult.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict @@ -38,17 +43,34 @@ class GoogleSearchResult(BaseModel): r"""Web content snippet that can be embedded in a web page or an app webview.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["search_suggestions"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/googlesearchresultdelta.py b/google/genai/_gaos/types/interactions/googlesearchresultdelta.py index 92fb88bfc9..be6b893572 100644 --- a/google/genai/_gaos/types/interactions/googlesearchresultdelta.py +++ b/google/genai/_gaos/types/interactions/googlesearchresultdelta.py @@ -18,13 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .googlesearchresult import GoogleSearchResult, GoogleSearchResultParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional +from typing import Any, List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -52,19 +57,39 @@ class GoogleSearchResultDelta(BaseModel): pydantic.Field(alias="type"), ] = "google_search_result" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["is_error", "signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/googlesearchresultstep.py b/google/genai/_gaos/types/interactions/googlesearchresultstep.py index 1b6ebba0d5..5ef273ef48 100644 --- a/google/genai/_gaos/types/interactions/googlesearchresultstep.py +++ b/google/genai/_gaos/types/interactions/googlesearchresultstep.py @@ -18,13 +18,25 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import Base64EncodedString, Base64FileInput, BaseModel, UNSET_SENTINEL +from .. import ( + Base64EncodedString, + Base64FileInput, + BaseModel, + UNSET_SENTINEL, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .googlesearchresult import GoogleSearchResult, GoogleSearchResultParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional, Union +from typing import Any, List, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -65,19 +77,39 @@ class GoogleSearchResultStep(BaseModel): pydantic.Field(alias="type"), ] = "google_search_result" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["is_error", "signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/groundingtoolcount.py b/google/genai/_gaos/types/interactions/groundingtoolcount.py index 6bcd509f9c..c2d546433a 100644 --- a/google/genai/_gaos/types/interactions/groundingtoolcount.py +++ b/google/genai/_gaos/types/interactions/groundingtoolcount.py @@ -18,7 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Literal, Optional, Union from typing_extensions import NotRequired, TypedDict @@ -54,17 +65,34 @@ class GroundingToolCount(BaseModel): r"""The grounding tool type associated with the count.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["count", "type"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/hybridsearch.py b/google/genai/_gaos/types/interactions/hybridsearch.py index 5c7f35094f..9d0702acc9 100644 --- a/google/genai/_gaos/types/interactions/hybridsearch.py +++ b/google/genai/_gaos/types/interactions/hybridsearch.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict @@ -42,17 +47,34 @@ class HybridSearch(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["alpha"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/imageconfig.py b/google/genai/_gaos/types/interactions/imageconfig.py index c5693c4193..187b779e92 100644 --- a/google/genai/_gaos/types/interactions/imageconfig.py +++ b/google/genai/_gaos/types/interactions/imageconfig.py @@ -18,7 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Literal, Optional, Union from typing_extensions import NotRequired, TypedDict, deprecated @@ -104,17 +115,34 @@ class ImageConfig(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["aspect_ratio", "image_size"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/imagecontent.py b/google/genai/_gaos/types/interactions/imagecontent.py index 7429f286c7..63efdc87c2 100644 --- a/google/genai/_gaos/types/interactions/imagecontent.py +++ b/google/genai/_gaos/types/interactions/imagecontent.py @@ -24,13 +24,20 @@ BaseModel, UNSET_SENTINEL, UnrecognizedStr, + current_exclude_none, + serialize_with_info, ) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .mediaresolution import MediaResolution import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -82,19 +89,39 @@ class ImageContent(BaseModel): uri: Optional[str] = None r"""The URI of the image.""" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["data", "mime_type", "resolution", "uri"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/imagedelta.py b/google/genai/_gaos/types/interactions/imagedelta.py index 976a0787f2..c98003249c 100644 --- a/google/genai/_gaos/types/interactions/imagedelta.py +++ b/google/genai/_gaos/types/interactions/imagedelta.py @@ -18,13 +18,24 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .mediaresolution import MediaResolution import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -65,19 +76,39 @@ class ImageDelta(BaseModel): uri: Optional[str] = None + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["data", "mime_type", "resolution", "uri"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/imageresponseformat.py b/google/genai/_gaos/types/interactions/imageresponseformat.py index 83be4f0456..9e2b031c60 100644 --- a/google/genai/_gaos/types/interactions/imageresponseformat.py +++ b/google/genai/_gaos/types/interactions/imageresponseformat.py @@ -18,12 +18,23 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -109,19 +120,39 @@ class ImageResponseFormat(BaseModel): pydantic.Field(alias="type"), ] = "image" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["aspect_ratio", "delivery", "image_size", "mime_type"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/interaction.py b/google/genai/_gaos/types/interactions/interaction.py index 9cc6294963..60c24d650e 100644 --- a/google/genai/_gaos/types/interactions/interaction.py +++ b/google/genai/_gaos/types/interactions/interaction.py @@ -18,8 +18,19 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) from ...utils.unions import parse_open_union +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .agentoption import AgentOption from .antigravityagentconfig import AntigravityAgentConfig, AntigravityAgentConfigParam from .audiocontent import AudioContent, AudioContentParam @@ -73,6 +84,10 @@ class UnknownInteractionAgentConfig(BaseModel): model_config = ConfigDict(frozen=True) + @model_serializer + def serialize_model(self) -> Any: + return self.raw + _INTERACTION_AGENT_CONFIG_VARIANTS: dict[str, Any] = { "antigravity": AntigravityAgentConfig, @@ -385,6 +400,9 @@ class Interaction(BaseModel): r"""Message for configuring webhook events for a request.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self._serialize_model, handler, info) + def _serialize_model(self, handler): optional_fields = set( [ @@ -420,16 +438,30 @@ def _serialize_model(self, handler): "webhook_config", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/interactioncompletedevent.py b/google/genai/_gaos/types/interactions/interactioncompletedevent.py index 5e3b8fd34a..8dadfa00e4 100644 --- a/google/genai/_gaos/types/interactions/interactioncompletedevent.py +++ b/google/genai/_gaos/types/interactions/interactioncompletedevent.py @@ -18,8 +18,13 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .interactionsseeventinteraction import ( InteractionSseEventInteraction, InteractionSseEventInteractionTypedDict, @@ -27,7 +32,7 @@ import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -76,19 +81,39 @@ class InteractionCompletedEvent(BaseModel): pydantic.Field(alias="event_type"), ] = "interaction.completed" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["event_type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["event_id"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/interactioncreatedevent.py b/google/genai/_gaos/types/interactions/interactioncreatedevent.py index 0d94d4ae23..984a7eaa69 100644 --- a/google/genai/_gaos/types/interactions/interactioncreatedevent.py +++ b/google/genai/_gaos/types/interactions/interactioncreatedevent.py @@ -18,8 +18,13 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .interactionsseeventinteraction import ( InteractionSseEventInteraction, InteractionSseEventInteractionTypedDict, @@ -27,7 +32,7 @@ import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -70,19 +75,39 @@ class InteractionCreatedEvent(BaseModel): pydantic.Field(alias="event_type"), ] = "interaction.created" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["event_type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["event_id"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/interactionsinput.py b/google/genai/_gaos/types/interactions/interactionsinput.py index 880afbd7c5..43845c02f0 100644 --- a/google/genai/_gaos/types/interactions/interactionsinput.py +++ b/google/genai/_gaos/types/interactions/interactionsinput.py @@ -18,10 +18,13 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from ...utils.unions import decline_sibling_variants, dispatch_open_union_members from .content import Content, ContentParam from .step import Step, StepParam +from functools import partial +import pydantic from typing import List, Union -from typing_extensions import TypeAliasType +from typing_extensions import Annotated, TypeAliasType InteractionsInputParam = TypeAliasType( @@ -32,6 +35,222 @@ InteractionsInput = TypeAliasType( - "InteractionsInput", Union[Content, List[Step], List[Content], str] + "InteractionsInput", + Annotated[ + Union[ + Annotated[ + Content, + pydantic.WrapValidator( + partial( + decline_sibling_variants, + union_name="Content", + sibling_variants=( + ( + "type", + frozenset( + { + "code_execution_call", + "code_execution_result", + "file_search_call", + "file_search_result", + "function_call", + "function_result", + "google_maps_call", + "google_maps_result", + "google_search_call", + "google_search_result", + "mcp_server_tool_call", + "mcp_server_tool_result", + "model_output", + "processing_call", + "processing_result", + "retrieval_call", + "retrieval_result", + "thought", + "url_context_call", + "url_context_result", + "user_input", + } + ), + ), + ), + ) + ), + ], + List[ + Annotated[ + Step, + pydantic.WrapValidator( + partial( + decline_sibling_variants, + union_name="Step", + sibling_variants=( + ( + "type", + frozenset( + {"audio", "document", "image", "text", "video"} + ), + ), + ), + ) + ), + ] + ], + List[ + Annotated[ + Content, + pydantic.WrapValidator( + partial( + decline_sibling_variants, + union_name="Content", + sibling_variants=( + ( + "type", + frozenset( + { + "code_execution_call", + "code_execution_result", + "file_search_call", + "file_search_result", + "function_call", + "function_result", + "google_maps_call", + "google_maps_result", + "google_search_call", + "google_search_result", + "mcp_server_tool_call", + "mcp_server_tool_result", + "model_output", + "processing_call", + "processing_result", + "retrieval_call", + "retrieval_result", + "thought", + "url_context_call", + "url_context_result", + "user_input", + } + ), + ), + ), + ) + ), + ] + ], + str, + ], + pydantic.WrapValidator( + partial( + dispatch_open_union_members, + members=( + Annotated[ + Content, + pydantic.WrapValidator( + partial( + decline_sibling_variants, + union_name="Content", + sibling_variants=( + ( + "type", + frozenset( + { + "code_execution_call", + "code_execution_result", + "file_search_call", + "file_search_result", + "function_call", + "function_result", + "google_maps_call", + "google_maps_result", + "google_search_call", + "google_search_result", + "mcp_server_tool_call", + "mcp_server_tool_result", + "model_output", + "processing_call", + "processing_result", + "retrieval_call", + "retrieval_result", + "thought", + "url_context_call", + "url_context_result", + "user_input", + } + ), + ), + ), + ) + ), + ], + List[ + Annotated[ + Step, + pydantic.WrapValidator( + partial( + decline_sibling_variants, + union_name="Step", + sibling_variants=( + ( + "type", + frozenset( + { + "audio", + "document", + "image", + "text", + "video", + } + ), + ), + ), + ) + ), + ] + ], + List[ + Annotated[ + Content, + pydantic.WrapValidator( + partial( + decline_sibling_variants, + union_name="Content", + sibling_variants=( + ( + "type", + frozenset( + { + "code_execution_call", + "code_execution_result", + "file_search_call", + "file_search_result", + "function_call", + "function_result", + "google_maps_call", + "google_maps_result", + "google_search_call", + "google_search_result", + "mcp_server_tool_call", + "mcp_server_tool_result", + "model_output", + "processing_call", + "processing_result", + "retrieval_call", + "retrieval_result", + "thought", + "url_context_call", + "url_context_result", + "user_input", + } + ), + ), + ), + ) + ), + ] + ], + ), + ) + ), + ], ) r"""The input for the interaction.""" diff --git a/google/genai/_gaos/types/interactions/interactionsseevent.py b/google/genai/_gaos/types/interactions/interactionsseevent.py index c8d8fe115b..3a6fc57edd 100644 --- a/google/genai/_gaos/types/interactions/interactionsseevent.py +++ b/google/genai/_gaos/types/interactions/interactionsseevent.py @@ -37,7 +37,7 @@ from .stepstart import StepStart, StepStartTypedDict from .stepstop import StepStop, StepStopTypedDict from functools import partial -from pydantic import ConfigDict +from pydantic import ConfigDict, model_serializer from pydantic.functional_validators import BeforeValidator from typing import Any, Literal, Union from typing_extensions import Annotated, TypeAliasType @@ -66,6 +66,10 @@ class UnknownInteractionSSEEvent(BaseModel): model_config = ConfigDict(frozen=True) + @model_serializer + def serialize_model(self) -> Any: + return self.raw + _INTERACTION_SSE_EVENT_VARIANTS: dict[str, Any] = { "error": ErrorEvent, diff --git a/google/genai/_gaos/types/interactions/interactionsseeventinteraction.py b/google/genai/_gaos/types/interactions/interactionsseeventinteraction.py index 255434c057..04b98b8374 100644 --- a/google/genai/_gaos/types/interactions/interactionsseeventinteraction.py +++ b/google/genai/_gaos/types/interactions/interactionsseeventinteraction.py @@ -18,7 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .servicetier import ServiceTier from .step import Step, StepParam from .usage import Usage, UsageTypedDict @@ -114,6 +125,9 @@ class InteractionSseEventInteraction(BaseModel): r"""Statistics on the interaction request's token usage.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -128,15 +142,29 @@ def serialize_model(self, handler): "usage", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/interactionstatusupdate.py b/google/genai/_gaos/types/interactions/interactionstatusupdate.py index c898170893..3d44339179 100644 --- a/google/genai/_gaos/types/interactions/interactionstatusupdate.py +++ b/google/genai/_gaos/types/interactions/interactionstatusupdate.py @@ -18,13 +18,24 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .usage import Usage, UsageTypedDict import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -86,19 +97,39 @@ class InteractionStatusUpdate(BaseModel): usage: Optional[Usage] = None r"""Statistics on the interaction request's token usage.""" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["event_type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["continuation_token", "event_id", "usage"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/mcpserver.py b/google/genai/_gaos/types/interactions/mcpserver.py index 58ed06628f..567a76b902 100644 --- a/google/genai/_gaos/types/interactions/mcpserver.py +++ b/google/genai/_gaos/types/interactions/mcpserver.py @@ -18,13 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .allowedtools import AllowedTools, AllowedToolsParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Dict, List, Literal, Optional +from typing import Any, Dict, List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -66,19 +71,39 @@ class MCPServer(BaseModel): Example: \"https://api.example.com/mcp\" """ + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["allowed_tools", "headers", "name", "url"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/mcpservertoolcalldelta.py b/google/genai/_gaos/types/interactions/mcpservertoolcalldelta.py index 30d29b03d4..26e889976d 100644 --- a/google/genai/_gaos/types/interactions/mcpservertoolcalldelta.py +++ b/google/genai/_gaos/types/interactions/mcpservertoolcalldelta.py @@ -48,6 +48,9 @@ class MCPServerToolCallDelta(BaseModel): pydantic.Field(alias="type"), ] = "mcp_server_tool_call" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + try: MCPServerToolCallDelta.model_rebuild() diff --git a/google/genai/_gaos/types/interactions/mcpservertoolcallstep.py b/google/genai/_gaos/types/interactions/mcpservertoolcallstep.py index 20c120ffdf..e6e56f7bec 100644 --- a/google/genai/_gaos/types/interactions/mcpservertoolcallstep.py +++ b/google/genai/_gaos/types/interactions/mcpservertoolcallstep.py @@ -63,6 +63,9 @@ class MCPServerToolCallStep(BaseModel): pydantic.Field(alias="type"), ] = "mcp_server_tool_call" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + try: MCPServerToolCallStep.model_rebuild() diff --git a/google/genai/_gaos/types/interactions/mcpservertoolresultdelta.py b/google/genai/_gaos/types/interactions/mcpservertoolresultdelta.py index 36ad15957b..c33bef541f 100644 --- a/google/genai/_gaos/types/interactions/mcpservertoolresultdelta.py +++ b/google/genai/_gaos/types/interactions/mcpservertoolresultdelta.py @@ -18,8 +18,13 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .functionresultsubcontent import ( FunctionResultSubcontent, FunctionResultSubcontentParam, @@ -27,7 +32,7 @@ import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional, Union +from typing import Any, List, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict @@ -77,19 +82,39 @@ class MCPServerToolResultDelta(BaseModel): pydantic.Field(alias="type"), ] = "mcp_server_tool_result" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["name", "server_name"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/mcpservertoolresultstep.py b/google/genai/_gaos/types/interactions/mcpservertoolresultstep.py index e13bd89e78..9ac1017397 100644 --- a/google/genai/_gaos/types/interactions/mcpservertoolresultstep.py +++ b/google/genai/_gaos/types/interactions/mcpservertoolresultstep.py @@ -18,8 +18,13 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .functionresultsubcontent import ( FunctionResultSubcontent, FunctionResultSubcontentParam, @@ -27,7 +32,7 @@ import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional, Union +from typing import Any, List, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict @@ -90,19 +95,39 @@ class MCPServerToolResultStep(BaseModel): pydantic.Field(alias="type"), ] = "mcp_server_tool_result" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["name", "server_name"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/modalitytokens.py b/google/genai/_gaos/types/interactions/modalitytokens.py index b986c54c55..623646f921 100644 --- a/google/genai/_gaos/types/interactions/modalitytokens.py +++ b/google/genai/_gaos/types/interactions/modalitytokens.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .responsemodality import ResponseModality from pydantic import model_serializer from typing import Optional @@ -42,17 +47,34 @@ class ModalityTokens(BaseModel): r"""Number of tokens for the modality.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["modality", "tokens"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/modeloutputstep.py b/google/genai/_gaos/types/interactions/modeloutputstep.py index f3e2b8f2b8..d2e39a198b 100644 --- a/google/genai/_gaos/types/interactions/modeloutputstep.py +++ b/google/genai/_gaos/types/interactions/modeloutputstep.py @@ -18,14 +18,19 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .content import Content, ContentParam from .status import Status, StatusParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional +from typing import Any, List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -67,19 +72,39 @@ class ModelOutputStep(BaseModel): pydantic.Field(alias="type"), ] = "model_output" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["content", "error"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/parallelaisearchconfig.py b/google/genai/_gaos/types/interactions/parallelaisearchconfig.py index 6ddf716be9..ba68e923f9 100644 --- a/google/genai/_gaos/types/interactions/parallelaisearchconfig.py +++ b/google/genai/_gaos/types/interactions/parallelaisearchconfig.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Any, Dict, Optional from typing_extensions import NotRequired, TypedDict @@ -43,17 +48,34 @@ class ParallelAISearchConfig(BaseModel): r"""Optional. Custom configs for ParallelAiSearch.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["api_key", "custom_config"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/placecitation.py b/google/genai/_gaos/types/interactions/placecitation.py index e60cfa594a..625cbc72ad 100644 --- a/google/genai/_gaos/types/interactions/placecitation.py +++ b/google/genai/_gaos/types/interactions/placecitation.py @@ -18,13 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .reviewsnippet import ReviewSnippet, ReviewSnippetParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional +from typing import Any, List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -84,21 +89,41 @@ class PlaceCitation(BaseModel): url: Optional[str] = None r"""URI reference of the place.""" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( ["end_index", "name", "place_id", "review_snippets", "start_index", "url"] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/processingcalldelta.py b/google/genai/_gaos/types/interactions/processingcalldelta.py index 8c82116ff7..46f4f31f79 100644 --- a/google/genai/_gaos/types/interactions/processingcalldelta.py +++ b/google/genai/_gaos/types/interactions/processingcalldelta.py @@ -18,12 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -49,19 +54,39 @@ class ProcessingCallDelta(BaseModel): pydantic.Field(alias="type"), ] = "processing_call" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/processingcallstep.py b/google/genai/_gaos/types/interactions/processingcallstep.py index 2d17ec6a9a..1e35802bb2 100644 --- a/google/genai/_gaos/types/interactions/processingcallstep.py +++ b/google/genai/_gaos/types/interactions/processingcallstep.py @@ -18,12 +18,24 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import Base64EncodedString, Base64FileInput, BaseModel, UNSET_SENTINEL +from .. import ( + Base64EncodedString, + Base64FileInput, + BaseModel, + UNSET_SENTINEL, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -58,19 +70,39 @@ class ProcessingCallStep(BaseModel): pydantic.Field(alias="type"), ] = "processing_call" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/processingresultdelta.py b/google/genai/_gaos/types/interactions/processingresultdelta.py index e65c6869ef..c0d0ac0218 100644 --- a/google/genai/_gaos/types/interactions/processingresultdelta.py +++ b/google/genai/_gaos/types/interactions/processingresultdelta.py @@ -18,12 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -49,19 +54,39 @@ class ProcessingResultDelta(BaseModel): pydantic.Field(alias="type"), ] = "processing_result" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/processingresultstep.py b/google/genai/_gaos/types/interactions/processingresultstep.py index 77796e0cfe..b7e069051d 100644 --- a/google/genai/_gaos/types/interactions/processingresultstep.py +++ b/google/genai/_gaos/types/interactions/processingresultstep.py @@ -18,12 +18,24 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import Base64EncodedString, Base64FileInput, BaseModel, UNSET_SENTINEL +from .. import ( + Base64EncodedString, + Base64FileInput, + BaseModel, + UNSET_SENTINEL, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -54,19 +66,39 @@ class ProcessingResultStep(BaseModel): pydantic.Field(alias="type"), ] = "processing_result" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/ragresource.py b/google/genai/_gaos/types/interactions/ragresource.py index f793e548ed..c383a8708a 100644 --- a/google/genai/_gaos/types/interactions/ragresource.py +++ b/google/genai/_gaos/types/interactions/ragresource.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict @@ -47,17 +52,34 @@ class RagResource(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["rag_corpus", "rag_file_ids"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/ragretrievalconfig.py b/google/genai/_gaos/types/interactions/ragretrievalconfig.py index b254601538..0204c013d1 100644 --- a/google/genai/_gaos/types/interactions/ragretrievalconfig.py +++ b/google/genai/_gaos/types/interactions/ragretrievalconfig.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .filter_ import Filter, FilterParam from .hybridsearch import HybridSearch, HybridSearchParam from .ranking import Ranking, RankingParam @@ -57,18 +62,35 @@ class RagRetrievalConfig(BaseModel): r"""Optional. The number of contexts to retrieve.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["filter", "hybrid_search", "ranking", "top_k"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/ragstoreconfig.py b/google/genai/_gaos/types/interactions/ragstoreconfig.py index ec46283df6..91f1bc48cc 100644 --- a/google/genai/_gaos/types/interactions/ragstoreconfig.py +++ b/google/genai/_gaos/types/interactions/ragstoreconfig.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .ragresource import RagResource, RagResourceParam from .ragretrievalconfig import RagRetrievalConfig, RagRetrievalConfigParam import pydantic @@ -66,6 +71,9 @@ class RagStoreConfig(BaseModel): r"""Optional. Only return results with vector distance smaller than the threshold.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -75,15 +83,29 @@ def serialize_model(self, handler): "vector_distance_threshold", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/ranking.py b/google/genai/_gaos/types/interactions/ranking.py index da27eb8491..27056677a5 100644 --- a/google/genai/_gaos/types/interactions/ranking.py +++ b/google/genai/_gaos/types/interactions/ranking.py @@ -18,13 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .rankservice import RankService, RankServiceParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -54,19 +59,39 @@ class Ranking(BaseModel): pydantic.Field(alias="ranking_config"), ] = "rank_service" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["ranking_config"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["model_name", "rank_service"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/rankservice.py b/google/genai/_gaos/types/interactions/rankservice.py index 61043a8b30..27f93bc160 100644 --- a/google/genai/_gaos/types/interactions/rankservice.py +++ b/google/genai/_gaos/types/interactions/rankservice.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict @@ -38,17 +43,34 @@ class RankService(BaseModel): r"""Optional. The model name of the rank service.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["model_name"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/retrieval.py b/google/genai/_gaos/types/interactions/retrieval.py index f89fbb6af7..610c6aaa36 100644 --- a/google/genai/_gaos/types/interactions/retrieval.py +++ b/google/genai/_gaos/types/interactions/retrieval.py @@ -18,8 +18,19 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .exaaisearchconfig import ExaAISearchConfig, ExaAISearchConfigParam from .parallelaisearchconfig import ParallelAISearchConfig, ParallelAISearchConfigParam from .ragstoreconfig import RagStoreConfig, RagStoreConfigParam @@ -27,7 +38,7 @@ import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional, Union +from typing import Any, List, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -81,7 +92,13 @@ class Retrieval(BaseModel): vertex_ai_search_config: Optional[VertexAISearchConfig] = None r"""Used to specify configuration for VertexAISearch.""" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -92,16 +109,30 @@ def serialize_model(self, handler): "vertex_ai_search_config", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/retrievalcallarguments.py b/google/genai/_gaos/types/interactions/retrievalcallarguments.py index f73c5ad1c2..54897fcc4d 100644 --- a/google/genai/_gaos/types/interactions/retrievalcallarguments.py +++ b/google/genai/_gaos/types/interactions/retrievalcallarguments.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict @@ -38,17 +43,34 @@ class RetrievalCallArguments(BaseModel): r"""Queries for Retrieval information.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["queries"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/retrievalcalldelta.py b/google/genai/_gaos/types/interactions/retrievalcalldelta.py index 484f8fe3a3..55b899595e 100644 --- a/google/genai/_gaos/types/interactions/retrievalcalldelta.py +++ b/google/genai/_gaos/types/interactions/retrievalcalldelta.py @@ -18,13 +18,24 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .retrievalcallarguments import RetrievalCallArguments, RetrievalCallArgumentsParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -75,19 +86,39 @@ class RetrievalCallDelta(BaseModel): pydantic.Field(alias="type"), ] = "retrieval_call" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["retrieval_type", "signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/retrievalcallstep.py b/google/genai/_gaos/types/interactions/retrievalcallstep.py index fc8ce47d3b..8d16a85c90 100644 --- a/google/genai/_gaos/types/interactions/retrievalcallstep.py +++ b/google/genai/_gaos/types/interactions/retrievalcallstep.py @@ -24,13 +24,20 @@ BaseModel, UNSET_SENTINEL, UnrecognizedStr, + current_exclude_none, + serialize_with_info, ) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .retrievalcallarguments import RetrievalCallArguments, RetrievalCallArgumentsParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -88,19 +95,39 @@ class RetrievalCallStep(BaseModel): pydantic.Field(alias="type"), ] = "retrieval_call" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["retrieval_type", "signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/retrievalresultdelta.py b/google/genai/_gaos/types/interactions/retrievalresultdelta.py index b770b92923..f45bbc5913 100644 --- a/google/genai/_gaos/types/interactions/retrievalresultdelta.py +++ b/google/genai/_gaos/types/interactions/retrievalresultdelta.py @@ -18,12 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -60,19 +65,39 @@ class RetrievalResultDelta(BaseModel): pydantic.Field(alias="type"), ] = "retrieval_result" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["is_error", "signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/retrievalresultstep.py b/google/genai/_gaos/types/interactions/retrievalresultstep.py index 4420d21a3b..231afa29f6 100644 --- a/google/genai/_gaos/types/interactions/retrievalresultstep.py +++ b/google/genai/_gaos/types/interactions/retrievalresultstep.py @@ -18,12 +18,24 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import Base64EncodedString, Base64FileInput, BaseModel, UNSET_SENTINEL +from .. import ( + Base64EncodedString, + Base64FileInput, + BaseModel, + UNSET_SENTINEL, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -65,19 +77,39 @@ class RetrievalResultStep(BaseModel): pydantic.Field(alias="type"), ] = "retrieval_result" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["is_error", "signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/reviewsnippet.py b/google/genai/_gaos/types/interactions/reviewsnippet.py index 566556a901..456e56f729 100644 --- a/google/genai/_gaos/types/interactions/reviewsnippet.py +++ b/google/genai/_gaos/types/interactions/reviewsnippet.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict @@ -52,17 +57,34 @@ class ReviewSnippet(BaseModel): r"""A link that corresponds to the user review on Google Maps.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["review_id", "title", "url"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/safetysetting.py b/google/genai/_gaos/types/interactions/safetysetting.py index d92385fc66..9cbf147642 100644 --- a/google/genai/_gaos/types/interactions/safetysetting.py +++ b/google/genai/_gaos/types/interactions/safetysetting.py @@ -18,7 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .harmcategory import HarmCategory from pydantic import model_serializer from typing import Literal, Optional, Union @@ -94,17 +105,34 @@ class SafetySetting(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["method"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/sessionconfig.py b/google/genai/_gaos/types/interactions/sessionconfig.py index 0c651366c2..e77d9d188f 100644 --- a/google/genai/_gaos/types/interactions/sessionconfig.py +++ b/google/genai/_gaos/types/interactions/sessionconfig.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict @@ -42,17 +47,34 @@ class SessionConfig(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["max_rounds"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/smarttranscriptionmode.py b/google/genai/_gaos/types/interactions/smarttranscriptionmode.py index 6dac77ae89..70e489e1bc 100644 --- a/google/genai/_gaos/types/interactions/smarttranscriptionmode.py +++ b/google/genai/_gaos/types/interactions/smarttranscriptionmode.py @@ -22,7 +22,7 @@ from ...utils import validate_const import pydantic from pydantic.functional_validators import AfterValidator -from typing import Literal +from typing import Any, Literal from typing_extensions import Annotated, TypedDict @@ -40,6 +40,9 @@ class SmartTranscriptionMode(BaseModel): pydantic.Field(alias="type"), ] = "smart" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + try: SmartTranscriptionMode.model_rebuild() diff --git a/google/genai/_gaos/types/interactions/source.py b/google/genai/_gaos/types/interactions/source.py index 844f15bf4c..2434ecaa96 100644 --- a/google/genai/_gaos/types/interactions/source.py +++ b/google/genai/_gaos/types/interactions/source.py @@ -18,7 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Literal, Optional, Union from typing_extensions import NotRequired, TypedDict @@ -73,17 +84,34 @@ class Source(BaseModel): type: Optional[SourceType] = None @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["content", "encoding", "source", "target", "type"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/speakerconfig.py b/google/genai/_gaos/types/interactions/speakerconfig.py index 2affff3818..169e3f958f 100644 --- a/google/genai/_gaos/types/interactions/speakerconfig.py +++ b/google/genai/_gaos/types/interactions/speakerconfig.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .speechconfig import SpeechConfig, SpeechConfigParam from pydantic import model_serializer from typing import List, Optional @@ -39,17 +44,34 @@ class SpeakerConfig(BaseModel): r"""Individual speaker configurations.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["speakers"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/speechannotation.py b/google/genai/_gaos/types/interactions/speechannotation.py index 69080ddc62..b9a14b7393 100644 --- a/google/genai/_gaos/types/interactions/speechannotation.py +++ b/google/genai/_gaos/types/interactions/speechannotation.py @@ -18,12 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -70,19 +75,39 @@ class SpeechAnnotation(BaseModel): pydantic.Field(alias="type"), ] = "speech_metadata" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["end_index", "speaker", "start_index", "style"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/speechconfig.py b/google/genai/_gaos/types/interactions/speechconfig.py index fd31a15051..b3251a184b 100644 --- a/google/genai/_gaos/types/interactions/speechconfig.py +++ b/google/genai/_gaos/types/interactions/speechconfig.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict @@ -48,17 +53,34 @@ class SpeechConfig(BaseModel): r"""The voice of the speaker.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["language", "speaker", "voice"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/staticmediaprocessing.py b/google/genai/_gaos/types/interactions/staticmediaprocessing.py index 249abb2054..1b561f23be 100644 --- a/google/genai/_gaos/types/interactions/staticmediaprocessing.py +++ b/google/genai/_gaos/types/interactions/staticmediaprocessing.py @@ -18,12 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -62,19 +67,39 @@ class StaticMediaProcessing(BaseModel): pydantic.Field(alias="type"), ] = "static" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["end_offset", "fps", "start_offset"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/status.py b/google/genai/_gaos/types/interactions/status.py index d3bbeaad02..9baf870ebd 100644 --- a/google/genai/_gaos/types/interactions/status.py +++ b/google/genai/_gaos/types/interactions/status.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Any, Dict, List, Optional from typing_extensions import NotRequired, TypedDict @@ -72,17 +77,34 @@ class Status(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["code", "details", "message"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/step.py b/google/genai/_gaos/types/interactions/step.py index 51a3d63b6c..8359ddbc7d 100644 --- a/google/genai/_gaos/types/interactions/step.py +++ b/google/genai/_gaos/types/interactions/step.py @@ -48,7 +48,7 @@ from .urlcontextresultstep import URLContextResultStep, URLContextResultStepParam from .userinputstep import UserInputStep, UserInputStepParam from functools import partial -from pydantic import ConfigDict +from pydantic import ConfigDict, model_serializer from pydantic.functional_validators import BeforeValidator from typing import Any, Literal, Union from typing_extensions import Annotated, TypeAliasType @@ -92,6 +92,10 @@ class UnknownStep(BaseModel): model_config = ConfigDict(frozen=True) + @model_serializer + def serialize_model(self) -> Any: + return self.raw + _STEP_VARIANTS: dict[str, Any] = { "code_execution_call": CodeExecutionCallStep, diff --git a/google/genai/_gaos/types/interactions/stepdelta.py b/google/genai/_gaos/types/interactions/stepdelta.py index 3cce322476..8fb9e6ec05 100644 --- a/google/genai/_gaos/types/interactions/stepdelta.py +++ b/google/genai/_gaos/types/interactions/stepdelta.py @@ -18,14 +18,19 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .stepdeltadata import StepDeltaData, StepDeltaDataTypedDict from .stepdeltametadata import StepDeltaMetadata, StepDeltaMetadataTypedDict import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -59,19 +64,39 @@ class StepDelta(BaseModel): metadata: Optional[StepDeltaMetadata] = None r"""Optional metadata accompanying ANY streamed event.""" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["event_type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["event_id", "metadata"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/stepdeltadata.py b/google/genai/_gaos/types/interactions/stepdeltadata.py index 08d3811122..998d3e44ad 100644 --- a/google/genai/_gaos/types/interactions/stepdeltadata.py +++ b/google/genai/_gaos/types/interactions/stepdeltadata.py @@ -62,7 +62,7 @@ from .urlcontextresultdelta import URLContextResultDelta, URLContextResultDeltaTypedDict from .videodelta import VideoDelta, VideoDeltaTypedDict from functools import partial -from pydantic import ConfigDict +from pydantic import ConfigDict, model_serializer from pydantic.functional_validators import BeforeValidator from typing import Any, Literal, Union from typing_extensions import Annotated, TypeAliasType @@ -110,6 +110,10 @@ class UnknownStepDeltaData(BaseModel): model_config = ConfigDict(frozen=True) + @model_serializer + def serialize_model(self) -> Any: + return self.raw + _STEP_DELTA_DATA_VARIANTS: dict[str, Any] = { "arguments_delta": ArgumentsDelta, diff --git a/google/genai/_gaos/types/interactions/stepdeltametadata.py b/google/genai/_gaos/types/interactions/stepdeltametadata.py index c420a1e190..70276f3165 100644 --- a/google/genai/_gaos/types/interactions/stepdeltametadata.py +++ b/google/genai/_gaos/types/interactions/stepdeltametadata.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .usage import Usage, UsageTypedDict from pydantic import model_serializer from typing import Optional @@ -39,17 +44,34 @@ class StepDeltaMetadata(BaseModel): r"""Statistics on the interaction request's token usage.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["total_usage"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/stepstart.py b/google/genai/_gaos/types/interactions/stepstart.py index 9d0476e432..3e359092cb 100644 --- a/google/genai/_gaos/types/interactions/stepstart.py +++ b/google/genai/_gaos/types/interactions/stepstart.py @@ -18,13 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .step import Step, StepParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -55,19 +60,39 @@ class StepStart(BaseModel): pydantic.Field(alias="event_type"), ] = "step.start" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["event_type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["event_id"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/stepstop.py b/google/genai/_gaos/types/interactions/stepstop.py index 7f8191f0f6..f8017a24b8 100644 --- a/google/genai/_gaos/types/interactions/stepstop.py +++ b/google/genai/_gaos/types/interactions/stepstop.py @@ -18,13 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .usage import Usage, UsageTypedDict import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -60,19 +65,39 @@ class StepStop(BaseModel): usage: Optional[Usage] = None r"""Statistics on the interaction request's token usage.""" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["event_type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["event_id", "step_usage", "usage"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/textannotationdelta.py b/google/genai/_gaos/types/interactions/textannotationdelta.py index 94a1aaca35..7b282a6def 100644 --- a/google/genai/_gaos/types/interactions/textannotationdelta.py +++ b/google/genai/_gaos/types/interactions/textannotationdelta.py @@ -18,13 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .annotation import Annotation, AnnotationParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional +from typing import Any, List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -46,19 +51,39 @@ class TextAnnotationDelta(BaseModel): pydantic.Field(alias="type"), ] = "text_annotation_delta" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["annotations"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/textcontent.py b/google/genai/_gaos/types/interactions/textcontent.py index 533d06fd90..9839cf79be 100644 --- a/google/genai/_gaos/types/interactions/textcontent.py +++ b/google/genai/_gaos/types/interactions/textcontent.py @@ -18,13 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .annotation import Annotation, AnnotationParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional +from typing import Any, List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -52,19 +57,39 @@ class TextContent(BaseModel): pydantic.Field(alias="type"), ] = "text" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["annotations"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/textdelta.py b/google/genai/_gaos/types/interactions/textdelta.py index c0ec2cd554..ddd5420f82 100644 --- a/google/genai/_gaos/types/interactions/textdelta.py +++ b/google/genai/_gaos/types/interactions/textdelta.py @@ -22,7 +22,7 @@ from ...utils import validate_const import pydantic from pydantic.functional_validators import AfterValidator -from typing import Literal +from typing import Any, Literal from typing_extensions import Annotated, TypedDict @@ -39,6 +39,9 @@ class TextDelta(BaseModel): pydantic.Field(alias="type"), ] = "text" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + try: TextDelta.model_rebuild() diff --git a/google/genai/_gaos/types/interactions/textresponseformat.py b/google/genai/_gaos/types/interactions/textresponseformat.py index c4160fad8a..c966ca3da7 100644 --- a/google/genai/_gaos/types/interactions/textresponseformat.py +++ b/google/genai/_gaos/types/interactions/textresponseformat.py @@ -18,8 +18,19 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator @@ -79,19 +90,39 @@ class TextResponseFormat(BaseModel): pydantic.Field(alias="type"), ] = "text" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["mime_type", "schema"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/thoughtsignaturedelta.py b/google/genai/_gaos/types/interactions/thoughtsignaturedelta.py index 58733ab876..46b1ee781a 100644 --- a/google/genai/_gaos/types/interactions/thoughtsignaturedelta.py +++ b/google/genai/_gaos/types/interactions/thoughtsignaturedelta.py @@ -18,12 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -45,19 +50,39 @@ class ThoughtSignatureDelta(BaseModel): pydantic.Field(alias="type"), ] = "thought_signature" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/thoughtstep.py b/google/genai/_gaos/types/interactions/thoughtstep.py index f611c1320f..6aaf684692 100644 --- a/google/genai/_gaos/types/interactions/thoughtstep.py +++ b/google/genai/_gaos/types/interactions/thoughtstep.py @@ -18,13 +18,25 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import Base64EncodedString, Base64FileInput, BaseModel, UNSET_SENTINEL +from .. import ( + Base64EncodedString, + Base64FileInput, + BaseModel, + UNSET_SENTINEL, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .thoughtsummarycontent import ThoughtSummaryContent, ThoughtSummaryContentParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional, Union +from typing import Any, List, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -52,19 +64,39 @@ class ThoughtStep(BaseModel): pydantic.Field(alias="type"), ] = "thought" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["signature", "summary"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/thoughtsummarycontent.py b/google/genai/_gaos/types/interactions/thoughtsummarycontent.py index 951eb885f3..505c4f1912 100644 --- a/google/genai/_gaos/types/interactions/thoughtsummarycontent.py +++ b/google/genai/_gaos/types/interactions/thoughtsummarycontent.py @@ -23,7 +23,7 @@ from .imagecontent import ImageContent, ImageContentParam from .textcontent import TextContent, TextContentParam from functools import partial -from pydantic import ConfigDict +from pydantic import ConfigDict, model_serializer from pydantic.functional_validators import BeforeValidator from typing import Any, Literal, Union from typing_extensions import Annotated, TypeAliasType @@ -43,6 +43,10 @@ class UnknownThoughtSummaryContent(BaseModel): model_config = ConfigDict(frozen=True) + @model_serializer + def serialize_model(self) -> Any: + return self.raw + _THOUGHT_SUMMARY_CONTENT_VARIANTS: dict[str, Any] = { "image": ImageContent, diff --git a/google/genai/_gaos/types/interactions/thoughtsummarydelta.py b/google/genai/_gaos/types/interactions/thoughtsummarydelta.py index 824e56f2e1..5ff07513a7 100644 --- a/google/genai/_gaos/types/interactions/thoughtsummarydelta.py +++ b/google/genai/_gaos/types/interactions/thoughtsummarydelta.py @@ -18,13 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .content import Content, ContentParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -46,19 +51,39 @@ class ThoughtSummaryDelta(BaseModel): pydantic.Field(alias="type"), ] = "thought_summary" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["content"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/tool.py b/google/genai/_gaos/types/interactions/tool.py index ae62f8f201..0c65ef20f0 100644 --- a/google/genai/_gaos/types/interactions/tool.py +++ b/google/genai/_gaos/types/interactions/tool.py @@ -30,7 +30,7 @@ from .retrieval import Retrieval, RetrievalParam from .urlcontext import URLContext, URLContextParam from functools import partial -from pydantic import ConfigDict +from pydantic import ConfigDict, model_serializer from pydantic.functional_validators import BeforeValidator from typing import Any, Literal, Union from typing_extensions import Annotated, TypeAliasType @@ -62,6 +62,10 @@ class UnknownTool(BaseModel): model_config = ConfigDict(frozen=True) + @model_serializer + def serialize_model(self) -> Any: + return self.raw + _TOOL_VARIANTS: dict[str, Any] = { "code_execution": CodeExecution, diff --git a/google/genai/_gaos/types/interactions/toolchoiceconfig.py b/google/genai/_gaos/types/interactions/toolchoiceconfig.py index 4f3832a0af..5f9f85dced 100644 --- a/google/genai/_gaos/types/interactions/toolchoiceconfig.py +++ b/google/genai/_gaos/types/interactions/toolchoiceconfig.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .allowedtools import AllowedTools, AllowedToolsParam from pydantic import model_serializer from typing import Optional @@ -39,17 +44,34 @@ class ToolChoiceConfig(BaseModel): r"""The configuration for allowed tools.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["allowed_tools"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/transcriptionconfig.py b/google/genai/_gaos/types/interactions/transcriptionconfig.py index 0043810880..2d6c989bbe 100644 --- a/google/genai/_gaos/types/interactions/transcriptionconfig.py +++ b/google/genai/_gaos/types/interactions/transcriptionconfig.py @@ -18,7 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .transcriptionmode import TranscriptionMode, TranscriptionModeParam import pydantic from pydantic import model_serializer @@ -124,6 +135,9 @@ class TranscriptionConfig(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -136,15 +150,29 @@ def serialize_model(self, handler): "timestamp_granularities", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/transcriptionmode.py b/google/genai/_gaos/types/interactions/transcriptionmode.py index 9c53bb0769..046b7975e0 100644 --- a/google/genai/_gaos/types/interactions/transcriptionmode.py +++ b/google/genai/_gaos/types/interactions/transcriptionmode.py @@ -26,7 +26,7 @@ VerbatimTranscriptionModeParam, ) from functools import partial -from pydantic import ConfigDict +from pydantic import ConfigDict, model_serializer from pydantic.functional_validators import BeforeValidator from typing import Any, Literal, Union from typing_extensions import Annotated, TypeAliasType @@ -48,6 +48,10 @@ class UnknownTranscriptionMode(BaseModel): model_config = ConfigDict(frozen=True) + @model_serializer + def serialize_model(self) -> Any: + return self.raw + _TRANSCRIPTION_MODE_VARIANTS: dict[str, Any] = { "smart": SmartTranscriptionMode, diff --git a/google/genai/_gaos/types/interactions/urlcitation.py b/google/genai/_gaos/types/interactions/urlcitation.py index 76f5e5f1ab..2747443828 100644 --- a/google/genai/_gaos/types/interactions/urlcitation.py +++ b/google/genai/_gaos/types/interactions/urlcitation.py @@ -18,12 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -69,19 +74,39 @@ class URLCitation(BaseModel): url: Optional[str] = None r"""The URL.""" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["end_index", "start_index", "title", "url"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/urlcontext.py b/google/genai/_gaos/types/interactions/urlcontext.py index ae209d2588..301b9f3f7c 100644 --- a/google/genai/_gaos/types/interactions/urlcontext.py +++ b/google/genai/_gaos/types/interactions/urlcontext.py @@ -22,7 +22,7 @@ from ...utils import validate_const import pydantic from pydantic.functional_validators import AfterValidator -from typing import Literal +from typing import Any, Literal from typing_extensions import Annotated, TypedDict @@ -42,6 +42,9 @@ class URLContext(BaseModel): pydantic.Field(alias="type"), ] = "url_context" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + try: URLContext.model_rebuild() diff --git a/google/genai/_gaos/types/interactions/urlcontextcallarguments.py b/google/genai/_gaos/types/interactions/urlcontextcallarguments.py index 3963189089..148a677060 100644 --- a/google/genai/_gaos/types/interactions/urlcontextcallarguments.py +++ b/google/genai/_gaos/types/interactions/urlcontextcallarguments.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict @@ -38,17 +43,34 @@ class URLContextCallArguments(BaseModel): r"""The URLs to fetch.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["urls"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/urlcontextcalldelta.py b/google/genai/_gaos/types/interactions/urlcontextcalldelta.py index 62a8278b7c..ab36b023e6 100644 --- a/google/genai/_gaos/types/interactions/urlcontextcalldelta.py +++ b/google/genai/_gaos/types/interactions/urlcontextcalldelta.py @@ -18,8 +18,13 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .urlcontextcallarguments import ( URLContextCallArguments, URLContextCallArgumentsParam, @@ -27,7 +32,7 @@ import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -54,19 +59,39 @@ class URLContextCallDelta(BaseModel): pydantic.Field(alias="type"), ] = "url_context_call" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/urlcontextcallstep.py b/google/genai/_gaos/types/interactions/urlcontextcallstep.py index 73e1793cb9..937de031b5 100644 --- a/google/genai/_gaos/types/interactions/urlcontextcallstep.py +++ b/google/genai/_gaos/types/interactions/urlcontextcallstep.py @@ -18,8 +18,20 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import Base64EncodedString, Base64FileInput, BaseModel, UNSET_SENTINEL +from .. import ( + Base64EncodedString, + Base64FileInput, + BaseModel, + UNSET_SENTINEL, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .urlcontextcallarguments import ( URLContextCallArguments, URLContextCallArgumentsParam, @@ -27,7 +39,7 @@ import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -63,19 +75,39 @@ class URLContextCallStep(BaseModel): pydantic.Field(alias="type"), ] = "url_context_call" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/urlcontextresult.py b/google/genai/_gaos/types/interactions/urlcontextresult.py index fa18042e4a..6ff27b9ae6 100644 --- a/google/genai/_gaos/types/interactions/urlcontextresult.py +++ b/google/genai/_gaos/types/interactions/urlcontextresult.py @@ -18,7 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Literal, Optional, Union from typing_extensions import NotRequired, TypedDict @@ -55,17 +66,34 @@ class URLContextResult(BaseModel): r"""The URL that was fetched.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["status", "url"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/urlcontextresultdelta.py b/google/genai/_gaos/types/interactions/urlcontextresultdelta.py index 0e7d78b06f..f3f2f48f31 100644 --- a/google/genai/_gaos/types/interactions/urlcontextresultdelta.py +++ b/google/genai/_gaos/types/interactions/urlcontextresultdelta.py @@ -18,13 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .urlcontextresult import URLContextResult, URLContextResultParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional +from typing import Any, List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -52,19 +57,39 @@ class URLContextResultDelta(BaseModel): pydantic.Field(alias="type"), ] = "url_context_result" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["is_error", "signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/urlcontextresultstep.py b/google/genai/_gaos/types/interactions/urlcontextresultstep.py index 37cbc916b9..95a692d45c 100644 --- a/google/genai/_gaos/types/interactions/urlcontextresultstep.py +++ b/google/genai/_gaos/types/interactions/urlcontextresultstep.py @@ -18,13 +18,25 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import Base64EncodedString, Base64FileInput, BaseModel, UNSET_SENTINEL +from .. import ( + Base64EncodedString, + Base64FileInput, + BaseModel, + UNSET_SENTINEL, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .urlcontextresult import URLContextResult, URLContextResultParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional, Union +from typing import Any, List, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -65,19 +77,39 @@ class URLContextResultStep(BaseModel): pydantic.Field(alias="type"), ] = "url_context_result" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["is_error", "signature"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/usage.py b/google/genai/_gaos/types/interactions/usage.py index 40bf0c1abc..afa41f72a7 100644 --- a/google/genai/_gaos/types/interactions/usage.py +++ b/google/genai/_gaos/types/interactions/usage.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .groundingtoolcount import GroundingToolCount, GroundingToolCountTypedDict from .modalitytokens import ModalityTokens, ModalityTokensTypedDict from pydantic import model_serializer @@ -99,6 +104,9 @@ class Usage(BaseModel): r"""Number of tokens present in tool-use prompt(s).""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -116,15 +124,29 @@ def serialize_model(self, handler): "total_tool_use_tokens", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/userinputstep.py b/google/genai/_gaos/types/interactions/userinputstep.py index 931d7c1c73..366df2c3f7 100644 --- a/google/genai/_gaos/types/interactions/userinputstep.py +++ b/google/genai/_gaos/types/interactions/userinputstep.py @@ -18,13 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .content import Content, ContentParam import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional +from typing import Any, List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -45,19 +50,39 @@ class UserInputStep(BaseModel): pydantic.Field(alias="type"), ] = "user_input" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["content"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/verbatimtranscriptionmode.py b/google/genai/_gaos/types/interactions/verbatimtranscriptionmode.py index aa0c070ba7..bac7426201 100644 --- a/google/genai/_gaos/types/interactions/verbatimtranscriptionmode.py +++ b/google/genai/_gaos/types/interactions/verbatimtranscriptionmode.py @@ -18,12 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import List, Literal, Optional +from typing import Any, List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -55,19 +60,39 @@ class VerbatimTranscriptionMode(BaseModel): pydantic.Field(alias="type"), ] = "verbatim" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["diarization_mode", "timestamp_granularities"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/vertexaisearchconfig.py b/google/genai/_gaos/types/interactions/vertexaisearchconfig.py index ef57896db2..4e8c387065 100644 --- a/google/genai/_gaos/types/interactions/vertexaisearchconfig.py +++ b/google/genai/_gaos/types/interactions/vertexaisearchconfig.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict @@ -43,17 +48,34 @@ class VertexAISearchConfig(BaseModel): r"""Optional. Used to specify Vertex AI Search engine.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["datastores", "engine"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/videoconfig.py b/google/genai/_gaos/types/interactions/videoconfig.py index f53bf24cf9..9a2f92e911 100644 --- a/google/genai/_gaos/types/interactions/videoconfig.py +++ b/google/genai/_gaos/types/interactions/videoconfig.py @@ -18,7 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Literal, Optional, Union from typing_extensions import NotRequired, TypedDict @@ -61,17 +72,34 @@ class VideoConfig(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["task"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/videocontent.py b/google/genai/_gaos/types/interactions/videocontent.py index 78820a860c..bdcf9d2d14 100644 --- a/google/genai/_gaos/types/interactions/videocontent.py +++ b/google/genai/_gaos/types/interactions/videocontent.py @@ -24,14 +24,21 @@ BaseModel, UNSET_SENTINEL, UnrecognizedStr, + current_exclude_none, + serialize_with_info, ) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .mediaprocessing import MediaProcessing, MediaProcessingParam from .mediaresolution import MediaResolution import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict @@ -117,21 +124,41 @@ class VideoContent(BaseModel): uri: Optional[str] = None r"""The URI of the video.""" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( ["data", "mime_type", "name", "processing", "resolution", "uri"] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/videodelta.py b/google/genai/_gaos/types/interactions/videodelta.py index a568d811d0..30f1cc4746 100644 --- a/google/genai/_gaos/types/interactions/videodelta.py +++ b/google/genai/_gaos/types/interactions/videodelta.py @@ -18,13 +18,24 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .mediaresolution import MediaResolution import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -67,19 +78,39 @@ class VideoDelta(BaseModel): uri: Optional[str] = None + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["data", "mime_type", "resolution", "uri"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/videoresponseformat.py b/google/genai/_gaos/types/interactions/videoresponseformat.py index 9b579424d6..4e87b23a8d 100644 --- a/google/genai/_gaos/types/interactions/videoresponseformat.py +++ b/google/genai/_gaos/types/interactions/videoresponseformat.py @@ -18,12 +18,23 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional, Union +from typing import Any, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypedDict @@ -102,21 +113,41 @@ class VideoResponseFormat(BaseModel): pydantic.Field(alias="type"), ] = "video" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( ["aspect_ratio", "delivery", "duration", "gcs_uri", "resolution"] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/webhookconfig.py b/google/genai/_gaos/types/interactions/webhookconfig.py index 61051f0e0b..ba2b28ec06 100644 --- a/google/genai/_gaos/types/interactions/webhookconfig.py +++ b/google/genai/_gaos/types/interactions/webhookconfig.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Any, Dict, List, Optional from typing_extensions import NotRequired, TypedDict @@ -51,17 +56,34 @@ class WebhookConfig(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["uris", "user_metadata"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/interactions/wordinfo.py b/google/genai/_gaos/types/interactions/wordinfo.py index 55d1008547..018b64cf61 100644 --- a/google/genai/_gaos/types/interactions/wordinfo.py +++ b/google/genai/_gaos/types/interactions/wordinfo.py @@ -18,12 +18,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ...utils import validate_const +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional +from typing import Any, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -93,7 +98,13 @@ class WordInfo(BaseModel): pydantic.Field(alias="type"), ] = "word_info" + def model_post_init(self, context: Any, /) -> None: + self.__pydantic_fields_set__.update(["type"]) + @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -105,16 +116,30 @@ def serialize_model(self, handler): "text", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/security.py b/google/genai/_gaos/types/security.py index a3bff49b46..103983cf7b 100644 --- a/google/genai/_gaos/types/security.py +++ b/google/genai/_gaos/types/security.py @@ -18,8 +18,13 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from . import BaseModel, UNSET_SENTINEL +from . import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info from ..utils import FieldMetadata, SecurityMetadata +from .basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) import pydantic from pydantic import model_serializer from typing import Dict, Optional @@ -76,18 +81,35 @@ class Security(BaseModel): r"""Additional default headers to apply before request-specific headers and auth.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["accessToken", "apiKey", "defaultHeaders"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/triggers/listtriggerexecutionsresponse.py b/google/genai/_gaos/types/triggers/listtriggerexecutionsresponse.py index 2c6ecff808..c07343d477 100644 --- a/google/genai/_gaos/types/triggers/listtriggerexecutionsresponse.py +++ b/google/genai/_gaos/types/triggers/listtriggerexecutionsresponse.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .triggerexecution import TriggerExecution, TriggerExecutionTypedDict from pydantic import model_serializer from typing import List, Optional @@ -48,17 +53,34 @@ class ListTriggerExecutionsResponse(BaseModel): r"""The list of trigger executions.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["next_page_token", "trigger_executions"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/triggers/listtriggersresponse.py b/google/genai/_gaos/types/triggers/listtriggersresponse.py index a87ad4111b..4557270739 100644 --- a/google/genai/_gaos/types/triggers/listtriggersresponse.py +++ b/google/genai/_gaos/types/triggers/listtriggersresponse.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .trigger import Trigger, TriggerTypedDict from pydantic import model_serializer from typing import List, Optional @@ -48,17 +53,34 @@ class ListTriggersResponse(BaseModel): r"""The list of triggers.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["next_page_token", "triggers"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/triggers/trigger.py b/google/genai/_gaos/types/triggers/trigger.py index 9e9757d4da..f2c26acee8 100644 --- a/google/genai/_gaos/types/triggers/trigger.py +++ b/google/genai/_gaos/types/triggers/trigger.py @@ -18,7 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..interactions import createagentinteraction as interactions_createagentinteraction from datetime import datetime from pydantic import model_serializer @@ -143,6 +154,9 @@ class Trigger(BaseModel): r"""Output only. The time when the trigger was last updated.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -161,15 +175,29 @@ def serialize_model(self, handler): "update_time", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/triggers/triggercreateparams.py b/google/genai/_gaos/types/triggers/triggercreateparams.py index 2f20a92931..e247fd28f4 100644 --- a/google/genai/_gaos/types/triggers/triggercreateparams.py +++ b/google/genai/_gaos/types/triggers/triggercreateparams.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..interactions import createagentinteraction as interactions_createagentinteraction from pydantic import model_serializer from typing import Optional @@ -77,6 +82,9 @@ class TriggerCreateParams(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -86,15 +94,29 @@ def serialize_model(self, handler): "max_consecutive_failures", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/triggers/triggerexecution.py b/google/genai/_gaos/types/triggers/triggerexecution.py index b5c45d0ae7..a74114ca68 100644 --- a/google/genai/_gaos/types/triggers/triggerexecution.py +++ b/google/genai/_gaos/types/triggers/triggerexecution.py @@ -18,7 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from datetime import datetime from pydantic import model_serializer from typing import Literal, Optional, Union @@ -92,6 +103,9 @@ class TriggerExecution(BaseModel): r"""Output only. The status of the execution.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -104,15 +118,29 @@ def serialize_model(self, handler): "status", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/triggers/triggerupdate.py b/google/genai/_gaos/types/triggers/triggerupdate.py index 4892d9e563..21a8812c97 100644 --- a/google/genai/_gaos/types/triggers/triggerupdate.py +++ b/google/genai/_gaos/types/triggers/triggerupdate.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Literal, Optional from typing_extensions import NotRequired, TypedDict @@ -51,17 +56,34 @@ class TriggerUpdate(BaseModel): r"""Optional. The status of the trigger.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["display_name", "status"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/voices/createvoicerequest.py b/google/genai/_gaos/types/voices/createvoicerequest.py index f2711b5c62..16a5383b09 100644 --- a/google/genai/_gaos/types/voices/createvoicerequest.py +++ b/google/genai/_gaos/types/voices/createvoicerequest.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .voice_input import VoiceInput, VoiceInputParam from pydantic import model_serializer from typing import Optional @@ -78,17 +83,34 @@ class CreateVoiceRequest(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["store"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/voices/listvoicesresponse.py b/google/genai/_gaos/types/voices/listvoicesresponse.py index 91c1c6f142..bdb60eb2e5 100644 --- a/google/genai/_gaos/types/voices/listvoicesresponse.py +++ b/google/genai/_gaos/types/voices/listvoicesresponse.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .voice_output import VoiceOutput, VoiceOutputTypedDict from pydantic import model_serializer from typing import List, Optional @@ -48,17 +53,34 @@ class ListVoicesResponse(BaseModel): r"""The voices from the specified collection.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["next_page_token", "voices"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/voices/promptedvoice.py b/google/genai/_gaos/types/voices/promptedvoice.py index e32281fcc2..aecc728797 100644 --- a/google/genai/_gaos/types/voices/promptedvoice.py +++ b/google/genai/_gaos/types/voices/promptedvoice.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict @@ -65,17 +70,34 @@ class PromptedVoice(BaseModel): """ @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["base_voice"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/voices/voice_input.py b/google/genai/_gaos/types/voices/voice_input.py index 724b9111da..d94fe696a8 100644 --- a/google/genai/_gaos/types/voices/voice_input.py +++ b/google/genai/_gaos/types/voices/voice_input.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .audiodata import AudioData, AudioDataParam from .pitch import Pitch from .promptedvoice import PromptedVoice, PromptedVoiceParam @@ -152,6 +157,9 @@ class VoiceInput(BaseModel): r"""Audio payload used for voice creation.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -170,15 +178,29 @@ def serialize_model(self, handler): "sample_audio", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/voices/voice_output.py b/google/genai/_gaos/types/voices/voice_output.py index a20f6936f5..a3b51d6c2f 100644 --- a/google/genai/_gaos/types/voices/voice_output.py +++ b/google/genai/_gaos/types/voices/voice_output.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from ..interactions import usage as interactions_usage from .audiodata import AudioData, AudioDataParam from .pitch import Pitch @@ -200,6 +205,9 @@ class VoiceOutput(BaseModel): r"""Statistics on the interaction request's token usage.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -221,15 +229,29 @@ def serialize_model(self, handler): "usage", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/webhooks/rotatesigningsecretrequest.py b/google/genai/_gaos/types/webhooks/rotatesigningsecretrequest.py index 0d33bb2c32..5ba71ad89a 100644 --- a/google/genai/_gaos/types/webhooks/rotatesigningsecretrequest.py +++ b/google/genai/_gaos/types/webhooks/rotatesigningsecretrequest.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Literal, Optional from typing_extensions import NotRequired, TypedDict @@ -45,17 +50,34 @@ class RotateSigningSecretRequest(BaseModel): r"""Optional. The revocation behavior for previous signing secrets.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["revocation_behavior"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/webhooks/signingsecret.py b/google/genai/_gaos/types/webhooks/signingsecret.py index 4531a4fe57..3159062365 100644 --- a/google/genai/_gaos/types/webhooks/signingsecret.py +++ b/google/genai/_gaos/types/webhooks/signingsecret.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from datetime import datetime from pydantic import model_serializer from typing import Optional @@ -44,17 +49,34 @@ class SigningSecret(BaseModel): r"""Output only. The truncated version of the signing secret.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["expire_time", "truncated_secret"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/webhooks/webhook.py b/google/genai/_gaos/types/webhooks/webhook.py index 6c82c8b595..10fb5cf88e 100644 --- a/google/genai/_gaos/types/webhooks/webhook.py +++ b/google/genai/_gaos/types/webhooks/webhook.py @@ -18,7 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .signingsecret import SigningSecret, SigningSecretTypedDict from datetime import datetime from pydantic import model_serializer @@ -130,6 +141,9 @@ class Webhook(BaseModel): r"""Output only. The timestamp when the webhook was last updated.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set( [ @@ -142,16 +156,30 @@ def serialize_model(self, handler): "update_time", ] ) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m @@ -198,17 +226,34 @@ class WebhookInput(BaseModel): r"""Optional. The user-provided name of the webhook.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["name"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/webhooks/webhooklistresponse.py b/google/genai/_gaos/types/webhooks/webhooklistresponse.py index 881ac184fa..74c669e1f5 100644 --- a/google/genai/_gaos/types/webhooks/webhooklistresponse.py +++ b/google/genai/_gaos/types/webhooks/webhooklistresponse.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from .webhook import Webhook, WebhookTypedDict from pydantic import model_serializer from typing import List, Optional @@ -48,17 +53,34 @@ class WebhookListResponse(BaseModel): r"""The webhooks.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["next_page_token", "webhooks"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/webhooks/webhookrotatesigningsecretresponse.py b/google/genai/_gaos/types/webhooks/webhookrotatesigningsecretresponse.py index b1ed073a3a..552c9aaae2 100644 --- a/google/genai/_gaos/types/webhooks/webhookrotatesigningsecretresponse.py +++ b/google/genai/_gaos/types/webhooks/webhookrotatesigningsecretresponse.py @@ -18,7 +18,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL +from .. import BaseModel, UNSET_SENTINEL, current_exclude_none, serialize_with_info +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict @@ -38,17 +43,34 @@ class WebhookRotateSigningSecretResponse(BaseModel): r"""Output only. The newly generated signing secret.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["secret"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/types/webhooks/webhookupdate.py b/google/genai/_gaos/types/webhooks/webhookupdate.py index 078d0b9889..5831feed75 100644 --- a/google/genai/_gaos/types/webhooks/webhookupdate.py +++ b/google/genai/_gaos/types/webhooks/webhookupdate.py @@ -18,7 +18,18 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .. import BaseModel, UNSET_SENTINEL, UnrecognizedStr +from .. import ( + BaseModel, + UNSET_SENTINEL, + UnrecognizedStr, + current_exclude_none, + serialize_with_info, +) +from ..basemodel import ( + current_by_alias, + current_filtered_dump, + current_serialization_methods_dump, +) from pydantic import model_serializer from typing import List, Literal, Optional, Union from typing_extensions import NotRequired, TypedDict @@ -96,17 +107,34 @@ class WebhookUpdate(BaseModel): r"""Optional. The URI to which webhook events will be sent.""" @model_serializer(mode="wrap") + def _serialize_model_with_info(self, handler, info): + return serialize_with_info(self.serialize_model, handler, info) + def serialize_model(self, handler): optional_fields = set(["name", "state", "subscribed_events", "uri"]) + exclude_none = current_exclude_none() + by_alias = current_by_alias() + use_field_names = by_alias is False + serialization_methods_dump = current_serialization_methods_dump() + skip_filtered = ( + serialization_methods_dump + or exclude_none is False + or current_filtered_dump() + ) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) + k = f.alias if f.alias is not None else n + key = k if by_alias or k in serialized else n + if key not in serialized and skip_filtered: + continue + val = serialized.pop(key, None) if val != UNSET_SENTINEL: if val is not None or k not in optional_fields: - m[k] = val + m[n if use_field_names else k] = val + for k, v in serialized.items(): + m[k] = v return m diff --git a/google/genai/_gaos/utils/__init__.py b/google/genai/_gaos/utils/__init__.py index 89349a94d6..00b9a35657 100644 --- a/google/genai/_gaos/utils/__init__.py +++ b/google/genai/_gaos/utils/__init__.py @@ -35,6 +35,7 @@ async def run_sync_in_thread(func: Callable[..., _T], *args) -> _T: from .datetimes import parse_datetime, parse_duration from .enums import OpenEnumMeta from .unions import parse_open_union + from .unions import dispatch_open_union_members from .headers import get_headers, get_response_headers from .metadata import ( FieldMetadata, @@ -82,6 +83,7 @@ async def run_sync_in_thread(func: Callable[..., _T], *args) -> _T: __all__ = [ "BackoffStrategy", + "dispatch_open_union_members", "FieldMetadata", "find_metadata", "FormMetadata", @@ -138,6 +140,7 @@ async def run_sync_in_thread(func: Callable[..., _T], *args) -> _T: _dynamic_imports: dict[str, str] = { "BackoffStrategy": ".retries", + "dispatch_open_union_members": ".unions", "FieldMetadata": ".metadata", "find_metadata": ".metadata", "FormMetadata": ".metadata", diff --git a/google/genai/_gaos/utils/serializers.py b/google/genai/_gaos/utils/serializers.py index 99747b4f68..00e3f13152 100644 --- a/google/genai/_gaos/utils/serializers.py +++ b/google/genai/_gaos/utils/serializers.py @@ -131,8 +131,10 @@ def validate(c): ALLOW_UNKNOWN_UNION_VARIANTS = "speakeasy_allow_unknown_union_variants" """Validation-context key enabling the Unknown fallback on open discriminated -unions. The SDK sets it when deserializing server responses; validation -without it (e.g. of user-constructed request payloads) stays strict. Pass +unions for known discriminator values whose payload fails validation. The SDK +sets it when deserializing server responses; validation without it (e.g. of +user-constructed request payloads) raises for invalid payloads of known +variants. Pass ``context={ALLOW_UNKNOWN_UNION_VARIANTS: True}`` to ``model_validate`` to opt in when parsing response payloads manually.""" @@ -295,7 +297,9 @@ def marshal_json(val, typ): m = marshaller(body=val) - d = m.model_dump(by_alias=True, mode="json", exclude_none=True) + d = m.model_dump( + by_alias=True, mode="json", exclude_none=getattr(m, "body") is None + ) if len(d) == 0: return "" diff --git a/google/genai/_gaos/utils/unions.py b/google/genai/_gaos/utils/unions.py index a205b82d54..0c7eb6e738 100644 --- a/google/genai/_gaos/utils/unions.py +++ b/google/genai/_gaos/utils/unions.py @@ -17,9 +17,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" -from typing import Any, Mapping +from functools import partial +from typing import Any, Mapping, Optional -from pydantic import BaseModel, TypeAdapter, ValidationError, ValidationInfo +from pydantic import ( + BaseModel, + TypeAdapter, + ValidationError, + ValidationInfo, + ValidatorFunctionWrapHandler, +) +from typing_extensions import Annotated, get_args, get_origin def parse_open_union( @@ -36,14 +44,17 @@ def parse_open_union( Known discriminator values are dispatched to their variant types. - The Unknown fallback only applies when the validation context carries + Unknown discriminator values produce an instance of the fallback class, + preserving the raw payload, which serializes back unchanged. This applies + to server responses and to request payloads alike. + + Known discriminator values whose payload fails variant validation (e.g. a + partial variant emitted by a newer server) also produce the fallback + class, but only when the validation context carries ALLOW_UNKNOWN_UNION_VARIANTS, which the SDK sets when deserializing - server responses. There, unknown discriminator values — or known - discriminator values whose payload fails variant validation (e.g. a - partial variant emitted by a newer server) — produce an instance of the - fallback class, preserving the raw payload for inspection. Without the - flag (e.g. user-constructed request payloads), invalid values raise so - mistakes surface locally instead of being sent to the server. + server responses. Without the flag (e.g. user-constructed request + payloads), they raise so mistakes surface locally instead of being sent + to the server. Non-dict values and dicts missing the discriminator deliberately raise instead of falling back, so pydantic can try sibling branches of an @@ -63,9 +74,7 @@ def parse_open_union( disc = v[disc_key] variant_cls = variants.get(disc) if variant_cls is None: - if fallback_allowed: - return unknown_cls(raw=v) - raise ValueError(f"{union_name}: unrecognized {disc_key} value {disc!r}") + return unknown_cls(raw=v) try: if isinstance(variant_cls, type) and issubclass(variant_cls, BaseModel): return variant_cls.model_validate(v, context=info.context) @@ -79,3 +88,171 @@ def parse_open_union( return construct_unvalidated(v, variant_cls) return unknown_cls(raw=v) + + +def decline_sibling_variants( + value: Any, + handler: ValidatorFunctionWrapHandler, + info: ValidationInfo, + *, + union_name: str, + sibling_variants: tuple[tuple[str, frozenset[str]], ...], +) -> Any: + """Validate an open union member of an enclosing non-discriminated union. + + Outside server responses, the Unknown fallback is declined for a value + whose discriminator another open union member of the enclosing union + recognizes (sibling_variants: per discriminator property, the values of + those members), so the enclosing union selects a different member. + """ + # pylint: disable=import-outside-toplevel + from .serializers import ALLOW_UNKNOWN_UNION_VARIANTS + + result = handler(value) + context = info.context + if ( + getattr(result, "is_unknown", False) is not True + or not isinstance(value, dict) + or ( + isinstance(context, Mapping) + and bool(context.get(ALLOW_UNKNOWN_UNION_VARIANTS)) + ) + ): + return result + for key, values in sibling_variants: + disc = value.get(key) + if isinstance(disc, str) and disc in values: + raise ValueError( + f"{union_name}: {key} value {disc!r} belongs to another member of the enclosing union" + ) + return result + + +_DispatchMember = tuple[int, Optional[type], str, Mapping[str, Any]] + +_DISPATCH_MEMBERS: dict[int, tuple[tuple[Any, ...], list[_DispatchMember]]] = {} +_DISPATCH_ADAPTERS: dict[int, tuple[Any, TypeAdapter]] = {} + + +def _open_union_keywords(tp: Any) -> Optional[Mapping[str, Any]]: + if get_origin(tp) is not Annotated: + return None + for metadata in get_args(tp)[1:]: + func = getattr(metadata, "func", None) + if isinstance(func, partial) and func.func is parse_open_union: + return func.keywords + return None + + +def _dispatch_members(members: tuple[Any, ...]) -> list[_DispatchMember]: + cached = _DISPATCH_MEMBERS.get(id(members)) + if cached is not None: + return cached[1] + described: list[_DispatchMember] = [] + for index, member in enumerate(members): + container = get_origin(member) + if container in (list, dict): + item = get_args(member)[-1] + else: + container, item = None, member + keywords = _open_union_keywords(item) + if keywords is not None: + described.append( + (index, container, keywords["disc_key"], keywords["variants"]) + ) + _DISPATCH_MEMBERS[id(members)] = (members, described) + return described + + +def _recognizes(item: Any, disc_key: str, variants: Mapping[str, Any]) -> bool: + if not isinstance(item, dict): + return False + disc = item.get(disc_key) + return isinstance(disc, str) and disc in variants + + +def _container_owners( + container: type, items: list[Any], described: list[_DispatchMember] +) -> list[int]: + candidates = [ + member + for member in described + if member[1] is container + and all(isinstance(item, dict) and member[2] in item for item in items) + ] + recognized = [ + { + index + for index, _, disc_key, variants in candidates + if _recognizes(item, disc_key, variants) + } + for item in items + ] + return [ + index + for index, _, _, _ in candidates + if any(index in owners for owners in recognized) + and all(index in owners for owners in recognized if owners) + ] + + +def _owning_member(value: Any, described: list[_DispatchMember]) -> Optional[int]: + if isinstance(value, dict): + owners = [ + index + for index, container, disc_key, variants in described + if container is None and _recognizes(value, disc_key, variants) + ] + owners += _container_owners(dict, list(value.values()), described) + elif isinstance(value, list): + owners = _container_owners(list, value, described) + else: + return None + return owners[0] if len(owners) == 1 else None + + +def _dispatch_adapter(member: Any) -> TypeAdapter: + cached = _DISPATCH_ADAPTERS.get(id(member)) + if cached is None: + cached = (member, TypeAdapter(member)) + _DISPATCH_ADAPTERS[id(member)] = cached + return cached[1] + + +def dispatch_open_union_members( + value: Any, + handler: ValidatorFunctionWrapHandler, + info: ValidationInfo, + *, + members: tuple[Any, ...], +) -> Any: + """Validate a union value against the open discriminated union that owns it. + + members lists the union's open discriminated unions, directly or as list or + dict items. An object belongs to the members whose discriminator mapping + contains its discriminator value. A list or dict belongs to a container + member when every item is an object with that member's discriminator field, + and that member recognizes at least one item and every recognized item. + With exactly one owner, the value is validated against that member first, + so another member's Unknown fallback cannot claim it. Otherwise, or when + the owner rejects the value, the enclosing union validates the value as + usual; if that also fails, the owner's error is raised. + """ + owner = _owning_member(value, _dispatch_members(members)) + if owner is None: + return handler(value) + adapter = _dispatch_adapter(members[owner]) + try: + return adapter.validate_python(value, context=info.context) + except ValidationError: + pass + try: + return handler(value) + except ValidationError: + pass + # Validate against the owner again so that its error propagates as a fresh + # exception. Re-raising the ValidationError caught above from this wrap + # validator, after the handler has failed, makes CPython debug builds abort + # in the garbage collector ("refcount is too small") with pydantic-core + # 2.41. + return adapter.validate_python(value, context=info.context) diff --git a/google/genai/_gaos/voices.py b/google/genai/_gaos/voices.py index 454f466f56..1684c55f36 100644 --- a/google/genai/_gaos/voices.py +++ b/google/genai/_gaos/voices.py @@ -96,7 +96,7 @@ def list( voices with any of the specified region codes (OR). :param search: Optional. Free-text substring search query matched case-insensitively against both `display_name` and `description`. Maximum 2048 bytes. - :param type: Optional. Filter by voice type. Accepts `\"prebuilt\"`, `\"replicated\"`, + :param type_: Optional. Filter by voice type. Accepts `\"prebuilt\"`, `\"replicated\"`, `\"prompted\"` (case-insensitive). If multiple values are specified, matches voices with any of the specified types (OR). :param extra_headers: Additional headers to set or replace on requests. @@ -832,7 +832,7 @@ async def list( voices with any of the specified region codes (OR). :param search: Optional. Free-text substring search query matched case-insensitively against both `display_name` and `description`. Maximum 2048 bytes. - :param type: Optional. Filter by voice type. Accepts `\"prebuilt\"`, `\"replicated\"`, + :param type_: Optional. Filter by voice type. Accepts `\"prebuilt\"`, `\"replicated\"`, `\"prompted\"` (case-insensitive). If multiple values are specified, matches voices with any of the specified types (OR). :param extra_headers: Additional headers to set or replace on requests. diff --git a/google/genai/tests/gaos/test_serialization_requirements.py b/google/genai/tests/gaos/test_serialization_requirements.py new file mode 100644 index 0000000000..b92a3f300d --- /dev/null +++ b/google/genai/tests/gaos/test_serialization_requirements.py @@ -0,0 +1,501 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Serialization requirements for the generated Interactions models. + +These tests describe how the generated models must behave, including the +behavior added in speakeasy-api/openapi-generation v2.955.0: + +* speakeasy-api/openapi-generation#168: honour dump filters (`include`, + `exclude`, `exclude_unset`, `exclude_defaults`) when `exclude_none=True`. +* speakeasy-api/openapi-generation#169: serialize unknown open-union variants + as their raw payload. +* speakeasy-api/openapi-generation#170: pick the matching open union inside + unions of open unions. +* speakeasy-api/openapi-generation#171: accept unknown discriminator values in + request input when `preserveUnknownFields` is enabled. +""" + +from __future__ import annotations + +import copy +import json +from typing import Any + +import pydantic +import pytest + +# Import the generated types and errors through `_gaos` rather than the public +# `interactions`/`_interactions` modules: `run_tests.sh --private` rewrites +# `_gaos` imports to `_gaos_private`, so the classes match the client under test. +from ..._gaos import utils as gaos_utils +from ..._gaos.lib import compat_errors as _interactions +from ..._gaos.types import interactions +from . import conftest + + +_MODEL = "gemini-3.5-flash" +_URI = "https://example.com/report.pdf" + +_UNKNOWN_ANNOTATION = {"type": "future_annotation_kind", "score": 0.9} +_UNKNOWN_CONTENT = {"type": "future_content_kind", "payload": {"a": [1, None]}} +_UNKNOWN_STEP = {"type": "future_step_kind", "detail": "server-only"} + +# A previous turn as the server returns it: one model output step whose text +# block carries an annotation type this SDK does not know, followed by a step +# with a content block type and a step type this SDK does not know. +_PREVIOUS_STEPS = [ + { + "type": "model_output", + "content": [{ + "type": "text", + "text": "Hello there.", + "annotations": [_UNKNOWN_ANNOTATION], + }], + }, + {"type": "model_output", "content": [_UNKNOWN_CONTENT]}, + _UNKNOWN_STEP, +] + + +def _interaction(**fields: Any) -> dict[str, Any]: + return { + "id": "v1_requirements", + "model": _MODEL, + "status": "completed", + "created": "2026-10-28T12:00:00Z", + "updated": "2026-10-28T12:00:00Z", + **fields, + } + + +def _previous_turn( + server: conftest.MockGaosServer, +) -> interactions.Interaction: + """Returns an Interaction parsed from a real SDK response.""" + server.responses.append(_interaction(steps=copy.deepcopy(_PREVIOUS_STEPS))) + return server.client.interactions.create(model=_MODEL, input="Hi") + + +def _send_history(server: conftest.MockGaosServer, history: Any) -> Any: + """Sends `history` back as the next turn's input; returns the sent input.""" + server.responses.append(_interaction(steps=[])) + server.client.interactions.create(model=_MODEL, input=history, store=False) + return server.captured_bodies[-1]["input"] + + +# --------------------------------------------------------------------------- +# Unknown open-union variants: serialization. +# --------------------------------------------------------------------------- + + +def test_unknown_variants_are_parsed_into_unknown_classes( + mock_gaos_server: conftest.MockGaosServer, +): + steps = _previous_turn(mock_gaos_server).steps + + annotation = steps[0].content[0].annotations[0] + assert isinstance(annotation, interactions.UnknownAnnotation) + assert annotation.raw == _UNKNOWN_ANNOTATION + assert isinstance(steps[1].content[0], interactions.UnknownContent) + assert steps[1].content[0].raw == _UNKNOWN_CONTENT + assert isinstance(steps[2], interactions.UnknownStep) + assert steps[2].raw == _UNKNOWN_STEP + + +def test_unknown_variants_to_dict_and_to_json_return_raw_payload( + mock_gaos_server: conftest.MockGaosServer, +): + interaction = _previous_turn(mock_gaos_server) + + assert interaction.to_dict()["steps"] == _PREVIOUS_STEPS + assert json.loads(interaction.to_json())["steps"] == _PREVIOUS_STEPS + + +@pytest.mark.parametrize( + "dump", + [ + lambda m: m.model_dump(), + lambda m: m.model_dump(mode="json"), + lambda m: m.model_dump(by_alias=True), + lambda m: json.loads(m.model_dump_json()), + ], + ids=["python", "json", "by_alias", "model_dump_json"], +) +def test_unknown_variants_model_dump_returns_raw_payload( + mock_gaos_server: conftest.MockGaosServer, dump +): + interaction = _previous_turn(mock_gaos_server) + + assert dump(interaction)["steps"] == _PREVIOUS_STEPS + assert dump(interaction.steps[2]) == _UNKNOWN_STEP + + +def test_previous_steps_sent_back_as_objects_use_raw_payload( + mock_gaos_server: conftest.MockGaosServer, +): + """Stateless multi-turn (`store=False`) with the parsed step objects.""" + steps = _previous_turn(mock_gaos_server).steps + + assert _send_history(mock_gaos_server, steps) == _PREVIOUS_STEPS + + +def test_request_body_never_contains_the_sdk_wrapper( + mock_gaos_server: conftest.MockGaosServer, +): + steps = _previous_turn(mock_gaos_server).steps + + sent = json.dumps(_send_history(mock_gaos_server, steps)) + assert '"UNKNOWN"' not in sent + assert "is_unknown" not in sent + + +# --------------------------------------------------------------------------- +# Unknown open-union variants: request input built from stored history. +# With preserveUnknownFields, request input accepts unknown discriminator +# values (speakeasy-api/openapi-generation#171). +# `client.interactions.create` validates its arguments with `utils.unmarshal`, +# which passes no validation context, so this must hold without a context flag. +# --------------------------------------------------------------------------- + + +@pytest.mark.parametrize( + "store", + [ + lambda m: m.to_dict()["steps"], + lambda m: json.loads(m.to_json())["steps"], + lambda m: m.model_dump(mode="json", by_alias=True)["steps"], + # The documented stateless sample: history.append(step.model_dump()). + lambda m: [step.model_dump() for step in m.steps], + ], + ids=["to_dict", "to_json", "model_dump_json_mode", "docs_step_model_dump"], +) +def test_previous_steps_sent_back_from_stored_dicts_use_raw_payload( + mock_gaos_server: conftest.MockGaosServer, store +): + """Stateless multi-turn with history persisted as JSON between requests.""" + stored = json.loads(json.dumps(store(_previous_turn(mock_gaos_server)))) + + assert _send_history(mock_gaos_server, stored) == _PREVIOUS_STEPS + + +def test_request_models_accept_unknown_variants_without_context(): + """`Model(...)` and `model_validate` without context must accept them.""" + built = interactions.CreateModelInteraction( + model=_MODEL, input=copy.deepcopy(_PREVIOUS_STEPS) + ) + validated = interactions.CreateModelInteraction.model_validate( + {"model": _MODEL, "input": copy.deepcopy(_PREVIOUS_STEPS)} + ) + + for request in (built, validated): + body = json.loads( + gaos_utils.marshal_json(request, interactions.CreateModelInteraction) + ) + assert body["input"] == _PREVIOUS_STEPS + + +@pytest.mark.parametrize( + "invalid_step", + [ + {"type": "model_output", "content": [{"type": "text", "txt": "typo"}]}, + {"type": "model_output", "content": [{"type": "text", "text": 42}]}, + ], + ids=["missing_required_field", "wrong_field_type"], +) +def test_known_variant_with_invalid_payload_still_raises(invalid_step): + """Typos in known variants must fail locally, never be sent as unknown.""" + with pytest.raises(pydantic.ValidationError): + interactions.CreateModelInteraction.model_validate( + {"model": _MODEL, "input": [invalid_step]} + ) + + +_VALID_USER_INPUT = { + "type": "user_input", + "content": [{"type": "text", "text": "hi"}], +} + +# `input` is Union[Content, List[Step], List[Content], str]. A value whose +# `type` is known to one of these members must validate as that member: it must +# never be accepted as another member's unknown variant. These shapes have no +# single owning member (mixed lists, a step outside a list), which is where a +# union-of-open-unions dispatch can skip its checks. +_MALFORMED_INPUTS = [ + pytest.param( + [{"type": "user_input", "content": "not-a-list"}], + id="invalid_known_step", + ), + pytest.param([{"type": "text", "text": 3}], id="invalid_known_content"), + pytest.param( + [ + {"type": "user_input", "content": "not-a-list"}, + {"type": "text", "text": "hi"}, + ], + id="mixed_invalid_step_and_valid_content", + ), + pytest.param( + [_VALID_USER_INPUT, {"type": "text", "text": 3}], + id="mixed_valid_step_and_invalid_content", + ), + pytest.param( + [_VALID_USER_INPUT, {"type": "text", "text": "hi"}], + id="mixed_valid_step_and_valid_content", + ), + pytest.param(_VALID_USER_INPUT, id="single_step_outside_list"), +] + + +@pytest.mark.parametrize("malformed", _MALFORMED_INPUTS) +def test_malformed_input_shapes_still_raise(malformed): + with pytest.raises(pydantic.ValidationError): + interactions.CreateModelInteraction.model_validate( + {"model": _MODEL, "input": copy.deepcopy(malformed)} + ) + + +@pytest.mark.parametrize("malformed", _MALFORMED_INPUTS) +def test_malformed_input_shapes_are_not_sent( + mock_gaos_server: conftest.MockGaosServer, malformed +): + mock_gaos_server.default_response = _interaction(steps=[]) + + with pytest.raises(Exception): + mock_gaos_server.client.interactions.create( + model=_MODEL, input=copy.deepcopy(malformed) + ) + assert not mock_gaos_server.captured_bodies + + +# --------------------------------------------------------------------------- +# Dump filters combined with exclude_none=True. +# --------------------------------------------------------------------------- + + +@pytest.mark.parametrize( + ("build", "kwargs", "expected"), + [ + ( + lambda: interactions.DocumentContent( + uri=_URI, mime_type="application/pdf" + ), + {"include": {"uri"}}, + {"uri": _URI}, + ), + ( + lambda: interactions.DocumentContent( + uri=_URI, mime_type="application/pdf" + ), + {"exclude": {"type"}}, + {"uri": _URI, "mime_type": "application/pdf"}, + ), + ( + lambda: interactions.TextContent(text="secret"), + {"exclude": {"text"}}, + {"type": "text"}, + ), + ( + lambda: interactions.TextContent(text="hi"), + {"exclude_defaults": True}, + {"text": "hi"}, + ), + ( + lambda: interactions.ModelOutputStep( + content=[interactions.TextContent(text="secret")] + ), + {"exclude": {"content": {"__all__": {"text"}}}}, + {"type": "model_output", "content": [{"type": "text"}]}, + ), + ], + ids=[ + "include", + "exclude_const", + "exclude_required", + "exclude_defaults", + "nested_exclude", + ], +) +def test_dump_filters_are_honoured_with_exclude_none(build, kwargs, expected): + assert build().model_dump(exclude_none=True, **kwargs) == expected + + +@pytest.mark.parametrize( + ("build", "kwargs", "expected"), + [ + ( + lambda: interactions.DocumentContent(uri=_URI), + {"include": {"uri"}}, + {"uri": _URI}, + ), + ( + lambda: interactions.TextContent(text="secret"), + {"exclude": {"text"}}, + {"type": "text"}, + ), + ], + ids=["include", "exclude_required"], +) +def test_dump_filters_are_honoured_without_exclude_none( + build, kwargs, expected +): + assert build().model_dump(**kwargs) == expected + + +def test_plain_exclude_none_dump_round_trips(): + original = interactions.ModelOutputStep( + content=[ + interactions.TextContent(text="hi"), + interactions.DocumentContent(uri=_URI), + ] + ) + + dumped = original.model_dump(by_alias=True, exclude_none=True) + + assert dumped == { + "type": "model_output", + "content": [ + {"type": "text", "text": "hi"}, + {"type": "document", "uri": _URI}, + ], + } + assert interactions.ModelOutputStep.model_validate(dumped) == original + + +def test_request_body_omits_optional_fields_set_to_none(): + body = gaos_utils.marshal_json( + interactions.DocumentContent(uri=_URI, mime_type=None), + interactions.DocumentContent, + ) + assert json.loads(body) == {"type": "document", "uri": _URI} + + +# --------------------------------------------------------------------------- +# Unions of open unions: InteractionsInput. +# --------------------------------------------------------------------------- + + +def _parsed_input(server: conftest.MockGaosServer, value: Any) -> Any: + server.responses.append(_interaction(input=value)) + return server.client.interactions.create(model=_MODEL, input="Hi").input + + +def test_response_input_steps_parse_as_steps( + mock_gaos_server: conftest.MockGaosServer, +): + value = _parsed_input( + mock_gaos_server, + [ + {"type": "user_input", "content": [{"type": "text", "text": "hi"}]}, + {"type": "model_output", "content": [{"type": "text", "text": "yo"}]}, + ], + ) + assert [type(v) for v in value] == [ + interactions.UserInputStep, + interactions.ModelOutputStep, + ] + + +def test_response_input_single_content_parses_as_content( + mock_gaos_server: conftest.MockGaosServer, +): + value = _parsed_input(mock_gaos_server, {"type": "text", "text": "hi"}) + assert isinstance(value, interactions.TextContent) + + +def test_response_input_content_list_parses_as_content( + mock_gaos_server: conftest.MockGaosServer, +): + value = _parsed_input( + mock_gaos_server, + [{"type": "text", "text": "hi"}, {"type": "document", "uri": _URI}], + ) + assert [type(v) for v in value] == [ + interactions.TextContent, + interactions.DocumentContent, + ] + + +def test_response_input_content_list_with_unknown_block_stays_content( + mock_gaos_server: conftest.MockGaosServer, +): + value = _parsed_input( + mock_gaos_server, + [{"type": "text", "text": "hi"}, copy.deepcopy(_UNKNOWN_CONTENT)], + ) + assert [type(v) for v in value] == [ + interactions.TextContent, + interactions.UnknownContent, + ] + + +def test_request_content_list_is_sent_as_content( + mock_gaos_server: conftest.MockGaosServer, +): + mock_gaos_server.default_response = _interaction(steps=[]) + + mock_gaos_server.client.interactions.create( + model=_MODEL, input=[{"type": "text", "text": "hi"}] + ) + + (body,) = mock_gaos_server.captured_bodies + assert body["input"][0]["content"] == [{"type": "text", "text": "hi"}] + + +# --------------------------------------------------------------------------- +# Unknown fields set to None (documented behavior, no generator change) +# --------------------------------------------------------------------------- + + +def test_unknown_field_set_to_none_is_sent_as_null(): + body = gaos_utils.marshal_json( + interactions.DocumentContent(uri=_URI, resolution=None), + interactions.DocumentContent, + ) + assert json.loads(body) == { + "type": "document", + "uri": _URI, + "resolution": None, + } + + +def test_api_rejection_of_unknown_field_surfaces_as_bad_request( + mock_gaos_server: conftest.MockGaosServer, +): + """An unknown value the API rejects surfaces as a BadRequestError.""" + + def reject( + unused_req: conftest.CapturedRequest, + unused_server: conftest.MockGaosServer, + ) -> conftest.RawHttpResponse: + return conftest.RawHttpResponse( + body=json.dumps({ + "error": { + "code": 400, + "message": "Unknown name \"resolution\".", + "status": "INVALID_ARGUMENT", + } + }).encode("utf-8"), + status=400, + ) + + mock_gaos_server.handler_fn = reject + with pytest.raises(_interactions.BadRequestError): + mock_gaos_server.client.interactions.create( + model=_MODEL, + input=[{"type": "document", "uri": _URI, "resolution": None}], + ) + assert mock_gaos_server.captured_bodies[-1]["input"][0]["content"][0] == { + "type": "document", + "uri": _URI, + "resolution": None, + } diff --git a/google/genai/tests/gaos/test_unknown_fields.py b/google/genai/tests/gaos/test_unknown_fields.py new file mode 100644 index 0000000000..42fc432cc3 --- /dev/null +++ b/google/genai/tests/gaos/test_unknown_fields.py @@ -0,0 +1,430 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Unknown-field round-trip tests for the Interactions API in the Python SDK. + +The generated models preserve fields that are not declared in the SDK schema +(`preserveUnknownFields`). These tests pin down two consequences: + +* Unknown request fields are forwarded to the API instead of being silently + dropped, so the API can reject unsupported options (for example + `transcription_config.diarization`, see + https://github.com/googleapis/python-genai/issues/3162) and the caller gets + an error instead of a silently degraded response. +* Unknown response fields survive parsing and serialization at every nesting + level, including streamed events and responses merged by automatic + continuation. +* In stateless multi-turn conversations (`store=False`), the previous turn's + steps are sent back exactly as the server returned them, unknown fields + included, whether the caller keeps the SDK objects or stores them as dicts. +""" + +from __future__ import annotations + +import base64 +import copy +import json +from typing import Any + +import pytest + +# Import the generated types and errors through `_gaos` rather than the public +# `interactions`/`_interactions` modules: `run_tests.sh --private` rewrites +# `_gaos` imports to `_gaos_private`, so the classes match the client under test. +from ..._gaos.lib import compat_errors as _interactions +from ..._gaos.types import interactions +from . import conftest + +_TRANSCRIBE_MODEL = "gemini-3.5-transcribe" +_AUDIO_INPUT = [{ + "type": "audio", + "data": base64.b64encode(b"fake-wav-bytes").decode("ascii"), + "mime_type": "audio/wav", +}] + +_UNKNOWN_DIARIZATION_ERROR = { + "error": { + "code": 400, + "message": ( + 'Invalid JSON payload received. Unknown name "diarization" at' + " 'generation_config.transcription_config': Cannot find field." + ), + "status": "INVALID_ARGUMENT", + } +} + +_INTERACTION_BODY = { + "id": "v1_unknown_fields", + "model": _TRANSCRIBE_MODEL, + "status": "completed", + "created": "2026-10-28T12:00:00Z", + "updated": "2026-10-28T12:00:00Z", + "future_top_level_field": {"nested": [1, 2, 3]}, + "steps": [{ + "type": "model_output", + "future_step_field": "step-extra", + "content": [{ + "type": "text", + "text": "Hello there.", + "future_content_field": True, + "annotations": [{ + "type": "speech_metadata", + "speaker": "spk_1", + "start_index": 0, + "end_index": 12, + "future_annotation_field": 0.97, + }], + }], + }], +} + + +def _transcription_config(sent_bodies: list[dict[str, Any]]) -> dict[str, Any]: + assert len(sent_bodies) == 1 + return sent_bodies[0]["generation_config"]["transcription_config"] + + +def _bad_request( + unused_req: conftest.CapturedRequest, + unused_server: conftest.MockGaosServer, +) -> conftest.RawHttpResponse: + return conftest.RawHttpResponse( + body=json.dumps(_UNKNOWN_DIARIZATION_ERROR).encode("utf-8"), status=400 + ) + + +def test_unknown_transcription_option_is_forwarded_and_rejection_surfaces( + mock_gaos_server: conftest.MockGaosServer, +): + """GH-3162: `diarization=True` must not be silently dropped by the SDK.""" + mock_gaos_server.handler_fn = _bad_request + + with pytest.raises(_interactions.BadRequestError) as exc_info: + mock_gaos_server.client.interactions.create( + model=_TRANSCRIBE_MODEL, + input=_AUDIO_INPUT, + generation_config={ + "transcription_config": { + "mode": {"type": "verbatim"}, + "timestamp_granularities": ["word"], + "diarization": True, + } + }, + ) + + assert exc_info.value.status_code == 400 + assert "diarization" in str(exc_info.value) + config = _transcription_config(mock_gaos_server.captured_bodies) + assert config["diarization"] is True + assert config["mode"] == {"type": "verbatim"} + assert config["timestamp_granularities"] == ["word"] + + +def test_supported_diarization_mode_is_sent( + mock_gaos_server: conftest.MockGaosServer, +): + """Positive control: the supported `diarization_mode` field is sent as-is.""" + mock_gaos_server.default_response = _INTERACTION_BODY + + mock_gaos_server.client.interactions.create( + model=_TRANSCRIBE_MODEL, + input=_AUDIO_INPUT, + generation_config={ + "transcription_config": { + "mode": {"type": "verbatim"}, + "diarization_mode": "speaker", + } + }, + ) + + config = _transcription_config(mock_gaos_server.captured_bodies) + assert config == {"mode": {"type": "verbatim"}, "diarization_mode": "speaker"} + + +def test_unknown_document_content_field_is_forwarded( + mock_gaos_server: conftest.MockGaosServer, +): + """Content fields missing from the SDK schema reach the API unchanged.""" + mock_gaos_server.default_response = _INTERACTION_BODY + + mock_gaos_server.client.interactions.create( + model="gemini-3.5-flash", + input=[ + { + "type": "document", + "uri": "https://example.com/report.pdf", + "mime_type": "application/pdf", + "resolution": "low", + }, + {"type": "text", "text": "Summarize this document."}, + ], + ) + + (body,) = mock_gaos_server.captured_bodies + # The SDK wraps bare content lists into a single `user_input` step. + assert body["input"][0]["content"][0] == { + "type": "document", + "uri": "https://example.com/report.pdf", + "mime_type": "application/pdf", + "resolution": "low", + } + + +def test_unknown_response_fields_survive_parsing_and_serialization( + mock_gaos_server: conftest.MockGaosServer, +): + mock_gaos_server.default_response = _INTERACTION_BODY + + interaction = mock_gaos_server.client.interactions.create( + model=_TRANSCRIBE_MODEL, input=_AUDIO_INPUT + ) + + assert isinstance(interaction, interactions.Interaction) + step = interaction.steps[0] + content = step.content[0] + annotation = content.annotations[0] + assert isinstance(annotation, interactions.SpeechAnnotation) + assert annotation.speaker == "spk_1" + + # Unknown fields are accessible as attributes at every nesting level. + assert interaction.future_top_level_field == {"nested": [1, 2, 3]} + assert step.future_step_field == "step-extra" + assert content.future_content_field is True + assert annotation.future_annotation_field == 0.97 + + # ...and survive every serialization entry point. + for dumped in ( + interaction.model_dump(mode="json", exclude_none=True), + json.loads(interaction.model_dump_json(exclude_none=True)), + interaction.to_dict(), + json.loads(interaction.to_json()), + ): + # `output_text` is an SDK convenience property, and `continuation_ids` is + # added by automatic continuation; neither is part of the payload. + dumped.pop("output_text", None) + assert dumped.pop("continuation_ids", None) in (None, [interaction.id]) + assert dumped == _INTERACTION_BODY + + +# --------------------------------------------------------------------------- +# Stateless multi-turn: the previous turn is sent back as the next input. +# --------------------------------------------------------------------------- + +_CHAT_MODEL = "gemini-3.5-flash" + +# A previous turn as the server returns it: unknown fields on known steps, +# content blocks and annotations, followed by a step type the SDK does not +# know. +_PREVIOUS_STEPS = [ + { + "type": "user_input", + "future_step_field": {"origin": "client"}, + "content": [{"type": "text", "text": "Hi", "future_content_field": 1}], + }, + { + "type": "model_output", + "future_step_field": "step-extra", + "content": [{ + "type": "text", + "text": "Hello there.", + "future_content_field": True, + "annotations": [{ + "type": "speech_metadata", + "speaker": "spk_1", + "start_index": 0, + "end_index": 12, + "future_annotation_field": 0.97, + }], + }], + }, + {"type": "future_step_kind", "detail": "server-only"}, +] + +# The caller's next message, with unknown fields of its own. +_NEXT_TURN = { + "type": "user_input", + "future_step_field": "next", + "content": [{"type": "text", "text": "And then?", "future_content_field": 2}], +} + + +def _chat_interaction( + steps: list[dict[str, Any]], **fields: Any +) -> dict[str, Any]: + return { + "id": "v1_multi_turn", + "model": _CHAT_MODEL, + "status": "completed", + "created": "2026-10-28T12:00:00Z", + "updated": "2026-10-28T12:00:00Z", + "future_top_level_field": {"turn": 1}, + "steps": copy.deepcopy(steps), + **fields, + } + + +_HISTORY_FORMS = pytest.mark.parametrize( + "to_history", + [ + lambda steps: list(steps), + lambda steps: [step.to_dict() for step in steps], + lambda steps: [step.model_dump() for step in steps], + lambda steps: json.loads( + json.dumps([step.model_dump(mode="json") for step in steps]) + ), + ], + ids=["objects", "to_dict", "model_dump", "stored_json"], +) + + +@_HISTORY_FORMS +def test_multi_turn_history_keeps_unknown_fields( + mock_gaos_server: conftest.MockGaosServer, to_history +): + """Turn 2 sends turn 1's steps back unchanged, plus a new user message.""" + mock_gaos_server.responses.append(_chat_interaction(_PREVIOUS_STEPS)) + mock_gaos_server.responses.append(_chat_interaction([])) + + first = mock_gaos_server.client.interactions.create( + model=_CHAT_MODEL, input="Hi", store=False + ) + mock_gaos_server.client.interactions.create( + model=_CHAT_MODEL, + input=[*to_history(first.steps), copy.deepcopy(_NEXT_TURN)], + store=False, + ) + + sent = mock_gaos_server.captured_bodies[-1]["input"] + assert sent == [*_PREVIOUS_STEPS, _NEXT_TURN] + + +@pytest.mark.asyncio +async def test_async_multi_turn_history_keeps_unknown_fields( + mock_gaos_server: conftest.MockGaosServer, +): + mock_gaos_server.responses.append(_chat_interaction(_PREVIOUS_STEPS)) + mock_gaos_server.responses.append(_chat_interaction([])) + client = mock_gaos_server.client.aio + + first = await client.interactions.create( + model=_CHAT_MODEL, input="Hi", store=False + ) + await client.interactions.create( + model=_CHAT_MODEL, + input=[*first.steps, copy.deepcopy(_NEXT_TURN)], + store=False, + ) + + sent = mock_gaos_server.captured_bodies[-1]["input"] + assert sent == [*_PREVIOUS_STEPS, _NEXT_TURN] + + +def test_streamed_events_keep_unknown_fields_and_feed_the_next_turn( + mock_gaos_server: conftest.MockGaosServer, +): + """Streamed events round-trip; the completed interaction seeds turn 2.""" + events = [ + { + "event_type": "interaction.created", + "interaction": { + "id": "v1_multi_turn", + "status": "in_progress", + "future_event_field": 1, + }, + }, + { + "event_type": "step.start", + "index": 1, + "step": { + "type": "model_output", + "future_step_field": "step-extra", + "content": [], + }, + "future_event_field": 2, + }, + { + "event_type": "step.delta", + "index": 1, + "delta": {"type": "text", "text": "Hello", "future_delta_field": 3}, + }, + {"event_type": "future.event_kind", "payload": {"a": 1}}, + { + "event_type": "interaction.completed", + "interaction": _chat_interaction(_PREVIOUS_STEPS), + }, + ] + mock_gaos_server.stream_payload = "".join( + f"event: {event['event_type']}\ndata: {json.dumps(event)}\n\n" + for event in events + ) + + received = list( + mock_gaos_server.client.interactions.create( + model=_CHAT_MODEL, input="Hi", stream=True, store=False + ) + ) + + assert [ + event.model_dump(mode="json", by_alias=True, exclude_none=True) + for event in received + ] == events + + mock_gaos_server.default_response = _chat_interaction([]) + mock_gaos_server.client.interactions.create( + model=_CHAT_MODEL, + input=[*received[-1].interaction.steps, copy.deepcopy(_NEXT_TURN)], + store=False, + ) + sent = mock_gaos_server.captured_bodies[-1]["input"] + assert sent == [*_PREVIOUS_STEPS, _NEXT_TURN] + + +def test_automatic_continuation_keeps_unknown_fields_from_every_hop( + mock_gaos_server: conftest.MockGaosServer, +): + """Merging continuation hops keeps each hop's unknown fields and steps.""" + second_hop_steps = [ + { + "type": "model_output", + "future_step_field": "hop-2", + "content": [ + {"type": "text", "text": "More.", "future_content_field": 3} + ], + }, + {"type": "future_step_kind", "detail": "hop-2"}, + ] + mock_gaos_server.responses.append( + _chat_interaction( + _PREVIOUS_STEPS, + id="v1_hop_1", + status="requires_continuation", + continuation_token="dG9rX2hvcF8x", + ) + ) + mock_gaos_server.responses.append( + _chat_interaction( + second_hop_steps, + id="v1_hop_2", + future_top_level_field={"turn": 2}, + ) + ) + + merged = mock_gaos_server.client.interactions.create( + model=_CHAT_MODEL, input="Hi", automatic_continuation=True + ) + + assert len(mock_gaos_server.captured_bodies) == 2 + dumped = merged.to_dict() + assert dumped["steps"] == [*_PREVIOUS_STEPS, *second_hop_steps] + # Top-level fields describe the final hop. + assert dumped["future_top_level_field"] == {"turn": 2}