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(