"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations from .observabilityfilterrulesconfig import ( ObservabilityFilterRulesConfig, ObservabilityFilterRulesConfigTypedDict, ) from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL import pydantic from pydantic import model_serializer from typing import Dict, List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict class ObservabilitySnowflakeDestinationConfigTypedDict(TypedDict): account: str token: str database: NotRequired[str] headers: NotRequired[Dict[str, str]] r"""Custom HTTP headers to include in requests to this destination.""" schema_: NotRequired[str] table: NotRequired[str] warehouse: NotRequired[str] class ObservabilitySnowflakeDestinationConfig(BaseModel): account: str token: str database: Optional[str] = "SNOWFLAKE_LEARNING_DB" headers: Optional[Dict[str, str]] = None r"""Custom HTTP headers to include in requests to this destination.""" schema_: Annotated[Optional[str], pydantic.Field(alias="schema")] = "PUBLIC" table: Optional[str] = "OPENROUTER_TRACES" warehouse: Optional[str] = "COMPUTE_WH" ObservabilitySnowflakeDestinationType = Literal["snowflake",] class ObservabilitySnowflakeDestinationTypedDict(TypedDict): api_key_hashes: Nullable[List[str]] r"""Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.""" config: ObservabilitySnowflakeDestinationConfigTypedDict created_at: str r"""ISO timestamp of when the destination was created.""" enabled: bool r"""Whether this destination is currently enabled.""" filter_rules: Nullable[ObservabilityFilterRulesConfigTypedDict] r"""Optional structured filter rules controlling which events are forwarded.""" id: str r"""Stable public identifier for this destination.""" name: Nullable[str] r"""Human-readable name for the destination.""" privacy_mode: bool r"""When true, request/response bodies are not forwarded to this destination — only metadata.""" sampling_rate: float r"""Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).""" type: ObservabilitySnowflakeDestinationType updated_at: str r"""ISO timestamp of when the destination was last updated.""" workspace_id: str r"""ID of the workspace this destination belongs to.""" class ObservabilitySnowflakeDestination(BaseModel): api_key_hashes: Nullable[List[str]] r"""Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.""" config: ObservabilitySnowflakeDestinationConfig created_at: str r"""ISO timestamp of when the destination was created.""" enabled: bool r"""Whether this destination is currently enabled.""" filter_rules: Nullable[ObservabilityFilterRulesConfig] r"""Optional structured filter rules controlling which events are forwarded.""" id: str r"""Stable public identifier for this destination.""" name: Nullable[str] r"""Human-readable name for the destination.""" privacy_mode: bool r"""When true, request/response bodies are not forwarded to this destination — only metadata.""" sampling_rate: float r"""Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).""" type: ObservabilitySnowflakeDestinationType updated_at: str r"""ISO timestamp of when the destination was last updated.""" workspace_id: str r"""ID of the workspace this destination belongs to.""" @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = [] nullable_fields = ["api_key_hashes", "filter_rules", "name"] null_default_fields = [] serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): k = f.alias or n val = serialized.get(k) serialized.pop(k, None) optional_nullable = k in optional_fields and k in nullable_fields is_set = ( self.__pydantic_fields_set__.intersection({n}) or k in null_default_fields ) # pylint: disable=no-member if val is not None and val != UNSET_SENTINEL: m[k] = val elif val != UNSET_SENTINEL and ( not k in optional_fields or (optional_nullable and is_set) ): m[k] = val return m