diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 9ccaa224..7ffba279 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,19 +1,19 @@ lockVersion: 2.0.0 id: c48cf606-fb42-4a45-9c23-8f0555307828 management: - docChecksum: 2fcf515f1f19f0f7aa6ab7b88abbf8b0 + docChecksum: 758ef63a0a08383540ea8dad373f870a docVersion: 1.0.0 speakeasyVersion: 1.787.0 generationVersion: 2.914.0 - releaseVersion: 1.1.115 - configChecksum: c4324ed99d6410d284d0ba15b1c8c7b6 + releaseVersion: 1.1.116 + configChecksum: 99dc42c14b3050cf1a52fb4239b25558 repoURL: https://github.com/OpenRouterTeam/python-sdk.git installationURL: https://github.com/OpenRouterTeam/python-sdk.git published: true persistentEdits: - generation_id: 2923c407-46ff-4dbf-90f6-40bf9fc2c6f6 - pristine_commit_hash: f86afabf72b9199414423483da1ed9fe058ec27b - pristine_tree_hash: ea94eebf655086de397231127ae82622b65b3d30 + generation_id: 6bfdd5aa-7fe3-49f5-b6e1-be62fb470be6 + pristine_commit_hash: 7b309bbd8b47f3279f989ee1fc72d4b11f98f6d6 + pristine_tree_hash: d1ad592a96d37e0a74bfe99f72340279fb64eeb1 features: python: acceptHeaders: 3.0.0 @@ -1082,8 +1082,8 @@ trackedFiles: pristine_git_object: cb8cba525e66e5515ea69a5217d1b20809250003 docs/components/chatresult.mdx: id: 1d855f0d207b - last_write_checksum: sha1:1327c59b5dd13f87488f8076e97ca36b2e93c22f - pristine_git_object: 94e3c0ce6c01fd6b28edcf40097e6f70fa0dfe01 + last_write_checksum: sha1:70644649b0eef0c4edb2e7dd2d534847530e68c6 + pristine_git_object: 3f20da6480e9963ad29edc5671fec24a087705e6 docs/components/chatresultobject.mdx: id: adc07397bfc0 last_write_checksum: sha1:0323dc5815ea2b95d85785afc089cacd90cb13f0 @@ -1106,8 +1106,8 @@ trackedFiles: pristine_git_object: d6bd70fb2627a85b2db13a1f23c179f2fe3ad194 docs/components/chatstreamchunk.mdx: id: 90a2741f18cd - last_write_checksum: sha1:0a60882651fbfdba6ca61aee439ecf7087499188 - pristine_git_object: 3adbd9896f88520ec5a3c54596a8f8ec20e1110b + last_write_checksum: sha1:b272780ab0931bb45cbe7f52b274fae437ff4867 + pristine_git_object: ccddb5a2b4db3ec61ceb0b70443da7cebc00d065 docs/components/chatstreamchunkerror.mdx: id: 15ce1e8c2a5d last_write_checksum: sha1:adc488f464df961a969a36414ee90988e2866a6b @@ -3694,8 +3694,8 @@ trackedFiles: pristine_git_object: 09effe2d3fe45536c8b0aa0f23c02ce19b15f62c docs/components/openresponsesresult.mdx: id: d0fed85674d2 - last_write_checksum: sha1:3bc26b772dfc3397c0da7b769b16d938eede91fb - pristine_git_object: f5c81b7142316cd4a6ec8a96c192b682a1a34ff8 + last_write_checksum: sha1:c3fd0f82a3ba0550a6e8cccb7baee5e48cbe6fed + pristine_git_object: a967818d30feb09ca0540414e53e17f5983220b3 docs/components/openresponsesresultobject.mdx: id: 93b1fcc70132 last_write_checksum: sha1:7579ee1bb9e0d20c55cf54a8ca2ccbc950d2921d @@ -3746,8 +3746,8 @@ trackedFiles: pristine_git_object: fe4a1888643f81ea25e2271c592f98482ba3b83e docs/components/openroutermetadata.mdx: id: 355be2e7788c - last_write_checksum: sha1:c5ed476aab215597dd1af37fe1fd7e99a0ac6c88 - pristine_git_object: 812ccb2b90388d191c2866eb3c2ed0572d0181e9 + last_write_checksum: sha1:75037a74e20a9f19c3d61a9ab37cfe0b6bcc7f48 + pristine_git_object: 4cbe157120f00afebbbac4fe58adc4f4d6123b05 docs/components/openrouterwebsearchservertool.mdx: id: a553315e2543 last_write_checksum: sha1:9d85c2945ba2713fcbe49bec28307372bb8535e0 @@ -7470,8 +7470,8 @@ trackedFiles: pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:7a875e84a86961b5c465311684a15b085974f26c - pristine_git_object: 33b9c0acfac6719dcec24e60957a5a607ea81bda + last_write_checksum: sha1:caebdc04bcc0970785075f14c8018496682d6897 + pristine_git_object: 200d9497c1138fd059d0219059aa3b78bf7d2f7b scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54 @@ -7498,8 +7498,8 @@ trackedFiles: pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137 src/openrouter/_version.py: id: d8d15ad6c586 - last_write_checksum: sha1:ba87d8a823bde33bf0421825184ef71e2fe09ca9 - pristine_git_object: 12a40c34abc340a2bc3ccf5087ef55d3e03f7e2f + last_write_checksum: sha1:f85ecfa87ecdc756830e9f82b5afbf7d3f76da62 + pristine_git_object: dcb7ae847df12211f68468b2539a966633c180dc src/openrouter/analytics.py: id: cb406b5aaabb last_write_checksum: sha1:1e0004d8d1d5d797e2b54cd1cabeb7f9489d08e9 @@ -9106,8 +9106,8 @@ trackedFiles: pristine_git_object: f5cf39efc3f9d3de11167f4b5f48124d07d0a588 src/openrouter/components/openroutermetadata.py: id: 87062f38be59 - last_write_checksum: sha1:65c4b563aea67eb15f1fc6d859856a081a1cc78f - pristine_git_object: 09b552bda339d8fd4339b5acb5bfed31594a92c9 + last_write_checksum: sha1:79f3f6b0734f90462895d1ba39149a78e3c6b817 + pristine_git_object: b30d28a55e4b1190ebfd1a7c3eb0a91d3c7eb74f src/openrouter/components/openrouterwebsearchservertool.py: id: f5400a5de3cd last_write_checksum: sha1:5b8eab2b521a639688131143ee39e513e6da524a @@ -12577,3 +12577,8 @@ examples: "503": application/json: {"error": {"code": 503, "message": "Service temporarily unavailable"}} examplesVersion: 1.0.2 +releaseNotes: | + ## Python SDK Changes: + * `open_router.chat.send()`: `response` **Changed** + * `open_router.responses.send()`: `response` **Changed** + * `open_router.beta.responses.send()`: `response` **Changed** diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index db4e1972..2a9ce9d7 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -36,7 +36,7 @@ generation: documentation: mintlify preApplyUnionDiscriminators: true python: - version: 1.1.115 + version: 1.1.116 additionalDependencies: dev: {} main: {} diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index ba4138dd..666a0287 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -18321,6 +18321,7 @@ components: provider: 'OpenAI' selected: true total: 1 + generation_time: 2016 is_byok: false region: 'iad' requested: 'openai/gpt-4o' @@ -18335,6 +18336,10 @@ components: type: 'array' endpoints: $ref: '#/components/schemas/EndpointsMetadata' + generation_time: + description: 'Milliseconds measured for the generation, from dispatching the upstream request until its response body ended. Divide the completion token count by this for throughput. Absent when no upstream request was dispatched.' + example: 2016 + type: 'integer' is_byok: type: 'boolean' params: diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 6c254863..35002a06 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -2,8 +2,8 @@ speakeasyVersion: 1.787.0 sources: OpenRouter API: sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:a11c09e68a65a47904f0b3b1fa4afc12ce284aa0e878b14b484b2495f6c47ce0 - sourceBlobDigest: sha256:5466f5c7ef7a667e650ac72416db50cd0ec913d304b889c1089524101a7edabc + sourceRevisionDigest: sha256:dc2eed6ab6c7c25270db16f8436fb4268867f0933ce5e808a6767e29dd2e2a57 + sourceBlobDigest: sha256:bf6877bc98c487ec6b18040214be92c5fecf75f0f1c93fe1c5bf29f7066c651d tags: - latest - 1.0.0 @@ -11,10 +11,10 @@ targets: open-router: source: OpenRouter API sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:a11c09e68a65a47904f0b3b1fa4afc12ce284aa0e878b14b484b2495f6c47ce0 - sourceBlobDigest: sha256:5466f5c7ef7a667e650ac72416db50cd0ec913d304b889c1089524101a7edabc + sourceRevisionDigest: sha256:dc2eed6ab6c7c25270db16f8436fb4268867f0933ce5e808a6767e29dd2e2a57 + sourceBlobDigest: sha256:bf6877bc98c487ec6b18040214be92c5fecf75f0f1c93fe1c5bf29f7066c651d codeSamplesNamespace: open-router-python-code-samples - codeSamplesRevisionDigest: sha256:a161e51198c23925d81c5b3d91a2d0c08159f55b8641bae3513763d7c4121254 + codeSamplesRevisionDigest: sha256:4336ef86e6030915d783554b9ad9ff251be907e2d92e00fd621db20131c4da9e workflow: workflowVersion: 1.0.0 speakeasyVersion: 1.787.0 diff --git a/RELEASES.md b/RELEASES.md index 40e4570e..8ecfd6ee 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1939,4 +1939,14 @@ Based on: ### Generated - [python v1.1.115] . ### Releases -- [PyPI v1.1.115] https://pypi.org/project/openrouter/1.1.115 - . \ No newline at end of file +- [PyPI v1.1.115] https://pypi.org/project/openrouter/1.1.115 - . + +## 2026-09-02 19:27:20 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.1.116] . +### Releases +- [PyPI v1.1.116] https://pypi.org/project/openrouter/1.1.116 - . \ No newline at end of file diff --git a/docs/components/chatresult.mdx b/docs/components/chatresult.mdx index 94e3c0ce..3f20da64 100644 --- a/docs/components/chatresult.mdx +++ b/docs/components/chatresult.mdx @@ -14,7 +14,7 @@ Chat completion response | `id` | *str* | :heavy_check_mark: | Unique completion identifier | chatcmpl-123 | | `model` | *str* | :heavy_check_mark: | Model used for completion | openai/gpt-4 | | `object` | [components.ChatResultObject](../components/chatresultobject.mdx) | :heavy_check_mark: | N/A | | -| `openrouter_metadata` | [Optional[components.OpenRouterMetadata]](../components/openroutermetadata.mdx) | :heavy_minus_sign: | N/A | \{
"attempt": 1,
"endpoints": \{
"available": [
\{
"model": "openai/gpt-4o",
"provider": "OpenAI",
"selected": true
}
],
"total": 1
},
"is_byok": false,
"region": "iad",
"requested": "openai/gpt-4o",
"strategy": "direct",
"summary": "available=1, selected=OpenAI"
} | +| `openrouter_metadata` | [Optional[components.OpenRouterMetadata]](../components/openroutermetadata.mdx) | :heavy_minus_sign: | N/A | \{
"attempt": 1,
"endpoints": \{
"available": [
\{
"model": "openai/gpt-4o",
"provider": "OpenAI",
"selected": true
}
],
"total": 1
},
"generation_time": 2016,
"is_byok": false,
"region": "iad",
"requested": "openai/gpt-4o",
"strategy": "direct",
"summary": "available=1, selected=OpenAI"
} | | `service_tier` | *OptionalNullable[str]* | :heavy_minus_sign: | The service tier used by the upstream provider for this request | default | | `system_fingerprint` | *Nullable[str]* | :heavy_check_mark: | System fingerprint | fp_44709d6fcb | | `usage` | [Optional[components.ChatUsage]](../components/chatusage.mdx) | :heavy_minus_sign: | Token usage statistics | \{
"completion_tokens": 15,
"completion_tokens_details": \{
"reasoning_tokens": 5
},
"cost": 0.0012,
"cost_details": \{
"upstream_inference_completions_cost": 0.0004,
"upstream_inference_cost": null,
"upstream_inference_prompt_cost": 0.0008
},
"is_byok": false,
"prompt_tokens": 10,
"prompt_tokens_details": \{
"cached_tokens": 2
},
"server_tool_use_details": \{
"tool_calls_executed": 2,
"tool_calls_requested": 2
},
"total_tokens": 25
} | \ No newline at end of file diff --git a/docs/components/chatstreamchunk.mdx b/docs/components/chatstreamchunk.mdx index 3adbd989..ccddb5a2 100644 --- a/docs/components/chatstreamchunk.mdx +++ b/docs/components/chatstreamchunk.mdx @@ -15,7 +15,7 @@ Streaming chat completion chunk | `id` | *str* | :heavy_check_mark: | Unique chunk identifier | chatcmpl-123 | | `model` | *str* | :heavy_check_mark: | Model used for completion | openai/gpt-4 | | `object` | [components.ChatStreamChunkObject](../components/chatstreamchunkobject.mdx) | :heavy_check_mark: | N/A | | -| `openrouter_metadata` | [Optional[components.OpenRouterMetadata]](../components/openroutermetadata.mdx) | :heavy_minus_sign: | N/A | \{
"attempt": 1,
"endpoints": \{
"available": [
\{
"model": "openai/gpt-4o",
"provider": "OpenAI",
"selected": true
}
],
"total": 1
},
"is_byok": false,
"region": "iad",
"requested": "openai/gpt-4o",
"strategy": "direct",
"summary": "available=1, selected=OpenAI"
} | +| `openrouter_metadata` | [Optional[components.OpenRouterMetadata]](../components/openroutermetadata.mdx) | :heavy_minus_sign: | N/A | \{
"attempt": 1,
"endpoints": \{
"available": [
\{
"model": "openai/gpt-4o",
"provider": "OpenAI",
"selected": true
}
],
"total": 1
},
"generation_time": 2016,
"is_byok": false,
"region": "iad",
"requested": "openai/gpt-4o",
"strategy": "direct",
"summary": "available=1, selected=OpenAI"
} | | `service_tier` | *OptionalNullable[str]* | :heavy_minus_sign: | The service tier used by the upstream provider for this request | default | | `system_fingerprint` | *Optional[str]* | :heavy_minus_sign: | System fingerprint | fp_44709d6fcb | | `usage` | [Optional[components.ChatUsage]](../components/chatusage.mdx) | :heavy_minus_sign: | Token usage statistics | \{
"completion_tokens": 15,
"completion_tokens_details": \{
"reasoning_tokens": 5
},
"cost": 0.0012,
"cost_details": \{
"upstream_inference_completions_cost": 0.0004,
"upstream_inference_cost": null,
"upstream_inference_prompt_cost": 0.0008
},
"is_byok": false,
"prompt_tokens": 10,
"prompt_tokens_details": \{
"cached_tokens": 2
},
"server_tool_use_details": \{
"tool_calls_executed": 2,
"tool_calls_requested": 2
},
"total_tokens": 25
} | \ No newline at end of file diff --git a/docs/components/openresponsesresult.mdx b/docs/components/openresponsesresult.mdx index f5c81b71..a967818d 100644 --- a/docs/components/openresponsesresult.mdx +++ b/docs/components/openresponsesresult.mdx @@ -45,4 +45,4 @@ Complete non-streaming response from the Responses API | `usage` | [OptionalNullable[components.Usage]](../components/usage.mdx) | :heavy_minus_sign: | Token usage information for the response | \{
"cost": 0.0012,
"cost_details": \{
"upstream_inference_cost": null,
"upstream_inference_input_cost": 0.0008,
"upstream_inference_output_cost": 0.0004
},
"input_tokens": 10,
"input_tokens_details": \{
"cached_tokens": 0
},
"output_tokens": 25,
"output_tokens_details": \{
"reasoning_tokens": 0
},
"total_tokens": 35
} | | `user` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | | `error_type` | [Optional[components.APIErrorType]](../components/apierrortype.mdx) | :heavy_minus_sign: | Canonical OpenRouter error type, stable across all API formats | rate_limit_exceeded | -| `openrouter_metadata` | [Optional[components.OpenRouterMetadata]](../components/openroutermetadata.mdx) | :heavy_minus_sign: | N/A | \{
"attempt": 1,
"endpoints": \{
"available": [
\{
"model": "openai/gpt-4o",
"provider": "OpenAI",
"selected": true
}
],
"total": 1
},
"is_byok": false,
"region": "iad",
"requested": "openai/gpt-4o",
"strategy": "direct",
"summary": "available=1, selected=OpenAI"
} | \ No newline at end of file +| `openrouter_metadata` | [Optional[components.OpenRouterMetadata]](../components/openroutermetadata.mdx) | :heavy_minus_sign: | N/A | \{
"attempt": 1,
"endpoints": \{
"available": [
\{
"model": "openai/gpt-4o",
"provider": "OpenAI",
"selected": true
}
],
"total": 1
},
"generation_time": 2016,
"is_byok": false,
"region": "iad",
"requested": "openai/gpt-4o",
"strategy": "direct",
"summary": "available=1, selected=OpenAI"
} | \ No newline at end of file diff --git a/docs/components/openroutermetadata.mdx b/docs/components/openroutermetadata.mdx index 812ccb2b..4cbe1571 100644 --- a/docs/components/openroutermetadata.mdx +++ b/docs/components/openroutermetadata.mdx @@ -4,15 +4,16 @@ title: "OpenRouterMetadata" ## Fields -| Field | Type | Required | Description | Example | -| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `attempt` | *int* | :heavy_check_mark: | N/A | | -| `attempts` | List[[components.RouterAttempt](../components/routerattempt.mdx)] | :heavy_minus_sign: | N/A | | -| `endpoints` | [components.EndpointsMetadata](../components/endpointsmetadata.mdx) | :heavy_check_mark: | N/A | \{
"available": [
\{
"model": "openai/gpt-4o",
"provider": "OpenAI",
"selected": true
}
],
"total": 3
} | -| `is_byok` | *bool* | :heavy_check_mark: | N/A | | -| `params` | [Optional[components.RouterParams]](../components/routerparams.mdx) | :heavy_minus_sign: | N/A | \{
"version_group": "anthropic/claude-sonnet-4"
} | -| `pipeline` | List[[components.PipelineStage](../components/pipelinestage.mdx)] | :heavy_minus_sign: | N/A | | -| `region` | *Nullable[str]* | :heavy_check_mark: | N/A | | -| `requested` | *str* | :heavy_check_mark: | N/A | | -| `strategy` | [components.RoutingStrategy](../components/routingstrategy.mdx) | :heavy_check_mark: | N/A | direct | -| `summary` | *str* | :heavy_check_mark: | N/A | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `attempt` | *int* | :heavy_check_mark: | N/A | | +| `attempts` | List[[components.RouterAttempt](../components/routerattempt.mdx)] | :heavy_minus_sign: | N/A | | +| `endpoints` | [components.EndpointsMetadata](../components/endpointsmetadata.mdx) | :heavy_check_mark: | N/A | \{
"available": [
\{
"model": "openai/gpt-4o",
"provider": "OpenAI",
"selected": true
}
],
"total": 3
} | +| `generation_time` | *Optional[int]* | :heavy_minus_sign: | Milliseconds measured for the generation, from dispatching the upstream request until its response body ended. Divide the completion token count by this for throughput. Absent when no upstream request was dispatched. | 2016 | +| `is_byok` | *bool* | :heavy_check_mark: | N/A | | +| `params` | [Optional[components.RouterParams]](../components/routerparams.mdx) | :heavy_minus_sign: | N/A | \{
"version_group": "anthropic/claude-sonnet-4"
} | +| `pipeline` | List[[components.PipelineStage](../components/pipelinestage.mdx)] | :heavy_minus_sign: | N/A | | +| `region` | *Nullable[str]* | :heavy_check_mark: | N/A | | +| `requested` | *str* | :heavy_check_mark: | N/A | | +| `strategy` | [components.RoutingStrategy](../components/routingstrategy.mdx) | :heavy_check_mark: | N/A | direct | +| `summary` | *str* | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 33b9c0ac..200d9497 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "openrouter" -version = "1.1.115" +version = "1.1.116" description = "Official Python Client SDK for OpenRouter." authors = [{ name = "OpenRouter" },] readme = "README-PYPI.md" diff --git a/src/openrouter/_version.py b/src/openrouter/_version.py index 12a40c34..dcb7ae84 100644 --- a/src/openrouter/_version.py +++ b/src/openrouter/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "openrouter" -__version__: str = "1.1.115" +__version__: str = "1.1.116" __openapi_doc_version__: str = "1.0.0" __gen_version__: str = "2.914.0" -__user_agent__: str = "speakeasy-sdk/python 1.1.115 2.914.0 1.0.0 openrouter" +__user_agent__: str = "speakeasy-sdk/python 1.1.116 2.914.0 1.0.0 openrouter" try: if __package__ is not None: diff --git a/src/openrouter/components/openroutermetadata.py b/src/openrouter/components/openroutermetadata.py index 09b552bd..b30d28a5 100644 --- a/src/openrouter/components/openroutermetadata.py +++ b/src/openrouter/components/openroutermetadata.py @@ -21,6 +21,8 @@ class OpenRouterMetadataTypedDict(TypedDict): strategy: RoutingStrategy summary: str attempts: NotRequired[List[RouterAttemptTypedDict]] + generation_time: NotRequired[int] + r"""Milliseconds measured for the generation, from dispatching the upstream request until its response body ended. Divide the completion token count by this for throughput. Absent when no upstream request was dispatched.""" params: NotRequired[RouterParamsTypedDict] pipeline: NotRequired[List[PipelineStageTypedDict]] @@ -42,13 +44,16 @@ class OpenRouterMetadata(BaseModel): attempts: Optional[List[RouterAttempt]] = None + generation_time: Optional[int] = None + r"""Milliseconds measured for the generation, from dispatching the upstream request until its response body ended. Divide the completion token count by this for throughput. Absent when no upstream request was dispatched.""" + params: Optional[RouterParams] = None pipeline: Optional[List[PipelineStage]] = None @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["attempts", "params", "pipeline"]) + optional_fields = set(["attempts", "generation_time", "params", "pipeline"]) nullable_fields = set(["region"]) serialized = handler(self) m = {} diff --git a/uv.lock b/uv.lock index 276ecaff..1c4a33e4 100644 --- a/uv.lock +++ b/uv.lock @@ -213,7 +213,7 @@ wheels = [ [[package]] name = "openrouter" -version = "1.1.115" +version = "1.1.116" source = { editable = "." } dependencies = [ { name = "httpcore" },