chore: regenerate Python SDK v0.0.21

Adds support for ChatMessageContentItemFile to enable file attachments in chat messages. Updates OpenAPI spec with file content type, adds overlays for open enums and RSS responses, and regenerates SDK components.
This commit is contained in:
Matt Apperson
2025-11-18 15:28:28 -05:00
parent a1dae775cb
commit c07f60e7b1
16 changed files with 8480 additions and 8308 deletions
+6 -3
View File
@@ -1,12 +1,12 @@
lockVersion: 2.0.0
id: cfd52247-6a25-4c6d-bbce-fe6fce0cd69d
management:
docChecksum: 4cc4a9d9115d0eca9a5eb4786505579d
docChecksum: c70fe15adf85b7e7749bd16a443507da
docVersion: 1.0.0
speakeasyVersion: 1.658.2
generationVersion: 2.755.9
releaseVersion: 0.0.19
configChecksum: 834d5c1cea368e35ab6535ffb2bf9e7a
releaseVersion: 0.0.21
configChecksum: fcf282e1f92a17d5f4a7b368adf40f1b
repoURL: https://github.com/OpenRouterTeam/python-sdk.git
installationURL: https://github.com/OpenRouterTeam/python-sdk.git
published: true
@@ -67,6 +67,7 @@ generatedFiles:
- docs/components/chatmessagecontentitemaudio.md
- docs/components/chatmessagecontentitemaudioformat.md
- docs/components/chatmessagecontentitemaudioinputaudio.md
- docs/components/chatmessagecontentitemfile.md
- docs/components/chatmessagecontentitemimage.md
- docs/components/chatmessagecontentitemimagedetail.md
- docs/components/chatmessagecontentitemtext.md
@@ -110,6 +111,7 @@ generatedFiles:
- 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
@@ -554,6 +556,7 @@ generatedFiles:
- src/openrouter/components/chatgenerationtokenusage.py
- src/openrouter/components/chatmessagecontentitem.py
- src/openrouter/components/chatmessagecontentitemaudio.py
- src/openrouter/components/chatmessagecontentitemfile.py
- src/openrouter/components/chatmessagecontentitemimage.py
- src/openrouter/components/chatmessagecontentitemtext.py
- src/openrouter/components/chatmessagecontentitemvideo.py
+1 -1
View File
@@ -30,7 +30,7 @@ generation:
generateNewTests: true
skipResponseBodyAssertions: false
python:
version: 0.0.19
version: 0.0.21
additionalDependencies:
dev: {}
main: {}
+22
View File
@@ -4672,12 +4672,33 @@ components:
- type
- video_url
type: object
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
@@ -4687,6 +4708,7 @@ components:
input_audio: '#/components/schemas/ChatMessageContentItemAudio'
input_video: '#/components/schemas/ChatMessageContentItemVideo'
video_url: '#/components/schemas/ChatMessageContentItemVideo'
file: '#/components/schemas/ChatMessageContentItemFile'
ChatMessageToolCall:
type: object
properties:
+8313 -8291
View File
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,10 @@
overlay: 1.0.0
x-speakeasy-jsonpath: rfc9535
info:
title: Add open enums
version: 0.0.0
actions:
- target: $..[?length(@.enum) > 1]
description: Automatically open all enums that have length > 1
update:
x-speakeasy-unknown-values: allow
@@ -0,0 +1,15 @@
overlay: 1.0.0
x-speakeasy-jsonpath: rfc9535
info:
title: Remove RSS+XML response schemas and related parameters
version: 0.0.0
actions:
- target: $..responses.*.content["application/rss+xml"]
description: Remove application/rss+xml response schemas
remove: true
- target: $..parameters[?@.name == "use_rss"]
description: Remove use_rss parameter
remove: true
- target: $..parameters[?@.name == "use_rss_chat_links"]
description: Remove use_rss_chat_links parameter
remove: true
+20 -5
View File
@@ -6,26 +6,41 @@ sources:
sourceBlobDigest: sha256:635d63fd18db468c1dcc23700382af788de76594ba3b8292fae9b14c0e5c22c4
tags:
- latest
OpenRouter API:
sourceNamespace: open-router-chat-completions-api
sourceRevisionDigest: sha256:473a895aeef965d69f7d3c905f642ecedd8bceb4baf62b135b358ba92be4d451
sourceBlobDigest: sha256:e3c8a0e4323c1b4b0795fc6b1c2cf7134c5909a7d126a0fa266ba7c8aa65ee18
tags:
- latest
- 1.0.0
targets:
open-router:
source: -OAS
sourceNamespace: open-router-chat-completions-api
sourceRevisionDigest: sha256:fc0c90dc8ebb69ef4a571e4e63dcd7f8f33c3254c17ad2583b628fbbf3d1ac05
sourceBlobDigest: sha256:635d63fd18db468c1dcc23700382af788de76594ba3b8292fae9b14c0e5c22c4
openrouter:
source: OpenRouter API
sourceNamespace: open-router-chat-completions-api
sourceRevisionDigest: sha256:473a895aeef965d69f7d3c905f642ecedd8bceb4baf62b135b358ba92be4d451
sourceBlobDigest: sha256:e3c8a0e4323c1b4b0795fc6b1c2cf7134c5909a7d126a0fa266ba7c8aa65ee18
workflow:
workflowVersion: 1.0.0
speakeasyVersion: latest
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
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:
openrouter:
target: python
source: -OAS
source: OpenRouter API
publish:
pypi:
token: $pypi_token
+8 -5
View File
@@ -1,16 +1,19 @@
workflowVersion: 1.0.0
speakeasyVersion: latest
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
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:
openrouter:
target: python
source: -OAS
source: OpenRouter API
publish:
pypi:
token: $pypi_token
@@ -33,3 +33,9 @@ value: components.ChatMessageContentItemVideo = /* values here */
value: components.ChatMessageContentItemVideo = /* values here */
```
### `components.ChatMessageContentItemFile`
```python
value: components.ChatMessageContentItemFile = /* values here */
```
@@ -0,0 +1,9 @@
# 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 |
+10
View File
@@ -0,0 +1,10 @@
# 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 |
+1 -1
View File
@@ -1,6 +1,6 @@
[project]
name = "openrouter"
version = "0.0.19"
version = "0.0.21"
description = "Official Python Client SDK for OpenRouter."
authors = [{ name = "OpenRouter" },]
readme = "README-PYPI.md"
+2 -2
View File
@@ -3,10 +3,10 @@
import importlib.metadata
__title__: str = "openrouter"
__version__: str = "0.0.19"
__version__: str = "0.0.21"
__openapi_doc_version__: str = "1.0.0"
__gen_version__: str = "2.755.9"
__user_agent__: str = "speakeasy-sdk/python 0.0.19 2.755.9 1.0.0 openrouter"
__user_agent__: str = "speakeasy-sdk/python 0.0.21 2.755.9 1.0.0 openrouter"
try:
if __package__ is not None:
+14
View File
@@ -58,6 +58,12 @@ if TYPE_CHECKING:
ChatMessageContentItemAudioInputAudioTypedDict,
ChatMessageContentItemAudioTypedDict,
)
from .chatmessagecontentitemfile import (
ChatMessageContentItemFile,
ChatMessageContentItemFileTypedDict,
File,
FileTypedDict,
)
from .chatmessagecontentitemimage import (
ChatMessageContentItemImage,
ChatMessageContentItemImageDetail,
@@ -824,6 +830,8 @@ __all__ = [
"ChatMessageContentItemAudioInputAudio",
"ChatMessageContentItemAudioInputAudioTypedDict",
"ChatMessageContentItemAudioTypedDict",
"ChatMessageContentItemFile",
"ChatMessageContentItemFileTypedDict",
"ChatMessageContentItemImage",
"ChatMessageContentItemImageDetail",
"ChatMessageContentItemImageTypedDict",
@@ -903,12 +911,14 @@ __all__ = [
"Effort",
"EndpointStatus",
"Engine",
"File",
"FileCitation",
"FileCitationType",
"FileCitationTypedDict",
"FilePath",
"FilePathType",
"FilePathTypedDict",
"FileTypedDict",
"ForbiddenResponseErrorData",
"ForbiddenResponseErrorDataTypedDict",
"IDFileParser",
@@ -1433,6 +1443,10 @@ _dynamic_imports: dict[str, str] = {
"ChatMessageContentItemAudioInputAudio": ".chatmessagecontentitemaudio",
"ChatMessageContentItemAudioInputAudioTypedDict": ".chatmessagecontentitemaudio",
"ChatMessageContentItemAudioTypedDict": ".chatmessagecontentitemaudio",
"ChatMessageContentItemFile": ".chatmessagecontentitemfile",
"ChatMessageContentItemFileTypedDict": ".chatmessagecontentitemfile",
"File": ".chatmessagecontentitemfile",
"FileTypedDict": ".chatmessagecontentitemfile",
"ChatMessageContentItemImage": ".chatmessagecontentitemimage",
"ChatMessageContentItemImageDetail": ".chatmessagecontentitemimage",
"ChatMessageContentItemImageTypedDict": ".chatmessagecontentitemimage",
@@ -5,6 +5,10 @@ from .chatmessagecontentitemaudio import (
ChatMessageContentItemAudio,
ChatMessageContentItemAudioTypedDict,
)
from .chatmessagecontentitemfile import (
ChatMessageContentItemFile,
ChatMessageContentItemFileTypedDict,
)
from .chatmessagecontentitemimage import (
ChatMessageContentItemImage,
ChatMessageContentItemImageTypedDict,
@@ -29,6 +33,7 @@ ChatMessageContentItemTypedDict = TypeAliasType(
ChatMessageContentItemTextTypedDict,
ChatMessageContentItemImageTypedDict,
ChatMessageContentItemAudioTypedDict,
ChatMessageContentItemFileTypedDict,
ChatMessageContentItemVideoTypedDict,
],
)
@@ -41,6 +46,7 @@ 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")),
]
@@ -0,0 +1,37 @@
"""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"