chore: regenerate Python SDK v0.1.1 with new overlays (#23)

This commit is contained in:
Matt Apperson
2025-12-04 10:48:48 -05:00
committed by GitHub
84 changed files with 9465 additions and 8751 deletions
+24 -12
View File
@@ -1,12 +1,12 @@
lockVersion: 2.0.0 lockVersion: 2.0.0
id: cfd52247-6a25-4c6d-bbce-fe6fce0cd69d id: cfd52247-6a25-4c6d-bbce-fe6fce0cd69d
management: management:
docChecksum: 4cc4a9d9115d0eca9a5eb4786505579d docChecksum: 7c3a22e3f6b8d7c91ff063e2951aed2f
docVersion: 1.0.0 docVersion: 1.0.0
speakeasyVersion: 1.658.2 speakeasyVersion: 1.666.0
generationVersion: 2.755.9 generationVersion: 2.768.0
releaseVersion: 0.0.19 releaseVersion: 0.1.1
configChecksum: 834d5c1cea368e35ab6535ffb2bf9e7a configChecksum: 1206f35a1f0802441ea1b8674cd04f00
repoURL: https://github.com/OpenRouterTeam/python-sdk.git repoURL: https://github.com/OpenRouterTeam/python-sdk.git
installationURL: https://github.com/OpenRouterTeam/python-sdk.git installationURL: https://github.com/OpenRouterTeam/python-sdk.git
published: true published: true
@@ -15,7 +15,7 @@ features:
acceptHeaders: 3.0.0 acceptHeaders: 3.0.0
additionalDependencies: 1.0.0 additionalDependencies: 1.0.0
constsAndDefaults: 1.0.5 constsAndDefaults: 1.0.5
core: 5.23.9 core: 5.23.13
defaultEnabledRetries: 0.2.0 defaultEnabledRetries: 0.2.0
deprecations: 3.0.2 deprecations: 3.0.2
devContainers: 3.0.0 devContainers: 3.0.0
@@ -27,6 +27,7 @@ features:
globalSecurityCallbacks: 1.0.0 globalSecurityCallbacks: 1.0.0
globalSecurityFlattening: 1.0.0 globalSecurityFlattening: 1.0.0
globalServerURLs: 3.2.0 globalServerURLs: 3.2.0
globals: 3.0.0
groups: 3.0.1 groups: 3.0.1
methodArguments: 1.0.2 methodArguments: 1.0.2
methodSecurity: 3.0.1 methodSecurity: 3.0.1
@@ -34,8 +35,8 @@ features:
nullables: 1.0.1 nullables: 1.0.1
openEnums: 1.0.1 openEnums: 1.0.1
responseFormat: 1.0.1 responseFormat: 1.0.1
retries: 3.0.2 retries: 3.0.3
sdkHooks: 1.1.0 sdkHooks: 1.2.0
serverEvents: 1.0.11 serverEvents: 1.0.11
serverEventsSentinels: 0.1.0 serverEventsSentinels: 0.1.0
serverIDs: 3.0.0 serverIDs: 3.0.0
@@ -65,8 +66,8 @@ generatedFiles:
- docs/components/chatgenerationtokenusage.md - docs/components/chatgenerationtokenusage.md
- docs/components/chatmessagecontentitem.md - docs/components/chatmessagecontentitem.md
- docs/components/chatmessagecontentitemaudio.md - docs/components/chatmessagecontentitemaudio.md
- docs/components/chatmessagecontentitemaudioformat.md
- docs/components/chatmessagecontentitemaudioinputaudio.md - docs/components/chatmessagecontentitemaudioinputaudio.md
- docs/components/chatmessagecontentitemcachecontrol.md
- docs/components/chatmessagecontentitemimage.md - docs/components/chatmessagecontentitemimage.md
- docs/components/chatmessagecontentitemimagedetail.md - docs/components/chatmessagecontentitemimagedetail.md
- docs/components/chatmessagecontentitemtext.md - docs/components/chatmessagecontentitemtext.md
@@ -105,6 +106,7 @@ generatedFiles:
- docs/components/costdetails.md - docs/components/costdetails.md
- docs/components/createchargerequest.md - docs/components/createchargerequest.md
- docs/components/datacollection.md - docs/components/datacollection.md
- docs/components/debug.md
- docs/components/defaultparameters.md - docs/components/defaultparameters.md
- docs/components/edgenetworktimeoutresponseerrordata.md - docs/components/edgenetworktimeoutresponseerrordata.md
- docs/components/effort.md - docs/components/effort.md
@@ -117,6 +119,7 @@ generatedFiles:
- docs/components/forbiddenresponseerrordata.md - docs/components/forbiddenresponseerrordata.md
- docs/components/idfileparser.md - docs/components/idfileparser.md
- docs/components/idmoderation.md - docs/components/idmoderation.md
- docs/components/idresponsehealing.md
- docs/components/idweb.md - docs/components/idweb.md
- docs/components/ignore.md - docs/components/ignore.md
- docs/components/imagegenerationstatus.md - docs/components/imagegenerationstatus.md
@@ -300,6 +303,7 @@ generatedFiles:
- docs/components/plugin.md - docs/components/plugin.md
- docs/components/pluginfileparser.md - docs/components/pluginfileparser.md
- docs/components/pluginmoderation.md - docs/components/pluginmoderation.md
- docs/components/pluginresponsehealing.md
- docs/components/pluginweb.md - docs/components/pluginweb.md
- docs/components/pricing.md - docs/components/pricing.md
- docs/components/prompt.md - docs/components/prompt.md
@@ -391,6 +395,7 @@ generatedFiles:
- docs/components/toplogprob.md - docs/components/toplogprob.md
- docs/components/topproviderinfo.md - docs/components/topproviderinfo.md
- docs/components/truncation.md - docs/components/truncation.md
- docs/components/ttl.md
- docs/components/type.md - docs/components/type.md
- docs/components/typeresponsecompleted.md - docs/components/typeresponsecompleted.md
- docs/components/typeresponsecontentpartadded.md - docs/components/typeresponsecontentpartadded.md
@@ -436,6 +441,7 @@ generatedFiles:
- docs/errors/toomanyrequestsresponseerror.md - docs/errors/toomanyrequestsresponseerror.md
- docs/errors/unauthorizedresponseerror.md - docs/errors/unauthorizedresponseerror.md
- docs/errors/unprocessableentityresponseerror.md - docs/errors/unprocessableentityresponseerror.md
- docs/models/internal/globals.md
- docs/models/utils/retryconfig.md - docs/models/utils/retryconfig.md
- docs/operations/apitype.md - docs/operations/apitype.md
- docs/operations/calldata.md - docs/operations/calldata.md
@@ -453,7 +459,6 @@ generatedFiles:
- docs/operations/createembeddingsprovider.md - docs/operations/createembeddingsprovider.md
- docs/operations/createembeddingsrequest.md - docs/operations/createembeddingsrequest.md
- docs/operations/createembeddingsresponse.md - docs/operations/createembeddingsresponse.md
- docs/operations/createembeddingsresponsebody.md
- docs/operations/createkeysdata.md - docs/operations/createkeysdata.md
- docs/operations/createkeyslimitreset.md - docs/operations/createkeyslimitreset.md
- docs/operations/createkeysrequest.md - docs/operations/createkeysrequest.md
@@ -467,6 +472,7 @@ generatedFiles:
- docs/operations/exchangeauthcodeforapikeycodechallengemethod.md - docs/operations/exchangeauthcodeforapikeycodechallengemethod.md
- docs/operations/exchangeauthcodeforapikeyrequest.md - docs/operations/exchangeauthcodeforapikeyrequest.md
- docs/operations/exchangeauthcodeforapikeyresponse.md - docs/operations/exchangeauthcodeforapikeyresponse.md
- docs/operations/getcreditsdata.md
- docs/operations/getcreditsresponse.md - docs/operations/getcreditsresponse.md
- docs/operations/getcurrentkeydata.md - docs/operations/getcurrentkeydata.md
- docs/operations/getcurrentkeyresponse.md - docs/operations/getcurrentkeyresponse.md
@@ -549,11 +555,13 @@ generatedFiles:
- src/openrouter/components/assistantmessage.py - src/openrouter/components/assistantmessage.py
- src/openrouter/components/badgatewayresponseerrordata.py - src/openrouter/components/badgatewayresponseerrordata.py
- src/openrouter/components/badrequestresponseerrordata.py - src/openrouter/components/badrequestresponseerrordata.py
- src/openrouter/components/chatcompletionfinishreason.py
- src/openrouter/components/chaterror.py - src/openrouter/components/chaterror.py
- src/openrouter/components/chatgenerationparams.py - src/openrouter/components/chatgenerationparams.py
- src/openrouter/components/chatgenerationtokenusage.py - src/openrouter/components/chatgenerationtokenusage.py
- src/openrouter/components/chatmessagecontentitem.py - src/openrouter/components/chatmessagecontentitem.py
- src/openrouter/components/chatmessagecontentitemaudio.py - src/openrouter/components/chatmessagecontentitemaudio.py
- src/openrouter/components/chatmessagecontentitemcachecontrol.py
- src/openrouter/components/chatmessagecontentitemimage.py - src/openrouter/components/chatmessagecontentitemimage.py
- src/openrouter/components/chatmessagecontentitemtext.py - src/openrouter/components/chatmessagecontentitemtext.py
- src/openrouter/components/chatmessagecontentitemvideo.py - src/openrouter/components/chatmessagecontentitemvideo.py
@@ -562,6 +570,7 @@ generatedFiles:
- src/openrouter/components/chatmessagetoolcall.py - src/openrouter/components/chatmessagetoolcall.py
- src/openrouter/components/chatresponse.py - src/openrouter/components/chatresponse.py
- src/openrouter/components/chatresponsechoice.py - src/openrouter/components/chatresponsechoice.py
- src/openrouter/components/chatstreamingchoice.py
- src/openrouter/components/chatstreamingmessagechunk.py - src/openrouter/components/chatstreamingmessagechunk.py
- src/openrouter/components/chatstreamingmessagetoolcall.py - src/openrouter/components/chatstreamingmessagetoolcall.py
- src/openrouter/components/chatstreamingresponsechunk.py - src/openrouter/components/chatstreamingresponsechunk.py
@@ -711,6 +720,9 @@ generatedFiles:
- src/openrouter/errors/unprocessableentityresponse_error.py - src/openrouter/errors/unprocessableentityresponse_error.py
- src/openrouter/generations.py - src/openrouter/generations.py
- src/openrouter/httpclient.py - src/openrouter/httpclient.py
- src/openrouter/models/__init__.py
- src/openrouter/models/internal/__init__.py
- src/openrouter/models/internal/globals.py
- src/openrouter/models_.py - src/openrouter/models_.py
- src/openrouter/oauth.py - src/openrouter/oauth.py
- src/openrouter/operations/__init__.py - src/openrouter/operations/__init__.py
@@ -764,7 +776,7 @@ examples:
createResponses: createResponses:
speakeasy-default-create-responses: speakeasy-default-create-responses:
requestBody: requestBody:
application/json: {"input": [{"type": "message", "role": "user", "content": "Hello, how are you?"}], "tools": [{"type": "function", "name": "get_current_weather", "description": "Get the current weather in a given location", "parameters": {"type": "object", "properties": {"location": {"type": "string"}}}}], "model": "anthropic/claude-4.5-sonnet-20250929", "temperature": 0.7, "top_p": 0.9, "stream": false} application/json: {"input": [{"type": "message", "role": "user", "content": "Hello, how are you?"}], "tools": [{"type": "function", "name": "get_current_weather", "description": "Get the current weather in a given location", "parameters": {"type": "object", "properties": {"location": {"type": "string"}}}}], "model": "anthropic/claude-4.5-sonnet-20250929", "temperature": 0.7, "top_p": 0.9, "store": false, "service_tier": "auto", "stream": false}
responses: responses:
"200": "200":
application/json: {"id": "resp-abc123", "object": "response", "created_at": 1704067200, "model": "gpt-4", "status": "completed", "output": [{"id": "msg-abc123", "role": "assistant", "type": "message", "status": "completed", "content": [{"type": "output_text", "text": "Hello! How can I help you today?", "annotations": []}]}], "error": null, "incomplete_details": null, "usage": {"input_tokens": 10, "input_tokens_details": {"cached_tokens": 0}, "output_tokens": 25, "output_tokens_details": {"reasoning_tokens": 0}, "total_tokens": 35}, "max_output_tokens": null, "temperature": null, "top_p": null, "instructions": null, "metadata": null, "tools": [], "tool_choice": "auto", "parallel_tool_calls": true} application/json: {"id": "resp-abc123", "object": "response", "created_at": 1704067200, "model": "gpt-4", "status": "completed", "output": [{"id": "msg-abc123", "role": "assistant", "type": "message", "status": "completed", "content": [{"type": "output_text", "text": "Hello! How can I help you today?", "annotations": []}]}], "error": null, "incomplete_details": null, "usage": {"input_tokens": 10, "input_tokens_details": {"cached_tokens": 0}, "output_tokens": 25, "output_tokens_details": {"reasoning_tokens": 0}, "total_tokens": 35}, "max_output_tokens": null, "temperature": null, "top_p": null, "instructions": null, "metadata": null, "tools": [], "tool_choice": "auto", "parallel_tool_calls": true}
@@ -814,7 +826,7 @@ examples:
speakeasy-default-get-credits: speakeasy-default-get-credits:
responses: responses:
"200": "200":
application/json: {} application/json: {"data": {"total_credits": 100.5, "total_usage": 25.75}}
"401": "401":
application/json: {"error": {"code": 401, "message": "Missing Authentication header"}} application/json: {"error": {"code": 401, "message": "Missing Authentication header"}}
"403": "403":
+3 -1
View File
@@ -30,7 +30,7 @@ generation:
generateNewTests: true generateNewTests: true
skipResponseBodyAssertions: false skipResponseBodyAssertions: false
python: python:
version: 0.0.19 version: 0.1.1
additionalDependencies: additionalDependencies:
dev: {} dev: {}
main: {} main: {}
@@ -62,12 +62,14 @@ python:
operations: operations operations: operations
shared: components shared: components
webhooks: "" webhooks: ""
inferUnionDiscriminators: true
inputModelSuffix: input inputModelSuffix: input
legacyPyright: false legacyPyright: false
license: Apache-2.0 license: Apache-2.0
maxMethodParams: 999 maxMethodParams: 999
methodArguments: infer-optional-args methodArguments: infer-optional-args
moduleName: "" moduleName: ""
multipartArrayFormat: legacy
outputModelSuffix: output outputModelSuffix: output
packageManager: uv packageManager: uv
packageName: openrouter packageName: openrouter
+94 -31
View File
@@ -3447,12 +3447,14 @@ components:
- AionLabs - AionLabs
- Alibaba - Alibaba
- Amazon Bedrock - Amazon Bedrock
- Amazon Nova
- Anthropic - Anthropic
- Arcee - Arcee AI
- AtlasCloud - AtlasCloud
- Avian - Avian
- Azure - Azure
- BaseTen - BaseTen
- BytePlus
- Black Forest Labs - Black Forest Labs
- Cerebras - Cerebras
- Chutes - Chutes
@@ -3467,6 +3469,7 @@ components:
- Fireworks - Fireworks
- Friendli - Friendli
- GMICloud - GMICloud
- GoPomelo
- Google - Google
- Google AI Studio - Google AI Studio
- Groq - Groq
@@ -3496,7 +3499,9 @@ components:
- Relace - Relace
- SambaNova - SambaNova
- SiliconFlow - SiliconFlow
- Sourceful
- Stealth - Stealth
- StreamLake
- Switchpoint - Switchpoint
- Targon - Targon
- Together - Together
@@ -3628,17 +3633,13 @@ components:
nullable: true nullable: true
store: store:
type: boolean type: boolean
nullable: true const: false
default: false
service_tier: service_tier:
allOf: type: string
- $ref: '#/components/schemas/OpenAIResponsesServiceTier' enum:
- enum: - auto
- auto default: auto
- default
- flex
- scale
- priority
example: auto
truncation: truncation:
allOf: allOf:
- $ref: '#/components/schemas/OpenAIResponsesTruncation' - $ref: '#/components/schemas/OpenAIResponsesTruncation'
@@ -3789,6 +3790,14 @@ components:
- native - native
required: required:
- id - id
- type: object
properties:
id:
type: string
enum:
- response-healing
required:
- id
description: Plugins you want to enable for this request, including their settings. description: Plugins you want to enable for this request, including their settings.
user: user:
type: string type: string
@@ -3797,6 +3806,13 @@ components:
A unique identifier representing your end-user, which helps distinguish between different users of your app. A unique identifier representing your end-user, which helps distinguish between different users of your app.
This allows your app to identify specific users in case of abuse reports, preventing your entire app from This allows your app to identify specific users in case of abuse reports, preventing your entire app from
being affected by the actions of individual users. Maximum of 128 characters. being affected by the actions of individual users. Maximum of 128 characters.
session_id:
type: string
maxLength: 128
description: >-
A unique identifier for grouping related requests (e.g., a conversation or agent workflow) for
observability. If provided in both the request body and the x-session-id header, the body value takes
precedence. Maximum of 128 characters.
description: Request schema for Responses endpoint description: Request schema for Responses endpoint
example: example:
model: anthropic/claude-4.5-sonnet-20250929 model: anthropic/claude-4.5-sonnet-20250929
@@ -4577,6 +4593,10 @@ components:
status: default status: default
uptime_last_30m: 99.5 uptime_last_30m: 99.5
supports_implicit_caching: true supports_implicit_caching: true
__schema0:
anyOf:
- $ref: '#/components/schemas/ChatCompletionFinishReason'
- type: 'null'
ModelName: ModelName:
type: string type: string
ChatMessageContentItemText: ChatMessageContentItemText:
@@ -4587,6 +4607,8 @@ components:
const: text const: text
text: text:
type: string type: string
cache_control:
$ref: '#/components/schemas/ChatMessageContentItemCacheControl'
required: required:
- type - type
- text - text
@@ -4625,14 +4647,6 @@ components:
type: string type: string
format: format:
type: string type: string
enum:
- wav
- mp3
- flac
- m4a
- ogg
- pcm16
- pcm24
required: required:
- data - data
- format - format
@@ -4810,15 +4824,13 @@ components:
- prompt_tokens - prompt_tokens
- total_tokens - total_tokens
ChatCompletionFinishReason: ChatCompletionFinishReason:
anyOf: type: string
- type: string enum:
enum: - tool_calls
- tool_calls - stop
- stop - length
- length - content_filter
- content_filter - error
- error
- type: 'null'
JSONSchemaConfig: JSONSchemaConfig:
type: object type: object
properties: properties:
@@ -4860,6 +4872,19 @@ components:
required: required:
- type - type
- grammar - grammar
ChatMessageContentItemCacheControl:
type: object
properties:
type:
type: string
const: ephemeral
ttl:
type: string
enum:
- 5m
- 1h
required:
- type
SystemMessage: SystemMessage:
type: object type: object
properties: properties:
@@ -5170,13 +5195,18 @@ components:
- type: 'null' - type: 'null'
user: user:
type: string type: string
debug:
type: object
properties:
echo_upstream_body:
type: boolean
required: required:
- messages - messages
ChatResponseChoice: ChatResponseChoice:
type: object type: object
properties: properties:
finish_reason: finish_reason:
$ref: '#/components/schemas/ChatCompletionFinishReason' $ref: '#/components/schemas/__schema0'
index: index:
type: number type: number
message: message:
@@ -5237,7 +5267,7 @@ components:
delta: delta:
$ref: '#/components/schemas/ChatStreamingMessageChunk' $ref: '#/components/schemas/ChatStreamingMessageChunk'
finish_reason: finish_reason:
$ref: '#/components/schemas/ChatCompletionFinishReason' $ref: '#/components/schemas/__schema0'
index: index:
type: number type: number
logprobs: logprobs:
@@ -5569,6 +5599,12 @@ components:
- type: 'null' - type: 'null'
finish_reason: finish_reason:
$ref: '#/components/schemas/CompletionFinishReason' $ref: '#/components/schemas/CompletionFinishReason'
native_finish_reason:
type: string
reasoning:
anyOf:
- type: string
- type: 'null'
required: required:
- text - text
- index - index
@@ -5586,6 +5622,8 @@ components:
type: number type: number
model: model:
type: string type: string
provider:
type: string
system_fingerprint: system_fingerprint:
type: string type: string
choices: choices:
@@ -5804,6 +5842,26 @@ paths:
application/json: application/json:
schema: schema:
type: object type: object
properties:
data:
type: object
properties:
total_credits:
type: number
description: Total credits purchased
example: 100.5
total_usage:
type: number
description: Total credits used
example: 25.75
required:
- total_credits
- total_usage
example:
total_credits: 100.5
total_usage: 25.75
required:
- data
description: Total credits purchased and used description: Total credits purchased and used
example: example:
data: data:
@@ -6726,12 +6784,14 @@ paths:
- AionLabs - AionLabs
- Alibaba - Alibaba
- Amazon Bedrock - Amazon Bedrock
- Amazon Nova
- Anthropic - Anthropic
- Arcee - Arcee AI
- AtlasCloud - AtlasCloud
- Avian - Avian
- Azure - Azure
- BaseTen - BaseTen
- BytePlus
- Black Forest Labs - Black Forest Labs
- Cerebras - Cerebras
- Chutes - Chutes
@@ -6746,6 +6806,7 @@ paths:
- Fireworks - Fireworks
- Friendli - Friendli
- GMICloud - GMICloud
- GoPomelo
- Google - Google
- Google AI Studio - Google AI Studio
- Groq - Groq
@@ -6775,7 +6836,9 @@ paths:
- Relace - Relace
- SambaNova - SambaNova
- SiliconFlow - SiliconFlow
- Sourceful
- Stealth - Stealth
- StreamLake
- Switchpoint - Switchpoint
- Targon - Targon
- Together - Together
+8342 -8288
View File
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,35 @@
overlay: 1.0.0
x-speakeasy-jsonpath: rfc9535
info:
title: Add HTTP-Referer and X-Title as global parameters
version: 0.0.0
actions:
# Add global parameters for app identification
- target: $
description: Add x-speakeasy-globals for HTTP-Referer and X-Title headers
update:
x-speakeasy-globals:
parameters:
- $ref: "#/components/parameters/AppIdentifier"
- $ref: "#/components/parameters/AppDisplayName"
# Add component parameters
- target: $.components
description: Add parameters for app identification headers
update:
parameters:
AppIdentifier:
name: HTTP-Referer
in: header
schema:
type: string
description: |
The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
AppDisplayName:
name: X-Title
in: header
schema:
type: string
description: |
The app display name allows you to customize how your app appears in OpenRouter's dashboard.
@@ -0,0 +1,10 @@
overlay: 1.0.0
x-speakeasy-jsonpath: rfc9535
info:
title: Add open enums
version: 0.0.0
actions:
- target: $..[?length(@.enum) > 1]
description: Automatically open all enums that have length > 1
update:
x-speakeasy-unknown-values: allow
@@ -0,0 +1,15 @@
overlay: 1.0.0
x-speakeasy-jsonpath: rfc9535
info:
title: Remove RSS+XML response schemas and related parameters
version: 0.0.0
actions:
- target: $..responses.*.content["application/rss+xml"]
description: Remove application/rss+xml response schemas
remove: true
- target: $..parameters[?@.name == "use_rss"]
description: Remove use_rss parameter
remove: true
- target: $..parameters[?@.name == "use_rss_chat_links"]
description: Remove use_rss_chat_links parameter
remove: true
+10 -6
View File
@@ -1,24 +1,28 @@
speakeasyVersion: 1.658.2 speakeasyVersion: 1.666.0
sources: sources:
-OAS: -OAS:
sourceNamespace: open-router-chat-completions-api sourceNamespace: open-router-chat-completions-api
sourceRevisionDigest: sha256:fc0c90dc8ebb69ef4a571e4e63dcd7f8f33c3254c17ad2583b628fbbf3d1ac05 sourceRevisionDigest: sha256:f1b59b9b643de5e20d6e3299a8274783d8c0854615876f5d7f6f081814842695
sourceBlobDigest: sha256:635d63fd18db468c1dcc23700382af788de76594ba3b8292fae9b14c0e5c22c4 sourceBlobDigest: sha256:ee1f2422281b3ed5b38951c74636ad192c9bb160f216069c1f7931ccc4e52553
tags: tags:
- latest - latest
targets: targets:
open-router: open-router:
source: -OAS source: -OAS
sourceNamespace: open-router-chat-completions-api sourceNamespace: open-router-chat-completions-api
sourceRevisionDigest: sha256:fc0c90dc8ebb69ef4a571e4e63dcd7f8f33c3254c17ad2583b628fbbf3d1ac05 sourceRevisionDigest: sha256:f1b59b9b643de5e20d6e3299a8274783d8c0854615876f5d7f6f081814842695
sourceBlobDigest: sha256:635d63fd18db468c1dcc23700382af788de76594ba3b8292fae9b14c0e5c22c4 sourceBlobDigest: sha256:ee1f2422281b3ed5b38951c74636ad192c9bb160f216069c1f7931ccc4e52553
workflow: workflow:
workflowVersion: 1.0.0 workflowVersion: 1.0.0
speakeasyVersion: latest speakeasyVersion: 1.666.0
sources: sources:
-OAS: -OAS:
inputs: inputs:
- location: registry.speakeasyapi.dev/openrouter/sdk/open-router-chat-completions-api:main - location: registry.speakeasyapi.dev/openrouter/sdk/open-router-chat-completions-api:main
overlays:
- location: .speakeasy/overlays/open-enums.overlay.yaml
- location: .speakeasy/overlays/remove-rss-responses.overlay.yaml
- location: .speakeasy/overlays/add-headers.overlay.yaml
output: .speakeasy/out.openapi.yaml output: .speakeasy/out.openapi.yaml
registry: registry:
location: registry.speakeasyapi.dev/openrouter/sdk/-oas location: registry.speakeasyapi.dev/openrouter/sdk/-oas
+5 -1
View File
@@ -1,9 +1,13 @@
workflowVersion: 1.0.0 workflowVersion: 1.0.0
speakeasyVersion: latest speakeasyVersion: 1.666.0
sources: sources:
-OAS: -OAS:
inputs: inputs:
- location: registry.speakeasyapi.dev/openrouter/sdk/open-router-chat-completions-api:main - location: registry.speakeasyapi.dev/openrouter/sdk/open-router-chat-completions-api:main
overlays:
- location: .speakeasy/overlays/open-enums.overlay.yaml
- location: .speakeasy/overlays/remove-rss-responses.overlay.yaml
- location: .speakeasy/overlays/add-headers.overlay.yaml
output: .speakeasy/out.openapi.yaml output: .speakeasy/out.openapi.yaml
registry: registry:
location: registry.speakeasyapi.dev/openrouter/sdk/-oas location: registry.speakeasyapi.dev/openrouter/sdk/-oas
+2 -1
View File
@@ -26,4 +26,5 @@
| `tool_choice` | *Optional[Any]* | :heavy_minus_sign: | N/A | | `tool_choice` | *Optional[Any]* | :heavy_minus_sign: | N/A |
| `tools` | List[[components.ToolDefinitionJSON](../components/tooldefinitionjson.md)] | :heavy_minus_sign: | N/A | | `tools` | List[[components.ToolDefinitionJSON](../components/tooldefinitionjson.md)] | :heavy_minus_sign: | N/A |
| `top_p` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | | `top_p` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A |
| `user` | *Optional[str]* | :heavy_minus_sign: | N/A | | `user` | *Optional[str]* | :heavy_minus_sign: | N/A |
| `debug` | [Optional[components.Debug]](../components/debug.md) | :heavy_minus_sign: | N/A |
@@ -1,14 +0,0 @@
# ChatMessageContentItemAudioFormat
## Values
| Name | Value |
| ------- | ------- |
| `WAV` | wav |
| `MP3` | mp3 |
| `FLAC` | flac |
| `M4A` | m4a |
| `OGG` | ogg |
| `PCM16` | pcm16 |
| `PCM24` | pcm24 |
@@ -3,7 +3,7 @@
## Fields ## Fields
| Field | Type | Required | Description | | Field | Type | Required | Description |
| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | | ------------------ | ------------------ | ------------------ | ------------------ |
| `data` | *str* | :heavy_check_mark: | N/A | | `data` | *str* | :heavy_check_mark: | N/A |
| `format_` | [components.ChatMessageContentItemAudioFormat](../components/chatmessagecontentitemaudioformat.md) | :heavy_check_mark: | N/A | | `format_` | *str* | :heavy_check_mark: | N/A |
@@ -0,0 +1,9 @@
# ChatMessageContentItemCacheControl
## Fields
| Field | Type | Required | Description |
| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
| `type` | *Literal["ephemeral"]* | :heavy_check_mark: | N/A |
| `ttl` | [Optional[components.TTL]](../components/ttl.md) | :heavy_minus_sign: | N/A |
@@ -3,7 +3,8 @@
## Fields ## Fields
| Field | Type | Required | Description | | Field | Type | Required | Description |
| ------------------ | ------------------ | ------------------ | ------------------ | | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `type` | *Literal["text"]* | :heavy_check_mark: | N/A | | `type` | *Literal["text"]* | :heavy_check_mark: | N/A |
| `text` | *str* | :heavy_check_mark: | N/A | | `text` | *str* | :heavy_check_mark: | N/A |
| `cache_control` | [Optional[components.ChatMessageContentItemCacheControl]](../components/chatmessagecontentitemcachecontrol.md) | :heavy_minus_sign: | N/A |
+3 -1
View File
@@ -8,4 +8,6 @@
| `text` | *str* | :heavy_check_mark: | N/A | | `text` | *str* | :heavy_check_mark: | N/A |
| `index` | *float* | :heavy_check_mark: | N/A | | `index` | *float* | :heavy_check_mark: | N/A |
| `logprobs` | [Nullable[components.CompletionLogprobs]](../components/completionlogprobs.md) | :heavy_check_mark: | N/A | | `logprobs` | [Nullable[components.CompletionLogprobs]](../components/completionlogprobs.md) | :heavy_check_mark: | N/A |
| `finish_reason` | [Nullable[components.CompletionFinishReason]](../components/completionfinishreason.md) | :heavy_check_mark: | N/A | | `finish_reason` | [Nullable[components.CompletionFinishReason]](../components/completionfinishreason.md) | :heavy_check_mark: | N/A |
| `native_finish_reason` | *Optional[str]* | :heavy_minus_sign: | N/A |
| `reasoning` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+1
View File
@@ -9,6 +9,7 @@
| `object` | *Literal["text_completion"]* | :heavy_check_mark: | N/A | | `object` | *Literal["text_completion"]* | :heavy_check_mark: | N/A |
| `created` | *float* | :heavy_check_mark: | N/A | | `created` | *float* | :heavy_check_mark: | N/A |
| `model` | *str* | :heavy_check_mark: | N/A | | `model` | *str* | :heavy_check_mark: | N/A |
| `provider` | *Optional[str]* | :heavy_minus_sign: | N/A |
| `system_fingerprint` | *Optional[str]* | :heavy_minus_sign: | N/A | | `system_fingerprint` | *Optional[str]* | :heavy_minus_sign: | N/A |
| `choices` | List[[components.CompletionChoice](../components/completionchoice.md)] | :heavy_check_mark: | N/A | | `choices` | List[[components.CompletionChoice](../components/completionchoice.md)] | :heavy_check_mark: | N/A |
| `usage` | [Optional[components.CompletionUsage]](../components/completionusage.md) | :heavy_minus_sign: | N/A | | `usage` | [Optional[components.CompletionUsage]](../components/completionusage.md) | :heavy_minus_sign: | N/A |
+8
View File
@@ -0,0 +1,8 @@
# Debug
## Fields
| Field | Type | Required | Description |
| -------------------- | -------------------- | -------------------- | -------------------- |
| `echo_upstream_body` | *Optional[bool]* | :heavy_minus_sign: | N/A |
+8
View File
@@ -0,0 +1,8 @@
# IDResponseHealing
## Values
| Name | Value |
| ------------------ | ------------------ |
| `RESPONSE_HEALING` | response-healing |
+2 -2
View File
@@ -27,8 +27,8 @@ Request schema for Responses endpoint
| `include` | List[[components.OpenAIResponsesIncludable](../components/openairesponsesincludable.md)] | :heavy_minus_sign: | N/A | | | `include` | List[[components.OpenAIResponsesIncludable](../components/openairesponsesincludable.md)] | :heavy_minus_sign: | N/A | |
| `background` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | | | `background` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | |
| `safety_identifier` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | | `safety_identifier` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
| `store` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | | | `store` | *Optional[Literal[False]]* | :heavy_minus_sign: | N/A | |
| `service_tier` | [OptionalNullable[components.ServiceTier]](../components/servicetier.md) | :heavy_minus_sign: | N/A | auto | | `service_tier` | [Optional[components.ServiceTier]](../components/servicetier.md) | :heavy_minus_sign: | N/A | |
| `truncation` | [OptionalNullable[components.Truncation]](../components/truncation.md) | :heavy_minus_sign: | N/A | auto | | `truncation` | [OptionalNullable[components.Truncation]](../components/truncation.md) | :heavy_minus_sign: | N/A | auto |
| `stream` | *Optional[bool]* | :heavy_minus_sign: | N/A | | | `stream` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
| `provider` | [OptionalNullable[components.Provider]](../components/provider.md) | :heavy_minus_sign: | When multiple model providers are available, optionally indicate your routing preference. | | | `provider` | [OptionalNullable[components.Provider]](../components/provider.md) | :heavy_minus_sign: | When multiple model providers are available, optionally indicate your routing preference. | |
+6
View File
@@ -21,3 +21,9 @@ value: components.PluginWeb = /* values here */
value: components.PluginFileParser = /* values here */ value: components.PluginFileParser = /* values here */
``` ```
### `components.PluginResponseHealing`
```python
value: components.PluginResponseHealing = /* values here */
```
+8
View File
@@ -0,0 +1,8 @@
# PluginResponseHealing
## Fields
| Field | Type | Required | Description |
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
| `id` | [components.IDResponseHealing](../components/idresponsehealing.md) | :heavy_check_mark: | N/A |
+5 -1
View File
@@ -9,12 +9,14 @@
| `AION_LABS` | AionLabs | | `AION_LABS` | AionLabs |
| `ALIBABA` | Alibaba | | `ALIBABA` | Alibaba |
| `AMAZON_BEDROCK` | Amazon Bedrock | | `AMAZON_BEDROCK` | Amazon Bedrock |
| `AMAZON_NOVA` | Amazon Nova |
| `ANTHROPIC` | Anthropic | | `ANTHROPIC` | Anthropic |
| `ARCEE` | Arcee | | `ARCEE_AI` | Arcee AI |
| `ATLAS_CLOUD` | AtlasCloud | | `ATLAS_CLOUD` | AtlasCloud |
| `AVIAN` | Avian | | `AVIAN` | Avian |
| `AZURE` | Azure | | `AZURE` | Azure |
| `BASE_TEN` | BaseTen | | `BASE_TEN` | BaseTen |
| `BYTE_PLUS` | BytePlus |
| `BLACK_FOREST_LABS` | Black Forest Labs | | `BLACK_FOREST_LABS` | Black Forest Labs |
| `CEREBRAS` | Cerebras | | `CEREBRAS` | Cerebras |
| `CHUTES` | Chutes | | `CHUTES` | Chutes |
@@ -29,6 +31,7 @@
| `FIREWORKS` | Fireworks | | `FIREWORKS` | Fireworks |
| `FRIENDLI` | Friendli | | `FRIENDLI` | Friendli |
| `GMI_CLOUD` | GMICloud | | `GMI_CLOUD` | GMICloud |
| `GO_POMELO` | GoPomelo |
| `GOOGLE` | Google | | `GOOGLE` | Google |
| `GOOGLE_AI_STUDIO` | Google AI Studio | | `GOOGLE_AI_STUDIO` | Google AI Studio |
| `GROQ` | Groq | | `GROQ` | Groq |
@@ -59,6 +62,7 @@
| `SAMBA_NOVA` | SambaNova | | `SAMBA_NOVA` | SambaNova |
| `SILICON_FLOW` | SiliconFlow | | `SILICON_FLOW` | SiliconFlow |
| `STEALTH` | Stealth | | `STEALTH` | Stealth |
| `STREAM_LAKE` | StreamLake |
| `SWITCHPOINT` | Switchpoint | | `SWITCHPOINT` | Switchpoint |
| `TARGON` | Targon | | `TARGON` | Targon |
| `TOGETHER` | Together | | `TOGETHER` | Together |
+3 -7
View File
@@ -3,10 +3,6 @@
## Values ## Values
| Name | Value | | Name | Value |
| ---------- | ---------- | | ------ | ------ |
| `AUTO` | auto | | `AUTO` | auto |
| `DEFAULT` | default |
| `FLEX` | flex |
| `PRIORITY` | priority |
| `SCALE` | scale |
+9
View File
@@ -0,0 +1,9 @@
# TTL
## Values
| Name | Value |
| ------- | ------- |
| `FIVEM` | 5m |
| `ONEH` | 1h |
+9
View File
@@ -0,0 +1,9 @@
# Globals
## Fields
| Field | Type | Required | Description |
| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | The app identifier should be your app's URL and is used as the primary identifier for rankings.<br/>This is used to track API usage per application.<br/> |
| `x_title` | *Optional[str]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.<br/> |
+9 -12
View File
@@ -1,17 +1,14 @@
# CreateEmbeddingsResponse # CreateEmbeddingsResponse
Embedding response
## Supported Types
### `operations.CreateEmbeddingsResponseBody` ## Fields
```python
value: operations.CreateEmbeddingsResponseBody = /* values here */
```
### `str`
```python
value: str = /* values here */
```
| Field | Type | Required | Description |
| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
| `id` | *Optional[str]* | :heavy_minus_sign: | N/A |
| `object` | [operations.Object](../operations/object.md) | :heavy_check_mark: | N/A |
| `data` | List[[operations.CreateEmbeddingsData](../operations/createembeddingsdata.md)] | :heavy_check_mark: | N/A |
| `model` | *str* | :heavy_check_mark: | N/A |
| `usage` | [Optional[operations.Usage]](../operations/usage.md) | :heavy_minus_sign: | N/A |
@@ -1,14 +0,0 @@
# CreateEmbeddingsResponseBody
Embedding response
## Fields
| Field | Type | Required | Description |
| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
| `id` | *Optional[str]* | :heavy_minus_sign: | N/A |
| `object` | [operations.Object](../operations/object.md) | :heavy_check_mark: | N/A |
| `data` | List[[operations.CreateEmbeddingsData](../operations/createembeddingsdata.md)] | :heavy_check_mark: | N/A |
| `model` | *str* | :heavy_check_mark: | N/A |
| `usage` | [Optional[operations.Usage]](../operations/usage.md) | :heavy_minus_sign: | N/A |
+9
View File
@@ -0,0 +1,9 @@
# GetCreditsData
## Fields
| Field | Type | Required | Description | Example |
| ----------------------- | ----------------------- | ----------------------- | ----------------------- | ----------------------- |
| `total_credits` | *float* | :heavy_check_mark: | Total credits purchased | 100.5 |
| `total_usage` | *float* | :heavy_check_mark: | Total credits used | 25.75 |
+3 -2
View File
@@ -5,5 +5,6 @@ Total credits purchased and used
## Fields ## Fields
| Field | Type | Required | Description | | Field | Type | Required | Description | Example |
| ----------- | ----------- | ----------- | ----------- | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| `data` | [operations.GetCreditsData](../operations/getcreditsdata.md) | :heavy_check_mark: | N/A | {<br/>"total_credits": 100.5,<br/>"total_usage": 25.75<br/>} |
+5 -1
View File
@@ -9,12 +9,14 @@
| `AION_LABS` | AionLabs | | `AION_LABS` | AionLabs |
| `ALIBABA` | Alibaba | | `ALIBABA` | Alibaba |
| `AMAZON_BEDROCK` | Amazon Bedrock | | `AMAZON_BEDROCK` | Amazon Bedrock |
| `AMAZON_NOVA` | Amazon Nova |
| `ANTHROPIC` | Anthropic | | `ANTHROPIC` | Anthropic |
| `ARCEE` | Arcee | | `ARCEE_AI` | Arcee AI |
| `ATLAS_CLOUD` | AtlasCloud | | `ATLAS_CLOUD` | AtlasCloud |
| `AVIAN` | Avian | | `AVIAN` | Avian |
| `AZURE` | Azure | | `AZURE` | Azure |
| `BASE_TEN` | BaseTen | | `BASE_TEN` | BaseTen |
| `BYTE_PLUS` | BytePlus |
| `BLACK_FOREST_LABS` | Black Forest Labs | | `BLACK_FOREST_LABS` | Black Forest Labs |
| `CEREBRAS` | Cerebras | | `CEREBRAS` | Cerebras |
| `CHUTES` | Chutes | | `CHUTES` | Chutes |
@@ -29,6 +31,7 @@
| `FIREWORKS` | Fireworks | | `FIREWORKS` | Fireworks |
| `FRIENDLI` | Friendli | | `FRIENDLI` | Friendli |
| `GMI_CLOUD` | GMICloud | | `GMI_CLOUD` | GMICloud |
| `GO_POMELO` | GoPomelo |
| `GOOGLE` | Google | | `GOOGLE` | Google |
| `GOOGLE_AI_STUDIO` | Google AI Studio | | `GOOGLE_AI_STUDIO` | Google AI Studio |
| `GROQ` | Groq | | `GROQ` | Groq |
@@ -59,6 +62,7 @@
| `SAMBA_NOVA` | SambaNova | | `SAMBA_NOVA` | SambaNova |
| `SILICON_FLOW` | SiliconFlow | | `SILICON_FLOW` | SiliconFlow |
| `STEALTH` | Stealth | | `STEALTH` | Stealth |
| `STREAM_LAKE` | StreamLake |
| `SWITCHPOINT` | Switchpoint | | `SWITCHPOINT` | Switchpoint |
| `TARGON` | Targon | | `TARGON` | Targon |
| `TOGETHER` | Together | | `TOGETHER` | Together |
+1
View File
@@ -58,6 +58,7 @@ with OpenRouter(
| `tools` | List[[components.ToolDefinitionJSON](../../components/tooldefinitionjson.md)] | :heavy_minus_sign: | N/A | | `tools` | List[[components.ToolDefinitionJSON](../../components/tooldefinitionjson.md)] | :heavy_minus_sign: | N/A |
| `top_p` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | | `top_p` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A |
| `user` | *Optional[str]* | :heavy_minus_sign: | N/A | | `user` | *Optional[str]* | :heavy_minus_sign: | N/A |
| `debug` | [Optional[components.Debug]](../../components/debug.md) | :heavy_minus_sign: | N/A |
| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. |
### Response ### Response
+1 -2
View File
@@ -112,8 +112,7 @@ with OpenRouter(
| `include` | List[[components.OpenAIResponsesIncludable](../../components/openairesponsesincludable.md)] | :heavy_minus_sign: | N/A | | | `include` | List[[components.OpenAIResponsesIncludable](../../components/openairesponsesincludable.md)] | :heavy_minus_sign: | N/A | |
| `background` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | | | `background` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | |
| `safety_identifier` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | | `safety_identifier` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
| `store` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | | | `service_tier` | [Optional[components.ServiceTier]](../../components/servicetier.md) | :heavy_minus_sign: | N/A | |
| `service_tier` | [OptionalNullable[components.ServiceTier]](../../components/servicetier.md) | :heavy_minus_sign: | N/A | auto |
| `truncation` | [OptionalNullable[components.Truncation]](../../components/truncation.md) | :heavy_minus_sign: | N/A | auto | | `truncation` | [OptionalNullable[components.Truncation]](../../components/truncation.md) | :heavy_minus_sign: | N/A | auto |
| `stream` | *Optional[bool]* | :heavy_minus_sign: | N/A | | | `stream` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
| `provider` | [OptionalNullable[components.Provider]](../../components/provider.md) | :heavy_minus_sign: | When multiple model providers are available, optionally indicate your routing preference. | | | `provider` | [OptionalNullable[components.Provider]](../../components/provider.md) | :heavy_minus_sign: | When multiple model providers are available, optionally indicate your routing preference. | |
+1 -1
View File
@@ -1,6 +1,6 @@
[project] [project]
name = "openrouter" name = "openrouter"
version = "0.0.19" version = "0.1.1"
description = "Official Python Client SDK for OpenRouter." description = "Official Python Client SDK for OpenRouter."
authors = [{ name = "OpenRouter" },] authors = [{ name = "OpenRouter" },]
readme = "README-PYPI.md" readme = "README-PYPI.md"
+3 -3
View File
@@ -3,10 +3,10 @@
import importlib.metadata import importlib.metadata
__title__: str = "openrouter" __title__: str = "openrouter"
__version__: str = "0.0.19" __version__: str = "0.1.1"
__openapi_doc_version__: str = "1.0.0" __openapi_doc_version__: str = "1.0.0"
__gen_version__: str = "2.755.9" __gen_version__: str = "2.768.0"
__user_agent__: str = "speakeasy-sdk/python 0.0.19 2.755.9 1.0.0 openrouter" __user_agent__: str = "speakeasy-sdk/python 0.1.1 2.768.0 1.0.0 openrouter"
try: try:
if __package__ is not None: if __package__ is not None:
+2
View File
@@ -58,6 +58,7 @@ class Analytics(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -166,6 +167,7 @@ class Analytics(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
+12
View File
@@ -60,6 +60,7 @@ class APIKeys(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -164,6 +165,7 @@ class APIKeys(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -280,6 +282,7 @@ class APIKeys(BaseSDK):
get_serialized_body=lambda: utils.serialize_request_body( get_serialized_body=lambda: utils.serialize_request_body(
request, False, False, "json", operations.CreateKeysRequest request, False, False, "json", operations.CreateKeysRequest
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -401,6 +404,7 @@ class APIKeys(BaseSDK):
get_serialized_body=lambda: utils.serialize_request_body( get_serialized_body=lambda: utils.serialize_request_body(
request, False, False, "json", operations.CreateKeysRequest request, False, False, "json", operations.CreateKeysRequest
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -527,6 +531,7 @@ class APIKeys(BaseSDK):
get_serialized_body=lambda: utils.serialize_request_body( get_serialized_body=lambda: utils.serialize_request_body(
request.body, False, False, "json", operations.UpdateKeysRequestBody request.body, False, False, "json", operations.UpdateKeysRequestBody
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -658,6 +663,7 @@ class APIKeys(BaseSDK):
get_serialized_body=lambda: utils.serialize_request_body( get_serialized_body=lambda: utils.serialize_request_body(
request.body, False, False, "json", operations.UpdateKeysRequestBody request.body, False, False, "json", operations.UpdateKeysRequestBody
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -769,6 +775,7 @@ class APIKeys(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -875,6 +882,7 @@ class APIKeys(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -981,6 +989,7 @@ class APIKeys(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -1087,6 +1096,7 @@ class APIKeys(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -1188,6 +1198,7 @@ class APIKeys(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -1279,6 +1290,7 @@ class APIKeys(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
+6
View File
@@ -60,6 +60,7 @@ class BaseSDK:
] = None, ] = None,
url_override: Optional[str] = None, url_override: Optional[str] = None,
http_headers: Optional[Mapping[str, str]] = None, http_headers: Optional[Mapping[str, str]] = None,
allow_empty_value: Optional[List[str]] = None,
) -> httpx.Request: ) -> httpx.Request:
client = self.sdk_configuration.async_client client = self.sdk_configuration.async_client
return self._build_request_with_client( return self._build_request_with_client(
@@ -80,6 +81,7 @@ class BaseSDK:
get_serialized_body, get_serialized_body,
url_override, url_override,
http_headers, http_headers,
allow_empty_value,
) )
def _build_request( def _build_request(
@@ -102,6 +104,7 @@ class BaseSDK:
] = None, ] = None,
url_override: Optional[str] = None, url_override: Optional[str] = None,
http_headers: Optional[Mapping[str, str]] = None, http_headers: Optional[Mapping[str, str]] = None,
allow_empty_value: Optional[List[str]] = None,
) -> httpx.Request: ) -> httpx.Request:
client = self.sdk_configuration.client client = self.sdk_configuration.client
return self._build_request_with_client( return self._build_request_with_client(
@@ -122,6 +125,7 @@ class BaseSDK:
get_serialized_body, get_serialized_body,
url_override, url_override,
http_headers, http_headers,
allow_empty_value,
) )
def _build_request_with_client( def _build_request_with_client(
@@ -145,6 +149,7 @@ class BaseSDK:
] = None, ] = None,
url_override: Optional[str] = None, url_override: Optional[str] = None,
http_headers: Optional[Mapping[str, str]] = None, http_headers: Optional[Mapping[str, str]] = None,
allow_empty_value: Optional[List[str]] = None,
) -> httpx.Request: ) -> httpx.Request:
query_params = {} query_params = {}
@@ -160,6 +165,7 @@ class BaseSDK:
query_params = utils.get_query_params( query_params = utils.get_query_params(
request if request_has_query_params else None, request if request_has_query_params else None,
_globals if request_has_query_params else None, _globals if request_has_query_params else None,
allow_empty_value,
) )
else: else:
# Pick up the query parameter from the override so they can be # Pick up the query parameter from the override so they can be
+16
View File
@@ -61,6 +61,7 @@ class Chat(BaseSDK):
] = None, ] = None,
top_p: OptionalNullable[float] = UNSET, top_p: OptionalNullable[float] = UNSET,
user: Optional[str] = None, user: Optional[str] = None,
debug: Optional[Union[components.Debug, components.DebugTypedDict]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None, server_url: Optional[str] = None,
timeout_ms: Optional[int] = None, timeout_ms: Optional[int] = None,
@@ -92,6 +93,7 @@ class Chat(BaseSDK):
:param tools: :param tools:
:param top_p: :param top_p:
:param user: :param user:
:param debug:
:param retries: Override the default retry configuration for this method :param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method :param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -144,6 +146,7 @@ class Chat(BaseSDK):
] = None, ] = None,
top_p: OptionalNullable[float] = UNSET, top_p: OptionalNullable[float] = UNSET,
user: Optional[str] = None, user: Optional[str] = None,
debug: Optional[Union[components.Debug, components.DebugTypedDict]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None, server_url: Optional[str] = None,
timeout_ms: Optional[int] = None, timeout_ms: Optional[int] = None,
@@ -175,6 +178,7 @@ class Chat(BaseSDK):
:param tools: :param tools:
:param top_p: :param top_p:
:param user: :param user:
:param debug:
:param retries: Override the default retry configuration for this method :param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method :param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -226,6 +230,7 @@ class Chat(BaseSDK):
] = None, ] = None,
top_p: OptionalNullable[float] = UNSET, top_p: OptionalNullable[float] = UNSET,
user: Optional[str] = None, user: Optional[str] = None,
debug: Optional[Union[components.Debug, components.DebugTypedDict]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None, server_url: Optional[str] = None,
timeout_ms: Optional[int] = None, timeout_ms: Optional[int] = None,
@@ -257,6 +262,7 @@ class Chat(BaseSDK):
:param tools: :param tools:
:param top_p: :param top_p:
:param user: :param user:
:param debug:
:param retries: Override the default retry configuration for this method :param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method :param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -305,6 +311,7 @@ class Chat(BaseSDK):
), ),
top_p=top_p, top_p=top_p,
user=user, user=user,
debug=utils.get_pydantic_model(debug, Optional[components.Debug]),
) )
req = self._build_request( req = self._build_request(
@@ -323,6 +330,7 @@ class Chat(BaseSDK):
get_serialized_body=lambda: utils.serialize_request_body( get_serialized_body=lambda: utils.serialize_request_body(
request, False, False, "json", components.ChatGenerationParams request, False, False, "json", components.ChatGenerationParams
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -438,6 +446,7 @@ class Chat(BaseSDK):
] = None, ] = None,
top_p: OptionalNullable[float] = UNSET, top_p: OptionalNullable[float] = UNSET,
user: Optional[str] = None, user: Optional[str] = None,
debug: Optional[Union[components.Debug, components.DebugTypedDict]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None, server_url: Optional[str] = None,
timeout_ms: Optional[int] = None, timeout_ms: Optional[int] = None,
@@ -469,6 +478,7 @@ class Chat(BaseSDK):
:param tools: :param tools:
:param top_p: :param top_p:
:param user: :param user:
:param debug:
:param retries: Override the default retry configuration for this method :param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method :param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -521,6 +531,7 @@ class Chat(BaseSDK):
] = None, ] = None,
top_p: OptionalNullable[float] = UNSET, top_p: OptionalNullable[float] = UNSET,
user: Optional[str] = None, user: Optional[str] = None,
debug: Optional[Union[components.Debug, components.DebugTypedDict]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None, server_url: Optional[str] = None,
timeout_ms: Optional[int] = None, timeout_ms: Optional[int] = None,
@@ -552,6 +563,7 @@ class Chat(BaseSDK):
:param tools: :param tools:
:param top_p: :param top_p:
:param user: :param user:
:param debug:
:param retries: Override the default retry configuration for this method :param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method :param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -603,6 +615,7 @@ class Chat(BaseSDK):
] = None, ] = None,
top_p: OptionalNullable[float] = UNSET, top_p: OptionalNullable[float] = UNSET,
user: Optional[str] = None, user: Optional[str] = None,
debug: Optional[Union[components.Debug, components.DebugTypedDict]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None, server_url: Optional[str] = None,
timeout_ms: Optional[int] = None, timeout_ms: Optional[int] = None,
@@ -634,6 +647,7 @@ class Chat(BaseSDK):
:param tools: :param tools:
:param top_p: :param top_p:
:param user: :param user:
:param debug:
:param retries: Override the default retry configuration for this method :param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method :param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -682,6 +696,7 @@ class Chat(BaseSDK):
), ),
top_p=top_p, top_p=top_p,
user=user, user=user,
debug=utils.get_pydantic_model(debug, Optional[components.Debug]),
) )
req = self._build_request_async( req = self._build_request_async(
@@ -700,6 +715,7 @@ class Chat(BaseSDK):
get_serialized_body=lambda: utils.serialize_request_body( get_serialized_body=lambda: utils.serialize_request_body(
request, False, False, "json", components.ChatGenerationParams request, False, False, "json", components.ChatGenerationParams
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
+2
View File
@@ -136,6 +136,7 @@ class Completions(BaseSDK):
get_serialized_body=lambda: utils.serialize_request_body( get_serialized_body=lambda: utils.serialize_request_body(
request, False, False, "json", components.CompletionCreateParams request, False, False, "json", components.CompletionCreateParams
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -310,6 +311,7 @@ class Completions(BaseSDK):
get_serialized_body=lambda: utils.serialize_request_body( get_serialized_body=lambda: utils.serialize_request_body(
request, False, False, "json", components.CompletionCreateParams request, False, False, "json", components.CompletionCreateParams
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
+32 -13
View File
@@ -21,6 +21,7 @@ if TYPE_CHECKING:
BadRequestResponseErrorData, BadRequestResponseErrorData,
BadRequestResponseErrorDataTypedDict, BadRequestResponseErrorDataTypedDict,
) )
from .chatcompletionfinishreason import ChatCompletionFinishReason
from .chaterror import ChatErrorError, ChatErrorErrorTypedDict, Code, CodeTypedDict from .chaterror import ChatErrorError, ChatErrorErrorTypedDict, Code, CodeTypedDict
from .chatgenerationparams import ( from .chatgenerationparams import (
ChatGenerationParams, ChatGenerationParams,
@@ -35,6 +36,8 @@ if TYPE_CHECKING:
ChatGenerationParamsStop, ChatGenerationParamsStop,
ChatGenerationParamsStopTypedDict, ChatGenerationParamsStopTypedDict,
ChatGenerationParamsTypedDict, ChatGenerationParamsTypedDict,
Debug,
DebugTypedDict,
Effort, Effort,
Reasoning, Reasoning,
ReasoningTypedDict, ReasoningTypedDict,
@@ -53,11 +56,15 @@ if TYPE_CHECKING:
) )
from .chatmessagecontentitemaudio import ( from .chatmessagecontentitemaudio import (
ChatMessageContentItemAudio, ChatMessageContentItemAudio,
ChatMessageContentItemAudioFormat,
ChatMessageContentItemAudioInputAudio, ChatMessageContentItemAudioInputAudio,
ChatMessageContentItemAudioInputAudioTypedDict, ChatMessageContentItemAudioInputAudioTypedDict,
ChatMessageContentItemAudioTypedDict, ChatMessageContentItemAudioTypedDict,
) )
from .chatmessagecontentitemcachecontrol import (
ChatMessageContentItemCacheControl,
ChatMessageContentItemCacheControlTypedDict,
TTL,
)
from .chatmessagecontentitemimage import ( from .chatmessagecontentitemimage import (
ChatMessageContentItemImage, ChatMessageContentItemImage,
ChatMessageContentItemImageDetail, ChatMessageContentItemImageDetail,
@@ -98,13 +105,8 @@ if TYPE_CHECKING:
ChatMessageToolCallTypedDict, ChatMessageToolCallTypedDict,
) )
from .chatresponse import ChatResponse, ChatResponseTypedDict from .chatresponse import ChatResponse, ChatResponseTypedDict
from .chatresponsechoice import ( from .chatresponsechoice import ChatResponseChoice, ChatResponseChoiceTypedDict
ChatCompletionFinishReason, from .chatstreamingchoice import ChatStreamingChoice, ChatStreamingChoiceTypedDict
ChatResponseChoice,
ChatResponseChoiceTypedDict,
ChatStreamingChoice,
ChatStreamingChoiceTypedDict,
)
from .chatstreamingmessagechunk import ( from .chatstreamingmessagechunk import (
ChatStreamingMessageChunk, ChatStreamingMessageChunk,
ChatStreamingMessageChunkRole, ChatStreamingMessageChunkRole,
@@ -422,6 +424,7 @@ if TYPE_CHECKING:
Engine, Engine,
IDFileParser, IDFileParser,
IDModeration, IDModeration,
IDResponseHealing,
IDWeb, IDWeb,
Ignore, Ignore,
IgnoreTypedDict, IgnoreTypedDict,
@@ -446,6 +449,8 @@ if TYPE_CHECKING:
PluginFileParserTypedDict, PluginFileParserTypedDict,
PluginModeration, PluginModeration,
PluginModerationTypedDict, PluginModerationTypedDict,
PluginResponseHealing,
PluginResponseHealingTypedDict,
PluginTypedDict, PluginTypedDict,
PluginWeb, PluginWeb,
PluginWebTypedDict, PluginWebTypedDict,
@@ -820,10 +825,11 @@ __all__ = [
"ChatGenerationTokenUsageTypedDict", "ChatGenerationTokenUsageTypedDict",
"ChatMessageContentItem", "ChatMessageContentItem",
"ChatMessageContentItemAudio", "ChatMessageContentItemAudio",
"ChatMessageContentItemAudioFormat",
"ChatMessageContentItemAudioInputAudio", "ChatMessageContentItemAudioInputAudio",
"ChatMessageContentItemAudioInputAudioTypedDict", "ChatMessageContentItemAudioInputAudioTypedDict",
"ChatMessageContentItemAudioTypedDict", "ChatMessageContentItemAudioTypedDict",
"ChatMessageContentItemCacheControl",
"ChatMessageContentItemCacheControlTypedDict",
"ChatMessageContentItemImage", "ChatMessageContentItemImage",
"ChatMessageContentItemImageDetail", "ChatMessageContentItemImageDetail",
"ChatMessageContentItemImageTypedDict", "ChatMessageContentItemImageTypedDict",
@@ -896,6 +902,8 @@ __all__ = [
"CreateChargeRequest", "CreateChargeRequest",
"CreateChargeRequestTypedDict", "CreateChargeRequestTypedDict",
"DataCollection", "DataCollection",
"Debug",
"DebugTypedDict",
"DefaultParameters", "DefaultParameters",
"DefaultParametersTypedDict", "DefaultParametersTypedDict",
"EdgeNetworkTimeoutResponseErrorData", "EdgeNetworkTimeoutResponseErrorData",
@@ -913,6 +921,7 @@ __all__ = [
"ForbiddenResponseErrorDataTypedDict", "ForbiddenResponseErrorDataTypedDict",
"IDFileParser", "IDFileParser",
"IDModeration", "IDModeration",
"IDResponseHealing",
"IDWeb", "IDWeb",
"Ignore", "Ignore",
"IgnoreTypedDict", "IgnoreTypedDict",
@@ -1206,6 +1215,8 @@ __all__ = [
"PluginFileParserTypedDict", "PluginFileParserTypedDict",
"PluginModeration", "PluginModeration",
"PluginModerationTypedDict", "PluginModerationTypedDict",
"PluginResponseHealing",
"PluginResponseHealingTypedDict",
"PluginTypedDict", "PluginTypedDict",
"PluginWeb", "PluginWeb",
"PluginWebTypedDict", "PluginWebTypedDict",
@@ -1331,6 +1342,7 @@ __all__ = [
"SystemMessageContent", "SystemMessageContent",
"SystemMessageContentTypedDict", "SystemMessageContentTypedDict",
"SystemMessageTypedDict", "SystemMessageTypedDict",
"TTL",
"Tokenizer", "Tokenizer",
"TooManyRequestsResponseErrorData", "TooManyRequestsResponseErrorData",
"TooManyRequestsResponseErrorDataTypedDict", "TooManyRequestsResponseErrorDataTypedDict",
@@ -1401,6 +1413,7 @@ _dynamic_imports: dict[str, str] = {
"BadGatewayResponseErrorDataTypedDict": ".badgatewayresponseerrordata", "BadGatewayResponseErrorDataTypedDict": ".badgatewayresponseerrordata",
"BadRequestResponseErrorData": ".badrequestresponseerrordata", "BadRequestResponseErrorData": ".badrequestresponseerrordata",
"BadRequestResponseErrorDataTypedDict": ".badrequestresponseerrordata", "BadRequestResponseErrorDataTypedDict": ".badrequestresponseerrordata",
"ChatCompletionFinishReason": ".chatcompletionfinishreason",
"ChatErrorError": ".chaterror", "ChatErrorError": ".chaterror",
"ChatErrorErrorTypedDict": ".chaterror", "ChatErrorErrorTypedDict": ".chaterror",
"Code": ".chaterror", "Code": ".chaterror",
@@ -1417,6 +1430,8 @@ _dynamic_imports: dict[str, str] = {
"ChatGenerationParamsStop": ".chatgenerationparams", "ChatGenerationParamsStop": ".chatgenerationparams",
"ChatGenerationParamsStopTypedDict": ".chatgenerationparams", "ChatGenerationParamsStopTypedDict": ".chatgenerationparams",
"ChatGenerationParamsTypedDict": ".chatgenerationparams", "ChatGenerationParamsTypedDict": ".chatgenerationparams",
"Debug": ".chatgenerationparams",
"DebugTypedDict": ".chatgenerationparams",
"Effort": ".chatgenerationparams", "Effort": ".chatgenerationparams",
"Reasoning": ".chatgenerationparams", "Reasoning": ".chatgenerationparams",
"ReasoningTypedDict": ".chatgenerationparams", "ReasoningTypedDict": ".chatgenerationparams",
@@ -1429,10 +1444,12 @@ _dynamic_imports: dict[str, str] = {
"ChatMessageContentItem": ".chatmessagecontentitem", "ChatMessageContentItem": ".chatmessagecontentitem",
"ChatMessageContentItemTypedDict": ".chatmessagecontentitem", "ChatMessageContentItemTypedDict": ".chatmessagecontentitem",
"ChatMessageContentItemAudio": ".chatmessagecontentitemaudio", "ChatMessageContentItemAudio": ".chatmessagecontentitemaudio",
"ChatMessageContentItemAudioFormat": ".chatmessagecontentitemaudio",
"ChatMessageContentItemAudioInputAudio": ".chatmessagecontentitemaudio", "ChatMessageContentItemAudioInputAudio": ".chatmessagecontentitemaudio",
"ChatMessageContentItemAudioInputAudioTypedDict": ".chatmessagecontentitemaudio", "ChatMessageContentItemAudioInputAudioTypedDict": ".chatmessagecontentitemaudio",
"ChatMessageContentItemAudioTypedDict": ".chatmessagecontentitemaudio", "ChatMessageContentItemAudioTypedDict": ".chatmessagecontentitemaudio",
"ChatMessageContentItemCacheControl": ".chatmessagecontentitemcachecontrol",
"ChatMessageContentItemCacheControlTypedDict": ".chatmessagecontentitemcachecontrol",
"TTL": ".chatmessagecontentitemcachecontrol",
"ChatMessageContentItemImage": ".chatmessagecontentitemimage", "ChatMessageContentItemImage": ".chatmessagecontentitemimage",
"ChatMessageContentItemImageDetail": ".chatmessagecontentitemimage", "ChatMessageContentItemImageDetail": ".chatmessagecontentitemimage",
"ChatMessageContentItemImageTypedDict": ".chatmessagecontentitemimage", "ChatMessageContentItemImageTypedDict": ".chatmessagecontentitemimage",
@@ -1462,11 +1479,10 @@ _dynamic_imports: dict[str, str] = {
"ChatMessageToolCallTypedDict": ".chatmessagetoolcall", "ChatMessageToolCallTypedDict": ".chatmessagetoolcall",
"ChatResponse": ".chatresponse", "ChatResponse": ".chatresponse",
"ChatResponseTypedDict": ".chatresponse", "ChatResponseTypedDict": ".chatresponse",
"ChatCompletionFinishReason": ".chatresponsechoice",
"ChatResponseChoice": ".chatresponsechoice", "ChatResponseChoice": ".chatresponsechoice",
"ChatResponseChoiceTypedDict": ".chatresponsechoice", "ChatResponseChoiceTypedDict": ".chatresponsechoice",
"ChatStreamingChoice": ".chatresponsechoice", "ChatStreamingChoice": ".chatstreamingchoice",
"ChatStreamingChoiceTypedDict": ".chatresponsechoice", "ChatStreamingChoiceTypedDict": ".chatstreamingchoice",
"ChatStreamingMessageChunk": ".chatstreamingmessagechunk", "ChatStreamingMessageChunk": ".chatstreamingmessagechunk",
"ChatStreamingMessageChunkRole": ".chatstreamingmessagechunk", "ChatStreamingMessageChunkRole": ".chatstreamingmessagechunk",
"ChatStreamingMessageChunkTypedDict": ".chatstreamingmessagechunk", "ChatStreamingMessageChunkTypedDict": ".chatstreamingmessagechunk",
@@ -1713,6 +1729,7 @@ _dynamic_imports: dict[str, str] = {
"Engine": ".openresponsesrequest", "Engine": ".openresponsesrequest",
"IDFileParser": ".openresponsesrequest", "IDFileParser": ".openresponsesrequest",
"IDModeration": ".openresponsesrequest", "IDModeration": ".openresponsesrequest",
"IDResponseHealing": ".openresponsesrequest",
"IDWeb": ".openresponsesrequest", "IDWeb": ".openresponsesrequest",
"Ignore": ".openresponsesrequest", "Ignore": ".openresponsesrequest",
"IgnoreTypedDict": ".openresponsesrequest", "IgnoreTypedDict": ".openresponsesrequest",
@@ -1737,6 +1754,8 @@ _dynamic_imports: dict[str, str] = {
"PluginFileParserTypedDict": ".openresponsesrequest", "PluginFileParserTypedDict": ".openresponsesrequest",
"PluginModeration": ".openresponsesrequest", "PluginModeration": ".openresponsesrequest",
"PluginModerationTypedDict": ".openresponsesrequest", "PluginModerationTypedDict": ".openresponsesrequest",
"PluginResponseHealing": ".openresponsesrequest",
"PluginResponseHealingTypedDict": ".openresponsesrequest",
"PluginTypedDict": ".openresponsesrequest", "PluginTypedDict": ".openresponsesrequest",
"PluginWeb": ".openresponsesrequest", "PluginWeb": ".openresponsesrequest",
"PluginWebTypedDict": ".openresponsesrequest", "PluginWebTypedDict": ".openresponsesrequest",
@@ -0,0 +1,17 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
from openrouter.types import UnrecognizedStr
from typing import Literal, Union
ChatCompletionFinishReason = Union[
Literal[
"tool_calls",
"stop",
"length",
"content_filter",
"error",
],
UnrecognizedStr,
]
@@ -21,9 +21,9 @@ from openrouter.types import (
UNSET_SENTINEL, UNSET_SENTINEL,
UnrecognizedStr, UnrecognizedStr,
) )
from openrouter.utils import validate_const, validate_open_enum from openrouter.utils import get_discriminator, validate_const, validate_open_enum
import pydantic import pydantic
from pydantic import model_serializer from pydantic import Discriminator, Tag, model_serializer
from pydantic.functional_validators import AfterValidator, PlainValidator from pydantic.functional_validators import AfterValidator, PlainValidator
from typing import Any, Dict, List, Literal, Optional, Union from typing import Any, Dict, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -134,16 +134,16 @@ ChatGenerationParamsResponseFormatUnionTypedDict = TypeAliasType(
) )
ChatGenerationParamsResponseFormatUnion = TypeAliasType( ChatGenerationParamsResponseFormatUnion = Annotated[
"ChatGenerationParamsResponseFormatUnion",
Union[ Union[
ChatGenerationParamsResponseFormatText, Annotated[ChatGenerationParamsResponseFormatText, Tag("text")],
ChatGenerationParamsResponseFormatJSONObject, Annotated[ChatGenerationParamsResponseFormatJSONObject, Tag("json_object")],
ChatGenerationParamsResponseFormatPython, Annotated[ResponseFormatJSONSchema, Tag("json_schema")],
ResponseFormatJSONSchema, Annotated[ResponseFormatTextGrammar, Tag("grammar")],
ResponseFormatTextGrammar, Annotated[ChatGenerationParamsResponseFormatPython, Tag("python")],
], ],
) Discriminator(lambda m: get_discriminator(m, "type", "type")),
]
ChatGenerationParamsStopTypedDict = TypeAliasType( ChatGenerationParamsStopTypedDict = TypeAliasType(
@@ -156,6 +156,14 @@ ChatGenerationParamsStop = TypeAliasType(
) )
class DebugTypedDict(TypedDict):
echo_upstream_body: NotRequired[bool]
class Debug(BaseModel):
echo_upstream_body: Optional[bool] = None
class ChatGenerationParamsTypedDict(TypedDict): class ChatGenerationParamsTypedDict(TypedDict):
messages: List[MessageTypedDict] messages: List[MessageTypedDict]
model: NotRequired[str] model: NotRequired[str]
@@ -179,6 +187,7 @@ class ChatGenerationParamsTypedDict(TypedDict):
tools: NotRequired[List[ToolDefinitionJSONTypedDict]] tools: NotRequired[List[ToolDefinitionJSONTypedDict]]
top_p: NotRequired[Nullable[float]] top_p: NotRequired[Nullable[float]]
user: NotRequired[str] user: NotRequired[str]
debug: NotRequired[DebugTypedDict]
class ChatGenerationParams(BaseModel): class ChatGenerationParams(BaseModel):
@@ -226,6 +235,8 @@ class ChatGenerationParams(BaseModel):
user: Optional[str] = None user: Optional[str] = None
debug: Optional[Debug] = None
@model_serializer(mode="wrap") @model_serializer(mode="wrap")
def serialize_model(self, handler): def serialize_model(self, handler):
optional_fields = [ optional_fields = [
@@ -250,6 +261,7 @@ class ChatGenerationParams(BaseModel):
"tools", "tools",
"top_p", "top_p",
"user", "user",
"debug",
] ]
nullable_fields = [ nullable_fields = [
"frequency_penalty", "frequency_penalty",
@@ -26,9 +26,9 @@ from typing_extensions import Annotated, TypeAliasType
ChatMessageContentItemTypedDict = TypeAliasType( ChatMessageContentItemTypedDict = TypeAliasType(
"ChatMessageContentItemTypedDict", "ChatMessageContentItemTypedDict",
Union[ Union[
ChatMessageContentItemTextTypedDict,
ChatMessageContentItemImageTypedDict, ChatMessageContentItemImageTypedDict,
ChatMessageContentItemAudioTypedDict, ChatMessageContentItemAudioTypedDict,
ChatMessageContentItemTextTypedDict,
ChatMessageContentItemVideoTypedDict, ChatMessageContentItemVideoTypedDict,
], ],
) )
@@ -1,42 +1,23 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations from __future__ import annotations
from openrouter.types import BaseModel, UnrecognizedStr from openrouter.types import BaseModel
from openrouter.utils import validate_const, validate_open_enum from openrouter.utils import validate_const
import pydantic import pydantic
from pydantic.functional_validators import AfterValidator, PlainValidator from pydantic.functional_validators import AfterValidator
from typing import Literal, Union from typing import Literal
from typing_extensions import Annotated, TypedDict from typing_extensions import Annotated, TypedDict
ChatMessageContentItemAudioFormat = Union[
Literal[
"wav",
"mp3",
"flac",
"m4a",
"ogg",
"pcm16",
"pcm24",
],
UnrecognizedStr,
]
class ChatMessageContentItemAudioInputAudioTypedDict(TypedDict): class ChatMessageContentItemAudioInputAudioTypedDict(TypedDict):
data: str data: str
format_: ChatMessageContentItemAudioFormat format_: str
class ChatMessageContentItemAudioInputAudio(BaseModel): class ChatMessageContentItemAudioInputAudio(BaseModel):
data: str data: str
format_: Annotated[ format_: Annotated[str, pydantic.Field(alias="format")]
Annotated[
ChatMessageContentItemAudioFormat, PlainValidator(validate_open_enum(False))
],
pydantic.Field(alias="format"),
]
class ChatMessageContentItemAudioTypedDict(TypedDict): class ChatMessageContentItemAudioTypedDict(TypedDict):
@@ -0,0 +1,32 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
from openrouter.types import BaseModel, UnrecognizedStr
from openrouter.utils import validate_const, validate_open_enum
import pydantic
from pydantic.functional_validators import AfterValidator, PlainValidator
from typing import Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
TTL = Union[
Literal[
"5m",
"1h",
],
UnrecognizedStr,
]
class ChatMessageContentItemCacheControlTypedDict(TypedDict):
type: Literal["ephemeral"]
ttl: NotRequired[TTL]
class ChatMessageContentItemCacheControl(BaseModel):
TYPE: Annotated[
Annotated[Literal["ephemeral"], AfterValidator(validate_const("ephemeral"))],
pydantic.Field(alias="type"),
] = "ephemeral"
ttl: Annotated[Optional[TTL], PlainValidator(validate_open_enum(False))] = None
@@ -1,17 +1,22 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations from __future__ import annotations
from .chatmessagecontentitemcachecontrol import (
ChatMessageContentItemCacheControl,
ChatMessageContentItemCacheControlTypedDict,
)
from openrouter.types import BaseModel from openrouter.types import BaseModel
from openrouter.utils import validate_const from openrouter.utils import validate_const
import pydantic import pydantic
from pydantic.functional_validators import AfterValidator from pydantic.functional_validators import AfterValidator
from typing import Literal from typing import Literal, Optional
from typing_extensions import Annotated, TypedDict from typing_extensions import Annotated, NotRequired, TypedDict
class ChatMessageContentItemTextTypedDict(TypedDict): class ChatMessageContentItemTextTypedDict(TypedDict):
text: str text: str
type: Literal["text"] type: Literal["text"]
cache_control: NotRequired[ChatMessageContentItemCacheControlTypedDict]
class ChatMessageContentItemText(BaseModel): class ChatMessageContentItemText(BaseModel):
@@ -21,3 +26,5 @@ class ChatMessageContentItemText(BaseModel):
Annotated[Literal["text"], AfterValidator(validate_const("text"))], Annotated[Literal["text"], AfterValidator(validate_const("text"))],
pydantic.Field(alias="type"), pydantic.Field(alias="type"),
] = "text" ] = "text"
cache_control: Optional[ChatMessageContentItemCacheControl] = None
@@ -2,8 +2,9 @@
from __future__ import annotations from __future__ import annotations
from openrouter.types import BaseModel from openrouter.types import BaseModel
from openrouter.utils import validate_const from openrouter.utils import get_discriminator, validate_const
import pydantic import pydantic
from pydantic import Discriminator, Tag
from pydantic.functional_validators import AfterValidator from pydantic.functional_validators import AfterValidator
from typing import Literal, Union from typing import Literal, Union
from typing_extensions import Annotated, TypeAliasType, TypedDict from typing_extensions import Annotated, TypeAliasType, TypedDict
@@ -64,7 +65,10 @@ ChatMessageContentItemVideoTypedDict = TypeAliasType(
) )
ChatMessageContentItemVideo = TypeAliasType( ChatMessageContentItemVideo = Annotated[
"ChatMessageContentItemVideo", Union[
Union[ChatMessageContentItemVideoInputVideo, ChatMessageContentItemVideoVideoURL], Annotated[ChatMessageContentItemVideoInputVideo, Tag("input_video")],
) Annotated[ChatMessageContentItemVideoVideoURL, Tag("video_url")],
],
Discriminator(lambda m: get_discriminator(m, "type", "type")),
]
@@ -2,41 +2,24 @@
from __future__ import annotations from __future__ import annotations
from .assistantmessage import AssistantMessage, AssistantMessageTypedDict from .assistantmessage import AssistantMessage, AssistantMessageTypedDict
from .chatcompletionfinishreason import ChatCompletionFinishReason
from .chatmessagetokenlogprobs import ( from .chatmessagetokenlogprobs import (
ChatMessageTokenLogprobs, ChatMessageTokenLogprobs,
ChatMessageTokenLogprobsTypedDict, ChatMessageTokenLogprobsTypedDict,
) )
from .chatstreamingmessagechunk import (
ChatStreamingMessageChunk,
ChatStreamingMessageChunkTypedDict,
)
from openrouter.types import ( from openrouter.types import (
BaseModel, BaseModel,
Nullable, Nullable,
OptionalNullable, OptionalNullable,
UNSET, UNSET,
UNSET_SENTINEL, UNSET_SENTINEL,
UnrecognizedStr,
) )
from openrouter.utils import validate_open_enum from openrouter.utils import validate_open_enum
from pydantic import model_serializer from pydantic import model_serializer
from pydantic.functional_validators import PlainValidator from pydantic.functional_validators import PlainValidator
from typing import Literal, Union
from typing_extensions import Annotated, NotRequired, TypedDict from typing_extensions import Annotated, NotRequired, TypedDict
ChatCompletionFinishReason = Union[
Literal[
"tool_calls",
"stop",
"length",
"content_filter",
"error",
],
UnrecognizedStr,
]
class ChatResponseChoiceTypedDict(TypedDict): class ChatResponseChoiceTypedDict(TypedDict):
finish_reason: Nullable[ChatCompletionFinishReason] finish_reason: Nullable[ChatCompletionFinishReason]
index: float index: float
@@ -84,52 +67,3 @@ class ChatResponseChoice(BaseModel):
m[k] = val m[k] = val
return m return m
class ChatStreamingChoiceTypedDict(TypedDict):
delta: ChatStreamingMessageChunkTypedDict
finish_reason: Nullable[ChatCompletionFinishReason]
index: float
logprobs: NotRequired[Nullable[ChatMessageTokenLogprobsTypedDict]]
class ChatStreamingChoice(BaseModel):
delta: ChatStreamingMessageChunk
finish_reason: Annotated[
Nullable[ChatCompletionFinishReason], PlainValidator(validate_open_enum(False))
]
index: float
logprobs: OptionalNullable[ChatMessageTokenLogprobs] = UNSET
@model_serializer(mode="wrap")
def serialize_model(self, handler):
optional_fields = ["logprobs"]
nullable_fields = ["finish_reason", "logprobs"]
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
@@ -0,0 +1,72 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
from .chatcompletionfinishreason import ChatCompletionFinishReason
from .chatmessagetokenlogprobs import (
ChatMessageTokenLogprobs,
ChatMessageTokenLogprobsTypedDict,
)
from .chatstreamingmessagechunk import (
ChatStreamingMessageChunk,
ChatStreamingMessageChunkTypedDict,
)
from openrouter.types import (
BaseModel,
Nullable,
OptionalNullable,
UNSET,
UNSET_SENTINEL,
)
from openrouter.utils import validate_open_enum
from pydantic import model_serializer
from pydantic.functional_validators import PlainValidator
from typing_extensions import Annotated, NotRequired, TypedDict
class ChatStreamingChoiceTypedDict(TypedDict):
delta: ChatStreamingMessageChunkTypedDict
finish_reason: Nullable[ChatCompletionFinishReason]
index: float
logprobs: NotRequired[Nullable[ChatMessageTokenLogprobsTypedDict]]
class ChatStreamingChoice(BaseModel):
delta: ChatStreamingMessageChunk
finish_reason: Annotated[
Nullable[ChatCompletionFinishReason], PlainValidator(validate_open_enum(False))
]
index: float
logprobs: OptionalNullable[ChatMessageTokenLogprobs] = UNSET
@model_serializer(mode="wrap")
def serialize_model(self, handler):
optional_fields = ["logprobs"]
nullable_fields = ["finish_reason", "logprobs"]
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
@@ -5,7 +5,7 @@ from .chatgenerationtokenusage import (
ChatGenerationTokenUsage, ChatGenerationTokenUsage,
ChatGenerationTokenUsageTypedDict, ChatGenerationTokenUsageTypedDict,
) )
from .chatresponsechoice import ChatStreamingChoice, ChatStreamingChoiceTypedDict from .chatstreamingchoice import ChatStreamingChoice, ChatStreamingChoiceTypedDict
from openrouter.types import ( from openrouter.types import (
BaseModel, BaseModel,
Nullable, Nullable,
+18 -5
View File
@@ -2,12 +2,19 @@
from __future__ import annotations from __future__ import annotations
from .completionlogprobs import CompletionLogprobs, CompletionLogprobsTypedDict from .completionlogprobs import CompletionLogprobs, CompletionLogprobsTypedDict
from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL, UnrecognizedStr from openrouter.types import (
BaseModel,
Nullable,
OptionalNullable,
UNSET,
UNSET_SENTINEL,
UnrecognizedStr,
)
from openrouter.utils import validate_open_enum from openrouter.utils import validate_open_enum
from pydantic import model_serializer from pydantic import model_serializer
from pydantic.functional_validators import PlainValidator from pydantic.functional_validators import PlainValidator
from typing import Literal, Union from typing import Literal, Optional, Union
from typing_extensions import Annotated, TypedDict from typing_extensions import Annotated, NotRequired, TypedDict
CompletionFinishReason = Union[ CompletionFinishReason = Union[
@@ -25,6 +32,8 @@ class CompletionChoiceTypedDict(TypedDict):
index: float index: float
logprobs: Nullable[CompletionLogprobsTypedDict] logprobs: Nullable[CompletionLogprobsTypedDict]
finish_reason: Nullable[CompletionFinishReason] finish_reason: Nullable[CompletionFinishReason]
native_finish_reason: NotRequired[str]
reasoning: NotRequired[Nullable[str]]
class CompletionChoice(BaseModel): class CompletionChoice(BaseModel):
@@ -38,10 +47,14 @@ class CompletionChoice(BaseModel):
Nullable[CompletionFinishReason], PlainValidator(validate_open_enum(False)) Nullable[CompletionFinishReason], PlainValidator(validate_open_enum(False))
] ]
native_finish_reason: Optional[str] = None
reasoning: OptionalNullable[str] = UNSET
@model_serializer(mode="wrap") @model_serializer(mode="wrap")
def serialize_model(self, handler): def serialize_model(self, handler):
optional_fields = [] optional_fields = ["native_finish_reason", "reasoning"]
nullable_fields = ["logprobs", "finish_reason"] nullable_fields = ["logprobs", "finish_reason", "reasoning"]
null_default_fields = [] null_default_fields = []
serialized = handler(self) serialized = handler(self)
@@ -16,9 +16,9 @@ from openrouter.types import (
UNSET, UNSET,
UNSET_SENTINEL, UNSET_SENTINEL,
) )
from openrouter.utils import validate_const from openrouter.utils import get_discriminator, validate_const
import pydantic import pydantic
from pydantic import model_serializer from pydantic import Discriminator, Tag, model_serializer
from pydantic.functional_validators import AfterValidator from pydantic.functional_validators import AfterValidator
from typing import Dict, List, Literal, Optional, Union from typing import Dict, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -127,16 +127,16 @@ CompletionCreateParamsResponseFormatUnionTypedDict = TypeAliasType(
) )
CompletionCreateParamsResponseFormatUnion = TypeAliasType( CompletionCreateParamsResponseFormatUnion = Annotated[
"CompletionCreateParamsResponseFormatUnion",
Union[ Union[
CompletionCreateParamsResponseFormatText, Annotated[CompletionCreateParamsResponseFormatText, Tag("text")],
CompletionCreateParamsResponseFormatJSONObject, Annotated[CompletionCreateParamsResponseFormatJSONObject, Tag("json_object")],
CompletionCreateParamsResponseFormatPython, Annotated[ResponseFormatJSONSchema, Tag("json_schema")],
ResponseFormatJSONSchema, Annotated[ResponseFormatTextGrammar, Tag("grammar")],
ResponseFormatTextGrammar, Annotated[CompletionCreateParamsResponseFormatPython, Tag("python")],
], ],
) Discriminator(lambda m: get_discriminator(m, "type", "type")),
]
class CompletionCreateParamsTypedDict(TypedDict): class CompletionCreateParamsTypedDict(TypedDict):
@@ -17,6 +17,7 @@ class CompletionResponseTypedDict(TypedDict):
model: str model: str
choices: List[CompletionChoiceTypedDict] choices: List[CompletionChoiceTypedDict]
object: Literal["text_completion"] object: Literal["text_completion"]
provider: NotRequired[str]
system_fingerprint: NotRequired[str] system_fingerprint: NotRequired[str]
usage: NotRequired[CompletionUsageTypedDict] usage: NotRequired[CompletionUsageTypedDict]
@@ -38,6 +39,8 @@ class CompletionResponse(BaseModel):
pydantic.Field(alias="object"), pydantic.Field(alias="object"),
] = "text_completion" ] = "text_completion"
provider: Optional[str] = None
system_fingerprint: Optional[str] = None system_fingerprint: Optional[str] = None
usage: Optional[CompletionUsage] = None usage: Optional[CompletionUsage] = None
+10 -9
View File
@@ -10,8 +10,9 @@ from .systemmessage import SystemMessage, SystemMessageTypedDict
from .toolresponsemessage import ToolResponseMessage, ToolResponseMessageTypedDict from .toolresponsemessage import ToolResponseMessage, ToolResponseMessageTypedDict
from .usermessage import UserMessage, UserMessageTypedDict from .usermessage import UserMessage, UserMessageTypedDict
from openrouter.types import BaseModel from openrouter.types import BaseModel
from openrouter.utils import validate_const from openrouter.utils import get_discriminator, validate_const
import pydantic import pydantic
from pydantic import Discriminator, Tag
from pydantic.functional_validators import AfterValidator from pydantic.functional_validators import AfterValidator
from typing import List, Literal, Optional, Union from typing import List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -56,13 +57,13 @@ MessageTypedDict = TypeAliasType(
) )
Message = TypeAliasType( Message = Annotated[
"Message",
Union[ Union[
SystemMessage, Annotated[SystemMessage, Tag("system")],
UserMessage, Annotated[UserMessage, Tag("user")],
MessageDeveloper, Annotated[MessageDeveloper, Tag("developer")],
ToolResponseMessage, Annotated[AssistantMessage, Tag("assistant")],
AssistantMessage, Annotated[ToolResponseMessage, Tag("tool")],
], ],
) Discriminator(lambda m: get_discriminator(m, "role", "role")),
]
@@ -4,8 +4,10 @@ from __future__ import annotations
from .filecitation import FileCitation, FileCitationTypedDict from .filecitation import FileCitation, FileCitationTypedDict
from .filepath import FilePath, FilePathTypedDict from .filepath import FilePath, FilePathTypedDict
from .urlcitation import URLCitation, URLCitationTypedDict from .urlcitation import URLCitation, URLCitationTypedDict
from openrouter.utils import get_discriminator
from pydantic import Discriminator, Tag
from typing import Union from typing import Union
from typing_extensions import TypeAliasType from typing_extensions import Annotated, TypeAliasType
OpenAIResponsesAnnotationTypedDict = TypeAliasType( OpenAIResponsesAnnotationTypedDict = TypeAliasType(
@@ -14,6 +16,11 @@ OpenAIResponsesAnnotationTypedDict = TypeAliasType(
) )
OpenAIResponsesAnnotation = TypeAliasType( OpenAIResponsesAnnotation = Annotated[
"OpenAIResponsesAnnotation", Union[FilePath, FileCitation, URLCitation] Union[
) Annotated[FileCitation, Tag("file_citation")],
Annotated[URLCitation, Tag("url_citation")],
Annotated[FilePath, Tag("file_path")],
],
Discriminator(lambda m: get_discriminator(m, "type", "type")),
]
@@ -48,8 +48,8 @@ from openrouter.types import (
UNSET, UNSET,
UNSET_SENTINEL, UNSET_SENTINEL,
) )
from openrouter.utils import validate_open_enum from openrouter.utils import get_discriminator, validate_open_enum
from pydantic import model_serializer from pydantic import Discriminator, Tag, model_serializer
from pydantic.functional_validators import PlainValidator from pydantic.functional_validators import PlainValidator
from typing import Any, Dict, List, Literal, Optional, Union from typing import Any, Dict, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -127,16 +127,19 @@ OpenResponsesNonStreamingResponseToolUnionTypedDict = TypeAliasType(
) )
OpenResponsesNonStreamingResponseToolUnion = TypeAliasType( OpenResponsesNonStreamingResponseToolUnion = Annotated[
"OpenResponsesNonStreamingResponseToolUnion",
Union[ Union[
OpenResponsesWebSearchPreviewTool, Annotated[OpenResponsesNonStreamingResponseToolFunction, Tag("function")],
OpenResponsesWebSearchPreview20250311Tool, Annotated[OpenResponsesWebSearchPreviewTool, Tag("web_search_preview")],
OpenResponsesWebSearchTool, Annotated[
OpenResponsesWebSearch20250826Tool, OpenResponsesWebSearchPreview20250311Tool,
OpenResponsesNonStreamingResponseToolFunction, Tag("web_search_preview_2025_03_11"),
],
Annotated[OpenResponsesWebSearchTool, Tag("web_search")],
Annotated[OpenResponsesWebSearch20250826Tool, Tag("web_search_2025_08_26")],
], ],
) Discriminator(lambda m: get_discriminator(m, "type", "type")),
]
class OpenResponsesNonStreamingResponseTypedDict(TypedDict): class OpenResponsesNonStreamingResponseTypedDict(TypedDict):
@@ -44,9 +44,10 @@ from openrouter.types import (
UNSET_SENTINEL, UNSET_SENTINEL,
UnrecognizedStr, UnrecognizedStr,
) )
from openrouter.utils import validate_open_enum from openrouter.utils import get_discriminator, validate_const, validate_open_enum
from pydantic import model_serializer import pydantic
from pydantic.functional_validators import PlainValidator from pydantic import Discriminator, Tag, model_serializer
from pydantic.functional_validators import AfterValidator, PlainValidator
from typing import Any, Dict, List, Literal, Optional, Union from typing import Any, Dict, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -120,30 +121,24 @@ OpenResponsesRequestToolUnionTypedDict = TypeAliasType(
) )
OpenResponsesRequestToolUnion = TypeAliasType( OpenResponsesRequestToolUnion = Annotated[
"OpenResponsesRequestToolUnion",
Union[ Union[
OpenResponsesWebSearchPreviewTool, Annotated[OpenResponsesRequestToolFunction, Tag("function")],
OpenResponsesWebSearchPreview20250311Tool, Annotated[OpenResponsesWebSearchPreviewTool, Tag("web_search_preview")],
OpenResponsesWebSearchTool, Annotated[
OpenResponsesWebSearch20250826Tool, OpenResponsesWebSearchPreview20250311Tool,
OpenResponsesRequestToolFunction, Tag("web_search_preview_2025_03_11"),
],
Annotated[OpenResponsesWebSearchTool, Tag("web_search")],
Annotated[OpenResponsesWebSearch20250826Tool, Tag("web_search_2025_08_26")],
], ],
) Discriminator(lambda m: get_discriminator(m, "type", "type")),
ServiceTier = Union[
Literal[
"auto",
"default",
"flex",
"priority",
"scale",
],
UnrecognizedStr,
] ]
ServiceTier = Literal["auto",]
Truncation = Union[ Truncation = Union[
Literal[ Literal[
"auto", "auto",
@@ -353,6 +348,17 @@ class Provider(BaseModel):
return m return m
IDResponseHealing = Literal["response-healing",]
class PluginResponseHealingTypedDict(TypedDict):
id: IDResponseHealing
class PluginResponseHealing(BaseModel):
id: IDResponseHealing
IDFileParser = Literal["file-parser",] IDFileParser = Literal["file-parser",]
@@ -434,11 +440,24 @@ class PluginModeration(BaseModel):
PluginTypedDict = TypeAliasType( PluginTypedDict = TypeAliasType(
"PluginTypedDict", "PluginTypedDict",
Union[PluginModerationTypedDict, PluginFileParserTypedDict, PluginWebTypedDict], Union[
PluginModerationTypedDict,
PluginResponseHealingTypedDict,
PluginFileParserTypedDict,
PluginWebTypedDict,
],
) )
Plugin = TypeAliasType("Plugin", Union[PluginModeration, PluginFileParser, PluginWeb]) Plugin = Annotated[
Union[
Annotated[PluginModeration, Tag("moderation")],
Annotated[PluginWeb, Tag("web")],
Annotated[PluginFileParser, Tag("file-parser")],
Annotated[PluginResponseHealing, Tag("response-healing")],
],
Discriminator(lambda m: get_discriminator(m, "id", "id")),
]
class OpenResponsesRequestTypedDict(TypedDict): class OpenResponsesRequestTypedDict(TypedDict):
@@ -468,8 +487,8 @@ class OpenResponsesRequestTypedDict(TypedDict):
include: NotRequired[Nullable[List[OpenAIResponsesIncludable]]] include: NotRequired[Nullable[List[OpenAIResponsesIncludable]]]
background: NotRequired[Nullable[bool]] background: NotRequired[Nullable[bool]]
safety_identifier: NotRequired[Nullable[str]] safety_identifier: NotRequired[Nullable[str]]
store: NotRequired[Nullable[bool]] store: Literal[False]
service_tier: NotRequired[Nullable[ServiceTier]] service_tier: NotRequired[ServiceTier]
truncation: NotRequired[Nullable[Truncation]] truncation: NotRequired[Nullable[Truncation]]
stream: NotRequired[bool] stream: NotRequired[bool]
provider: NotRequired[Nullable[ProviderTypedDict]] provider: NotRequired[Nullable[ProviderTypedDict]]
@@ -533,11 +552,12 @@ class OpenResponsesRequest(BaseModel):
safety_identifier: OptionalNullable[str] = UNSET safety_identifier: OptionalNullable[str] = UNSET
store: OptionalNullable[bool] = UNSET STORE: Annotated[
Annotated[Optional[Literal[False]], AfterValidator(validate_const(False))],
pydantic.Field(alias="store"),
] = False
service_tier: Annotated[ service_tier: Optional[ServiceTier] = "auto"
OptionalNullable[ServiceTier], PlainValidator(validate_open_enum(False))
] = UNSET
truncation: Annotated[ truncation: Annotated[
OptionalNullable[Truncation], PlainValidator(validate_open_enum(False)) OptionalNullable[Truncation], PlainValidator(validate_open_enum(False))
@@ -599,8 +619,6 @@ class OpenResponsesRequest(BaseModel):
"include", "include",
"background", "background",
"safety_identifier", "safety_identifier",
"store",
"service_tier",
"truncation", "truncation",
"provider", "provider",
] ]
@@ -59,8 +59,10 @@ from .reasoningtextcontent import ReasoningTextContent, ReasoningTextContentType
from .responseoutputtext import ResponseOutputText, ResponseOutputTextTypedDict from .responseoutputtext import ResponseOutputText, ResponseOutputTextTypedDict
from .responsesoutputitem import ResponsesOutputItem, ResponsesOutputItemTypedDict from .responsesoutputitem import ResponsesOutputItem, ResponsesOutputItemTypedDict
from openrouter.types import BaseModel from openrouter.types import BaseModel
from openrouter.utils import get_discriminator
from pydantic import Discriminator, Tag
from typing import List, Literal, Union from typing import List, Literal, Union
from typing_extensions import TypeAliasType, TypedDict from typing_extensions import Annotated, TypeAliasType, TypedDict
TypeResponseReasoningSummaryPartDone = Literal["response.reasoning_summary_part.done",] TypeResponseReasoningSummaryPartDone = Literal["response.reasoning_summary_part.done",]
@@ -328,10 +330,14 @@ Part2TypedDict = TypeAliasType(
) )
Part2 = TypeAliasType( Part2 = Annotated[
"Part2", Union[
Union[ReasoningTextContent, OpenAIResponsesRefusalContent, ResponseOutputText], Annotated[ResponseOutputText, Tag("output_text")],
) Annotated[ReasoningTextContent, Tag("reasoning_text")],
Annotated[OpenAIResponsesRefusalContent, Tag("refusal")],
],
Discriminator(lambda m: get_discriminator(m, "type", "type")),
]
class OpenResponsesStreamEventResponseContentPartDoneTypedDict(TypedDict): class OpenResponsesStreamEventResponseContentPartDoneTypedDict(TypedDict):
@@ -374,10 +380,14 @@ Part1TypedDict = TypeAliasType(
) )
Part1 = TypeAliasType( Part1 = Annotated[
"Part1", Union[
Union[ReasoningTextContent, OpenAIResponsesRefusalContent, ResponseOutputText], Annotated[ResponseOutputText, Tag("output_text")],
) Annotated[ReasoningTextContent, Tag("reasoning_text")],
Annotated[OpenAIResponsesRefusalContent, Tag("refusal")],
],
Discriminator(lambda m: get_discriminator(m, "type", "type")),
]
class OpenResponsesStreamEventResponseContentPartAddedTypedDict(TypedDict): class OpenResponsesStreamEventResponseContentPartAddedTypedDict(TypedDict):
@@ -609,36 +619,97 @@ OpenResponsesStreamEventTypedDict = TypeAliasType(
r"""Union of all possible event types emitted during response streaming""" r"""Union of all possible event types emitted during response streaming"""
OpenResponsesStreamEvent = TypeAliasType( OpenResponsesStreamEvent = Annotated[
"OpenResponsesStreamEvent",
Union[ Union[
OpenResponsesStreamEventResponseCreated, Annotated[OpenResponsesStreamEventResponseCreated, Tag("response.created")],
OpenResponsesStreamEventResponseInProgress, Annotated[
OpenResponsesStreamEventResponseCompleted, OpenResponsesStreamEventResponseInProgress, Tag("response.in_progress")
OpenResponsesStreamEventResponseIncomplete, ],
OpenResponsesStreamEventResponseFailed, Annotated[OpenResponsesStreamEventResponseCompleted, Tag("response.completed")],
OpenResponsesStreamEventResponseOutputItemAdded, Annotated[
OpenResponsesStreamEventResponseOutputItemDone, OpenResponsesStreamEventResponseIncomplete, Tag("response.incomplete")
OpenResponsesImageGenCallCompleted, ],
OpenResponsesImageGenCallGenerating, Annotated[OpenResponsesStreamEventResponseFailed, Tag("response.failed")],
OpenResponsesImageGenCallInProgress, Annotated[OpenResponsesErrorEvent, Tag("error")],
OpenResponsesErrorEvent, Annotated[
OpenResponsesStreamEventResponseFunctionCallArgumentsDelta, OpenResponsesStreamEventResponseOutputItemAdded,
OpenResponsesStreamEventResponseRefusalDelta, Tag("response.output_item.added"),
OpenResponsesReasoningSummaryPartAddedEvent, ],
OpenResponsesStreamEventResponseContentPartAdded, Annotated[
OpenResponsesImageGenCallPartialImage, OpenResponsesStreamEventResponseOutputItemDone,
OpenResponsesStreamEventResponseFunctionCallArgumentsDone, Tag("response.output_item.done"),
OpenResponsesReasoningDeltaEvent, ],
OpenResponsesReasoningDoneEvent, Annotated[
OpenResponsesStreamEventResponseRefusalDone, OpenResponsesStreamEventResponseContentPartAdded,
OpenResponsesStreamEventResponseReasoningSummaryPartDone, Tag("response.content_part.added"),
OpenResponsesReasoningSummaryTextDeltaEvent, ],
OpenResponsesReasoningSummaryTextDoneEvent, Annotated[
OpenResponsesStreamEventResponseContentPartDone, OpenResponsesStreamEventResponseContentPartDone,
OpenResponsesStreamEventResponseOutputTextDelta, Tag("response.content_part.done"),
OpenResponsesStreamEventResponseOutputTextDone, ],
OpenResponsesStreamEventResponseOutputTextAnnotationAdded, Annotated[
OpenResponsesStreamEventResponseOutputTextDelta,
Tag("response.output_text.delta"),
],
Annotated[
OpenResponsesStreamEventResponseOutputTextDone,
Tag("response.output_text.done"),
],
Annotated[
OpenResponsesStreamEventResponseRefusalDelta, Tag("response.refusal.delta")
],
Annotated[
OpenResponsesStreamEventResponseRefusalDone, Tag("response.refusal.done")
],
Annotated[
OpenResponsesStreamEventResponseOutputTextAnnotationAdded,
Tag("response.output_text.annotation.added"),
],
Annotated[
OpenResponsesStreamEventResponseFunctionCallArgumentsDelta,
Tag("response.function_call_arguments.delta"),
],
Annotated[
OpenResponsesStreamEventResponseFunctionCallArgumentsDone,
Tag("response.function_call_arguments.done"),
],
Annotated[
OpenResponsesReasoningDeltaEvent, Tag("response.reasoning_text.delta")
],
Annotated[OpenResponsesReasoningDoneEvent, Tag("response.reasoning_text.done")],
Annotated[
OpenResponsesReasoningSummaryPartAddedEvent,
Tag("response.reasoning_summary_part.added"),
],
Annotated[
OpenResponsesStreamEventResponseReasoningSummaryPartDone,
Tag("response.reasoning_summary_part.done"),
],
Annotated[
OpenResponsesReasoningSummaryTextDeltaEvent,
Tag("response.reasoning_summary_text.delta"),
],
Annotated[
OpenResponsesReasoningSummaryTextDoneEvent,
Tag("response.reasoning_summary_text.done"),
],
Annotated[
OpenResponsesImageGenCallInProgress,
Tag("response.image_generation_call.in_progress"),
],
Annotated[
OpenResponsesImageGenCallGenerating,
Tag("response.image_generation_call.generating"),
],
Annotated[
OpenResponsesImageGenCallPartialImage,
Tag("response.image_generation_call.partial_image"),
],
Annotated[
OpenResponsesImageGenCallCompleted,
Tag("response.image_generation_call.completed"),
],
], ],
) Discriminator(lambda m: get_discriminator(m, "type", "type")),
]
r"""Union of all possible event types emitted during response streaming""" r"""Union of all possible event types emitted during response streaming"""
+10 -4
View File
@@ -7,8 +7,10 @@ from .openairesponsesrefusalcontent import (
) )
from .responseoutputtext import ResponseOutputText, ResponseOutputTextTypedDict from .responseoutputtext import ResponseOutputText, ResponseOutputTextTypedDict
from openrouter.types import BaseModel from openrouter.types import BaseModel
from openrouter.utils import get_discriminator
from pydantic import Discriminator, Tag
from typing import List, Literal, Optional, Union from typing import List, Literal, Optional, Union
from typing_extensions import NotRequired, TypeAliasType, TypedDict from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
OutputMessageRole = Literal["assistant",] OutputMessageRole = Literal["assistant",]
@@ -52,9 +54,13 @@ OutputMessageContentTypedDict = TypeAliasType(
) )
OutputMessageContent = TypeAliasType( OutputMessageContent = Annotated[
"OutputMessageContent", Union[OpenAIResponsesRefusalContent, ResponseOutputText] Union[
) Annotated[ResponseOutputText, Tag("output_text")],
Annotated[OpenAIResponsesRefusalContent, Tag("refusal")],
],
Discriminator(lambda m: get_discriminator(m, "type", "type")),
]
class OutputMessageTypedDict(TypedDict): class OutputMessageTypedDict(TypedDict):
+5 -1
View File
@@ -11,12 +11,14 @@ ProviderName = Union[
"AionLabs", "AionLabs",
"Alibaba", "Alibaba",
"Amazon Bedrock", "Amazon Bedrock",
"Amazon Nova",
"Anthropic", "Anthropic",
"Arcee", "Arcee AI",
"AtlasCloud", "AtlasCloud",
"Avian", "Avian",
"Azure", "Azure",
"BaseTen", "BaseTen",
"BytePlus",
"Black Forest Labs", "Black Forest Labs",
"Cerebras", "Cerebras",
"Chutes", "Chutes",
@@ -31,6 +33,7 @@ ProviderName = Union[
"Fireworks", "Fireworks",
"Friendli", "Friendli",
"GMICloud", "GMICloud",
"GoPomelo",
"Google", "Google",
"Google AI Studio", "Google AI Studio",
"Groq", "Groq",
@@ -61,6 +64,7 @@ ProviderName = Union[
"SambaNova", "SambaNova",
"SiliconFlow", "SiliconFlow",
"Stealth", "Stealth",
"StreamLake",
"Switchpoint", "Switchpoint",
"Targon", "Targon",
"Together", "Together",
@@ -10,8 +10,10 @@ from .responsesformattextjsonschemaconfig import (
ResponsesFormatTextJSONSchemaConfig, ResponsesFormatTextJSONSchemaConfig,
ResponsesFormatTextJSONSchemaConfigTypedDict, ResponsesFormatTextJSONSchemaConfigTypedDict,
) )
from openrouter.utils import get_discriminator
from pydantic import Discriminator, Tag
from typing import Union from typing import Union
from typing_extensions import TypeAliasType from typing_extensions import Annotated, TypeAliasType
ResponseFormatTextConfigTypedDict = TypeAliasType( ResponseFormatTextConfigTypedDict = TypeAliasType(
@@ -25,12 +27,12 @@ ResponseFormatTextConfigTypedDict = TypeAliasType(
r"""Text response format configuration""" r"""Text response format configuration"""
ResponseFormatTextConfig = TypeAliasType( ResponseFormatTextConfig = Annotated[
"ResponseFormatTextConfig",
Union[ Union[
ResponsesFormatText, Annotated[ResponsesFormatText, Tag("text")],
ResponsesFormatJSONObject, Annotated[ResponsesFormatJSONObject, Tag("json_object")],
ResponsesFormatTextJSONSchemaConfig, Annotated[ResponsesFormatTextJSONSchemaConfig, Tag("json_schema")],
], ],
) Discriminator(lambda m: get_discriminator(m, "type", "type")),
]
r"""Text response format configuration""" r"""Text response format configuration"""
@@ -25,8 +25,10 @@ from .responseswebsearchcalloutput import (
ResponsesWebSearchCallOutput, ResponsesWebSearchCallOutput,
ResponsesWebSearchCallOutputTypedDict, ResponsesWebSearchCallOutputTypedDict,
) )
from openrouter.utils import get_discriminator
from pydantic import Discriminator, Tag
from typing import Union from typing import Union
from typing_extensions import TypeAliasType from typing_extensions import Annotated, TypeAliasType
ResponsesOutputItemTypedDict = TypeAliasType( ResponsesOutputItemTypedDict = TypeAliasType(
@@ -43,15 +45,15 @@ ResponsesOutputItemTypedDict = TypeAliasType(
r"""An output item from the response""" r"""An output item from the response"""
ResponsesOutputItem = TypeAliasType( ResponsesOutputItem = Annotated[
"ResponsesOutputItem",
Union[ Union[
ResponsesWebSearchCallOutput, Annotated[ResponsesOutputMessage, Tag("message")],
ResponsesOutputItemFileSearchCall, Annotated[ResponsesOutputItemReasoning, Tag("reasoning")],
ResponsesImageGenerationCall, Annotated[ResponsesOutputItemFunctionCall, Tag("function_call")],
ResponsesOutputMessage, Annotated[ResponsesWebSearchCallOutput, Tag("web_search_call")],
ResponsesOutputItemReasoning, Annotated[ResponsesOutputItemFileSearchCall, Tag("file_search_call")],
ResponsesOutputItemFunctionCall, Annotated[ResponsesImageGenerationCall, Tag("image_generation_call")],
], ],
) Discriminator(lambda m: get_discriminator(m, "type", "type")),
]
r"""An output item from the response""" r"""An output item from the response"""
@@ -7,8 +7,10 @@ from .openairesponsesrefusalcontent import (
) )
from .responseoutputtext import ResponseOutputText, ResponseOutputTextTypedDict from .responseoutputtext import ResponseOutputText, ResponseOutputTextTypedDict
from openrouter.types import BaseModel from openrouter.types import BaseModel
from openrouter.utils import get_discriminator
from pydantic import Discriminator, Tag
from typing import List, Literal, Optional, Union from typing import List, Literal, Optional, Union
from typing_extensions import NotRequired, TypeAliasType, TypedDict from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
ResponsesOutputMessageRole = Literal["assistant",] ResponsesOutputMessageRole = Literal["assistant",]
@@ -52,10 +54,13 @@ ResponsesOutputMessageContentTypedDict = TypeAliasType(
) )
ResponsesOutputMessageContent = TypeAliasType( ResponsesOutputMessageContent = Annotated[
"ResponsesOutputMessageContent", Union[
Union[OpenAIResponsesRefusalContent, ResponseOutputText], Annotated[ResponseOutputText, Tag("output_text")],
) Annotated[OpenAIResponsesRefusalContent, Tag("refusal")],
],
Discriminator(lambda m: get_discriminator(m, "type", "type")),
]
class ResponsesOutputMessageTypedDict(TypedDict): class ResponsesOutputMessageTypedDict(TypedDict):
+4
View File
@@ -51,6 +51,7 @@ class Credits(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -147,6 +148,7 @@ class Credits(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -266,6 +268,7 @@ class Credits(BaseSDK):
get_serialized_body=lambda: utils.serialize_request_body( get_serialized_body=lambda: utils.serialize_request_body(
request, False, False, "json", components.CreateChargeRequest request, False, False, "json", components.CreateChargeRequest
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -390,6 +393,7 @@ class Credits(BaseSDK):
get_serialized_body=lambda: utils.serialize_request_body( get_serialized_body=lambda: utils.serialize_request_body(
request, False, False, "json", components.CreateChargeRequest request, False, False, "json", components.CreateChargeRequest
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
+8 -22
View File
@@ -1,7 +1,6 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from .basesdk import BaseSDK from .basesdk import BaseSDK
from enum import Enum
from openrouter import components, errors, operations, utils from openrouter import components, errors, operations, utils
from openrouter._hooks import HookContext from openrouter._hooks import HookContext
from openrouter.types import OptionalNullable, UNSET from openrouter.types import OptionalNullable, UNSET
@@ -10,11 +9,6 @@ from openrouter.utils.unmarshal_json_response import unmarshal_json_response
from typing import Any, Mapping, Optional, Union from typing import Any, Mapping, Optional, Union
class GenerateAcceptEnum(str, Enum):
APPLICATION_JSON = "application/json"
TEXT_EVENT_STREAM = "text/event-stream"
class Embeddings(BaseSDK): class Embeddings(BaseSDK):
r"""Text embedding endpoints""" r"""Text embedding endpoints"""
@@ -36,7 +30,6 @@ class Embeddings(BaseSDK):
retries: OptionalNullable[utils.RetryConfig] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None, server_url: Optional[str] = None,
timeout_ms: Optional[int] = None, timeout_ms: Optional[int] = None,
accept_header_override: Optional[GenerateAcceptEnum] = None,
http_headers: Optional[Mapping[str, str]] = None, http_headers: Optional[Mapping[str, str]] = None,
) -> operations.CreateEmbeddingsResponse: ) -> operations.CreateEmbeddingsResponse:
r"""Submit an embedding request r"""Submit an embedding request
@@ -53,7 +46,6 @@ class Embeddings(BaseSDK):
:param retries: Override the default retry configuration for this method :param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method :param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
:param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests. :param http_headers: Additional headers to set or replace on requests.
""" """
base_url = None base_url = None
@@ -88,14 +80,13 @@ class Embeddings(BaseSDK):
request_has_path_params=False, request_has_path_params=False,
request_has_query_params=True, request_has_query_params=True,
user_agent_header="user-agent", user_agent_header="user-agent",
accept_header_value=accept_header_override.value accept_header_value="application/json",
if accept_header_override is not None
else "application/json;q=1, text/event-stream;q=0",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
get_serialized_body=lambda: utils.serialize_request_body( get_serialized_body=lambda: utils.serialize_request_body(
request, False, False, "json", operations.CreateEmbeddingsRequest request, False, False, "json", operations.CreateEmbeddingsRequest
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -138,10 +129,8 @@ class Embeddings(BaseSDK):
response_data: Any = None response_data: Any = None
if utils.match_response(http_res, "200", "application/json"): if utils.match_response(http_res, "200", "application/json"):
return unmarshal_json_response( return unmarshal_json_response(
operations.CreateEmbeddingsResponseBody, http_res operations.CreateEmbeddingsResponse, http_res
) )
if utils.match_response(http_res, "200", "text/event-stream"):
return http_res.text
if utils.match_response(http_res, "400", "application/json"): if utils.match_response(http_res, "400", "application/json"):
response_data = unmarshal_json_response( response_data = unmarshal_json_response(
errors.BadRequestResponseErrorData, http_res errors.BadRequestResponseErrorData, http_res
@@ -223,7 +212,6 @@ class Embeddings(BaseSDK):
retries: OptionalNullable[utils.RetryConfig] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None, server_url: Optional[str] = None,
timeout_ms: Optional[int] = None, timeout_ms: Optional[int] = None,
accept_header_override: Optional[GenerateAcceptEnum] = None,
http_headers: Optional[Mapping[str, str]] = None, http_headers: Optional[Mapping[str, str]] = None,
) -> operations.CreateEmbeddingsResponse: ) -> operations.CreateEmbeddingsResponse:
r"""Submit an embedding request r"""Submit an embedding request
@@ -240,7 +228,6 @@ class Embeddings(BaseSDK):
:param retries: Override the default retry configuration for this method :param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method :param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
:param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests. :param http_headers: Additional headers to set or replace on requests.
""" """
base_url = None base_url = None
@@ -275,14 +262,13 @@ class Embeddings(BaseSDK):
request_has_path_params=False, request_has_path_params=False,
request_has_query_params=True, request_has_query_params=True,
user_agent_header="user-agent", user_agent_header="user-agent",
accept_header_value=accept_header_override.value accept_header_value="application/json",
if accept_header_override is not None
else "application/json;q=1, text/event-stream;q=0",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
get_serialized_body=lambda: utils.serialize_request_body( get_serialized_body=lambda: utils.serialize_request_body(
request, False, False, "json", operations.CreateEmbeddingsRequest request, False, False, "json", operations.CreateEmbeddingsRequest
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -325,10 +311,8 @@ class Embeddings(BaseSDK):
response_data: Any = None response_data: Any = None
if utils.match_response(http_res, "200", "application/json"): if utils.match_response(http_res, "200", "application/json"):
return unmarshal_json_response( return unmarshal_json_response(
operations.CreateEmbeddingsResponseBody, http_res operations.CreateEmbeddingsResponse, http_res
) )
if utils.match_response(http_res, "200", "text/event-stream"):
return http_res.text
if utils.match_response(http_res, "400", "application/json"): if utils.match_response(http_res, "400", "application/json"):
response_data = unmarshal_json_response( response_data = unmarshal_json_response(
errors.BadRequestResponseErrorData, http_res errors.BadRequestResponseErrorData, http_res
@@ -431,6 +415,7 @@ class Embeddings(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -522,6 +507,7 @@ class Embeddings(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
+4
View File
@@ -59,6 +59,7 @@ class Endpoints(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -158,6 +159,7 @@ class Endpoints(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -247,6 +249,7 @@ class Endpoints(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -333,6 +336,7 @@ class Endpoints(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
+2
View File
@@ -56,6 +56,7 @@ class Generations(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -193,6 +194,7 @@ class Generations(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
+3
View File
@@ -0,0 +1,3 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
# package
@@ -0,0 +1,54 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from typing import TYPE_CHECKING
from importlib import import_module
import builtins
import sys
if TYPE_CHECKING:
from .globals import Globals, GlobalsTypedDict
__all__ = ["Globals", "GlobalsTypedDict"]
_dynamic_imports: dict[str, str] = {
"Globals": ".globals",
"GlobalsTypedDict": ".globals",
}
def dynamic_import(modname, retries=3):
for attempt in range(retries):
try:
return import_module(modname, __package__)
except KeyError:
# Clear any half-initialized module and retry
sys.modules.pop(modname, None)
if attempt == retries - 1:
break
raise KeyError(f"Failed to import module '{modname}' after {retries} attempts")
def __getattr__(attr_name: str) -> object:
module_name = _dynamic_imports.get(attr_name)
if module_name is None:
raise AttributeError(
f"No {attr_name} found in _dynamic_imports for module name -> {__name__} "
)
try:
module = dynamic_import(module_name)
result = getattr(module, attr_name)
return result
except ImportError as e:
raise ImportError(
f"Failed to import {attr_name} from {module_name}: {e}"
) from e
except AttributeError as e:
raise AttributeError(
f"Failed to get {attr_name} from {module_name}: {e}"
) from e
def __dir__():
lazy_attrs = builtins.list(_dynamic_imports.keys())
return builtins.sorted(lazy_attrs)
+41
View File
@@ -0,0 +1,41 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
from openrouter.types import BaseModel
from openrouter.utils import FieldMetadata, HeaderMetadata
import pydantic
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
class GlobalsTypedDict(TypedDict):
http_referer: NotRequired[str]
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
"""
x_title: NotRequired[str]
r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
"""
class Globals(BaseModel):
http_referer: Annotated[
Optional[str],
pydantic.Field(alias="HTTP-Referer"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = None
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
"""
x_title: Annotated[
Optional[str],
pydantic.Field(alias="X-Title"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = None
r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
"""
+6
View File
@@ -49,6 +49,7 @@ class Models(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -133,6 +134,7 @@ class Models(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -227,6 +229,7 @@ class Models(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -326,6 +329,7 @@ class Models(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -422,6 +426,7 @@ class Models(BaseSDK):
security=utils.get_pydantic_model( security=utils.get_pydantic_model(
security, operations.ListModelsUserSecurity security, operations.ListModelsUserSecurity
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -516,6 +521,7 @@ class Models(BaseSDK):
security=utils.get_pydantic_model( security=utils.get_pydantic_model(
security, operations.ListModelsUserSecurity security, operations.ListModelsUserSecurity
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
+4
View File
@@ -74,6 +74,7 @@ class OAuth(BaseSDK):
"json", "json",
operations.ExchangeAuthCodeForAPIKeyRequest, operations.ExchangeAuthCodeForAPIKeyRequest,
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -194,6 +195,7 @@ class OAuth(BaseSDK):
"json", "json",
operations.ExchangeAuthCodeForAPIKeyRequest, operations.ExchangeAuthCodeForAPIKeyRequest,
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -316,6 +318,7 @@ class OAuth(BaseSDK):
get_serialized_body=lambda: utils.serialize_request_body( get_serialized_body=lambda: utils.serialize_request_body(
request, False, False, "json", operations.CreateAuthKeysCodeRequest request, False, False, "json", operations.CreateAuthKeysCodeRequest
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -438,6 +441,7 @@ class OAuth(BaseSDK):
get_serialized_body=lambda: utils.serialize_request_body( get_serialized_body=lambda: utils.serialize_request_body(
request, False, False, "json", operations.CreateAuthKeysCodeRequest request, False, False, "json", operations.CreateAuthKeysCodeRequest
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
+10 -7
View File
@@ -45,8 +45,6 @@ if TYPE_CHECKING:
CreateEmbeddingsRequest, CreateEmbeddingsRequest,
CreateEmbeddingsRequestTypedDict, CreateEmbeddingsRequestTypedDict,
CreateEmbeddingsResponse, CreateEmbeddingsResponse,
CreateEmbeddingsResponseBody,
CreateEmbeddingsResponseBodyTypedDict,
CreateEmbeddingsResponseTypedDict, CreateEmbeddingsResponseTypedDict,
Embedding, Embedding,
EmbeddingTypedDict, EmbeddingTypedDict,
@@ -100,7 +98,12 @@ if TYPE_CHECKING:
ExchangeAuthCodeForAPIKeyResponse, ExchangeAuthCodeForAPIKeyResponse,
ExchangeAuthCodeForAPIKeyResponseTypedDict, ExchangeAuthCodeForAPIKeyResponseTypedDict,
) )
from .getcredits import GetCreditsResponse, GetCreditsResponseTypedDict from .getcredits import (
GetCreditsData,
GetCreditsDataTypedDict,
GetCreditsResponse,
GetCreditsResponseTypedDict,
)
from .getcurrentkey import ( from .getcurrentkey import (
GetCurrentKeyData, GetCurrentKeyData,
GetCurrentKeyDataTypedDict, GetCurrentKeyDataTypedDict,
@@ -216,8 +219,6 @@ __all__ = [
"CreateEmbeddingsRequest", "CreateEmbeddingsRequest",
"CreateEmbeddingsRequestTypedDict", "CreateEmbeddingsRequestTypedDict",
"CreateEmbeddingsResponse", "CreateEmbeddingsResponse",
"CreateEmbeddingsResponseBody",
"CreateEmbeddingsResponseBodyTypedDict",
"CreateEmbeddingsResponseTypedDict", "CreateEmbeddingsResponseTypedDict",
"CreateKeysData", "CreateKeysData",
"CreateKeysDataTypedDict", "CreateKeysDataTypedDict",
@@ -242,6 +243,8 @@ __all__ = [
"ExchangeAuthCodeForAPIKeyRequestTypedDict", "ExchangeAuthCodeForAPIKeyRequestTypedDict",
"ExchangeAuthCodeForAPIKeyResponse", "ExchangeAuthCodeForAPIKeyResponse",
"ExchangeAuthCodeForAPIKeyResponseTypedDict", "ExchangeAuthCodeForAPIKeyResponseTypedDict",
"GetCreditsData",
"GetCreditsDataTypedDict",
"GetCreditsResponse", "GetCreditsResponse",
"GetCreditsResponseTypedDict", "GetCreditsResponseTypedDict",
"GetCurrentKeyData", "GetCurrentKeyData",
@@ -370,8 +373,6 @@ _dynamic_imports: dict[str, str] = {
"CreateEmbeddingsRequest": ".createembeddings", "CreateEmbeddingsRequest": ".createembeddings",
"CreateEmbeddingsRequestTypedDict": ".createembeddings", "CreateEmbeddingsRequestTypedDict": ".createembeddings",
"CreateEmbeddingsResponse": ".createembeddings", "CreateEmbeddingsResponse": ".createembeddings",
"CreateEmbeddingsResponseBody": ".createembeddings",
"CreateEmbeddingsResponseBodyTypedDict": ".createembeddings",
"CreateEmbeddingsResponseTypedDict": ".createembeddings", "CreateEmbeddingsResponseTypedDict": ".createembeddings",
"Embedding": ".createembeddings", "Embedding": ".createembeddings",
"EmbeddingTypedDict": ".createembeddings", "EmbeddingTypedDict": ".createembeddings",
@@ -416,6 +417,8 @@ _dynamic_imports: dict[str, str] = {
"ExchangeAuthCodeForAPIKeyRequestTypedDict": ".exchangeauthcodeforapikey", "ExchangeAuthCodeForAPIKeyRequestTypedDict": ".exchangeauthcodeforapikey",
"ExchangeAuthCodeForAPIKeyResponse": ".exchangeauthcodeforapikey", "ExchangeAuthCodeForAPIKeyResponse": ".exchangeauthcodeforapikey",
"ExchangeAuthCodeForAPIKeyResponseTypedDict": ".exchangeauthcodeforapikey", "ExchangeAuthCodeForAPIKeyResponseTypedDict": ".exchangeauthcodeforapikey",
"GetCreditsData": ".getcredits",
"GetCreditsDataTypedDict": ".getcredits",
"GetCreditsResponse": ".getcredits", "GetCreditsResponse": ".getcredits",
"GetCreditsResponseTypedDict": ".getcredits", "GetCreditsResponseTypedDict": ".getcredits",
"GetCurrentKeyData": ".getcurrentkey", "GetCurrentKeyData": ".getcurrentkey",
+11 -16
View File
@@ -15,8 +15,8 @@ from openrouter.types import (
UNSET_SENTINEL, UNSET_SENTINEL,
UnrecognizedStr, UnrecognizedStr,
) )
from openrouter.utils import validate_open_enum from openrouter.utils import get_discriminator, validate_open_enum
from pydantic import model_serializer from pydantic import Discriminator, Tag, model_serializer
from pydantic.functional_validators import PlainValidator from pydantic.functional_validators import PlainValidator
from typing import Any, List, Literal, Optional, Union from typing import Any, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -63,7 +63,13 @@ ContentTypedDict = TypeAliasType(
) )
Content = TypeAliasType("Content", Union[ContentText, ContentImageURL]) Content = Annotated[
Union[
Annotated[ContentText, Tag("text")],
Annotated[ContentImageURL, Tag("image_url")],
],
Discriminator(lambda m: get_discriminator(m, "type", "type")),
]
class InputTypedDict(TypedDict): class InputTypedDict(TypedDict):
@@ -389,7 +395,7 @@ class Usage(BaseModel):
cost: Optional[float] = None cost: Optional[float] = None
class CreateEmbeddingsResponseBodyTypedDict(TypedDict): class CreateEmbeddingsResponseTypedDict(TypedDict):
r"""Embedding response""" r"""Embedding response"""
object: Object object: Object
@@ -399,7 +405,7 @@ class CreateEmbeddingsResponseBodyTypedDict(TypedDict):
usage: NotRequired[UsageTypedDict] usage: NotRequired[UsageTypedDict]
class CreateEmbeddingsResponseBody(BaseModel): class CreateEmbeddingsResponse(BaseModel):
r"""Embedding response""" r"""Embedding response"""
object: Object object: Object
@@ -411,14 +417,3 @@ class CreateEmbeddingsResponseBody(BaseModel):
id: Optional[str] = None id: Optional[str] = None
usage: Optional[Usage] = None usage: Optional[Usage] = None
CreateEmbeddingsResponseTypedDict = TypeAliasType(
"CreateEmbeddingsResponseTypedDict",
Union[CreateEmbeddingsResponseBodyTypedDict, str],
)
CreateEmbeddingsResponse = TypeAliasType(
"CreateEmbeddingsResponse", Union[CreateEmbeddingsResponseBody, str]
)
+19
View File
@@ -5,9 +5,28 @@ from openrouter.types import BaseModel
from typing_extensions import TypedDict from typing_extensions import TypedDict
class GetCreditsDataTypedDict(TypedDict):
total_credits: float
r"""Total credits purchased"""
total_usage: float
r"""Total credits used"""
class GetCreditsData(BaseModel):
total_credits: float
r"""Total credits purchased"""
total_usage: float
r"""Total credits used"""
class GetCreditsResponseTypedDict(TypedDict): class GetCreditsResponseTypedDict(TypedDict):
r"""Total credits purchased and used""" r"""Total credits purchased and used"""
data: GetCreditsDataTypedDict
class GetCreditsResponse(BaseModel): class GetCreditsResponse(BaseModel):
r"""Total credits purchased and used""" r"""Total credits purchased and used"""
data: GetCreditsData
+5 -1
View File
@@ -38,12 +38,14 @@ GetParametersProvider = Union[
"AionLabs", "AionLabs",
"Alibaba", "Alibaba",
"Amazon Bedrock", "Amazon Bedrock",
"Amazon Nova",
"Anthropic", "Anthropic",
"Arcee", "Arcee AI",
"AtlasCloud", "AtlasCloud",
"Avian", "Avian",
"Azure", "Azure",
"BaseTen", "BaseTen",
"BytePlus",
"Black Forest Labs", "Black Forest Labs",
"Cerebras", "Cerebras",
"Chutes", "Chutes",
@@ -58,6 +60,7 @@ GetParametersProvider = Union[
"Fireworks", "Fireworks",
"Friendli", "Friendli",
"GMICloud", "GMICloud",
"GoPomelo",
"Google", "Google",
"Google AI Studio", "Google AI Studio",
"Groq", "Groq",
@@ -88,6 +91,7 @@ GetParametersProvider = Union[
"SambaNova", "SambaNova",
"SiliconFlow", "SiliconFlow",
"Stealth", "Stealth",
"StreamLake",
"Switchpoint", "Switchpoint",
"Targon", "Targon",
"Together", "Together",
+2
View File
@@ -68,6 +68,7 @@ class Parameters(BaseSDK):
security=utils.get_pydantic_model( security=utils.get_pydantic_model(
security, operations.GetParametersSecurity security, operations.GetParametersSecurity
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -179,6 +180,7 @@ class Parameters(BaseSDK):
security=utils.get_pydantic_model( security=utils.get_pydantic_model(
security, operations.GetParametersSecurity security, operations.GetParametersSecurity
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
+2
View File
@@ -49,6 +49,7 @@ class Providers(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -133,6 +134,7 @@ class Providers(BaseSDK):
accept_header_value="application/json", accept_header_value="application/json",
http_headers=http_headers, http_headers=http_headers,
security=self.sdk_configuration.security, security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
+8 -20
View File
@@ -69,8 +69,7 @@ class Responses(BaseSDK):
include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET, include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET,
background: OptionalNullable[bool] = UNSET, background: OptionalNullable[bool] = UNSET,
safety_identifier: OptionalNullable[str] = UNSET, safety_identifier: OptionalNullable[str] = UNSET,
store: OptionalNullable[bool] = UNSET, service_tier: Optional[components.ServiceTier] = "auto",
service_tier: OptionalNullable[components.ServiceTier] = UNSET,
truncation: OptionalNullable[components.Truncation] = UNSET, truncation: OptionalNullable[components.Truncation] = UNSET,
stream: Union[Literal[False], None] = None, stream: Union[Literal[False], None] = None,
provider: OptionalNullable[ provider: OptionalNullable[
@@ -109,7 +108,6 @@ class Responses(BaseSDK):
:param include: :param include:
:param background: :param background:
:param safety_identifier: :param safety_identifier:
:param store:
:param service_tier: :param service_tier:
:param truncation: :param truncation:
:param stream: :param stream:
@@ -174,8 +172,7 @@ class Responses(BaseSDK):
include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET, include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET,
background: OptionalNullable[bool] = UNSET, background: OptionalNullable[bool] = UNSET,
safety_identifier: OptionalNullable[str] = UNSET, safety_identifier: OptionalNullable[str] = UNSET,
store: OptionalNullable[bool] = UNSET, service_tier: Optional[components.ServiceTier] = "auto",
service_tier: OptionalNullable[components.ServiceTier] = UNSET,
truncation: OptionalNullable[components.Truncation] = UNSET, truncation: OptionalNullable[components.Truncation] = UNSET,
stream: Literal[True], stream: Literal[True],
provider: OptionalNullable[ provider: OptionalNullable[
@@ -214,7 +211,6 @@ class Responses(BaseSDK):
:param include: :param include:
:param background: :param background:
:param safety_identifier: :param safety_identifier:
:param store:
:param service_tier: :param service_tier:
:param truncation: :param truncation:
:param stream: :param stream:
@@ -278,8 +274,7 @@ class Responses(BaseSDK):
include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET, include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET,
background: OptionalNullable[bool] = UNSET, background: OptionalNullable[bool] = UNSET,
safety_identifier: OptionalNullable[str] = UNSET, safety_identifier: OptionalNullable[str] = UNSET,
store: OptionalNullable[bool] = UNSET, service_tier: Optional[components.ServiceTier] = "auto",
service_tier: OptionalNullable[components.ServiceTier] = UNSET,
truncation: OptionalNullable[components.Truncation] = UNSET, truncation: OptionalNullable[components.Truncation] = UNSET,
stream: Optional[bool] = False, stream: Optional[bool] = False,
provider: OptionalNullable[ provider: OptionalNullable[
@@ -318,7 +313,6 @@ class Responses(BaseSDK):
:param include: :param include:
:param background: :param background:
:param safety_identifier: :param safety_identifier:
:param store:
:param service_tier: :param service_tier:
:param truncation: :param truncation:
:param stream: :param stream:
@@ -374,7 +368,6 @@ class Responses(BaseSDK):
include=include, include=include,
background=background, background=background,
safety_identifier=safety_identifier, safety_identifier=safety_identifier,
store=store,
service_tier=service_tier, service_tier=service_tier,
truncation=truncation, truncation=truncation,
stream=stream, stream=stream,
@@ -403,6 +396,7 @@ class Responses(BaseSDK):
get_serialized_body=lambda: utils.serialize_request_body( get_serialized_body=lambda: utils.serialize_request_body(
request, False, False, "json", components.OpenResponsesRequest request, False, False, "json", components.OpenResponsesRequest
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
@@ -626,8 +620,7 @@ class Responses(BaseSDK):
include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET, include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET,
background: OptionalNullable[bool] = UNSET, background: OptionalNullable[bool] = UNSET,
safety_identifier: OptionalNullable[str] = UNSET, safety_identifier: OptionalNullable[str] = UNSET,
store: OptionalNullable[bool] = UNSET, service_tier: Optional[components.ServiceTier] = "auto",
service_tier: OptionalNullable[components.ServiceTier] = UNSET,
truncation: OptionalNullable[components.Truncation] = UNSET, truncation: OptionalNullable[components.Truncation] = UNSET,
stream: Union[Literal[False], None] = None, stream: Union[Literal[False], None] = None,
provider: OptionalNullable[ provider: OptionalNullable[
@@ -666,7 +659,6 @@ class Responses(BaseSDK):
:param include: :param include:
:param background: :param background:
:param safety_identifier: :param safety_identifier:
:param store:
:param service_tier: :param service_tier:
:param truncation: :param truncation:
:param stream: :param stream:
@@ -731,8 +723,7 @@ class Responses(BaseSDK):
include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET, include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET,
background: OptionalNullable[bool] = UNSET, background: OptionalNullable[bool] = UNSET,
safety_identifier: OptionalNullable[str] = UNSET, safety_identifier: OptionalNullable[str] = UNSET,
store: OptionalNullable[bool] = UNSET, service_tier: Optional[components.ServiceTier] = "auto",
service_tier: OptionalNullable[components.ServiceTier] = UNSET,
truncation: OptionalNullable[components.Truncation] = UNSET, truncation: OptionalNullable[components.Truncation] = UNSET,
stream: Literal[True], stream: Literal[True],
provider: OptionalNullable[ provider: OptionalNullable[
@@ -771,7 +762,6 @@ class Responses(BaseSDK):
:param include: :param include:
:param background: :param background:
:param safety_identifier: :param safety_identifier:
:param store:
:param service_tier: :param service_tier:
:param truncation: :param truncation:
:param stream: :param stream:
@@ -835,8 +825,7 @@ class Responses(BaseSDK):
include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET, include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET,
background: OptionalNullable[bool] = UNSET, background: OptionalNullable[bool] = UNSET,
safety_identifier: OptionalNullable[str] = UNSET, safety_identifier: OptionalNullable[str] = UNSET,
store: OptionalNullable[bool] = UNSET, service_tier: Optional[components.ServiceTier] = "auto",
service_tier: OptionalNullable[components.ServiceTier] = UNSET,
truncation: OptionalNullable[components.Truncation] = UNSET, truncation: OptionalNullable[components.Truncation] = UNSET,
stream: Optional[bool] = False, stream: Optional[bool] = False,
provider: OptionalNullable[ provider: OptionalNullable[
@@ -875,7 +864,6 @@ class Responses(BaseSDK):
:param include: :param include:
:param background: :param background:
:param safety_identifier: :param safety_identifier:
:param store:
:param service_tier: :param service_tier:
:param truncation: :param truncation:
:param stream: :param stream:
@@ -931,7 +919,6 @@ class Responses(BaseSDK):
include=include, include=include,
background=background, background=background,
safety_identifier=safety_identifier, safety_identifier=safety_identifier,
store=store,
service_tier=service_tier, service_tier=service_tier,
truncation=truncation, truncation=truncation,
stream=stream, stream=stream,
@@ -960,6 +947,7 @@ class Responses(BaseSDK):
get_serialized_body=lambda: utils.serialize_request_body( get_serialized_body=lambda: utils.serialize_request_body(
request, False, False, "json", components.OpenResponsesRequest request, False, False, "json", components.OpenResponsesRequest
), ),
allow_empty_value=None,
timeout_ms=timeout_ms, timeout_ms=timeout_ms,
) )
+13
View File
@@ -9,6 +9,7 @@ import httpx
import importlib import importlib
from openrouter import components, utils from openrouter import components, utils
from openrouter._hooks import SDKHooks from openrouter._hooks import SDKHooks
from openrouter.models import internal
from openrouter.types import OptionalNullable, UNSET from openrouter.types import OptionalNullable, UNSET
import sys import sys
from typing import Any, Callable, Dict, Optional, TYPE_CHECKING, Union, cast from typing import Any, Callable, Dict, Optional, TYPE_CHECKING, Union, cast
@@ -77,6 +78,8 @@ class OpenRouter(BaseSDK):
def __init__( def __init__(
self, self,
api_key: Optional[Union[Optional[str], Callable[[], Optional[str]]]] = None, api_key: Optional[Union[Optional[str], Callable[[], Optional[str]]]] = None,
http_referer: Optional[str] = None,
x_title: Optional[str] = None,
server: Optional[str] = None, server: Optional[str] = None,
server_url: Optional[str] = None, server_url: Optional[str] = None,
url_params: Optional[Dict[str, str]] = None, url_params: Optional[Dict[str, str]] = None,
@@ -89,6 +92,8 @@ class OpenRouter(BaseSDK):
r"""Instantiates the SDK configuring it with the provided parameters. r"""Instantiates the SDK configuring it with the provided parameters.
:param api_key: The api_key required for authentication :param api_key: The api_key required for authentication
:param http_referer: Configures the http_referer parameter for all supported operations
:param x_title: Configures the x_title parameter for all supported operations
:param server: The server by name to use for all methods :param server: The server by name to use for all methods
:param server_url: The server URL to use for all methods :param server_url: The server URL to use for all methods
:param url_params: Parameters to optionally template the server URL with :param url_params: Parameters to optionally template the server URL with
@@ -129,6 +134,13 @@ class OpenRouter(BaseSDK):
if url_params is not None: if url_params is not None:
server_url = utils.template_url(server_url, url_params) server_url = utils.template_url(server_url, url_params)
_globals = internal.Globals(
http_referer=utils.get_global_from_env(
http_referer, "OPENROUTER_HTTP_REFERER", str
),
x_title=utils.get_global_from_env(x_title, "OPENROUTER_X_TITLE", str),
)
BaseSDK.__init__( BaseSDK.__init__(
self, self,
SDKConfiguration( SDKConfiguration(
@@ -136,6 +148,7 @@ class OpenRouter(BaseSDK):
client_supplied=client_supplied, client_supplied=client_supplied,
async_client=async_client, async_client=async_client,
async_client_supplied=async_client_supplied, async_client_supplied=async_client_supplied,
globals=_globals,
security=security, security=security,
server_url=server_url, server_url=server_url,
server=server, server=server,
+2
View File
@@ -10,6 +10,7 @@ from .httpclient import AsyncHttpClient, HttpClient
from .utils import Logger, RetryConfig, remove_suffix from .utils import Logger, RetryConfig, remove_suffix
from dataclasses import dataclass from dataclasses import dataclass
from openrouter import components from openrouter import components
from openrouter.models import internal
from openrouter.types import OptionalNullable, UNSET from openrouter.types import OptionalNullable, UNSET
from pydantic import Field from pydantic import Field
from typing import Callable, Dict, Optional, Tuple, Union from typing import Callable, Dict, Optional, Tuple, Union
@@ -30,6 +31,7 @@ class SDKConfiguration:
async_client: Union[AsyncHttpClient, None] async_client: Union[AsyncHttpClient, None]
async_client_supplied: bool async_client_supplied: bool
debug_logger: Logger debug_logger: Logger
globals: internal.Globals
security: Optional[ security: Optional[
Union[components.Security, Callable[[], components.Security]] Union[components.Security, Callable[[], components.Security]]
] = None ] = None
+21 -10
View File
@@ -142,16 +142,21 @@ def serialize_multipart_form(
if field_metadata.file: if field_metadata.file:
if isinstance(val, List): if isinstance(val, List):
# Handle array of files # Handle array of files
array_field_name = f_name + "[]"
for file_obj in val: for file_obj in val:
if not _is_set(file_obj): if not _is_set(file_obj):
continue continue
file_name, content, content_type = _extract_file_properties(file_obj) file_name, content, content_type = _extract_file_properties(
file_obj
)
if content_type is not None: if content_type is not None:
files.append((f_name + "[]", (file_name, content, content_type))) files.append(
(array_field_name, (file_name, content, content_type))
)
else: else:
files.append((f_name + "[]", (file_name, content))) files.append((array_field_name, (file_name, content)))
else: else:
# Handle single file # Handle single file
file_name, content, content_type = _extract_file_properties(val) file_name, content, content_type = _extract_file_properties(val)
@@ -161,11 +166,16 @@ def serialize_multipart_form(
else: else:
files.append((f_name, (file_name, content))) files.append((f_name, (file_name, content)))
elif field_metadata.json: elif field_metadata.json:
files.append((f_name, ( files.append(
None, (
marshal_json(val, request_field_types[name]), f_name,
"application/json", (
))) None,
marshal_json(val, request_field_types[name]),
"application/json",
),
)
)
else: else:
if isinstance(val, List): if isinstance(val, List):
values = [] values = []
@@ -175,7 +185,8 @@ def serialize_multipart_form(
continue continue
values.append(_val_to_string(value)) values.append(_val_to_string(value))
form[f_name + "[]"] = values array_field_name = f_name + "[]"
form[array_field_name] = values
else: else:
form[f_name] = _val_to_string(val) form[f_name] = _val_to_string(val)
return media_type, form, files return media_type, form, files
+14 -2
View File
@@ -27,12 +27,13 @@ from .forms import _populate_form
def get_query_params( def get_query_params(
query_params: Any, query_params: Any,
gbls: Optional[Any] = None, gbls: Optional[Any] = None,
allow_empty_value: Optional[List[str]] = None,
) -> Dict[str, List[str]]: ) -> Dict[str, List[str]]:
params: Dict[str, List[str]] = {} params: Dict[str, List[str]] = {}
globals_already_populated = _populate_query_params(query_params, gbls, params, []) globals_already_populated = _populate_query_params(query_params, gbls, params, [], allow_empty_value)
if _is_set(gbls): if _is_set(gbls):
_populate_query_params(gbls, None, params, globals_already_populated) _populate_query_params(gbls, None, params, globals_already_populated, allow_empty_value)
return params return params
@@ -42,6 +43,7 @@ def _populate_query_params(
gbls: Any, gbls: Any,
query_param_values: Dict[str, List[str]], query_param_values: Dict[str, List[str]],
skip_fields: List[str], skip_fields: List[str],
allow_empty_value: Optional[List[str]] = None,
) -> List[str]: ) -> List[str]:
globals_already_populated: List[str] = [] globals_already_populated: List[str] = []
@@ -69,6 +71,16 @@ def _populate_query_params(
globals_already_populated.append(name) globals_already_populated.append(name)
f_name = field.alias if field.alias is not None else name f_name = field.alias if field.alias is not None else name
allow_empty_set = set(allow_empty_value or [])
should_include_empty = f_name in allow_empty_set and (
value is None or value == [] or value == ""
)
if should_include_empty:
query_param_values[f_name] = [""]
continue
serialization = metadata.serialization serialization = metadata.serialization
if serialization is not None: if serialization is not None:
serialized_parms = _get_serialized_params( serialized_parms = _get_serialized_params(
+69 -5
View File
@@ -3,7 +3,9 @@
import asyncio import asyncio
import random import random
import time import time
from typing import List from datetime import datetime
from email.utils import parsedate_to_datetime
from typing import List, Optional
import httpx import httpx
@@ -51,9 +53,11 @@ class Retries:
class TemporaryError(Exception): class TemporaryError(Exception):
response: httpx.Response response: httpx.Response
retry_after: Optional[int]
def __init__(self, response: httpx.Response): def __init__(self, response: httpx.Response):
self.response = response self.response = response
self.retry_after = _parse_retry_after_header(response)
class PermanentError(Exception): class PermanentError(Exception):
@@ -63,6 +67,62 @@ class PermanentError(Exception):
self.inner = inner self.inner = inner
def _parse_retry_after_header(response: httpx.Response) -> Optional[int]:
"""Parse Retry-After header from response.
Returns:
Retry interval in milliseconds, or None if header is missing or invalid.
"""
retry_after_header = response.headers.get("retry-after")
if not retry_after_header:
return None
try:
seconds = float(retry_after_header)
return round(seconds * 1000)
except ValueError:
pass
try:
retry_date = parsedate_to_datetime(retry_after_header)
delta = (retry_date - datetime.now(retry_date.tzinfo)).total_seconds()
return round(max(0, delta) * 1000)
except (ValueError, TypeError):
pass
return None
def _get_sleep_interval(
exception: Exception,
initial_interval: int,
max_interval: int,
exponent: float,
retries: int,
) -> float:
"""Get sleep interval for retry with exponential backoff.
Args:
exception: The exception that triggered the retry.
initial_interval: Initial retry interval in milliseconds.
max_interval: Maximum retry interval in milliseconds.
exponent: Base for exponential backoff calculation.
retries: Current retry attempt count.
Returns:
Sleep interval in seconds.
"""
if (
isinstance(exception, TemporaryError)
and exception.retry_after is not None
and exception.retry_after > 0
):
return exception.retry_after / 1000
sleep = (initial_interval / 1000) * exponent**retries + random.uniform(0, 1)
return min(sleep, max_interval / 1000)
def retry(func, retries: Retries): def retry(func, retries: Retries):
if retries.config.strategy == "backoff": if retries.config.strategy == "backoff":
@@ -183,8 +243,10 @@ def retry_with_backoff(
return exception.response return exception.response
raise raise
sleep = (initial_interval / 1000) * exponent**retries + random.uniform(0, 1)
sleep = min(sleep, max_interval / 1000) sleep = _get_sleep_interval(
exception, initial_interval, max_interval, exponent, retries
)
time.sleep(sleep) time.sleep(sleep)
retries += 1 retries += 1
@@ -211,7 +273,9 @@ async def retry_with_backoff_async(
return exception.response return exception.response
raise raise
sleep = (initial_interval / 1000) * exponent**retries + random.uniform(0, 1)
sleep = min(sleep, max_interval / 1000) sleep = _get_sleep_interval(
exception, initial_interval, max_interval, exponent, retries
)
await asyncio.sleep(sleep) await asyncio.sleep(sleep)
retries += 1 retries += 1