diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock
index 569c59c..5135a8f 100644
--- a/.speakeasy/gen.lock
+++ b/.speakeasy/gen.lock
@@ -1,12 +1,12 @@
lockVersion: 2.0.0
id: cfd52247-6a25-4c6d-bbce-fe6fce0cd69d
management:
- docChecksum: bcccd1abd05f6654a822386f2eefbd8a
+ docChecksum: 01481f11e87a18cf1daa583fee2c88fb
docVersion: 1.0.0
speakeasyVersion: 1.666.0
generationVersion: 2.768.0
- releaseVersion: 0.0.16
- configChecksum: cd00e781b0ef78cfcb3fe812f51e93ff
+ releaseVersion: 0.0.21
+ configChecksum: 52c13d7fdf159611bf5d900363e322ac
repoURL: https://github.com/OpenRouterTeam/python-sdk.git
installationURL: https://github.com/OpenRouterTeam/python-sdk.git
published: true
@@ -66,16 +66,14 @@ generatedFiles:
- docs/components/chatgenerationtokenusage.md
- docs/components/chatmessagecontentitem.md
- docs/components/chatmessagecontentitemaudio.md
- - docs/components/chatmessagecontentitemaudioformat.md
- docs/components/chatmessagecontentitemaudioinputaudio.md
- - docs/components/chatmessagecontentitemfile.md
+ - docs/components/chatmessagecontentitemcachecontrol.md
- docs/components/chatmessagecontentitemimage.md
- docs/components/chatmessagecontentitemimagedetail.md
- docs/components/chatmessagecontentitemtext.md
- docs/components/chatmessagecontentitemvideo.md
- docs/components/chatmessagecontentitemvideoinputvideo.md
- docs/components/chatmessagecontentitemvideovideourl.md
- - docs/components/chatmessagecontentitemvideovideourlvideourl.md
- docs/components/chatmessagetokenlogprob.md
- docs/components/chatmessagetokenlogprobs.md
- docs/components/chatmessagetoolcall.md
@@ -108,12 +106,12 @@ generatedFiles:
- docs/components/costdetails.md
- docs/components/createchargerequest.md
- docs/components/datacollection.md
+ - docs/components/debug.md
- docs/components/defaultparameters.md
- docs/components/edgenetworktimeoutresponseerrordata.md
- docs/components/effort.md
- docs/components/endpointstatus.md
- docs/components/engine.md
- - docs/components/file.md
- docs/components/filecitation.md
- docs/components/filecitationtype.md
- docs/components/filepath.md
@@ -121,6 +119,7 @@ generatedFiles:
- docs/components/forbiddenresponseerrordata.md
- docs/components/idfileparser.md
- docs/components/idmoderation.md
+ - docs/components/idresponsehealing.md
- docs/components/idweb.md
- docs/components/ignore.md
- docs/components/imagegenerationstatus.md
@@ -304,6 +303,7 @@ generatedFiles:
- docs/components/plugin.md
- docs/components/pluginfileparser.md
- docs/components/pluginmoderation.md
+ - docs/components/pluginresponsehealing.md
- docs/components/pluginweb.md
- docs/components/pricing.md
- docs/components/prompt.md
@@ -395,6 +395,7 @@ generatedFiles:
- docs/components/toplogprob.md
- docs/components/topproviderinfo.md
- docs/components/truncation.md
+ - docs/components/ttl.md
- docs/components/type.md
- docs/components/typeresponsecompleted.md
- docs/components/typeresponsecontentpartadded.md
@@ -420,7 +421,8 @@ generatedFiles:
- docs/components/usermessage.md
- docs/components/usermessagecontent.md
- docs/components/variables.md
- - docs/components/videourl.md
+ - docs/components/videourl1.md
+ - docs/components/videourl2.md
- docs/components/websearchpreviewtooluserlocation.md
- docs/components/websearchpreviewtooluserlocationtype.md
- docs/components/websearchstatus.md
@@ -471,6 +473,7 @@ generatedFiles:
- docs/operations/exchangeauthcodeforapikeycodechallengemethod.md
- docs/operations/exchangeauthcodeforapikeyrequest.md
- docs/operations/exchangeauthcodeforapikeyresponse.md
+ - docs/operations/getcreditsdata.md
- docs/operations/getcreditsresponse.md
- docs/operations/getcurrentkeydata.md
- docs/operations/getcurrentkeyresponse.md
@@ -553,12 +556,13 @@ generatedFiles:
- src/openrouter/components/assistantmessage.py
- src/openrouter/components/badgatewayresponseerrordata.py
- src/openrouter/components/badrequestresponseerrordata.py
+ - src/openrouter/components/chatcompletionfinishreason.py
- src/openrouter/components/chaterror.py
- src/openrouter/components/chatgenerationparams.py
- src/openrouter/components/chatgenerationtokenusage.py
- src/openrouter/components/chatmessagecontentitem.py
- src/openrouter/components/chatmessagecontentitemaudio.py
- - src/openrouter/components/chatmessagecontentitemfile.py
+ - src/openrouter/components/chatmessagecontentitemcachecontrol.py
- src/openrouter/components/chatmessagecontentitemimage.py
- src/openrouter/components/chatmessagecontentitemtext.py
- src/openrouter/components/chatmessagecontentitemvideo.py
@@ -567,6 +571,7 @@ generatedFiles:
- src/openrouter/components/chatmessagetoolcall.py
- src/openrouter/components/chatresponse.py
- src/openrouter/components/chatresponsechoice.py
+ - src/openrouter/components/chatstreamingchoice.py
- src/openrouter/components/chatstreamingmessagechunk.py
- src/openrouter/components/chatstreamingmessagetoolcall.py
- src/openrouter/components/chatstreamingresponsechunk.py
@@ -689,7 +694,6 @@ generatedFiles:
- src/openrouter/components/unprocessableentityresponseerrordata.py
- src/openrouter/components/urlcitation.py
- src/openrouter/components/usermessage.py
- - src/openrouter/components/videourl.py
- src/openrouter/components/websearchpreviewtooluserlocation.py
- src/openrouter/components/websearchstatus.py
- src/openrouter/credits.py
@@ -773,7 +777,7 @@ examples:
createResponses:
speakeasy-default-create-responses:
requestBody:
- application/json: {"stream": false}
+ application/json: {"store": false, "service_tier": "auto", "stream": false}
responses:
"200":
application/json: {"id": "resp-abc123", "object": "response", "created_at": 1704067200, "model": "gpt-4", "output": [{"id": "msg-abc123", "role": "assistant", "type": "message", "content": [{"type": "output_text", "text": "Hello! How can I help you today?"}]}], "error": null, "incomplete_details": null, "temperature": null, "top_p": null, "instructions": null, "metadata": null, "tools": [], "tool_choice": "auto", "parallel_tool_calls": true}
@@ -823,7 +827,7 @@ examples:
speakeasy-default-get-credits:
responses:
"200":
- application/json: {}
+ application/json: {"data": {"total_credits": 100.5, "total_usage": 25.75}}
"401":
application/json: {"error": {"code": 401, "message": "Missing Authentication header"}}
"403":
diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml
index 5006069..4cdfb5c 100644
--- a/.speakeasy/gen.yaml
+++ b/.speakeasy/gen.yaml
@@ -31,7 +31,7 @@ generation:
skipResponseBodyAssertions: false
preApplyUnionDiscriminators: true
python:
- version: 0.0.16
+ version: 0.0.21
additionalDependencies:
dev: {}
main: {}
diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml
index d99089f..1c24df9 100644
--- a/.speakeasy/out.openapi.yaml
+++ b/.speakeasy/out.openapi.yaml
@@ -3464,12 +3464,14 @@ components:
- AionLabs
- Alibaba
- Amazon Bedrock
+ - Amazon Nova
- Anthropic
- - Arcee
+ - Arcee AI
- AtlasCloud
- Avian
- Azure
- BaseTen
+ - BytePlus
- Black Forest Labs
- Cerebras
- Chutes
@@ -3484,6 +3486,7 @@ components:
- Fireworks
- Friendli
- GMICloud
+ - GoPomelo
- Google
- Google AI Studio
- Groq
@@ -3513,7 +3516,9 @@ components:
- Relace
- SambaNova
- SiliconFlow
+ - Sourceful
- Stealth
+ - StreamLake
- Switchpoint
- Targon
- Together
@@ -3648,18 +3653,13 @@ components:
nullable: true
store:
type: boolean
- nullable: true
+ const: false
+ default: false
service_tier:
- allOf:
- - $ref: '#/components/schemas/OpenAIResponsesServiceTier'
- - enum:
- - auto
- - default
- - flex
- - scale
- - priority
- example: auto
- x-speakeasy-unknown-values: allow
+ type: string
+ enum:
+ - auto
+ default: auto
truncation:
allOf:
- $ref: '#/components/schemas/OpenAIResponsesTruncation'
@@ -3803,12 +3803,25 @@ components:
x-speakeasy-unknown-values: allow
required:
- id
+ - type: object
+ properties:
+ id:
+ type: string
+ enum:
+ - response-healing
+ required:
+ - id
description: Plugins you want to enable for this request, including their settings.
user:
type: string
maxLength: 128
description: >-
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 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
example:
model: anthropic/claude-4.5-sonnet-20250929
@@ -4597,6 +4610,10 @@ components:
status: default
uptime_last_30m: 99.5
supports_implicit_caching: true
+ __schema0:
+ anyOf:
+ - $ref: '#/components/schemas/ChatCompletionFinishReason'
+ - type: 'null'
ModelName:
type: string
ChatMessageContentItemText:
@@ -4607,6 +4624,8 @@ components:
const: text
text:
type: string
+ cache_control:
+ $ref: '#/components/schemas/ChatMessageContentItemCacheControl'
required:
- type
- text
@@ -4646,15 +4665,6 @@ components:
type: string
format:
type: string
- enum:
- - wav
- - mp3
- - flac
- - m4a
- - ogg
- - pcm16
- - pcm24
- x-speakeasy-unknown-values: allow
required:
- data
- format
@@ -4669,7 +4679,12 @@ components:
type: string
const: input_video
video_url:
- $ref: '#/components/schemas/VideoURL'
+ type: object
+ properties:
+ url:
+ type: string
+ required:
+ - url
required:
- type
- video_url
@@ -4689,40 +4704,12 @@ components:
- type
- video_url
type: object
- VideoURL:
- type: object
- properties:
- url:
- type: string
- required:
- - url
- ChatMessageContentItemFile:
- type: object
- properties:
- type:
- type: string
- const: file
- file:
- type: object
- properties:
- file_data:
- type: string
- file_id:
- type: string
- filename:
- type: string
- required:
- - file_data
- required:
- - type
- - file
ChatMessageContentItem:
oneOf:
- $ref: '#/components/schemas/ChatMessageContentItemText'
- $ref: '#/components/schemas/ChatMessageContentItemImage'
- $ref: '#/components/schemas/ChatMessageContentItemAudio'
- $ref: '#/components/schemas/ChatMessageContentItemVideo'
- - $ref: '#/components/schemas/ChatMessageContentItemFile'
type: object
discriminator:
propertyName: type
@@ -4732,7 +4719,6 @@ components:
input_audio: '#/components/schemas/ChatMessageContentItemAudio'
input_video: '#/components/schemas/ChatMessageContentItemVideo'
video_url: '#/components/schemas/ChatMessageContentItemVideo'
- file: '#/components/schemas/ChatMessageContentItemFile'
ChatMessageToolCall:
type: object
properties:
@@ -4856,16 +4842,14 @@ components:
- prompt_tokens
- total_tokens
ChatCompletionFinishReason:
- anyOf:
- - type: string
- enum:
- - tool_calls
- - stop
- - length
- - content_filter
- - error
- x-speakeasy-unknown-values: allow
- - type: 'null'
+ type: string
+ enum:
+ - tool_calls
+ - stop
+ - length
+ - content_filter
+ - error
+ x-speakeasy-unknown-values: allow
JSONSchemaConfig:
type: object
properties:
@@ -4907,6 +4891,20 @@ components:
required:
- type
- grammar
+ ChatMessageContentItemCacheControl:
+ type: object
+ properties:
+ type:
+ type: string
+ const: ephemeral
+ ttl:
+ type: string
+ enum:
+ - 5m
+ - 1h
+ x-speakeasy-unknown-values: allow
+ required:
+ - type
SystemMessage:
type: object
properties:
@@ -5218,13 +5216,18 @@ components:
- type: 'null'
user:
type: string
+ debug:
+ type: object
+ properties:
+ echo_upstream_body:
+ type: boolean
required:
- messages
ChatResponseChoice:
type: object
properties:
finish_reason:
- $ref: '#/components/schemas/ChatCompletionFinishReason'
+ $ref: '#/components/schemas/__schema0'
index:
type: number
message:
@@ -5285,7 +5288,7 @@ components:
delta:
$ref: '#/components/schemas/ChatStreamingMessageChunk'
finish_reason:
- $ref: '#/components/schemas/ChatCompletionFinishReason'
+ $ref: '#/components/schemas/__schema0'
index:
type: number
logprobs:
@@ -5618,6 +5621,12 @@ components:
- type: 'null'
finish_reason:
$ref: '#/components/schemas/CompletionFinishReason'
+ native_finish_reason:
+ type: string
+ reasoning:
+ anyOf:
+ - type: string
+ - type: 'null'
required:
- text
- index
@@ -5635,6 +5644,8 @@ components:
type: number
model:
type: string
+ provider:
+ type: string
system_fingerprint:
type: string
choices:
@@ -5853,6 +5864,26 @@ paths:
application/json:
schema:
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
example:
data:
@@ -6754,12 +6785,14 @@ paths:
- AionLabs
- Alibaba
- Amazon Bedrock
+ - Amazon Nova
- Anthropic
- - Arcee
+ - Arcee AI
- AtlasCloud
- Avian
- Azure
- BaseTen
+ - BytePlus
- Black Forest Labs
- Cerebras
- Chutes
@@ -6774,6 +6807,7 @@ paths:
- Fireworks
- Friendli
- GMICloud
+ - GoPomelo
- Google
- Google AI Studio
- Groq
@@ -6803,7 +6837,9 @@ paths:
- Relace
- SambaNova
- SiliconFlow
+ - Sourceful
- Stealth
+ - StreamLake
- Switchpoint
- Targon
- Together
diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock
index 346e0ea..3124e3e 100644
--- a/.speakeasy/workflow.lock
+++ b/.speakeasy/workflow.lock
@@ -6,30 +6,37 @@ sources:
sourceBlobDigest: sha256:ee1f2422281b3ed5b38951c74636ad192c9bb160f216069c1f7931ccc4e52553
tags:
- latest
+ OpenRouter API:
+ sourceNamespace: open-router-chat-completions-api
+ sourceRevisionDigest: sha256:9b410c8cfafe475dc6d9550f97a1e755b9a02b54513d3a85efe606e9bb05ca57
+ sourceBlobDigest: sha256:61a2d897cc5ddd893a5131bfacad7fcc311fe5b2eaaa5641fbb0a5b3321bfde7
+ tags:
+ - latest
+ - 1.0.0
targets:
open-router:
- source: -OAS
+ source: OpenRouter API
sourceNamespace: open-router-chat-completions-api
- sourceRevisionDigest: sha256:f1b59b9b643de5e20d6e3299a8274783d8c0854615876f5d7f6f081814842695
- sourceBlobDigest: sha256:ee1f2422281b3ed5b38951c74636ad192c9bb160f216069c1f7931ccc4e52553
+ sourceRevisionDigest: sha256:9b410c8cfafe475dc6d9550f97a1e755b9a02b54513d3a85efe606e9bb05ca57
+ sourceBlobDigest: sha256:61a2d897cc5ddd893a5131bfacad7fcc311fe5b2eaaa5641fbb0a5b3321bfde7
workflow:
workflowVersion: 1.0.0
speakeasyVersion: 1.666.0
sources:
- -OAS:
+ OpenRouter API:
inputs:
- - location: registry.speakeasyapi.dev/openrouter/sdk/open-router-chat-completions-api:main
+ - location: .speakeasy/in.openapi.yaml
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
registry:
- location: registry.speakeasyapi.dev/openrouter/sdk/-oas
+ location: registry.speakeasyapi.dev/openrouter/sdk/open-router-chat-completions-api
targets:
open-router:
target: python
- source: -OAS
+ source: OpenRouter API
publish:
pypi:
token: $pypi_token
diff --git a/.speakeasy/workflow.yaml b/.speakeasy/workflow.yaml
index dce887d..89a9bc6 100644
--- a/.speakeasy/workflow.yaml
+++ b/.speakeasy/workflow.yaml
@@ -1,26 +1,26 @@
workflowVersion: 1.0.0
speakeasyVersion: 1.666.0
sources:
- -OAS:
+ OpenRouter API:
inputs:
- - location: registry.speakeasyapi.dev/openrouter/sdk/open-router-chat-completions-api:main
+ - location: .speakeasy/in.openapi.yaml
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
registry:
- location: registry.speakeasyapi.dev/openrouter/sdk/-oas
+ location: registry.speakeasyapi.dev/openrouter/sdk/open-router-chat-completions-api
targets:
open-router:
target: python
- source: -OAS
+ source: OpenRouter API
publish:
pypi:
token: $pypi_token
codeSamples:
registry:
- location: registry.speakeasyapi.dev/openrouter/sdk/-oas-python-code-samples
+ location: registry.speakeasyapi.dev/openrouter/sdk/open-router-python-code-samples
labelOverride:
fixedValue: Python (SDK)
blocking: false
diff --git a/USAGE.md b/USAGE.md
index 6d76a30..77a937c 100644
--- a/USAGE.md
+++ b/USAGE.md
@@ -9,7 +9,7 @@ with OpenRouter(
api_key=os.getenv("OPENROUTER_API_KEY", ""),
) as open_router:
- res = open_router.beta.responses.send(stream=False)
+ res = open_router.beta.responses.send(service_tier="auto", stream=False)
with res as event_stream:
for event in event_stream:
@@ -33,7 +33,7 @@ async def main():
api_key=os.getenv("OPENROUTER_API_KEY", ""),
) as open_router:
- res = await open_router.beta.responses.send_async(stream=False)
+ res = await open_router.beta.responses.send_async(service_tier="auto", stream=False)
async with res as event_stream:
async for event in event_stream:
diff --git a/docs/components/chatgenerationparams.md b/docs/components/chatgenerationparams.md
index 238044f..41db71b 100644
--- a/docs/components/chatgenerationparams.md
+++ b/docs/components/chatgenerationparams.md
@@ -26,4 +26,5 @@
| `tool_choice` | *Optional[Any]* | :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 |
-| `user` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
+| `user` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `debug` | [Optional[components.Debug]](../components/debug.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/chatmessagecontentitem.md b/docs/components/chatmessagecontentitem.md
index 2ac5390..7063cdb 100644
--- a/docs/components/chatmessagecontentitem.md
+++ b/docs/components/chatmessagecontentitem.md
@@ -33,9 +33,3 @@ value: components.ChatMessageContentItemVideo = /* values here */
value: components.ChatMessageContentItemVideo = /* values here */
```
-### `components.ChatMessageContentItemFile`
-
-```python
-value: components.ChatMessageContentItemFile = /* values here */
-```
-
diff --git a/docs/components/chatmessagecontentitemaudioformat.md b/docs/components/chatmessagecontentitemaudioformat.md
deleted file mode 100644
index 97119c0..0000000
--- a/docs/components/chatmessagecontentitemaudioformat.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# ChatMessageContentItemAudioFormat
-
-
-## Values
-
-| Name | Value |
-| ------- | ------- |
-| `WAV` | wav |
-| `MP3` | mp3 |
-| `FLAC` | flac |
-| `M4A` | m4a |
-| `OGG` | ogg |
-| `PCM16` | pcm16 |
-| `PCM24` | pcm24 |
\ No newline at end of file
diff --git a/docs/components/chatmessagecontentitemaudioinputaudio.md b/docs/components/chatmessagecontentitemaudioinputaudio.md
index 3665698..f7a62b5 100644
--- a/docs/components/chatmessagecontentitemaudioinputaudio.md
+++ b/docs/components/chatmessagecontentitemaudioinputaudio.md
@@ -3,7 +3,7 @@
## Fields
-| Field | Type | Required | Description |
-| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
-| `data` | *str* | :heavy_check_mark: | N/A |
-| `format_` | [components.ChatMessageContentItemAudioFormat](../components/chatmessagecontentitemaudioformat.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `data` | *str* | :heavy_check_mark: | N/A |
+| `format_` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/chatmessagecontentitemcachecontrol.md b/docs/components/chatmessagecontentitemcachecontrol.md
new file mode 100644
index 0000000..2ad30d0
--- /dev/null
+++ b/docs/components/chatmessagecontentitemcachecontrol.md
@@ -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 |
\ No newline at end of file
diff --git a/docs/components/chatmessagecontentitemfile.md b/docs/components/chatmessagecontentitemfile.md
deleted file mode 100644
index ca73897..0000000
--- a/docs/components/chatmessagecontentitemfile.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# ChatMessageContentItemFile
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
-| `type` | *Literal["file"]* | :heavy_check_mark: | N/A |
-| `file` | [components.File](../components/file.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/chatmessagecontentitemtext.md b/docs/components/chatmessagecontentitemtext.md
index 4fa8b7b..4f8a874 100644
--- a/docs/components/chatmessagecontentitemtext.md
+++ b/docs/components/chatmessagecontentitemtext.md
@@ -3,7 +3,8 @@
## Fields
-| Field | Type | Required | Description |
-| ------------------ | ------------------ | ------------------ | ------------------ |
-| `type` | *Literal["text"]* | :heavy_check_mark: | N/A |
-| `text` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
+| `type` | *Literal["text"]* | :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 |
\ No newline at end of file
diff --git a/docs/components/chatmessagecontentitemvideoinputvideo.md b/docs/components/chatmessagecontentitemvideoinputvideo.md
index da28cf1..4d7dd0e 100644
--- a/docs/components/chatmessagecontentitemvideoinputvideo.md
+++ b/docs/components/chatmessagecontentitemvideoinputvideo.md
@@ -3,7 +3,7 @@
## Fields
-| Field | Type | Required | Description |
-| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
-| `type` | *Literal["input_video"]* | :heavy_check_mark: | N/A |
-| `video_url` | [components.VideoURL](../components/videourl.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
+| Field | Type | Required | Description |
+| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- |
+| `type` | *Literal["input_video"]* | :heavy_check_mark: | N/A |
+| `video_url` | [components.VideoURL1](../components/videourl1.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/chatmessagecontentitemvideovideourl.md b/docs/components/chatmessagecontentitemvideovideourl.md
index 023d696..0585b55 100644
--- a/docs/components/chatmessagecontentitemvideovideourl.md
+++ b/docs/components/chatmessagecontentitemvideovideourl.md
@@ -3,7 +3,7 @@
## Fields
-| Field | Type | Required | Description |
-| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
-| `type` | *Literal["video_url"]* | :heavy_check_mark: | N/A |
-| `video_url` | [components.ChatMessageContentItemVideoVideoURLVideoURL](../components/chatmessagecontentitemvideovideourlvideourl.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
+| Field | Type | Required | Description |
+| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- |
+| `type` | *Literal["video_url"]* | :heavy_check_mark: | N/A |
+| `video_url` | [components.VideoURL2](../components/videourl2.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/completionchoice.md b/docs/components/completionchoice.md
index 758eea9..cb489be 100644
--- a/docs/components/completionchoice.md
+++ b/docs/components/completionchoice.md
@@ -8,4 +8,6 @@
| `text` | *str* | :heavy_check_mark: | N/A |
| `index` | *float* | :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 |
\ No newline at end of file
+| `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 |
\ No newline at end of file
diff --git a/docs/components/completionresponse.md b/docs/components/completionresponse.md
index 404f19d..3e9a9bd 100644
--- a/docs/components/completionresponse.md
+++ b/docs/components/completionresponse.md
@@ -9,6 +9,7 @@
| `object` | *Literal["text_completion"]* | :heavy_check_mark: | N/A |
| `created` | *float* | :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 |
| `choices` | List[[components.CompletionChoice](../components/completionchoice.md)] | :heavy_check_mark: | N/A |
| `usage` | [Optional[components.CompletionUsage]](../components/completionusage.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/debug.md b/docs/components/debug.md
new file mode 100644
index 0000000..459bb4b
--- /dev/null
+++ b/docs/components/debug.md
@@ -0,0 +1,8 @@
+# Debug
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------- | -------------------- | -------------------- | -------------------- |
+| `echo_upstream_body` | *Optional[bool]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/file.md b/docs/components/file.md
deleted file mode 100644
index d5b3937..0000000
--- a/docs/components/file.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# File
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------ | ------------------ | ------------------ | ------------------ |
-| `file_data` | *str* | :heavy_check_mark: | N/A |
-| `file_id` | *Optional[str]* | :heavy_minus_sign: | N/A |
-| `filename` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/idresponsehealing.md b/docs/components/idresponsehealing.md
new file mode 100644
index 0000000..4a12790
--- /dev/null
+++ b/docs/components/idresponsehealing.md
@@ -0,0 +1,8 @@
+# IDResponseHealing
+
+
+## Values
+
+| Name | Value |
+| ------------------ | ------------------ |
+| `RESPONSE_HEALING` | response-healing |
\ No newline at end of file
diff --git a/docs/components/openresponsesrequest.md b/docs/components/openresponsesrequest.md
index fcc6420..e96cb5a 100644
--- a/docs/components/openresponsesrequest.md
+++ b/docs/components/openresponsesrequest.md
@@ -27,10 +27,11 @@ Request schema for Responses endpoint
| `include` | List[[components.OpenAIResponsesIncludable](../components/openairesponsesincludable.md)] | :heavy_minus_sign: | N/A | |
| `background` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | |
| `safety_identifier` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
-| `store` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | |
-| `service_tier` | [OptionalNullable[components.ServiceTier]](../components/servicetier.md) | :heavy_minus_sign: | N/A | auto |
+| `store` | *Optional[Literal[False]]* | :heavy_minus_sign: | N/A | |
+| `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 |
| `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. | |
| `plugins` | List[[components.Plugin](../components/plugin.md)] | :heavy_minus_sign: | Plugins you want to enable for this request, including their settings. | |
-| `user` | *Optional[str]* | :heavy_minus_sign: | 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 being affected by the actions of individual users. Maximum of 128 characters. | |
\ No newline at end of file
+| `user` | *Optional[str]* | :heavy_minus_sign: | 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 being affected by the actions of individual users. Maximum of 128 characters. | |
+| `session_id` | *Optional[str]* | :heavy_minus_sign: | 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. | |
\ No newline at end of file
diff --git a/docs/components/plugin.md b/docs/components/plugin.md
index 7f6e744..bc21cd4 100644
--- a/docs/components/plugin.md
+++ b/docs/components/plugin.md
@@ -21,3 +21,9 @@ value: components.PluginWeb = /* values here */
value: components.PluginFileParser = /* values here */
```
+### `components.PluginResponseHealing`
+
+```python
+value: components.PluginResponseHealing = /* values here */
+```
+
diff --git a/docs/components/pluginresponsehealing.md b/docs/components/pluginresponsehealing.md
new file mode 100644
index 0000000..ecee55d
--- /dev/null
+++ b/docs/components/pluginresponsehealing.md
@@ -0,0 +1,8 @@
+# PluginResponseHealing
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
+| `id` | [components.IDResponseHealing](../components/idresponsehealing.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/providername.md b/docs/components/providername.md
index 9c86cd3..2bc3f88 100644
--- a/docs/components/providername.md
+++ b/docs/components/providername.md
@@ -9,12 +9,14 @@
| `AION_LABS` | AionLabs |
| `ALIBABA` | Alibaba |
| `AMAZON_BEDROCK` | Amazon Bedrock |
+| `AMAZON_NOVA` | Amazon Nova |
| `ANTHROPIC` | Anthropic |
-| `ARCEE` | Arcee |
+| `ARCEE_AI` | Arcee AI |
| `ATLAS_CLOUD` | AtlasCloud |
| `AVIAN` | Avian |
| `AZURE` | Azure |
| `BASE_TEN` | BaseTen |
+| `BYTE_PLUS` | BytePlus |
| `BLACK_FOREST_LABS` | Black Forest Labs |
| `CEREBRAS` | Cerebras |
| `CHUTES` | Chutes |
@@ -29,6 +31,7 @@
| `FIREWORKS` | Fireworks |
| `FRIENDLI` | Friendli |
| `GMI_CLOUD` | GMICloud |
+| `GO_POMELO` | GoPomelo |
| `GOOGLE` | Google |
| `GOOGLE_AI_STUDIO` | Google AI Studio |
| `GROQ` | Groq |
@@ -58,7 +61,9 @@
| `RELACE` | Relace |
| `SAMBA_NOVA` | SambaNova |
| `SILICON_FLOW` | SiliconFlow |
+| `SOURCEFUL` | Sourceful |
| `STEALTH` | Stealth |
+| `STREAM_LAKE` | StreamLake |
| `SWITCHPOINT` | Switchpoint |
| `TARGON` | Targon |
| `TOGETHER` | Together |
diff --git a/docs/components/servicetier.md b/docs/components/servicetier.md
index 3a7a020..bfc6187 100644
--- a/docs/components/servicetier.md
+++ b/docs/components/servicetier.md
@@ -3,10 +3,6 @@
## Values
-| Name | Value |
-| ---------- | ---------- |
-| `AUTO` | auto |
-| `DEFAULT` | default |
-| `FLEX` | flex |
-| `PRIORITY` | priority |
-| `SCALE` | scale |
\ No newline at end of file
+| Name | Value |
+| ------ | ------ |
+| `AUTO` | auto |
\ No newline at end of file
diff --git a/docs/components/ttl.md b/docs/components/ttl.md
new file mode 100644
index 0000000..0cbc7f3
--- /dev/null
+++ b/docs/components/ttl.md
@@ -0,0 +1,9 @@
+# TTL
+
+
+## Values
+
+| Name | Value |
+| ------- | ------- |
+| `FIVEM` | 5m |
+| `ONEH` | 1h |
\ No newline at end of file
diff --git a/docs/components/videourl.md b/docs/components/videourl1.md
similarity index 95%
rename from docs/components/videourl.md
rename to docs/components/videourl1.md
index 5bd5dec..505c186 100644
--- a/docs/components/videourl.md
+++ b/docs/components/videourl1.md
@@ -1,4 +1,4 @@
-# VideoURL
+# VideoURL1
## Fields
diff --git a/docs/components/chatmessagecontentitemvideovideourlvideourl.md b/docs/components/videourl2.md
similarity index 85%
rename from docs/components/chatmessagecontentitemvideovideourlvideourl.md
rename to docs/components/videourl2.md
index ee08920..b7f2463 100644
--- a/docs/components/chatmessagecontentitemvideovideourlvideourl.md
+++ b/docs/components/videourl2.md
@@ -1,4 +1,4 @@
-# ChatMessageContentItemVideoVideoURLVideoURL
+# VideoURL2
## Fields
diff --git a/docs/operations/getcreditsdata.md b/docs/operations/getcreditsdata.md
new file mode 100644
index 0000000..9ba4582
--- /dev/null
+++ b/docs/operations/getcreditsdata.md
@@ -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 |
\ No newline at end of file
diff --git a/docs/operations/getcreditsresponse.md b/docs/operations/getcreditsresponse.md
index c52bc01..a58a336 100644
--- a/docs/operations/getcreditsresponse.md
+++ b/docs/operations/getcreditsresponse.md
@@ -5,5 +5,6 @@ Total credits purchased and used
## Fields
-| Field | Type | Required | Description |
-| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `data` | [operations.GetCreditsData](../operations/getcreditsdata.md) | :heavy_check_mark: | N/A | {
"total_credits": 100.5,
"total_usage": 25.75
} |
\ No newline at end of file
diff --git a/docs/operations/getparametersprovider.md b/docs/operations/getparametersprovider.md
index 21a0244..229f9ad 100644
--- a/docs/operations/getparametersprovider.md
+++ b/docs/operations/getparametersprovider.md
@@ -9,12 +9,14 @@
| `AION_LABS` | AionLabs |
| `ALIBABA` | Alibaba |
| `AMAZON_BEDROCK` | Amazon Bedrock |
+| `AMAZON_NOVA` | Amazon Nova |
| `ANTHROPIC` | Anthropic |
-| `ARCEE` | Arcee |
+| `ARCEE_AI` | Arcee AI |
| `ATLAS_CLOUD` | AtlasCloud |
| `AVIAN` | Avian |
| `AZURE` | Azure |
| `BASE_TEN` | BaseTen |
+| `BYTE_PLUS` | BytePlus |
| `BLACK_FOREST_LABS` | Black Forest Labs |
| `CEREBRAS` | Cerebras |
| `CHUTES` | Chutes |
@@ -29,6 +31,7 @@
| `FIREWORKS` | Fireworks |
| `FRIENDLI` | Friendli |
| `GMI_CLOUD` | GMICloud |
+| `GO_POMELO` | GoPomelo |
| `GOOGLE` | Google |
| `GOOGLE_AI_STUDIO` | Google AI Studio |
| `GROQ` | Groq |
@@ -58,7 +61,9 @@
| `RELACE` | Relace |
| `SAMBA_NOVA` | SambaNova |
| `SILICON_FLOW` | SiliconFlow |
+| `SOURCEFUL` | Sourceful |
| `STEALTH` | Stealth |
+| `STREAM_LAKE` | StreamLake |
| `SWITCHPOINT` | Switchpoint |
| `TARGON` | Targon |
| `TOGETHER` | Together |
diff --git a/docs/sdks/chat/README.md b/docs/sdks/chat/README.md
index 94ffd97..78c3a29 100644
--- a/docs/sdks/chat/README.md
+++ b/docs/sdks/chat/README.md
@@ -58,6 +58,7 @@ with OpenRouter(
| `tools` | List[[components.ToolDefinitionJSON](../../components/tooldefinitionjson.md)] | :heavy_minus_sign: | N/A |
| `top_p` | *OptionalNullable[float]* | :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. |
### Response
diff --git a/docs/sdks/responses/README.md b/docs/sdks/responses/README.md
index 4918bce..eb492c5 100644
--- a/docs/sdks/responses/README.md
+++ b/docs/sdks/responses/README.md
@@ -25,7 +25,7 @@ with OpenRouter(
api_key=os.getenv("OPENROUTER_API_KEY", ""),
) as open_router:
- res = open_router.beta.responses.send(stream=False)
+ res = open_router.beta.responses.send(service_tier="auto", stream=False)
with res as event_stream:
for event in event_stream:
@@ -58,13 +58,13 @@ with OpenRouter(
| `include` | List[[components.OpenAIResponsesIncludable](../../components/openairesponsesincludable.md)] | :heavy_minus_sign: | N/A | |
| `background` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | |
| `safety_identifier` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
-| `store` | *OptionalNullable[bool]* | :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 |
| `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. | |
| `plugins` | List[[components.Plugin](../../components/plugin.md)] | :heavy_minus_sign: | Plugins you want to enable for this request, including their settings. | |
| `user` | *Optional[str]* | :heavy_minus_sign: | 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 being affected by the actions of individual users. Maximum of 128 characters. | |
+| `session_id` | *Optional[str]* | :heavy_minus_sign: | 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. | |
| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
diff --git a/pyproject.toml b/pyproject.toml
index 0bca6bd..75da078 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "openrouter"
-version = "0.0.16"
+version = "0.0.21"
description = "Official Python Client SDK for OpenRouter."
authors = [{ name = "OpenRouter" },]
readme = "README-PYPI.md"
diff --git a/src/openrouter/_version.py b/src/openrouter/_version.py
index af0bab6..fa74707 100644
--- a/src/openrouter/_version.py
+++ b/src/openrouter/_version.py
@@ -3,10 +3,10 @@
import importlib.metadata
__title__: str = "openrouter"
-__version__: str = "0.0.16"
+__version__: str = "0.0.21"
__openapi_doc_version__: str = "1.0.0"
__gen_version__: str = "2.768.0"
-__user_agent__: str = "speakeasy-sdk/python 0.0.16 2.768.0 1.0.0 openrouter"
+__user_agent__: str = "speakeasy-sdk/python 0.0.21 2.768.0 1.0.0 openrouter"
try:
if __package__ is not None:
diff --git a/src/openrouter/chat.py b/src/openrouter/chat.py
index 1587ae5..bc00143 100644
--- a/src/openrouter/chat.py
+++ b/src/openrouter/chat.py
@@ -61,6 +61,7 @@ class Chat(BaseSDK):
] = None,
top_p: OptionalNullable[float] = UNSET,
user: Optional[str] = None,
+ debug: Optional[Union[components.Debug, components.DebugTypedDict]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
@@ -92,6 +93,7 @@ class Chat(BaseSDK):
:param tools:
:param top_p:
:param user:
+ :param debug:
:param retries: Override the default retry configuration 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
@@ -144,6 +146,7 @@ class Chat(BaseSDK):
] = None,
top_p: OptionalNullable[float] = UNSET,
user: Optional[str] = None,
+ debug: Optional[Union[components.Debug, components.DebugTypedDict]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
@@ -175,6 +178,7 @@ class Chat(BaseSDK):
:param tools:
:param top_p:
:param user:
+ :param debug:
:param retries: Override the default retry configuration 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
@@ -226,6 +230,7 @@ class Chat(BaseSDK):
] = None,
top_p: OptionalNullable[float] = UNSET,
user: Optional[str] = None,
+ debug: Optional[Union[components.Debug, components.DebugTypedDict]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
@@ -257,6 +262,7 @@ class Chat(BaseSDK):
:param tools:
:param top_p:
:param user:
+ :param debug:
:param retries: Override the default retry configuration 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
@@ -305,6 +311,7 @@ class Chat(BaseSDK):
),
top_p=top_p,
user=user,
+ debug=utils.get_pydantic_model(debug, Optional[components.Debug]),
)
req = self._build_request(
@@ -439,6 +446,7 @@ class Chat(BaseSDK):
] = None,
top_p: OptionalNullable[float] = UNSET,
user: Optional[str] = None,
+ debug: Optional[Union[components.Debug, components.DebugTypedDict]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
@@ -470,6 +478,7 @@ class Chat(BaseSDK):
:param tools:
:param top_p:
:param user:
+ :param debug:
:param retries: Override the default retry configuration 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
@@ -522,6 +531,7 @@ class Chat(BaseSDK):
] = None,
top_p: OptionalNullable[float] = UNSET,
user: Optional[str] = None,
+ debug: Optional[Union[components.Debug, components.DebugTypedDict]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
@@ -553,6 +563,7 @@ class Chat(BaseSDK):
:param tools:
:param top_p:
:param user:
+ :param debug:
:param retries: Override the default retry configuration 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
@@ -604,6 +615,7 @@ class Chat(BaseSDK):
] = None,
top_p: OptionalNullable[float] = UNSET,
user: Optional[str] = None,
+ debug: Optional[Union[components.Debug, components.DebugTypedDict]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
@@ -635,6 +647,7 @@ class Chat(BaseSDK):
:param tools:
:param top_p:
:param user:
+ :param debug:
:param retries: Override the default retry configuration 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
@@ -683,6 +696,7 @@ class Chat(BaseSDK):
),
top_p=top_p,
user=user,
+ debug=utils.get_pydantic_model(debug, Optional[components.Debug]),
)
req = self._build_request_async(
diff --git a/src/openrouter/components/__init__.py b/src/openrouter/components/__init__.py
index 1554012..d7818e6 100644
--- a/src/openrouter/components/__init__.py
+++ b/src/openrouter/components/__init__.py
@@ -21,6 +21,7 @@ if TYPE_CHECKING:
BadRequestResponseErrorData,
BadRequestResponseErrorDataTypedDict,
)
+ from .chatcompletionfinishreason import ChatCompletionFinishReason
from .chaterror import ChatErrorError, ChatErrorErrorTypedDict, Code, CodeTypedDict
from .chatgenerationparams import (
ChatGenerationParams,
@@ -35,6 +36,8 @@ if TYPE_CHECKING:
ChatGenerationParamsStop,
ChatGenerationParamsStopTypedDict,
ChatGenerationParamsTypedDict,
+ Debug,
+ DebugTypedDict,
Effort,
Reasoning,
ReasoningTypedDict,
@@ -53,16 +56,14 @@ if TYPE_CHECKING:
)
from .chatmessagecontentitemaudio import (
ChatMessageContentItemAudio,
- ChatMessageContentItemAudioFormat,
ChatMessageContentItemAudioInputAudio,
ChatMessageContentItemAudioInputAudioTypedDict,
ChatMessageContentItemAudioTypedDict,
)
- from .chatmessagecontentitemfile import (
- ChatMessageContentItemFile,
- ChatMessageContentItemFileTypedDict,
- File,
- FileTypedDict,
+ from .chatmessagecontentitemcachecontrol import (
+ ChatMessageContentItemCacheControl,
+ ChatMessageContentItemCacheControlTypedDict,
+ TTL,
)
from .chatmessagecontentitemimage import (
ChatMessageContentItemImage,
@@ -82,8 +83,10 @@ if TYPE_CHECKING:
ChatMessageContentItemVideoTypedDict,
ChatMessageContentItemVideoVideoURL,
ChatMessageContentItemVideoVideoURLTypedDict,
- ChatMessageContentItemVideoVideoURLVideoURL,
- ChatMessageContentItemVideoVideoURLVideoURLTypedDict,
+ VideoURL1,
+ VideoURL1TypedDict,
+ VideoURL2,
+ VideoURL2TypedDict,
)
from .chatmessagetokenlogprob import (
ChatMessageTokenLogprob,
@@ -102,13 +105,8 @@ if TYPE_CHECKING:
ChatMessageToolCallTypedDict,
)
from .chatresponse import ChatResponse, ChatResponseTypedDict
- from .chatresponsechoice import (
- ChatCompletionFinishReason,
- ChatResponseChoice,
- ChatResponseChoiceTypedDict,
- ChatStreamingChoice,
- ChatStreamingChoiceTypedDict,
- )
+ from .chatresponsechoice import ChatResponseChoice, ChatResponseChoiceTypedDict
+ from .chatstreamingchoice import ChatStreamingChoice, ChatStreamingChoiceTypedDict
from .chatstreamingmessagechunk import (
ChatStreamingMessageChunk,
ChatStreamingMessageChunkRole,
@@ -426,6 +424,7 @@ if TYPE_CHECKING:
Engine,
IDFileParser,
IDModeration,
+ IDResponseHealing,
IDWeb,
Ignore,
IgnoreTypedDict,
@@ -450,6 +449,8 @@ if TYPE_CHECKING:
PluginFileParserTypedDict,
PluginModeration,
PluginModerationTypedDict,
+ PluginResponseHealing,
+ PluginResponseHealingTypedDict,
PluginTypedDict,
PluginWeb,
PluginWebTypedDict,
@@ -784,7 +785,6 @@ if TYPE_CHECKING:
UserMessageContentTypedDict,
UserMessageTypedDict,
)
- from .videourl import VideoURL, VideoURLTypedDict
from .websearchpreviewtooluserlocation import (
WebSearchPreviewToolUserLocation,
WebSearchPreviewToolUserLocationType,
@@ -825,12 +825,11 @@ __all__ = [
"ChatGenerationTokenUsageTypedDict",
"ChatMessageContentItem",
"ChatMessageContentItemAudio",
- "ChatMessageContentItemAudioFormat",
"ChatMessageContentItemAudioInputAudio",
"ChatMessageContentItemAudioInputAudioTypedDict",
"ChatMessageContentItemAudioTypedDict",
- "ChatMessageContentItemFile",
- "ChatMessageContentItemFileTypedDict",
+ "ChatMessageContentItemCacheControl",
+ "ChatMessageContentItemCacheControlTypedDict",
"ChatMessageContentItemImage",
"ChatMessageContentItemImageDetail",
"ChatMessageContentItemImageTypedDict",
@@ -843,8 +842,6 @@ __all__ = [
"ChatMessageContentItemVideoTypedDict",
"ChatMessageContentItemVideoVideoURL",
"ChatMessageContentItemVideoVideoURLTypedDict",
- "ChatMessageContentItemVideoVideoURLVideoURL",
- "ChatMessageContentItemVideoVideoURLVideoURLTypedDict",
"ChatMessageTokenLogprob",
"ChatMessageTokenLogprobTypedDict",
"ChatMessageTokenLogprobs",
@@ -905,6 +902,8 @@ __all__ = [
"CreateChargeRequest",
"CreateChargeRequestTypedDict",
"DataCollection",
+ "Debug",
+ "DebugTypedDict",
"DefaultParameters",
"DefaultParametersTypedDict",
"EdgeNetworkTimeoutResponseErrorData",
@@ -912,18 +911,17 @@ __all__ = [
"Effort",
"EndpointStatus",
"Engine",
- "File",
"FileCitation",
"FileCitationType",
"FileCitationTypedDict",
"FilePath",
"FilePathType",
"FilePathTypedDict",
- "FileTypedDict",
"ForbiddenResponseErrorData",
"ForbiddenResponseErrorDataTypedDict",
"IDFileParser",
"IDModeration",
+ "IDResponseHealing",
"IDWeb",
"Ignore",
"IgnoreTypedDict",
@@ -1217,6 +1215,8 @@ __all__ = [
"PluginFileParserTypedDict",
"PluginModeration",
"PluginModerationTypedDict",
+ "PluginResponseHealing",
+ "PluginResponseHealingTypedDict",
"PluginTypedDict",
"PluginWeb",
"PluginWebTypedDict",
@@ -1342,6 +1342,7 @@ __all__ = [
"SystemMessageContent",
"SystemMessageContentTypedDict",
"SystemMessageTypedDict",
+ "TTL",
"Tokenizer",
"TooManyRequestsResponseErrorData",
"TooManyRequestsResponseErrorDataTypedDict",
@@ -1391,8 +1392,10 @@ __all__ = [
"UserMessageTypedDict",
"Variables",
"VariablesTypedDict",
- "VideoURL",
- "VideoURLTypedDict",
+ "VideoURL1",
+ "VideoURL1TypedDict",
+ "VideoURL2",
+ "VideoURL2TypedDict",
"WebSearchPreviewToolUserLocation",
"WebSearchPreviewToolUserLocationType",
"WebSearchPreviewToolUserLocationTypedDict",
@@ -1410,6 +1413,7 @@ _dynamic_imports: dict[str, str] = {
"BadGatewayResponseErrorDataTypedDict": ".badgatewayresponseerrordata",
"BadRequestResponseErrorData": ".badrequestresponseerrordata",
"BadRequestResponseErrorDataTypedDict": ".badrequestresponseerrordata",
+ "ChatCompletionFinishReason": ".chatcompletionfinishreason",
"ChatErrorError": ".chaterror",
"ChatErrorErrorTypedDict": ".chaterror",
"Code": ".chaterror",
@@ -1426,6 +1430,8 @@ _dynamic_imports: dict[str, str] = {
"ChatGenerationParamsStop": ".chatgenerationparams",
"ChatGenerationParamsStopTypedDict": ".chatgenerationparams",
"ChatGenerationParamsTypedDict": ".chatgenerationparams",
+ "Debug": ".chatgenerationparams",
+ "DebugTypedDict": ".chatgenerationparams",
"Effort": ".chatgenerationparams",
"Reasoning": ".chatgenerationparams",
"ReasoningTypedDict": ".chatgenerationparams",
@@ -1438,14 +1444,12 @@ _dynamic_imports: dict[str, str] = {
"ChatMessageContentItem": ".chatmessagecontentitem",
"ChatMessageContentItemTypedDict": ".chatmessagecontentitem",
"ChatMessageContentItemAudio": ".chatmessagecontentitemaudio",
- "ChatMessageContentItemAudioFormat": ".chatmessagecontentitemaudio",
"ChatMessageContentItemAudioInputAudio": ".chatmessagecontentitemaudio",
"ChatMessageContentItemAudioInputAudioTypedDict": ".chatmessagecontentitemaudio",
"ChatMessageContentItemAudioTypedDict": ".chatmessagecontentitemaudio",
- "ChatMessageContentItemFile": ".chatmessagecontentitemfile",
- "ChatMessageContentItemFileTypedDict": ".chatmessagecontentitemfile",
- "File": ".chatmessagecontentitemfile",
- "FileTypedDict": ".chatmessagecontentitemfile",
+ "ChatMessageContentItemCacheControl": ".chatmessagecontentitemcachecontrol",
+ "ChatMessageContentItemCacheControlTypedDict": ".chatmessagecontentitemcachecontrol",
+ "TTL": ".chatmessagecontentitemcachecontrol",
"ChatMessageContentItemImage": ".chatmessagecontentitemimage",
"ChatMessageContentItemImageDetail": ".chatmessagecontentitemimage",
"ChatMessageContentItemImageTypedDict": ".chatmessagecontentitemimage",
@@ -1459,8 +1463,10 @@ _dynamic_imports: dict[str, str] = {
"ChatMessageContentItemVideoTypedDict": ".chatmessagecontentitemvideo",
"ChatMessageContentItemVideoVideoURL": ".chatmessagecontentitemvideo",
"ChatMessageContentItemVideoVideoURLTypedDict": ".chatmessagecontentitemvideo",
- "ChatMessageContentItemVideoVideoURLVideoURL": ".chatmessagecontentitemvideo",
- "ChatMessageContentItemVideoVideoURLVideoURLTypedDict": ".chatmessagecontentitemvideo",
+ "VideoURL1": ".chatmessagecontentitemvideo",
+ "VideoURL1TypedDict": ".chatmessagecontentitemvideo",
+ "VideoURL2": ".chatmessagecontentitemvideo",
+ "VideoURL2TypedDict": ".chatmessagecontentitemvideo",
"ChatMessageTokenLogprob": ".chatmessagetokenlogprob",
"ChatMessageTokenLogprobTypedDict": ".chatmessagetokenlogprob",
"TopLogprob": ".chatmessagetokenlogprob",
@@ -1473,11 +1479,10 @@ _dynamic_imports: dict[str, str] = {
"ChatMessageToolCallTypedDict": ".chatmessagetoolcall",
"ChatResponse": ".chatresponse",
"ChatResponseTypedDict": ".chatresponse",
- "ChatCompletionFinishReason": ".chatresponsechoice",
"ChatResponseChoice": ".chatresponsechoice",
"ChatResponseChoiceTypedDict": ".chatresponsechoice",
- "ChatStreamingChoice": ".chatresponsechoice",
- "ChatStreamingChoiceTypedDict": ".chatresponsechoice",
+ "ChatStreamingChoice": ".chatstreamingchoice",
+ "ChatStreamingChoiceTypedDict": ".chatstreamingchoice",
"ChatStreamingMessageChunk": ".chatstreamingmessagechunk",
"ChatStreamingMessageChunkRole": ".chatstreamingmessagechunk",
"ChatStreamingMessageChunkTypedDict": ".chatstreamingmessagechunk",
@@ -1724,6 +1729,7 @@ _dynamic_imports: dict[str, str] = {
"Engine": ".openresponsesrequest",
"IDFileParser": ".openresponsesrequest",
"IDModeration": ".openresponsesrequest",
+ "IDResponseHealing": ".openresponsesrequest",
"IDWeb": ".openresponsesrequest",
"Ignore": ".openresponsesrequest",
"IgnoreTypedDict": ".openresponsesrequest",
@@ -1748,6 +1754,8 @@ _dynamic_imports: dict[str, str] = {
"PluginFileParserTypedDict": ".openresponsesrequest",
"PluginModeration": ".openresponsesrequest",
"PluginModerationTypedDict": ".openresponsesrequest",
+ "PluginResponseHealing": ".openresponsesrequest",
+ "PluginResponseHealingTypedDict": ".openresponsesrequest",
"PluginTypedDict": ".openresponsesrequest",
"PluginWeb": ".openresponsesrequest",
"PluginWebTypedDict": ".openresponsesrequest",
@@ -1998,8 +2006,6 @@ _dynamic_imports: dict[str, str] = {
"UserMessageContent": ".usermessage",
"UserMessageContentTypedDict": ".usermessage",
"UserMessageTypedDict": ".usermessage",
- "VideoURL": ".videourl",
- "VideoURLTypedDict": ".videourl",
"WebSearchPreviewToolUserLocation": ".websearchpreviewtooluserlocation",
"WebSearchPreviewToolUserLocationType": ".websearchpreviewtooluserlocation",
"WebSearchPreviewToolUserLocationTypedDict": ".websearchpreviewtooluserlocation",
diff --git a/src/openrouter/components/chatcompletionfinishreason.py b/src/openrouter/components/chatcompletionfinishreason.py
new file mode 100644
index 0000000..686462c
--- /dev/null
+++ b/src/openrouter/components/chatcompletionfinishreason.py
@@ -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,
+]
diff --git a/src/openrouter/components/chatgenerationparams.py b/src/openrouter/components/chatgenerationparams.py
index 2b9b05c..07b4c33 100644
--- a/src/openrouter/components/chatgenerationparams.py
+++ b/src/openrouter/components/chatgenerationparams.py
@@ -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):
messages: List[MessageTypedDict]
model: NotRequired[str]
@@ -179,6 +187,7 @@ class ChatGenerationParamsTypedDict(TypedDict):
tools: NotRequired[List[ToolDefinitionJSONTypedDict]]
top_p: NotRequired[Nullable[float]]
user: NotRequired[str]
+ debug: NotRequired[DebugTypedDict]
class ChatGenerationParams(BaseModel):
@@ -226,6 +235,8 @@ class ChatGenerationParams(BaseModel):
user: Optional[str] = None
+ debug: Optional[Debug] = None
+
@model_serializer(mode="wrap")
def serialize_model(self, handler):
optional_fields = [
@@ -250,6 +261,7 @@ class ChatGenerationParams(BaseModel):
"tools",
"top_p",
"user",
+ "debug",
]
nullable_fields = [
"frequency_penalty",
diff --git a/src/openrouter/components/chatmessagecontentitem.py b/src/openrouter/components/chatmessagecontentitem.py
index 6d949b9..eba0a3b 100644
--- a/src/openrouter/components/chatmessagecontentitem.py
+++ b/src/openrouter/components/chatmessagecontentitem.py
@@ -5,10 +5,6 @@ from .chatmessagecontentitemaudio import (
ChatMessageContentItemAudio,
ChatMessageContentItemAudioTypedDict,
)
-from .chatmessagecontentitemfile import (
- ChatMessageContentItemFile,
- ChatMessageContentItemFileTypedDict,
-)
from .chatmessagecontentitemimage import (
ChatMessageContentItemImage,
ChatMessageContentItemImageTypedDict,
@@ -30,10 +26,9 @@ from typing_extensions import Annotated, TypeAliasType
ChatMessageContentItemTypedDict = TypeAliasType(
"ChatMessageContentItemTypedDict",
Union[
- ChatMessageContentItemTextTypedDict,
ChatMessageContentItemImageTypedDict,
ChatMessageContentItemAudioTypedDict,
- ChatMessageContentItemFileTypedDict,
+ ChatMessageContentItemTextTypedDict,
ChatMessageContentItemVideoTypedDict,
],
)
@@ -46,7 +41,6 @@ ChatMessageContentItem = Annotated[
Annotated[ChatMessageContentItemAudio, Tag("input_audio")],
Annotated[ChatMessageContentItemVideo, Tag("input_video")],
Annotated[ChatMessageContentItemVideo, Tag("video_url")],
- Annotated[ChatMessageContentItemFile, Tag("file")],
],
Discriminator(lambda m: get_discriminator(m, "type", "type")),
]
diff --git a/src/openrouter/components/chatmessagecontentitemaudio.py b/src/openrouter/components/chatmessagecontentitemaudio.py
index 21a8803..b251803 100644
--- a/src/openrouter/components/chatmessagecontentitemaudio.py
+++ b/src/openrouter/components/chatmessagecontentitemaudio.py
@@ -1,42 +1,23 @@
"""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
+from openrouter.types import BaseModel
+from openrouter.utils import validate_const
import pydantic
-from pydantic.functional_validators import AfterValidator, PlainValidator
-from typing import Literal, Union
+from pydantic.functional_validators import AfterValidator
+from typing import Literal
from typing_extensions import Annotated, TypedDict
-ChatMessageContentItemAudioFormat = Union[
- Literal[
- "wav",
- "mp3",
- "flac",
- "m4a",
- "ogg",
- "pcm16",
- "pcm24",
- ],
- UnrecognizedStr,
-]
-
-
class ChatMessageContentItemAudioInputAudioTypedDict(TypedDict):
data: str
- format_: ChatMessageContentItemAudioFormat
+ format_: str
class ChatMessageContentItemAudioInputAudio(BaseModel):
data: str
- format_: Annotated[
- Annotated[
- ChatMessageContentItemAudioFormat, PlainValidator(validate_open_enum(False))
- ],
- pydantic.Field(alias="format"),
- ]
+ format_: Annotated[str, pydantic.Field(alias="format")]
class ChatMessageContentItemAudioTypedDict(TypedDict):
diff --git a/src/openrouter/components/chatmessagecontentitemcachecontrol.py b/src/openrouter/components/chatmessagecontentitemcachecontrol.py
new file mode 100644
index 0000000..b96625f
--- /dev/null
+++ b/src/openrouter/components/chatmessagecontentitemcachecontrol.py
@@ -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
diff --git a/src/openrouter/components/chatmessagecontentitemfile.py b/src/openrouter/components/chatmessagecontentitemfile.py
deleted file mode 100644
index f878dc3..0000000
--- a/src/openrouter/components/chatmessagecontentitemfile.py
+++ /dev/null
@@ -1,37 +0,0 @@
-"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
-
-from __future__ import annotations
-from openrouter.types import BaseModel
-from openrouter.utils import validate_const
-import pydantic
-from pydantic.functional_validators import AfterValidator
-from typing import Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
-
-
-class FileTypedDict(TypedDict):
- file_data: str
- file_id: NotRequired[str]
- filename: NotRequired[str]
-
-
-class File(BaseModel):
- file_data: str
-
- file_id: Optional[str] = None
-
- filename: Optional[str] = None
-
-
-class ChatMessageContentItemFileTypedDict(TypedDict):
- file: FileTypedDict
- type: Literal["file"]
-
-
-class ChatMessageContentItemFile(BaseModel):
- file: File
-
- TYPE: Annotated[
- Annotated[Literal["file"], AfterValidator(validate_const("file"))],
- pydantic.Field(alias="type"),
- ] = "file"
diff --git a/src/openrouter/components/chatmessagecontentitemtext.py b/src/openrouter/components/chatmessagecontentitemtext.py
index c791fa9..4dc1662 100644
--- a/src/openrouter/components/chatmessagecontentitemtext.py
+++ b/src/openrouter/components/chatmessagecontentitemtext.py
@@ -1,17 +1,22 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
+from .chatmessagecontentitemcachecontrol import (
+ ChatMessageContentItemCacheControl,
+ ChatMessageContentItemCacheControlTypedDict,
+)
from openrouter.types import BaseModel
from openrouter.utils import validate_const
import pydantic
from pydantic.functional_validators import AfterValidator
-from typing import Literal
-from typing_extensions import Annotated, TypedDict
+from typing import Literal, Optional
+from typing_extensions import Annotated, NotRequired, TypedDict
class ChatMessageContentItemTextTypedDict(TypedDict):
text: str
type: Literal["text"]
+ cache_control: NotRequired[ChatMessageContentItemCacheControlTypedDict]
class ChatMessageContentItemText(BaseModel):
@@ -21,3 +26,5 @@ class ChatMessageContentItemText(BaseModel):
Annotated[Literal["text"], AfterValidator(validate_const("text"))],
pydantic.Field(alias="type"),
] = "text"
+
+ cache_control: Optional[ChatMessageContentItemCacheControl] = None
diff --git a/src/openrouter/components/chatmessagecontentitemvideo.py b/src/openrouter/components/chatmessagecontentitemvideo.py
index 553d826..06be297 100644
--- a/src/openrouter/components/chatmessagecontentitemvideo.py
+++ b/src/openrouter/components/chatmessagecontentitemvideo.py
@@ -1,7 +1,6 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from .videourl import VideoURL, VideoURLTypedDict
from openrouter.types import BaseModel
from openrouter.utils import get_discriminator, validate_const
import pydantic
@@ -11,21 +10,21 @@ from typing import Literal, Union
from typing_extensions import Annotated, TypeAliasType, TypedDict
-class ChatMessageContentItemVideoVideoURLVideoURLTypedDict(TypedDict):
+class VideoURL2TypedDict(TypedDict):
url: str
-class ChatMessageContentItemVideoVideoURLVideoURL(BaseModel):
+class VideoURL2(BaseModel):
url: str
class ChatMessageContentItemVideoVideoURLTypedDict(TypedDict):
- video_url: ChatMessageContentItemVideoVideoURLVideoURLTypedDict
+ video_url: VideoURL2TypedDict
type: Literal["video_url"]
class ChatMessageContentItemVideoVideoURL(BaseModel):
- video_url: ChatMessageContentItemVideoVideoURLVideoURL
+ video_url: VideoURL2
TYPE: Annotated[
Annotated[Literal["video_url"], AfterValidator(validate_const("video_url"))],
@@ -33,13 +32,21 @@ class ChatMessageContentItemVideoVideoURL(BaseModel):
] = "video_url"
+class VideoURL1TypedDict(TypedDict):
+ url: str
+
+
+class VideoURL1(BaseModel):
+ url: str
+
+
class ChatMessageContentItemVideoInputVideoTypedDict(TypedDict):
- video_url: VideoURLTypedDict
+ video_url: VideoURL1TypedDict
type: Literal["input_video"]
class ChatMessageContentItemVideoInputVideo(BaseModel):
- video_url: VideoURL
+ video_url: VideoURL1
TYPE: Annotated[
Annotated[
diff --git a/src/openrouter/components/chatresponsechoice.py b/src/openrouter/components/chatresponsechoice.py
index e59f847..9592bf1 100644
--- a/src/openrouter/components/chatresponsechoice.py
+++ b/src/openrouter/components/chatresponsechoice.py
@@ -2,41 +2,24 @@
from __future__ import annotations
from .assistantmessage import AssistantMessage, AssistantMessageTypedDict
+from .chatcompletionfinishreason import ChatCompletionFinishReason
from .chatmessagetokenlogprobs import (
ChatMessageTokenLogprobs,
ChatMessageTokenLogprobsTypedDict,
)
-from .chatstreamingmessagechunk import (
- ChatStreamingMessageChunk,
- ChatStreamingMessageChunkTypedDict,
-)
from openrouter.types import (
BaseModel,
Nullable,
OptionalNullable,
UNSET,
UNSET_SENTINEL,
- UnrecognizedStr,
)
from openrouter.utils import validate_open_enum
from pydantic import model_serializer
from pydantic.functional_validators import PlainValidator
-from typing import Literal, Union
from typing_extensions import Annotated, NotRequired, TypedDict
-ChatCompletionFinishReason = Union[
- Literal[
- "tool_calls",
- "stop",
- "length",
- "content_filter",
- "error",
- ],
- UnrecognizedStr,
-]
-
-
class ChatResponseChoiceTypedDict(TypedDict):
finish_reason: Nullable[ChatCompletionFinishReason]
index: float
@@ -84,52 +67,3 @@ class ChatResponseChoice(BaseModel):
m[k] = val
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
diff --git a/src/openrouter/components/chatstreamingchoice.py b/src/openrouter/components/chatstreamingchoice.py
new file mode 100644
index 0000000..b64b8ff
--- /dev/null
+++ b/src/openrouter/components/chatstreamingchoice.py
@@ -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
diff --git a/src/openrouter/components/chatstreamingresponsechunk.py b/src/openrouter/components/chatstreamingresponsechunk.py
index 0ec76bc..7c32481 100644
--- a/src/openrouter/components/chatstreamingresponsechunk.py
+++ b/src/openrouter/components/chatstreamingresponsechunk.py
@@ -5,7 +5,7 @@ from .chatgenerationtokenusage import (
ChatGenerationTokenUsage,
ChatGenerationTokenUsageTypedDict,
)
-from .chatresponsechoice import ChatStreamingChoice, ChatStreamingChoiceTypedDict
+from .chatstreamingchoice import ChatStreamingChoice, ChatStreamingChoiceTypedDict
from openrouter.types import (
BaseModel,
Nullable,
diff --git a/src/openrouter/components/completionchoice.py b/src/openrouter/components/completionchoice.py
index 3e68a00..21ce2b9 100644
--- a/src/openrouter/components/completionchoice.py
+++ b/src/openrouter/components/completionchoice.py
@@ -2,12 +2,19 @@
from __future__ import annotations
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 pydantic import model_serializer
from pydantic.functional_validators import PlainValidator
-from typing import Literal, Union
-from typing_extensions import Annotated, TypedDict
+from typing import Literal, Optional, Union
+from typing_extensions import Annotated, NotRequired, TypedDict
CompletionFinishReason = Union[
@@ -25,6 +32,8 @@ class CompletionChoiceTypedDict(TypedDict):
index: float
logprobs: Nullable[CompletionLogprobsTypedDict]
finish_reason: Nullable[CompletionFinishReason]
+ native_finish_reason: NotRequired[str]
+ reasoning: NotRequired[Nullable[str]]
class CompletionChoice(BaseModel):
@@ -38,10 +47,14 @@ class CompletionChoice(BaseModel):
Nullable[CompletionFinishReason], PlainValidator(validate_open_enum(False))
]
+ native_finish_reason: Optional[str] = None
+
+ reasoning: OptionalNullable[str] = UNSET
+
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["logprobs", "finish_reason"]
+ optional_fields = ["native_finish_reason", "reasoning"]
+ nullable_fields = ["logprobs", "finish_reason", "reasoning"]
null_default_fields = []
serialized = handler(self)
diff --git a/src/openrouter/components/completionresponse.py b/src/openrouter/components/completionresponse.py
index 12bde5f..dcdd529 100644
--- a/src/openrouter/components/completionresponse.py
+++ b/src/openrouter/components/completionresponse.py
@@ -17,6 +17,7 @@ class CompletionResponseTypedDict(TypedDict):
model: str
choices: List[CompletionChoiceTypedDict]
object: Literal["text_completion"]
+ provider: NotRequired[str]
system_fingerprint: NotRequired[str]
usage: NotRequired[CompletionUsageTypedDict]
@@ -38,6 +39,8 @@ class CompletionResponse(BaseModel):
pydantic.Field(alias="object"),
] = "text_completion"
+ provider: Optional[str] = None
+
system_fingerprint: Optional[str] = None
usage: Optional[CompletionUsage] = None
diff --git a/src/openrouter/components/openresponsesrequest.py b/src/openrouter/components/openresponsesrequest.py
index 60a5e54..23c95d6 100644
--- a/src/openrouter/components/openresponsesrequest.py
+++ b/src/openrouter/components/openresponsesrequest.py
@@ -44,9 +44,10 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import get_discriminator, validate_open_enum
+from openrouter.utils import get_discriminator, validate_const, validate_open_enum
+import pydantic
from pydantic import Discriminator, Tag, model_serializer
-from pydantic.functional_validators import PlainValidator
+from pydantic.functional_validators import AfterValidator, PlainValidator
from typing import Any, Dict, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -135,16 +136,7 @@ OpenResponsesRequestToolUnion = Annotated[
]
-ServiceTier = Union[
- Literal[
- "auto",
- "default",
- "flex",
- "priority",
- "scale",
- ],
- UnrecognizedStr,
-]
+ServiceTier = Literal["auto",]
Truncation = Union[
@@ -356,6 +348,17 @@ class Provider(BaseModel):
return m
+IDResponseHealing = Literal["response-healing",]
+
+
+class PluginResponseHealingTypedDict(TypedDict):
+ id: IDResponseHealing
+
+
+class PluginResponseHealing(BaseModel):
+ id: IDResponseHealing
+
+
IDFileParser = Literal["file-parser",]
@@ -437,7 +440,12 @@ class PluginModeration(BaseModel):
PluginTypedDict = TypeAliasType(
"PluginTypedDict",
- Union[PluginModerationTypedDict, PluginFileParserTypedDict, PluginWebTypedDict],
+ Union[
+ PluginModerationTypedDict,
+ PluginResponseHealingTypedDict,
+ PluginFileParserTypedDict,
+ PluginWebTypedDict,
+ ],
)
@@ -446,6 +454,7 @@ Plugin = Annotated[
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")),
]
@@ -478,8 +487,8 @@ class OpenResponsesRequestTypedDict(TypedDict):
include: NotRequired[Nullable[List[OpenAIResponsesIncludable]]]
background: NotRequired[Nullable[bool]]
safety_identifier: NotRequired[Nullable[str]]
- store: NotRequired[Nullable[bool]]
- service_tier: NotRequired[Nullable[ServiceTier]]
+ store: Literal[False]
+ service_tier: NotRequired[ServiceTier]
truncation: NotRequired[Nullable[Truncation]]
stream: NotRequired[bool]
provider: NotRequired[Nullable[ProviderTypedDict]]
@@ -488,6 +497,8 @@ class OpenResponsesRequestTypedDict(TypedDict):
r"""Plugins you want to enable for this request, including their settings."""
user: NotRequired[str]
r"""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 being affected by the actions of individual users. Maximum of 128 characters."""
+ session_id: NotRequired[str]
+ r"""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."""
class OpenResponsesRequest(BaseModel):
@@ -543,11 +554,12 @@ class OpenResponsesRequest(BaseModel):
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[
- OptionalNullable[ServiceTier], PlainValidator(validate_open_enum(False))
- ] = UNSET
+ service_tier: Optional[ServiceTier] = "auto"
truncation: Annotated[
OptionalNullable[Truncation], PlainValidator(validate_open_enum(False))
@@ -564,6 +576,9 @@ class OpenResponsesRequest(BaseModel):
user: Optional[str] = None
r"""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 being affected by the actions of individual users. Maximum of 128 characters."""
+ session_id: Optional[str] = None
+ r"""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."""
+
@model_serializer(mode="wrap")
def serialize_model(self, handler):
optional_fields = [
@@ -594,6 +609,7 @@ class OpenResponsesRequest(BaseModel):
"provider",
"plugins",
"user",
+ "session_id",
]
nullable_fields = [
"instructions",
@@ -609,8 +625,6 @@ class OpenResponsesRequest(BaseModel):
"include",
"background",
"safety_identifier",
- "store",
- "service_tier",
"truncation",
"provider",
]
diff --git a/src/openrouter/components/providername.py b/src/openrouter/components/providername.py
index 21f6345..dea467c 100644
--- a/src/openrouter/components/providername.py
+++ b/src/openrouter/components/providername.py
@@ -11,12 +11,14 @@ ProviderName = Union[
"AionLabs",
"Alibaba",
"Amazon Bedrock",
+ "Amazon Nova",
"Anthropic",
- "Arcee",
+ "Arcee AI",
"AtlasCloud",
"Avian",
"Azure",
"BaseTen",
+ "BytePlus",
"Black Forest Labs",
"Cerebras",
"Chutes",
@@ -31,6 +33,7 @@ ProviderName = Union[
"Fireworks",
"Friendli",
"GMICloud",
+ "GoPomelo",
"Google",
"Google AI Studio",
"Groq",
@@ -60,7 +63,9 @@ ProviderName = Union[
"Relace",
"SambaNova",
"SiliconFlow",
+ "Sourceful",
"Stealth",
+ "StreamLake",
"Switchpoint",
"Targon",
"Together",
diff --git a/src/openrouter/components/videourl.py b/src/openrouter/components/videourl.py
deleted file mode 100644
index e1ef80d..0000000
--- a/src/openrouter/components/videourl.py
+++ /dev/null
@@ -1,13 +0,0 @@
-"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
-
-from __future__ import annotations
-from openrouter.types import BaseModel
-from typing_extensions import TypedDict
-
-
-class VideoURLTypedDict(TypedDict):
- url: str
-
-
-class VideoURL(BaseModel):
- url: str
diff --git a/src/openrouter/operations/__init__.py b/src/openrouter/operations/__init__.py
index 3ba8b45..9466002 100644
--- a/src/openrouter/operations/__init__.py
+++ b/src/openrouter/operations/__init__.py
@@ -100,7 +100,12 @@ if TYPE_CHECKING:
ExchangeAuthCodeForAPIKeyResponse,
ExchangeAuthCodeForAPIKeyResponseTypedDict,
)
- from .getcredits import GetCreditsResponse, GetCreditsResponseTypedDict
+ from .getcredits import (
+ GetCreditsData,
+ GetCreditsDataTypedDict,
+ GetCreditsResponse,
+ GetCreditsResponseTypedDict,
+ )
from .getcurrentkey import (
GetCurrentKeyData,
GetCurrentKeyDataTypedDict,
@@ -242,6 +247,8 @@ __all__ = [
"ExchangeAuthCodeForAPIKeyRequestTypedDict",
"ExchangeAuthCodeForAPIKeyResponse",
"ExchangeAuthCodeForAPIKeyResponseTypedDict",
+ "GetCreditsData",
+ "GetCreditsDataTypedDict",
"GetCreditsResponse",
"GetCreditsResponseTypedDict",
"GetCurrentKeyData",
@@ -416,6 +423,8 @@ _dynamic_imports: dict[str, str] = {
"ExchangeAuthCodeForAPIKeyRequestTypedDict": ".exchangeauthcodeforapikey",
"ExchangeAuthCodeForAPIKeyResponse": ".exchangeauthcodeforapikey",
"ExchangeAuthCodeForAPIKeyResponseTypedDict": ".exchangeauthcodeforapikey",
+ "GetCreditsData": ".getcredits",
+ "GetCreditsDataTypedDict": ".getcredits",
"GetCreditsResponse": ".getcredits",
"GetCreditsResponseTypedDict": ".getcredits",
"GetCurrentKeyData": ".getcurrentkey",
diff --git a/src/openrouter/operations/getcredits.py b/src/openrouter/operations/getcredits.py
index 9719016..8cab52d 100644
--- a/src/openrouter/operations/getcredits.py
+++ b/src/openrouter/operations/getcredits.py
@@ -5,9 +5,28 @@ from openrouter.types import BaseModel
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):
r"""Total credits purchased and used"""
+ data: GetCreditsDataTypedDict
+
class GetCreditsResponse(BaseModel):
r"""Total credits purchased and used"""
+
+ data: GetCreditsData
diff --git a/src/openrouter/operations/getparameters.py b/src/openrouter/operations/getparameters.py
index 18da669..f21ad9b 100644
--- a/src/openrouter/operations/getparameters.py
+++ b/src/openrouter/operations/getparameters.py
@@ -38,12 +38,14 @@ GetParametersProvider = Union[
"AionLabs",
"Alibaba",
"Amazon Bedrock",
+ "Amazon Nova",
"Anthropic",
- "Arcee",
+ "Arcee AI",
"AtlasCloud",
"Avian",
"Azure",
"BaseTen",
+ "BytePlus",
"Black Forest Labs",
"Cerebras",
"Chutes",
@@ -58,6 +60,7 @@ GetParametersProvider = Union[
"Fireworks",
"Friendli",
"GMICloud",
+ "GoPomelo",
"Google",
"Google AI Studio",
"Groq",
@@ -87,7 +90,9 @@ GetParametersProvider = Union[
"Relace",
"SambaNova",
"SiliconFlow",
+ "Sourceful",
"Stealth",
+ "StreamLake",
"Switchpoint",
"Targon",
"Together",
diff --git a/src/openrouter/responses.py b/src/openrouter/responses.py
index 85701ff..01bd315 100644
--- a/src/openrouter/responses.py
+++ b/src/openrouter/responses.py
@@ -69,8 +69,7 @@ class Responses(BaseSDK):
include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET,
background: OptionalNullable[bool] = UNSET,
safety_identifier: OptionalNullable[str] = UNSET,
- store: OptionalNullable[bool] = UNSET,
- service_tier: OptionalNullable[components.ServiceTier] = UNSET,
+ service_tier: Optional[components.ServiceTier] = "auto",
truncation: OptionalNullable[components.Truncation] = UNSET,
stream: Union[Literal[False], None] = None,
provider: OptionalNullable[
@@ -80,6 +79,7 @@ class Responses(BaseSDK):
Union[List[components.Plugin], List[components.PluginTypedDict]]
] = None,
user: Optional[str] = None,
+ session_id: Optional[str] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
@@ -109,13 +109,13 @@ class Responses(BaseSDK):
:param include:
:param background:
:param safety_identifier:
- :param store:
:param service_tier:
:param truncation:
:param stream:
:param provider: When multiple model providers are available, optionally indicate your routing preference.
:param plugins: Plugins you want to enable for this request, including their settings.
:param user: 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 being affected by the actions of individual users. Maximum of 128 characters.
+ :param session_id: 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.
:param retries: Override the default retry configuration 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
@@ -174,8 +174,7 @@ class Responses(BaseSDK):
include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET,
background: OptionalNullable[bool] = UNSET,
safety_identifier: OptionalNullable[str] = UNSET,
- store: OptionalNullable[bool] = UNSET,
- service_tier: OptionalNullable[components.ServiceTier] = UNSET,
+ service_tier: Optional[components.ServiceTier] = "auto",
truncation: OptionalNullable[components.Truncation] = UNSET,
stream: Literal[True],
provider: OptionalNullable[
@@ -185,6 +184,7 @@ class Responses(BaseSDK):
Union[List[components.Plugin], List[components.PluginTypedDict]]
] = None,
user: Optional[str] = None,
+ session_id: Optional[str] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
@@ -214,13 +214,13 @@ class Responses(BaseSDK):
:param include:
:param background:
:param safety_identifier:
- :param store:
:param service_tier:
:param truncation:
:param stream:
:param provider: When multiple model providers are available, optionally indicate your routing preference.
:param plugins: Plugins you want to enable for this request, including their settings.
:param user: 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 being affected by the actions of individual users. Maximum of 128 characters.
+ :param session_id: 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.
:param retries: Override the default retry configuration 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
@@ -278,8 +278,7 @@ class Responses(BaseSDK):
include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET,
background: OptionalNullable[bool] = UNSET,
safety_identifier: OptionalNullable[str] = UNSET,
- store: OptionalNullable[bool] = UNSET,
- service_tier: OptionalNullable[components.ServiceTier] = UNSET,
+ service_tier: Optional[components.ServiceTier] = "auto",
truncation: OptionalNullable[components.Truncation] = UNSET,
stream: Optional[bool] = False,
provider: OptionalNullable[
@@ -289,6 +288,7 @@ class Responses(BaseSDK):
Union[List[components.Plugin], List[components.PluginTypedDict]]
] = None,
user: Optional[str] = None,
+ session_id: Optional[str] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
@@ -318,13 +318,13 @@ class Responses(BaseSDK):
:param include:
:param background:
:param safety_identifier:
- :param store:
:param service_tier:
:param truncation:
:param stream:
:param provider: When multiple model providers are available, optionally indicate your routing preference.
:param plugins: Plugins you want to enable for this request, including their settings.
:param user: 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 being affected by the actions of individual users. Maximum of 128 characters.
+ :param session_id: 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.
:param retries: Override the default retry configuration 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
@@ -374,7 +374,6 @@ class Responses(BaseSDK):
include=include,
background=background,
safety_identifier=safety_identifier,
- store=store,
service_tier=service_tier,
truncation=truncation,
stream=stream,
@@ -385,6 +384,7 @@ class Responses(BaseSDK):
plugins, Optional[List[components.Plugin]]
),
user=user,
+ session_id=session_id,
)
req = self._build_request(
@@ -627,8 +627,7 @@ class Responses(BaseSDK):
include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET,
background: OptionalNullable[bool] = UNSET,
safety_identifier: OptionalNullable[str] = UNSET,
- store: OptionalNullable[bool] = UNSET,
- service_tier: OptionalNullable[components.ServiceTier] = UNSET,
+ service_tier: Optional[components.ServiceTier] = "auto",
truncation: OptionalNullable[components.Truncation] = UNSET,
stream: Union[Literal[False], None] = None,
provider: OptionalNullable[
@@ -638,6 +637,7 @@ class Responses(BaseSDK):
Union[List[components.Plugin], List[components.PluginTypedDict]]
] = None,
user: Optional[str] = None,
+ session_id: Optional[str] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
@@ -667,13 +667,13 @@ class Responses(BaseSDK):
:param include:
:param background:
:param safety_identifier:
- :param store:
:param service_tier:
:param truncation:
:param stream:
:param provider: When multiple model providers are available, optionally indicate your routing preference.
:param plugins: Plugins you want to enable for this request, including their settings.
:param user: 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 being affected by the actions of individual users. Maximum of 128 characters.
+ :param session_id: 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.
:param retries: Override the default retry configuration 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
@@ -732,8 +732,7 @@ class Responses(BaseSDK):
include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET,
background: OptionalNullable[bool] = UNSET,
safety_identifier: OptionalNullable[str] = UNSET,
- store: OptionalNullable[bool] = UNSET,
- service_tier: OptionalNullable[components.ServiceTier] = UNSET,
+ service_tier: Optional[components.ServiceTier] = "auto",
truncation: OptionalNullable[components.Truncation] = UNSET,
stream: Literal[True],
provider: OptionalNullable[
@@ -743,6 +742,7 @@ class Responses(BaseSDK):
Union[List[components.Plugin], List[components.PluginTypedDict]]
] = None,
user: Optional[str] = None,
+ session_id: Optional[str] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
@@ -772,13 +772,13 @@ class Responses(BaseSDK):
:param include:
:param background:
:param safety_identifier:
- :param store:
:param service_tier:
:param truncation:
:param stream:
:param provider: When multiple model providers are available, optionally indicate your routing preference.
:param plugins: Plugins you want to enable for this request, including their settings.
:param user: 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 being affected by the actions of individual users. Maximum of 128 characters.
+ :param session_id: 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.
:param retries: Override the default retry configuration 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
@@ -836,8 +836,7 @@ class Responses(BaseSDK):
include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET,
background: OptionalNullable[bool] = UNSET,
safety_identifier: OptionalNullable[str] = UNSET,
- store: OptionalNullable[bool] = UNSET,
- service_tier: OptionalNullable[components.ServiceTier] = UNSET,
+ service_tier: Optional[components.ServiceTier] = "auto",
truncation: OptionalNullable[components.Truncation] = UNSET,
stream: Optional[bool] = False,
provider: OptionalNullable[
@@ -847,6 +846,7 @@ class Responses(BaseSDK):
Union[List[components.Plugin], List[components.PluginTypedDict]]
] = None,
user: Optional[str] = None,
+ session_id: Optional[str] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
@@ -876,13 +876,13 @@ class Responses(BaseSDK):
:param include:
:param background:
:param safety_identifier:
- :param store:
:param service_tier:
:param truncation:
:param stream:
:param provider: When multiple model providers are available, optionally indicate your routing preference.
:param plugins: Plugins you want to enable for this request, including their settings.
:param user: 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 being affected by the actions of individual users. Maximum of 128 characters.
+ :param session_id: 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.
:param retries: Override the default retry configuration 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
@@ -932,7 +932,6 @@ class Responses(BaseSDK):
include=include,
background=background,
safety_identifier=safety_identifier,
- store=store,
service_tier=service_tier,
truncation=truncation,
stream=stream,
@@ -943,6 +942,7 @@ class Responses(BaseSDK):
plugins, Optional[List[components.Plugin]]
),
user=user,
+ session_id=session_id,
)
req = self._build_request_async(