Compare commits

..
Author SHA1 Message Date
speakeasy-github[bot]andspeakeasy-bot 57f3b0e394 empty commit to trigger [run-tests] workflow 2026-06-19 01:06:27 +00:00
speakeasybot 0b6f0086aa ## Python SDK Changes:
* `open_router.benchmarks.get_benchmarks()`: **Added**
* `open_router.datasets.get_benchmarks_artificial_analysis()`: **Deleted** **Breaking** ⚠️
* `open_router.datasets.get_benchmarks_design_arena()`: **Deleted** **Breaking** ⚠️
* `open_router.chat.send()`:  `response` **Changed**
* `open_router.embeddings.list_models()`:  `response.data.[].reasoning` **Added**
* `open_router.models.get()`:  `response.data.reasoning` **Added**
* `open_router.models.list()`:  `response.data.[].reasoning` **Added**
* `open_router.models.list_for_user()`:  `response.data.[].reasoning` **Added**
2026-06-19 01:06:11 +00:00
7 changed files with 17 additions and 166 deletions
+10 -15
View File
@@ -1,7 +1,7 @@
lockVersion: 2.0.0
id: c48cf606-fb42-4a45-9c23-8f0555307828
management:
docChecksum: b391df2d82163351d8df7c152db16d55
docChecksum: ed88d95b0b7f60419c1114838caf081b
docVersion: 1.0.0
speakeasyVersion: 1.680.0
generationVersion: 2.788.4
@@ -11,9 +11,9 @@ management:
installationURL: https://github.com/OpenRouterTeam/python-sdk.git
published: true
persistentEdits:
generation_id: 5b413f59-637c-4b8e-af52-4ce67ebe1508
pristine_commit_hash: 39a84a2b48a1853daeb784df3ce2c6bb1cbb4b3a
pristine_tree_hash: 2127b8a2fdbdd0e70f0a7ed87d1d4b25ca2e82ed
generation_id: 9aa73187-1861-4f91-95f7-cd1d2afafdff
pristine_commit_hash: 3750e2dd54138f67d21ec18da9f09d92da278104
pristine_tree_hash: 10fa76667eb33e2d858c8f50f5028fccb1afff88
features:
python:
acceptHeaders: 3.0.0
@@ -4904,10 +4904,6 @@ trackedFiles:
id: 01cceb61d42f
last_write_checksum: sha1:7e1d73bd30584d55f4b116737c15d7c73cdf6a3a
pristine_git_object: 522f4978a3c4e1d1c0d197b541fc57e745b7d4e7
docs/operations/costdetails.md:
id: 777b240173de
last_write_checksum: sha1:b2748fc0cf305791446f5f217947d82bd74a8350
pristine_git_object: 58a1aa8485130f8b49c633dfef0439b83a5f239c
docs/operations/createaudiospeechglobals.md:
id: c67d64f11ad7
last_write_checksum: sha1:a0026b1caf2268dd4a79177fa2bb630eca1498b4
@@ -4982,8 +4978,8 @@ trackedFiles:
pristine_git_object: 1ff75cb8fa59d2b7b756ea07e9f5849995b62435
docs/operations/createembeddingsusage.md:
id: 2dc99973f6c7
last_write_checksum: sha1:292de8b3a80697b56a961d2eb7f97d54dd29c4ae
pristine_git_object: 639fb7e305ff27786b6ea858b425e36aaaf20252
last_write_checksum: sha1:b01ba733f5d1369b21a54b9f3bfb0e4059504b6f
pristine_git_object: 007fb235eef4ebb9b3dda14352e9a252004de4c2
docs/operations/createguardrailglobals.md:
id: 34f5b2a17330
last_write_checksum: sha1:a43fb357b9c08974befd14a79da7623e72bc3245
@@ -8242,8 +8238,8 @@ trackedFiles:
pristine_git_object: 37ee42a638f5fce69fc7db1e6b86efb51f381582
src/openrouter/operations/__init__.py:
id: 9afcea1e7161
last_write_checksum: sha1:b555b71cf7d07da5aa6b121a740d1ef69e513629
pristine_git_object: b9e4c525f346b441e837c4497cc2e8d723a44352
last_write_checksum: sha1:d0572cc16c500a9dba895239890bc01414b339a6
pristine_git_object: 650e7d0faaf2b32b7c96dd196b6e8c412c573795
src/openrouter/operations/bulkaddworkspacemembers.py:
id: e0ed56117619
last_write_checksum: sha1:2b9c73dd8a24d6c479d50118a309e4e0969ca7ea
@@ -8286,8 +8282,8 @@ trackedFiles:
pristine_git_object: 523d24efa869d63a145167b94e811671b84c5cfb
src/openrouter/operations/createembeddings.py:
id: fe1160a960e9
last_write_checksum: sha1:55a231d6e9a2f2a76c3fbc1f8af893e393e08bc3
pristine_git_object: 6459cab7e1a597f5a1b24f690d845b4ee8809236
last_write_checksum: sha1:5307ac65b8a4c3eec3de9158c2a3d10554212e8b
pristine_git_object: 4cc4c5c044fa87a8ae21dd7aa0f83d09f4d00f09
src/openrouter/operations/createguardrail.py:
id: 52ed4b2f5903
last_write_checksum: sha1:119141c01d19df6b6d090b67f80145e3bf4d4d60
@@ -10066,7 +10062,6 @@ releaseNotes: |
* `open_router.datasets.get_benchmarks_artificial_analysis()`: **Deleted** **Breaking** :warning:
* `open_router.datasets.get_benchmarks_design_arena()`: **Deleted** **Breaking** :warning:
* `open_router.chat.send()`: `response` **Changed**
* `open_router.embeddings.generate()`: `response.usage` **Changed**
* `open_router.embeddings.list_models()`: `response.data.[].reasoning` **Added**
* `open_router.models.get()`: `response.data.reasoning` **Added**
* `open_router.models.list()`: `response.data.[].reasoning` **Added**
-25
View File
@@ -24635,31 +24635,6 @@ paths:
example: 0.0001
format: double
type: number
cost_details:
description: Breakdown of upstream inference costs
example:
upstream_inference_completions_cost: 0.0004
upstream_inference_cost: null
upstream_inference_prompt_cost: 0.0008
nullable: true
properties:
upstream_inference_completions_cost:
format: double
type: number
upstream_inference_cost:
format: double
nullable: true
type: number
upstream_inference_prompt_cost:
format: double
type: number
required:
- upstream_inference_prompt_cost
- upstream_inference_completions_cost
type: object
is_byok:
description: Whether a request was made using a Bring Your Own Key configuration
type: boolean
prompt_tokens:
description: Number of tokens in the input
example: 8
-25
View File
@@ -24481,31 +24481,6 @@ paths:
example: 0.0001
format: double
type: number
cost_details:
description: Breakdown of upstream inference costs
example:
upstream_inference_completions_cost: 0.0004
upstream_inference_cost: null
upstream_inference_prompt_cost: 0.0008
nullable: true
properties:
upstream_inference_completions_cost:
format: double
type: number
upstream_inference_cost:
format: double
nullable: true
type: number
upstream_inference_prompt_cost:
format: double
type: number
required:
- upstream_inference_prompt_cost
- upstream_inference_completions_cost
type: object
is_byok:
description: Whether a request was made using a Bring Your Own Key configuration
type: boolean
prompt_tokens:
description: Number of tokens in the input
example: 8
+6 -6
View File
@@ -2,20 +2,20 @@ speakeasyVersion: 1.680.0
sources:
OpenRouter API:
sourceNamespace: open-router-chat-completions-api
sourceRevisionDigest: sha256:1e8bbe0cea645a95cb24c3e0061459d903aca98286d2c74de7cb8359b8c3c29d
sourceBlobDigest: sha256:42b4b8df42026cfc885ee4b34e7a30aaa906f40dc6ad99ea9e6c65e4bad495de
sourceRevisionDigest: sha256:3961034f6f0bdec425b86df15fce217a97ac7b47776d8a0c815e3dd64ebd81de
sourceBlobDigest: sha256:4e1f247864fe64f3cd13e9a6d8e3215f118d8497db4d1eb58e5c803d0d34b5dc
tags:
- latest
- speakeasy-sdk-regen-1781885111
- speakeasy-sdk-regen-1781825192
- 1.0.0
targets:
open-router:
source: OpenRouter API
sourceNamespace: open-router-chat-completions-api
sourceRevisionDigest: sha256:1e8bbe0cea645a95cb24c3e0061459d903aca98286d2c74de7cb8359b8c3c29d
sourceBlobDigest: sha256:42b4b8df42026cfc885ee4b34e7a30aaa906f40dc6ad99ea9e6c65e4bad495de
sourceRevisionDigest: sha256:3961034f6f0bdec425b86df15fce217a97ac7b47776d8a0c815e3dd64ebd81de
sourceBlobDigest: sha256:4e1f247864fe64f3cd13e9a6d8e3215f118d8497db4d1eb58e5c803d0d34b5dc
codeSamplesNamespace: open-router-python-code-samples
codeSamplesRevisionDigest: sha256:a16acd4648a2b2c90df0256551f25bb6515c70ea239dba657f07fce770e459d5
codeSamplesRevisionDigest: sha256:d59fc8e5b1b99b9889f59b905f8ecf55e91c3ded775b70c80e3c3b3a940f9eba
workflow:
workflowVersion: 1.0.0
speakeasyVersion: 1.680.0
+1 -1
View File
@@ -30,7 +30,7 @@ Based on:
### Releases
- [PyPI v0.10.0] https://pypi.org/project/openrouter/0.10.0 - .
## 2026-06-22 00:59:00
## 2026-06-19 01:04:04
### Changes
Based on:
- OpenAPI Doc
-6
View File
@@ -81,8 +81,6 @@ if TYPE_CHECKING:
ContentText,
ContentTextTypedDict,
ContentTypedDict,
CostDetails,
CostDetailsTypedDict,
CreateEmbeddingsData,
CreateEmbeddingsDataTypedDict,
CreateEmbeddingsGlobals,
@@ -721,8 +719,6 @@ __all__ = [
"ContentText",
"ContentTextTypedDict",
"ContentTypedDict",
"CostDetails",
"CostDetailsTypedDict",
"CreateAudioSpeechGlobals",
"CreateAudioSpeechGlobalsTypedDict",
"CreateAudioSpeechRequest",
@@ -1267,8 +1263,6 @@ _dynamic_imports: dict[str, str] = {
"ContentText": ".createembeddings",
"ContentTextTypedDict": ".createembeddings",
"ContentTypedDict": ".createembeddings",
"CostDetails": ".createembeddings",
"CostDetailsTypedDict": ".createembeddings",
"CreateEmbeddingsData": ".createembeddings",
"CreateEmbeddingsDataTypedDict": ".createembeddings",
"CreateEmbeddingsGlobals": ".createembeddings",
@@ -344,54 +344,6 @@ class CreateEmbeddingsData(BaseModel):
Object = Literal["list",]
class CostDetailsTypedDict(TypedDict):
r"""Breakdown of upstream inference costs"""
upstream_inference_completions_cost: float
upstream_inference_prompt_cost: float
upstream_inference_cost: NotRequired[Nullable[float]]
class CostDetails(BaseModel):
r"""Breakdown of upstream inference costs"""
upstream_inference_completions_cost: float
upstream_inference_prompt_cost: float
upstream_inference_cost: OptionalNullable[float] = UNSET
@model_serializer(mode="wrap")
def serialize_model(self, handler):
optional_fields = ["upstream_inference_cost"]
nullable_fields = ["upstream_inference_cost"]
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
class PromptTokensDetailsTypedDict(TypedDict):
r"""Per-modality token breakdown. Only present when the input contains 2+ modalities (e.g. text + image) and the upstream provider returns modality-level usage data. Only non-zero modality counts are included."""
@@ -435,10 +387,6 @@ class CreateEmbeddingsUsageTypedDict(TypedDict):
r"""Total number of tokens used"""
cost: NotRequired[float]
r"""Cost of the request in credits"""
cost_details: NotRequired[Nullable[CostDetailsTypedDict]]
r"""Breakdown of upstream inference costs"""
is_byok: NotRequired[bool]
r"""Whether a request was made using a Bring Your Own Key configuration"""
prompt_tokens_details: NotRequired[PromptTokensDetailsTypedDict]
r"""Per-modality token breakdown. Only present when the input contains 2+ modalities (e.g. text + image) and the upstream provider returns modality-level usage data. Only non-zero modality counts are included."""
@@ -455,45 +403,9 @@ class CreateEmbeddingsUsage(BaseModel):
cost: Optional[float] = None
r"""Cost of the request in credits"""
cost_details: OptionalNullable[CostDetails] = UNSET
r"""Breakdown of upstream inference costs"""
is_byok: Optional[bool] = None
r"""Whether a request was made using a Bring Your Own Key configuration"""
prompt_tokens_details: Optional[PromptTokensDetails] = None
r"""Per-modality token breakdown. Only present when the input contains 2+ modalities (e.g. text + image) and the upstream provider returns modality-level usage data. Only non-zero modality counts are included."""
@model_serializer(mode="wrap")
def serialize_model(self, handler):
optional_fields = ["cost", "cost_details", "is_byok", "prompt_tokens_details"]
nullable_fields = ["cost_details"]
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
class CreateEmbeddingsResponseBodyTypedDict(TypedDict):
r"""Embeddings response containing embedding vectors"""