mirror of
https://github.com/wassname/openrouter-python-sdk-retry-errors.git
synced 2026-07-29 11:23:49 +08:00
chore: 🐝 Update SDK - Generate 0.10.1 (#366)
Co-authored-by: speakeasybot <bot@speakeasyapi.dev> Co-authored-by: speakeasy-github[bot] <128539517+speakeasy-github[bot]@users.noreply.github.com>
This commit is contained in:
co-authored by
speakeasybot
speakeasy-github[bot] <128539517+speakeasy-github[bot]@users.noreply.github.com>
parent
667941aaa8
commit
5e0b1a2b69
+807
-291
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -32,7 +32,7 @@ generation:
|
||||
skipResponseBodyAssertions: false
|
||||
preApplyUnionDiscriminators: true
|
||||
python:
|
||||
version: 0.10.0
|
||||
version: 0.10.1
|
||||
additionalDependencies:
|
||||
dev: {}
|
||||
main: {}
|
||||
|
||||
+1946
-560
File diff suppressed because it is too large
Load Diff
@@ -2,20 +2,20 @@ speakeasyVersion: 1.680.0
|
||||
sources:
|
||||
OpenRouter API:
|
||||
sourceNamespace: open-router-chat-completions-api
|
||||
sourceRevisionDigest: sha256:716ece4a1211eac2ee0e7e5836c7b484cff9bb002bd4e676d9ecad8317ee7941
|
||||
sourceBlobDigest: sha256:12d3dc8e7150ab2c4c5e3d613b01cb5e4dcce52b329eea89ca1fdc656d6fe045
|
||||
sourceRevisionDigest: sha256:8a4df86f3d3822da1bc0bd41158b6e2674f517dde9d9747c7fd6aeae92531d65
|
||||
sourceBlobDigest: sha256:6ced93728e355c985d439c194e9d8ee1593b92f6f809f1315be8847686c46174
|
||||
tags:
|
||||
- latest
|
||||
- speakeasy-sdk-regen-1781312282
|
||||
- speakeasy-sdk-regen-1782424634
|
||||
- 1.0.0
|
||||
targets:
|
||||
open-router:
|
||||
source: OpenRouter API
|
||||
sourceNamespace: open-router-chat-completions-api
|
||||
sourceRevisionDigest: sha256:716ece4a1211eac2ee0e7e5836c7b484cff9bb002bd4e676d9ecad8317ee7941
|
||||
sourceBlobDigest: sha256:12d3dc8e7150ab2c4c5e3d613b01cb5e4dcce52b329eea89ca1fdc656d6fe045
|
||||
sourceRevisionDigest: sha256:8a4df86f3d3822da1bc0bd41158b6e2674f517dde9d9747c7fd6aeae92531d65
|
||||
sourceBlobDigest: sha256:6ced93728e355c985d439c194e9d8ee1593b92f6f809f1315be8847686c46174
|
||||
codeSamplesNamespace: open-router-python-code-samples
|
||||
codeSamplesRevisionDigest: sha256:e7d6f4de48a7c63cf15f3a8378f952277cd4c59373c28c61909497853fa769e2
|
||||
codeSamplesRevisionDigest: sha256:50757f7fdc830970d172346b5b1a7308c4861a13f531f093a629e1ac180687ee
|
||||
workflow:
|
||||
workflowVersion: 1.0.0
|
||||
speakeasyVersion: 1.680.0
|
||||
|
||||
+11
-1
@@ -28,4 +28,14 @@ Based on:
|
||||
### Generated
|
||||
- [python v0.10.0] .
|
||||
### Releases
|
||||
- [PyPI v0.10.0] https://pypi.org/project/openrouter/0.10.0 - .
|
||||
- [PyPI v0.10.0] https://pypi.org/project/openrouter/0.10.0 - .
|
||||
|
||||
## 2026-06-25 21:56:51
|
||||
### Changes
|
||||
Based on:
|
||||
- OpenAPI Doc
|
||||
- Speakeasy CLI 1.680.0 (2.788.4) https://github.com/speakeasy-api/speakeasy
|
||||
### Generated
|
||||
- [python v0.10.1] .
|
||||
### Releases
|
||||
- [PyPI v0.10.1] https://pypi.org/project/openrouter/0.10.1 - .
|
||||
@@ -1,13 +0,0 @@
|
||||
# CompletionTokensDetails
|
||||
|
||||
Detailed completion token usage
|
||||
|
||||
|
||||
## Fields
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
| ---------------------------- | ---------------------------- | ---------------------------- | ---------------------------- |
|
||||
| `accepted_prediction_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Accepted prediction tokens |
|
||||
| `audio_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Tokens used for audio output |
|
||||
| `reasoning_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Tokens used for reasoning |
|
||||
| `rejected_prediction_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Rejected prediction tokens |
|
||||
@@ -1,11 +0,0 @@
|
||||
# Error
|
||||
|
||||
Error information
|
||||
|
||||
|
||||
## Fields
|
||||
|
||||
| Field | Type | Required | Description | Example |
|
||||
| ------------------- | ------------------- | ------------------- | ------------------- | ------------------- |
|
||||
| `code` | *int* | :heavy_check_mark: | Error code | 429 |
|
||||
| `message` | *str* | :heavy_check_mark: | Error message | Rate limit exceeded |
|
||||
@@ -22,6 +22,7 @@ Information about an AI model available on OpenRouter
|
||||
| `name` | *str* | :heavy_check_mark: | Display name of the model | GPT-4 |
|
||||
| `per_request_limits` | [Nullable[components.PerRequestLimits]](../components/perrequestlimits.md) | :heavy_check_mark: | Per-request token limits | {<br/>"completion_tokens": 1000,<br/>"prompt_tokens": 1000<br/>} |
|
||||
| `pricing` | [components.PublicPricing](../components/publicpricing.md) | :heavy_check_mark: | Pricing information for the model | {<br/>"completion": "0.00006",<br/>"image": "0",<br/>"prompt": "0.00003",<br/>"request": "0"<br/>} |
|
||||
| `reasoning` | [Optional[components.ModelReasoning]](../components/modelreasoning.md) | :heavy_minus_sign: | Reasoning effort configuration. Omitted for non-reasoning models and dynamic router models. | {<br/>"default_effort": "medium",<br/>"default_enabled": true,<br/>"mandatory": false,<br/>"supported_efforts": [<br/>"high",<br/>"medium",<br/>"low",<br/>"minimal"<br/>]<br/>} |
|
||||
| `supported_parameters` | List[[components.Parameter](../components/parameter.md)] | :heavy_check_mark: | List of supported parameters for this model | |
|
||||
| `supported_voices` | List[*str*] | :heavy_check_mark: | List of supported voice identifiers for TTS models. Null for non-TTS models. | <nil> |
|
||||
| `top_provider` | [components.TopProviderInfo](../components/topproviderinfo.md) | :heavy_check_mark: | Information about the top provider for this model | {<br/>"context_length": 8192,<br/>"is_moderated": true,<br/>"max_completion_tokens": 4096<br/>} |
|
||||
@@ -1,13 +0,0 @@
|
||||
# PromptTokensDetails
|
||||
|
||||
Detailed prompt token usage
|
||||
|
||||
|
||||
## Fields
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
|
||||
| `audio_tokens` | *Optional[int]* | :heavy_minus_sign: | Audio input tokens |
|
||||
| `cache_write_tokens` | *Optional[int]* | :heavy_minus_sign: | Tokens written to cache. Only returned for models with explicit caching and cache write pricing. |
|
||||
| `cached_tokens` | *Optional[int]* | :heavy_minus_sign: | Cached prompt tokens |
|
||||
| `video_tokens` | *Optional[int]* | :heavy_minus_sign: | Video input tokens |
|
||||
@@ -42,12 +42,14 @@
|
||||
| `GOOGLE` | Google |
|
||||
| `GOOGLE_AI_STUDIO` | Google AI Studio |
|
||||
| `GROQ` | Groq |
|
||||
| `HEY_GEN` | HeyGen |
|
||||
| `INCEPTION` | Inception |
|
||||
| `INCEPTRON` | Inceptron |
|
||||
| `INFERENCE_NET` | InferenceNet |
|
||||
| `IONSTREAM` | Ionstream |
|
||||
| `INFERMATIC` | Infermatic |
|
||||
| `IO_NET` | Io Net |
|
||||
| `INFERACT_V_LLM` | Inferact vLLM |
|
||||
| `INFLECTION` | Inflection |
|
||||
| `LIQUID` | Liquid |
|
||||
| `MARA` | Mara |
|
||||
@@ -74,6 +76,7 @@
|
||||
| `RECRAFT` | Recraft |
|
||||
| `REKA` | Reka |
|
||||
| `RELACE` | Relace |
|
||||
| `SAKANA_AI` | Sakana AI |
|
||||
| `SAMBA_NOVA` | SambaNova |
|
||||
| `SEED` | Seed |
|
||||
| `SILICON_FLOW` | SiliconFlow |
|
||||
@@ -82,6 +85,7 @@
|
||||
| `STEALTH` | Stealth |
|
||||
| `STREAM_LAKE` | StreamLake |
|
||||
| `SWITCHPOINT` | Switchpoint |
|
||||
| `TENSTORRENT` | Tenstorrent |
|
||||
| `TOGETHER` | Together |
|
||||
| `UPSTAGE` | Upstage |
|
||||
| `VENICE` | Venice |
|
||||
|
||||
@@ -3,23 +3,23 @@
|
||||
|
||||
## Fields
|
||||
|
||||
| Field | Type | Required | Description | Example |
|
||||
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | The app identifier should be your app's URL and is used as the primary identifier for rankings.<br/>This is used to track API usage per application.<br/> | |
|
||||
| `x_open_router_title` | *Optional[str]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.<br/> | |
|
||||
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.<br/> | |
|
||||
| `category` | [Optional[operations.GetModelsCategory]](../operations/getmodelscategory.md) | :heavy_minus_sign: | Filter models by use case category | programming |
|
||||
| `supported_parameters` | *Optional[str]* | :heavy_minus_sign: | Filter models by supported parameter (comma-separated) | temperature |
|
||||
| `output_modalities` | *Optional[str]* | :heavy_minus_sign: | Filter models by output modality. Accepts a comma-separated list of modalities (text, image, audio, embeddings) or "all" to include all models. Defaults to "text". | text |
|
||||
| `sort` | [Optional[operations.GetModelsSort]](../operations/getmodelssort.md) | :heavy_minus_sign: | Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date). When omitted, the existing default ordering is preserved. | newest |
|
||||
| `q` | *Optional[str]* | :heavy_minus_sign: | Free-text search by model name or slug. | gpt-4 |
|
||||
| `input_modalities` | *Optional[str]* | :heavy_minus_sign: | Filter models by input modality. Comma-separated list of: text, image, audio, file. | text,image |
|
||||
| `context` | *Optional[int]* | :heavy_minus_sign: | Minimum context length (tokens). Models with smaller context are excluded. | 128000 |
|
||||
| `min_price` | *OptionalNullable[float]* | :heavy_minus_sign: | Minimum prompt price in $/M tokens. | 0 |
|
||||
| `max_price` | *OptionalNullable[float]* | :heavy_minus_sign: | Maximum prompt price in $/M tokens. | 10 |
|
||||
| `arch` | *Optional[str]* | :heavy_minus_sign: | Filter models by architecture/model family (e.g. GPT, Claude, Gemini, Llama). | GPT |
|
||||
| `model_authors` | *Optional[str]* | :heavy_minus_sign: | Filter models by the organization that created the model. Comma-separated list of author slugs. | openai,anthropic |
|
||||
| `providers` | *Optional[str]* | :heavy_minus_sign: | Filter models by hosting provider. Comma-separated list of provider names. | OpenAI,Anthropic |
|
||||
| `distillable` | [Optional[operations.Distillable]](../operations/distillable.md) | :heavy_minus_sign: | Filter by distillation capability. "true" returns only distillable models, "false" excludes them. | true |
|
||||
| `zdr` | [Optional[operations.Zdr]](../operations/zdr.md) | :heavy_minus_sign: | When set to "true", return only models with zero data retention endpoints. | true |
|
||||
| `region` | [Optional[operations.Region]](../operations/region.md) | :heavy_minus_sign: | Filter to models with endpoints in the given data region. Currently only "eu" is supported. | eu |
|
||||
| Field | Type | Required | Description | Example |
|
||||
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | The app identifier should be your app's URL and is used as the primary identifier for rankings.<br/>This is used to track API usage per application.<br/> | |
|
||||
| `x_open_router_title` | *Optional[str]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.<br/> | |
|
||||
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.<br/> | |
|
||||
| `category` | [Optional[operations.GetModelsCategory]](../operations/getmodelscategory.md) | :heavy_minus_sign: | Filter models by use case category | programming |
|
||||
| `supported_parameters` | *Optional[str]* | :heavy_minus_sign: | Filter models by supported parameter (comma-separated) | temperature |
|
||||
| `output_modalities` | *Optional[str]* | :heavy_minus_sign: | Filter models by output modality. Accepts a comma-separated list of modalities (text, image, audio, embeddings) or "all" to include all models. Defaults to "text". | text |
|
||||
| `sort` | [Optional[operations.GetModelsSort]](../operations/getmodelssort.md) | :heavy_minus_sign: | Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date), intelligence-high-to-low (Artificial Analysis intelligence index), design-arena-elo-high-to-low (best Design Arena ELO across arenas). Models without a score for the chosen benchmark are placed last. When omitted, the existing default ordering is preserved. | newest |
|
||||
| `q` | *Optional[str]* | :heavy_minus_sign: | Free-text search by model name or slug. | gpt-4 |
|
||||
| `input_modalities` | *Optional[str]* | :heavy_minus_sign: | Filter models by input modality. Comma-separated list of: text, image, audio, file. | text,image |
|
||||
| `context` | *Optional[int]* | :heavy_minus_sign: | Minimum context length (tokens). Models with smaller context are excluded. | 128000 |
|
||||
| `min_price` | *OptionalNullable[float]* | :heavy_minus_sign: | Minimum prompt price in $/M tokens. | 0 |
|
||||
| `max_price` | *OptionalNullable[float]* | :heavy_minus_sign: | Maximum prompt price in $/M tokens. | 10 |
|
||||
| `arch` | *Optional[str]* | :heavy_minus_sign: | Filter models by architecture/model family (e.g. GPT, Claude, Gemini, Llama). | GPT |
|
||||
| `model_authors` | *Optional[str]* | :heavy_minus_sign: | Filter models by the organization that created the model. Comma-separated list of author slugs. | openai,anthropic |
|
||||
| `providers` | *Optional[str]* | :heavy_minus_sign: | Filter models by hosting provider. Comma-separated list of provider names. | OpenAI,Anthropic |
|
||||
| `distillable` | [Optional[operations.Distillable]](../operations/distillable.md) | :heavy_minus_sign: | Filter by distillation capability. "true" returns only distillable models, "false" excludes them. | true |
|
||||
| `zdr` | [Optional[operations.Zdr]](../operations/zdr.md) | :heavy_minus_sign: | When set to "true", return only models with zero data retention endpoints. | true |
|
||||
| `region` | [Optional[operations.Region]](../operations/region.md) | :heavy_minus_sign: | Filter to models with endpoints in the given data region. Currently only "eu" is supported. | eu |
|
||||
+21
-21
@@ -88,27 +88,27 @@ with OpenRouter(
|
||||
|
||||
### Parameters
|
||||
|
||||
| Parameter | Type | Required | Description | Example |
|
||||
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | The app identifier should be your app's URL and is used as the primary identifier for rankings.<br/>This is used to track API usage per application.<br/> | |
|
||||
| `x_open_router_title` | *Optional[str]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.<br/> | |
|
||||
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.<br/> | |
|
||||
| `category` | [Optional[operations.GetModelsCategory]](../../operations/getmodelscategory.md) | :heavy_minus_sign: | Filter models by use case category | programming |
|
||||
| `supported_parameters` | *Optional[str]* | :heavy_minus_sign: | Filter models by supported parameter (comma-separated) | temperature |
|
||||
| `output_modalities` | *Optional[str]* | :heavy_minus_sign: | Filter models by output modality. Accepts a comma-separated list of modalities (text, image, audio, embeddings) or "all" to include all models. Defaults to "text". | text |
|
||||
| `sort` | [Optional[operations.GetModelsSort]](../../operations/getmodelssort.md) | :heavy_minus_sign: | Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date). When omitted, the existing default ordering is preserved. | newest |
|
||||
| `q` | *Optional[str]* | :heavy_minus_sign: | Free-text search by model name or slug. | gpt-4 |
|
||||
| `input_modalities` | *Optional[str]* | :heavy_minus_sign: | Filter models by input modality. Comma-separated list of: text, image, audio, file. | text,image |
|
||||
| `context` | *Optional[int]* | :heavy_minus_sign: | Minimum context length (tokens). Models with smaller context are excluded. | 128000 |
|
||||
| `min_price` | *OptionalNullable[float]* | :heavy_minus_sign: | Minimum prompt price in $/M tokens. | 0 |
|
||||
| `max_price` | *OptionalNullable[float]* | :heavy_minus_sign: | Maximum prompt price in $/M tokens. | 10 |
|
||||
| `arch` | *Optional[str]* | :heavy_minus_sign: | Filter models by architecture/model family (e.g. GPT, Claude, Gemini, Llama). | GPT |
|
||||
| `model_authors` | *Optional[str]* | :heavy_minus_sign: | Filter models by the organization that created the model. Comma-separated list of author slugs. | openai,anthropic |
|
||||
| `providers` | *Optional[str]* | :heavy_minus_sign: | Filter models by hosting provider. Comma-separated list of provider names. | OpenAI,Anthropic |
|
||||
| `distillable` | [Optional[operations.Distillable]](../../operations/distillable.md) | :heavy_minus_sign: | Filter by distillation capability. "true" returns only distillable models, "false" excludes them. | true |
|
||||
| `zdr` | [Optional[operations.Zdr]](../../operations/zdr.md) | :heavy_minus_sign: | When set to "true", return only models with zero data retention endpoints. | true |
|
||||
| `region` | [Optional[operations.Region]](../../operations/region.md) | :heavy_minus_sign: | Filter to models with endpoints in the given data region. Currently only "eu" is supported. | eu |
|
||||
| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
|
||||
| Parameter | Type | Required | Description | Example |
|
||||
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | The app identifier should be your app's URL and is used as the primary identifier for rankings.<br/>This is used to track API usage per application.<br/> | |
|
||||
| `x_open_router_title` | *Optional[str]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.<br/> | |
|
||||
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.<br/> | |
|
||||
| `category` | [Optional[operations.GetModelsCategory]](../../operations/getmodelscategory.md) | :heavy_minus_sign: | Filter models by use case category | programming |
|
||||
| `supported_parameters` | *Optional[str]* | :heavy_minus_sign: | Filter models by supported parameter (comma-separated) | temperature |
|
||||
| `output_modalities` | *Optional[str]* | :heavy_minus_sign: | Filter models by output modality. Accepts a comma-separated list of modalities (text, image, audio, embeddings) or "all" to include all models. Defaults to "text". | text |
|
||||
| `sort` | [Optional[operations.GetModelsSort]](../../operations/getmodelssort.md) | :heavy_minus_sign: | Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date), intelligence-high-to-low (Artificial Analysis intelligence index), design-arena-elo-high-to-low (best Design Arena ELO across arenas). Models without a score for the chosen benchmark are placed last. When omitted, the existing default ordering is preserved. | newest |
|
||||
| `q` | *Optional[str]* | :heavy_minus_sign: | Free-text search by model name or slug. | gpt-4 |
|
||||
| `input_modalities` | *Optional[str]* | :heavy_minus_sign: | Filter models by input modality. Comma-separated list of: text, image, audio, file. | text,image |
|
||||
| `context` | *Optional[int]* | :heavy_minus_sign: | Minimum context length (tokens). Models with smaller context are excluded. | 128000 |
|
||||
| `min_price` | *OptionalNullable[float]* | :heavy_minus_sign: | Minimum prompt price in $/M tokens. | 0 |
|
||||
| `max_price` | *OptionalNullable[float]* | :heavy_minus_sign: | Maximum prompt price in $/M tokens. | 10 |
|
||||
| `arch` | *Optional[str]* | :heavy_minus_sign: | Filter models by architecture/model family (e.g. GPT, Claude, Gemini, Llama). | GPT |
|
||||
| `model_authors` | *Optional[str]* | :heavy_minus_sign: | Filter models by the organization that created the model. Comma-separated list of author slugs. | openai,anthropic |
|
||||
| `providers` | *Optional[str]* | :heavy_minus_sign: | Filter models by hosting provider. Comma-separated list of provider names. | OpenAI,Anthropic |
|
||||
| `distillable` | [Optional[operations.Distillable]](../../operations/distillable.md) | :heavy_minus_sign: | Filter by distillation capability. "true" returns only distillable models, "false" excludes them. | true |
|
||||
| `zdr` | [Optional[operations.Zdr]](../../operations/zdr.md) | :heavy_minus_sign: | When set to "true", return only models with zero data retention endpoints. | true |
|
||||
| `region` | [Optional[operations.Region]](../../operations/region.md) | :heavy_minus_sign: | Filter to models with endpoints in the given data region. Currently only "eu" is supported. | eu |
|
||||
| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
|
||||
|
||||
### Response
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ with OpenRouter(
|
||||
| `x_open_router_metadata` | [Optional[components.MetadataLevel]](../../components/metadatalevel.md) | :heavy_minus_sign: | Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility. | enabled |
|
||||
| `background` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | |
|
||||
| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../../components/anthropiccachecontroldirective.md) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | {<br/>"type": "ephemeral"<br/>} |
|
||||
| `debug` | [Optional[components.ChatDebugOptions]](../../components/chatdebugoptions.md) | :heavy_minus_sign: | Debug options for inspecting request transformations (streaming only) | {<br/>"echo_upstream_body": true<br/>} |
|
||||
| `frequency_penalty` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | |
|
||||
| `image_config` | Dict[str, [components.ImageConfig](../../components/imageconfig.md)] | :heavy_minus_sign: | Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details. | {<br/>"aspect_ratio": "16:9",<br/>"quality": "high"<br/>} |
|
||||
| `include` | List[[components.ResponseIncludesEnum](../../components/responseincludesenum.md)] | :heavy_minus_sign: | N/A | |
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "openrouter"
|
||||
version = "0.10.0"
|
||||
version = "0.10.1"
|
||||
description = "Official Python Client SDK for OpenRouter."
|
||||
authors = [{ name = "OpenRouter" },]
|
||||
readme = "README-PYPI.md"
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
import importlib.metadata
|
||||
|
||||
__title__: str = "openrouter"
|
||||
__version__: str = "0.10.0"
|
||||
__version__: str = "0.10.1"
|
||||
__openapi_doc_version__: str = "1.0.0"
|
||||
__gen_version__: str = "2.788.4"
|
||||
__user_agent__: str = "speakeasy-sdk/python 0.10.0 2.788.4 1.0.0 openrouter"
|
||||
__user_agent__: str = "speakeasy-sdk/python 0.10.1 2.788.4 1.0.0 openrouter"
|
||||
|
||||
try:
|
||||
if __package__ is not None:
|
||||
|
||||
@@ -0,0 +1,303 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from .basesdk import BaseSDK
|
||||
from openrouter import components, errors, operations, utils
|
||||
from openrouter._hooks import HookContext
|
||||
from openrouter.types import OptionalNullable, UNSET
|
||||
from openrouter.utils import get_security_from_env
|
||||
from openrouter.utils.unmarshal_json_response import unmarshal_json_response
|
||||
from typing import Any, Mapping, Optional
|
||||
|
||||
|
||||
class Benchmarks(BaseSDK):
|
||||
r"""Benchmarks endpoints"""
|
||||
|
||||
def get_benchmarks(
|
||||
self,
|
||||
*,
|
||||
http_referer: Optional[str] = None,
|
||||
x_open_router_title: Optional[str] = None,
|
||||
x_open_router_categories: Optional[str] = None,
|
||||
source: Optional[operations.Source] = None,
|
||||
task_type: Optional[operations.TaskType] = None,
|
||||
arena: Optional[operations.Arena] = None,
|
||||
category: Optional[str] = None,
|
||||
max_results: Optional[int] = None,
|
||||
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
||||
server_url: Optional[str] = None,
|
||||
timeout_ms: Optional[int] = None,
|
||||
http_headers: Optional[Mapping[str, str]] = None,
|
||||
) -> components.UnifiedBenchmarksResponse:
|
||||
r"""List Benchmarks
|
||||
|
||||
Unified benchmark endpoint that aggregates scores from multiple benchmark sources (Artificial Analysis, Design Arena). Filter by source to reproduce the exact shapes from the legacy per-source endpoints, or use task_type to find models suited for specific workloads. Authenticate with any valid OpenRouter API key. Rate-limited to 30 requests/minute per key and 500 requests/day per account.
|
||||
|
||||
:param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
:param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
:param source: Benchmark source to query. Determines the shape of the returned items. When omitted, returns results from all sources.
|
||||
:param task_type: Filter results by task type. For Artificial Analysis, maps to the corresponding index. For Design Arena, maps to the matching category.
|
||||
:param arena: Design Arena only: arena to query. Defaults to `models` when source is `design-arena`.
|
||||
:param category: Design Arena only: category within the arena (e.g. `codecategories`, `uicomponent`, `gamedev`, `3d`, `dataviz`, `image`, `video`, `svg`). When omitted, returns all categories.
|
||||
:param max_results: Maximum number of items to return. When omitted, all matching results are returned.
|
||||
: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
|
||||
:param http_headers: Additional headers to set or replace on requests.
|
||||
"""
|
||||
base_url = None
|
||||
url_variables = None
|
||||
if timeout_ms is None:
|
||||
timeout_ms = self.sdk_configuration.timeout_ms
|
||||
|
||||
if server_url is not None:
|
||||
base_url = server_url
|
||||
else:
|
||||
base_url = self._get_url(base_url, url_variables)
|
||||
|
||||
request = operations.GetBenchmarksRequest(
|
||||
http_referer=http_referer,
|
||||
x_open_router_title=x_open_router_title,
|
||||
x_open_router_categories=x_open_router_categories,
|
||||
source=source,
|
||||
task_type=task_type,
|
||||
arena=arena,
|
||||
category=category,
|
||||
max_results=max_results,
|
||||
)
|
||||
|
||||
req = self._build_request(
|
||||
method="GET",
|
||||
path="/benchmarks",
|
||||
base_url=base_url,
|
||||
url_variables=url_variables,
|
||||
request=request,
|
||||
request_body_required=False,
|
||||
request_has_path_params=False,
|
||||
request_has_query_params=True,
|
||||
user_agent_header="user-agent",
|
||||
accept_header_value="application/json",
|
||||
http_headers=http_headers,
|
||||
_globals=operations.GetBenchmarksGlobals(
|
||||
http_referer=self.sdk_configuration.globals.http_referer,
|
||||
x_open_router_title=self.sdk_configuration.globals.x_open_router_title,
|
||||
x_open_router_categories=self.sdk_configuration.globals.x_open_router_categories,
|
||||
),
|
||||
security=self.sdk_configuration.security,
|
||||
allow_empty_value=None,
|
||||
timeout_ms=timeout_ms,
|
||||
)
|
||||
|
||||
if retries == UNSET:
|
||||
if self.sdk_configuration.retry_config is not UNSET:
|
||||
retries = self.sdk_configuration.retry_config
|
||||
else:
|
||||
retries = utils.RetryConfig(
|
||||
"backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True
|
||||
)
|
||||
|
||||
retry_config = None
|
||||
if isinstance(retries, utils.RetryConfig):
|
||||
retry_config = (retries, ["5XX"])
|
||||
|
||||
http_res = self.do_request(
|
||||
hook_ctx=HookContext(
|
||||
config=self.sdk_configuration,
|
||||
base_url=base_url or "",
|
||||
operation_id="getBenchmarks",
|
||||
oauth2_scopes=None,
|
||||
security_source=get_security_from_env(
|
||||
self.sdk_configuration.security, components.Security
|
||||
),
|
||||
),
|
||||
request=req,
|
||||
error_status_codes=["400", "401", "429", "4XX", "500", "5XX"],
|
||||
retry_config=retry_config,
|
||||
)
|
||||
|
||||
response_data: Any = None
|
||||
if utils.match_response(http_res, "200", "application/json"):
|
||||
return unmarshal_json_response(
|
||||
components.UnifiedBenchmarksResponse, http_res
|
||||
)
|
||||
if utils.match_response(http_res, "400", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.BadRequestResponseErrorData, http_res
|
||||
)
|
||||
raise errors.BadRequestResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "401", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.UnauthorizedResponseErrorData, http_res
|
||||
)
|
||||
raise errors.UnauthorizedResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "429", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.TooManyRequestsResponseErrorData, http_res
|
||||
)
|
||||
raise errors.TooManyRequestsResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "500", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.InternalServerResponseErrorData, http_res
|
||||
)
|
||||
raise errors.InternalServerResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "4XX", "*"):
|
||||
http_res_text = utils.stream_to_text(http_res)
|
||||
raise errors.OpenRouterDefaultError(
|
||||
"API error occurred", http_res, http_res_text
|
||||
)
|
||||
if utils.match_response(http_res, "5XX", "*"):
|
||||
http_res_text = utils.stream_to_text(http_res)
|
||||
raise errors.OpenRouterDefaultError(
|
||||
"API error occurred", http_res, http_res_text
|
||||
)
|
||||
|
||||
raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
|
||||
|
||||
async def get_benchmarks_async(
|
||||
self,
|
||||
*,
|
||||
http_referer: Optional[str] = None,
|
||||
x_open_router_title: Optional[str] = None,
|
||||
x_open_router_categories: Optional[str] = None,
|
||||
source: Optional[operations.Source] = None,
|
||||
task_type: Optional[operations.TaskType] = None,
|
||||
arena: Optional[operations.Arena] = None,
|
||||
category: Optional[str] = None,
|
||||
max_results: Optional[int] = None,
|
||||
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
||||
server_url: Optional[str] = None,
|
||||
timeout_ms: Optional[int] = None,
|
||||
http_headers: Optional[Mapping[str, str]] = None,
|
||||
) -> components.UnifiedBenchmarksResponse:
|
||||
r"""List Benchmarks
|
||||
|
||||
Unified benchmark endpoint that aggregates scores from multiple benchmark sources (Artificial Analysis, Design Arena). Filter by source to reproduce the exact shapes from the legacy per-source endpoints, or use task_type to find models suited for specific workloads. Authenticate with any valid OpenRouter API key. Rate-limited to 30 requests/minute per key and 500 requests/day per account.
|
||||
|
||||
:param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
:param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
:param source: Benchmark source to query. Determines the shape of the returned items. When omitted, returns results from all sources.
|
||||
:param task_type: Filter results by task type. For Artificial Analysis, maps to the corresponding index. For Design Arena, maps to the matching category.
|
||||
:param arena: Design Arena only: arena to query. Defaults to `models` when source is `design-arena`.
|
||||
:param category: Design Arena only: category within the arena (e.g. `codecategories`, `uicomponent`, `gamedev`, `3d`, `dataviz`, `image`, `video`, `svg`). When omitted, returns all categories.
|
||||
:param max_results: Maximum number of items to return. When omitted, all matching results are returned.
|
||||
: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
|
||||
:param http_headers: Additional headers to set or replace on requests.
|
||||
"""
|
||||
base_url = None
|
||||
url_variables = None
|
||||
if timeout_ms is None:
|
||||
timeout_ms = self.sdk_configuration.timeout_ms
|
||||
|
||||
if server_url is not None:
|
||||
base_url = server_url
|
||||
else:
|
||||
base_url = self._get_url(base_url, url_variables)
|
||||
|
||||
request = operations.GetBenchmarksRequest(
|
||||
http_referer=http_referer,
|
||||
x_open_router_title=x_open_router_title,
|
||||
x_open_router_categories=x_open_router_categories,
|
||||
source=source,
|
||||
task_type=task_type,
|
||||
arena=arena,
|
||||
category=category,
|
||||
max_results=max_results,
|
||||
)
|
||||
|
||||
req = self._build_request_async(
|
||||
method="GET",
|
||||
path="/benchmarks",
|
||||
base_url=base_url,
|
||||
url_variables=url_variables,
|
||||
request=request,
|
||||
request_body_required=False,
|
||||
request_has_path_params=False,
|
||||
request_has_query_params=True,
|
||||
user_agent_header="user-agent",
|
||||
accept_header_value="application/json",
|
||||
http_headers=http_headers,
|
||||
_globals=operations.GetBenchmarksGlobals(
|
||||
http_referer=self.sdk_configuration.globals.http_referer,
|
||||
x_open_router_title=self.sdk_configuration.globals.x_open_router_title,
|
||||
x_open_router_categories=self.sdk_configuration.globals.x_open_router_categories,
|
||||
),
|
||||
security=self.sdk_configuration.security,
|
||||
allow_empty_value=None,
|
||||
timeout_ms=timeout_ms,
|
||||
)
|
||||
|
||||
if retries == UNSET:
|
||||
if self.sdk_configuration.retry_config is not UNSET:
|
||||
retries = self.sdk_configuration.retry_config
|
||||
else:
|
||||
retries = utils.RetryConfig(
|
||||
"backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True
|
||||
)
|
||||
|
||||
retry_config = None
|
||||
if isinstance(retries, utils.RetryConfig):
|
||||
retry_config = (retries, ["5XX"])
|
||||
|
||||
http_res = await self.do_request_async(
|
||||
hook_ctx=HookContext(
|
||||
config=self.sdk_configuration,
|
||||
base_url=base_url or "",
|
||||
operation_id="getBenchmarks",
|
||||
oauth2_scopes=None,
|
||||
security_source=get_security_from_env(
|
||||
self.sdk_configuration.security, components.Security
|
||||
),
|
||||
),
|
||||
request=req,
|
||||
error_status_codes=["400", "401", "429", "4XX", "500", "5XX"],
|
||||
retry_config=retry_config,
|
||||
)
|
||||
|
||||
response_data: Any = None
|
||||
if utils.match_response(http_res, "200", "application/json"):
|
||||
return unmarshal_json_response(
|
||||
components.UnifiedBenchmarksResponse, http_res
|
||||
)
|
||||
if utils.match_response(http_res, "400", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.BadRequestResponseErrorData, http_res
|
||||
)
|
||||
raise errors.BadRequestResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "401", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.UnauthorizedResponseErrorData, http_res
|
||||
)
|
||||
raise errors.UnauthorizedResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "429", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.TooManyRequestsResponseErrorData, http_res
|
||||
)
|
||||
raise errors.TooManyRequestsResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "500", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.InternalServerResponseErrorData, http_res
|
||||
)
|
||||
raise errors.InternalServerResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "4XX", "*"):
|
||||
http_res_text = await utils.stream_to_text_async(http_res)
|
||||
raise errors.OpenRouterDefaultError(
|
||||
"API error occurred", http_res, http_res_text
|
||||
)
|
||||
if utils.match_response(http_res, "5XX", "*"):
|
||||
http_res_text = await utils.stream_to_text_async(http_res)
|
||||
raise errors.OpenRouterDefaultError(
|
||||
"API error occurred", http_res, http_res_text
|
||||
)
|
||||
|
||||
raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
|
||||
@@ -0,0 +1,315 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from .basesdk import BaseSDK
|
||||
from openrouter import components, errors, operations, utils
|
||||
from openrouter._hooks import HookContext
|
||||
from openrouter.types import OptionalNullable, UNSET
|
||||
from openrouter.utils import get_security_from_env
|
||||
from openrouter.utils.unmarshal_json_response import unmarshal_json_response
|
||||
from typing import Any, Mapping, Optional
|
||||
|
||||
|
||||
class Classifications(BaseSDK):
|
||||
r"""Task classification market-share endpoints"""
|
||||
|
||||
def get_task_classifications(
|
||||
self,
|
||||
*,
|
||||
http_referer: Optional[str] = None,
|
||||
x_open_router_title: Optional[str] = None,
|
||||
x_open_router_categories: Optional[str] = None,
|
||||
window: Optional[operations.Window] = "7d",
|
||||
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
||||
server_url: Optional[str] = None,
|
||||
timeout_ms: Optional[int] = None,
|
||||
http_headers: Optional[Mapping[str, str]] = None,
|
||||
) -> components.TaskClassificationResponse:
|
||||
r"""Task classification market share
|
||||
|
||||
Returns the market-share breakdown of OpenRouter traffic by task classification
|
||||
(e.g. code generation, web search, summarization) over a trailing time window.
|
||||
|
||||
Each classification reports its share of classified sampled requests (`usage_share`)
|
||||
and classified sampled token volume (`token_share`) as fractions between 0 and 1.
|
||||
The unclassified `other` bucket is excluded. Absolute volumes are not exposed
|
||||
because the underlying data is sampled.
|
||||
|
||||
Each classification also includes a `models` array listing the top models by
|
||||
request volume within that classification, with their within-tag usage and token shares.
|
||||
|
||||
Classifications are grouped into macro-categories (Code, Data, Agent, General)
|
||||
with aggregate shares provided for each.
|
||||
|
||||
Authenticate with any valid OpenRouter API key (same key used for inference).
|
||||
Rate-limited to 30 requests/minute per key and 500 requests/day per account.
|
||||
|
||||
When republishing or quoting this data, cite as:
|
||||
\"Source: OpenRouter (openrouter.ai/rankings), as of {as_of}.\"
|
||||
|
||||
:param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
:param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
:param window: Trailing time window for the classification data. Currently only `7d` (trailing 7 days) is supported.
|
||||
: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
|
||||
:param http_headers: Additional headers to set or replace on requests.
|
||||
"""
|
||||
base_url = None
|
||||
url_variables = None
|
||||
if timeout_ms is None:
|
||||
timeout_ms = self.sdk_configuration.timeout_ms
|
||||
|
||||
if server_url is not None:
|
||||
base_url = server_url
|
||||
else:
|
||||
base_url = self._get_url(base_url, url_variables)
|
||||
|
||||
request = operations.GetTaskClassificationsRequest(
|
||||
http_referer=http_referer,
|
||||
x_open_router_title=x_open_router_title,
|
||||
x_open_router_categories=x_open_router_categories,
|
||||
window=window,
|
||||
)
|
||||
|
||||
req = self._build_request(
|
||||
method="GET",
|
||||
path="/classifications/task",
|
||||
base_url=base_url,
|
||||
url_variables=url_variables,
|
||||
request=request,
|
||||
request_body_required=False,
|
||||
request_has_path_params=False,
|
||||
request_has_query_params=True,
|
||||
user_agent_header="user-agent",
|
||||
accept_header_value="application/json",
|
||||
http_headers=http_headers,
|
||||
_globals=operations.GetTaskClassificationsGlobals(
|
||||
http_referer=self.sdk_configuration.globals.http_referer,
|
||||
x_open_router_title=self.sdk_configuration.globals.x_open_router_title,
|
||||
x_open_router_categories=self.sdk_configuration.globals.x_open_router_categories,
|
||||
),
|
||||
security=self.sdk_configuration.security,
|
||||
allow_empty_value=None,
|
||||
timeout_ms=timeout_ms,
|
||||
)
|
||||
|
||||
if retries == UNSET:
|
||||
if self.sdk_configuration.retry_config is not UNSET:
|
||||
retries = self.sdk_configuration.retry_config
|
||||
else:
|
||||
retries = utils.RetryConfig(
|
||||
"backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True
|
||||
)
|
||||
|
||||
retry_config = None
|
||||
if isinstance(retries, utils.RetryConfig):
|
||||
retry_config = (retries, ["5XX"])
|
||||
|
||||
http_res = self.do_request(
|
||||
hook_ctx=HookContext(
|
||||
config=self.sdk_configuration,
|
||||
base_url=base_url or "",
|
||||
operation_id="getTaskClassifications",
|
||||
oauth2_scopes=None,
|
||||
security_source=get_security_from_env(
|
||||
self.sdk_configuration.security, components.Security
|
||||
),
|
||||
),
|
||||
request=req,
|
||||
error_status_codes=["400", "401", "429", "4XX", "500", "5XX"],
|
||||
retry_config=retry_config,
|
||||
)
|
||||
|
||||
response_data: Any = None
|
||||
if utils.match_response(http_res, "200", "application/json"):
|
||||
return unmarshal_json_response(
|
||||
components.TaskClassificationResponse, http_res
|
||||
)
|
||||
if utils.match_response(http_res, "400", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.BadRequestResponseErrorData, http_res
|
||||
)
|
||||
raise errors.BadRequestResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "401", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.UnauthorizedResponseErrorData, http_res
|
||||
)
|
||||
raise errors.UnauthorizedResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "429", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.TooManyRequestsResponseErrorData, http_res
|
||||
)
|
||||
raise errors.TooManyRequestsResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "500", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.InternalServerResponseErrorData, http_res
|
||||
)
|
||||
raise errors.InternalServerResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "4XX", "*"):
|
||||
http_res_text = utils.stream_to_text(http_res)
|
||||
raise errors.OpenRouterDefaultError(
|
||||
"API error occurred", http_res, http_res_text
|
||||
)
|
||||
if utils.match_response(http_res, "5XX", "*"):
|
||||
http_res_text = utils.stream_to_text(http_res)
|
||||
raise errors.OpenRouterDefaultError(
|
||||
"API error occurred", http_res, http_res_text
|
||||
)
|
||||
|
||||
raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
|
||||
|
||||
async def get_task_classifications_async(
|
||||
self,
|
||||
*,
|
||||
http_referer: Optional[str] = None,
|
||||
x_open_router_title: Optional[str] = None,
|
||||
x_open_router_categories: Optional[str] = None,
|
||||
window: Optional[operations.Window] = "7d",
|
||||
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
||||
server_url: Optional[str] = None,
|
||||
timeout_ms: Optional[int] = None,
|
||||
http_headers: Optional[Mapping[str, str]] = None,
|
||||
) -> components.TaskClassificationResponse:
|
||||
r"""Task classification market share
|
||||
|
||||
Returns the market-share breakdown of OpenRouter traffic by task classification
|
||||
(e.g. code generation, web search, summarization) over a trailing time window.
|
||||
|
||||
Each classification reports its share of classified sampled requests (`usage_share`)
|
||||
and classified sampled token volume (`token_share`) as fractions between 0 and 1.
|
||||
The unclassified `other` bucket is excluded. Absolute volumes are not exposed
|
||||
because the underlying data is sampled.
|
||||
|
||||
Each classification also includes a `models` array listing the top models by
|
||||
request volume within that classification, with their within-tag usage and token shares.
|
||||
|
||||
Classifications are grouped into macro-categories (Code, Data, Agent, General)
|
||||
with aggregate shares provided for each.
|
||||
|
||||
Authenticate with any valid OpenRouter API key (same key used for inference).
|
||||
Rate-limited to 30 requests/minute per key and 500 requests/day per account.
|
||||
|
||||
When republishing or quoting this data, cite as:
|
||||
\"Source: OpenRouter (openrouter.ai/rankings), as of {as_of}.\"
|
||||
|
||||
:param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
:param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
:param window: Trailing time window for the classification data. Currently only `7d` (trailing 7 days) is supported.
|
||||
: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
|
||||
:param http_headers: Additional headers to set or replace on requests.
|
||||
"""
|
||||
base_url = None
|
||||
url_variables = None
|
||||
if timeout_ms is None:
|
||||
timeout_ms = self.sdk_configuration.timeout_ms
|
||||
|
||||
if server_url is not None:
|
||||
base_url = server_url
|
||||
else:
|
||||
base_url = self._get_url(base_url, url_variables)
|
||||
|
||||
request = operations.GetTaskClassificationsRequest(
|
||||
http_referer=http_referer,
|
||||
x_open_router_title=x_open_router_title,
|
||||
x_open_router_categories=x_open_router_categories,
|
||||
window=window,
|
||||
)
|
||||
|
||||
req = self._build_request_async(
|
||||
method="GET",
|
||||
path="/classifications/task",
|
||||
base_url=base_url,
|
||||
url_variables=url_variables,
|
||||
request=request,
|
||||
request_body_required=False,
|
||||
request_has_path_params=False,
|
||||
request_has_query_params=True,
|
||||
user_agent_header="user-agent",
|
||||
accept_header_value="application/json",
|
||||
http_headers=http_headers,
|
||||
_globals=operations.GetTaskClassificationsGlobals(
|
||||
http_referer=self.sdk_configuration.globals.http_referer,
|
||||
x_open_router_title=self.sdk_configuration.globals.x_open_router_title,
|
||||
x_open_router_categories=self.sdk_configuration.globals.x_open_router_categories,
|
||||
),
|
||||
security=self.sdk_configuration.security,
|
||||
allow_empty_value=None,
|
||||
timeout_ms=timeout_ms,
|
||||
)
|
||||
|
||||
if retries == UNSET:
|
||||
if self.sdk_configuration.retry_config is not UNSET:
|
||||
retries = self.sdk_configuration.retry_config
|
||||
else:
|
||||
retries = utils.RetryConfig(
|
||||
"backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True
|
||||
)
|
||||
|
||||
retry_config = None
|
||||
if isinstance(retries, utils.RetryConfig):
|
||||
retry_config = (retries, ["5XX"])
|
||||
|
||||
http_res = await self.do_request_async(
|
||||
hook_ctx=HookContext(
|
||||
config=self.sdk_configuration,
|
||||
base_url=base_url or "",
|
||||
operation_id="getTaskClassifications",
|
||||
oauth2_scopes=None,
|
||||
security_source=get_security_from_env(
|
||||
self.sdk_configuration.security, components.Security
|
||||
),
|
||||
),
|
||||
request=req,
|
||||
error_status_codes=["400", "401", "429", "4XX", "500", "5XX"],
|
||||
retry_config=retry_config,
|
||||
)
|
||||
|
||||
response_data: Any = None
|
||||
if utils.match_response(http_res, "200", "application/json"):
|
||||
return unmarshal_json_response(
|
||||
components.TaskClassificationResponse, http_res
|
||||
)
|
||||
if utils.match_response(http_res, "400", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.BadRequestResponseErrorData, http_res
|
||||
)
|
||||
raise errors.BadRequestResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "401", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.UnauthorizedResponseErrorData, http_res
|
||||
)
|
||||
raise errors.UnauthorizedResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "429", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.TooManyRequestsResponseErrorData, http_res
|
||||
)
|
||||
raise errors.TooManyRequestsResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "500", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.InternalServerResponseErrorData, http_res
|
||||
)
|
||||
raise errors.InternalServerResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "4XX", "*"):
|
||||
http_res_text = await utils.stream_to_text_async(http_res)
|
||||
raise errors.OpenRouterDefaultError(
|
||||
"API error occurred", http_res, http_res_text
|
||||
)
|
||||
if utils.match_response(http_res, "5XX", "*"):
|
||||
http_res_text = await utils.stream_to_text_async(http_res)
|
||||
raise errors.OpenRouterDefaultError(
|
||||
"API error occurred", http_res, http_res_text
|
||||
)
|
||||
|
||||
raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -10,6 +10,7 @@ from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
AdvisorReasoningEffort = Union[
|
||||
Literal[
|
||||
"max",
|
||||
"xhigh",
|
||||
"high",
|
||||
"medium",
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .anthropiciterationcachecreation import (
|
||||
AnthropicIterationCacheCreation,
|
||||
AnthropicIterationCacheCreationTypedDict,
|
||||
)
|
||||
from openrouter.types import (
|
||||
BaseModel,
|
||||
Nullable,
|
||||
OptionalNullable,
|
||||
UNSET,
|
||||
UNSET_SENTINEL,
|
||||
)
|
||||
from pydantic import model_serializer
|
||||
from typing import Literal, Optional
|
||||
from typing_extensions import NotRequired, TypedDict
|
||||
|
||||
|
||||
AnthropicAdvisorMessageUsageIterationType = Literal["advisor_message",]
|
||||
|
||||
|
||||
class AnthropicAdvisorMessageUsageIterationTypedDict(TypedDict):
|
||||
model: str
|
||||
type: AnthropicAdvisorMessageUsageIterationType
|
||||
cache_creation: NotRequired[Nullable[AnthropicIterationCacheCreationTypedDict]]
|
||||
cache_creation_input_tokens: NotRequired[int]
|
||||
cache_read_input_tokens: NotRequired[int]
|
||||
input_tokens: NotRequired[int]
|
||||
output_tokens: NotRequired[int]
|
||||
|
||||
|
||||
class AnthropicAdvisorMessageUsageIteration(BaseModel):
|
||||
model: str
|
||||
|
||||
type: AnthropicAdvisorMessageUsageIterationType
|
||||
|
||||
cache_creation: OptionalNullable[AnthropicIterationCacheCreation] = UNSET
|
||||
|
||||
cache_creation_input_tokens: Optional[int] = None
|
||||
|
||||
cache_read_input_tokens: Optional[int] = None
|
||||
|
||||
input_tokens: Optional[int] = None
|
||||
|
||||
output_tokens: Optional[int] = None
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = [
|
||||
"cache_creation",
|
||||
"cache_creation_input_tokens",
|
||||
"cache_read_input_tokens",
|
||||
"input_tokens",
|
||||
"output_tokens",
|
||||
]
|
||||
nullable_fields = ["cache_creation"]
|
||||
null_default_fields = []
|
||||
|
||||
serialized = handler(self)
|
||||
|
||||
m = {}
|
||||
|
||||
for n, f in type(self).model_fields.items():
|
||||
k = f.alias or n
|
||||
val = serialized.get(k)
|
||||
serialized.pop(k, None)
|
||||
|
||||
optional_nullable = k in optional_fields and k in nullable_fields
|
||||
is_set = (
|
||||
self.__pydantic_fields_set__.intersection({n})
|
||||
or k in null_default_fields
|
||||
) # pylint: disable=no-member
|
||||
|
||||
if val is not None and val != UNSET_SENTINEL:
|
||||
m[k] = val
|
||||
elif val != UNSET_SENTINEL and (
|
||||
not k in optional_fields or (optional_nullable and is_set)
|
||||
):
|
||||
m[k] = val
|
||||
|
||||
return m
|
||||
@@ -0,0 +1,79 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .anthropiciterationcachecreation import (
|
||||
AnthropicIterationCacheCreation,
|
||||
AnthropicIterationCacheCreationTypedDict,
|
||||
)
|
||||
from openrouter.types import (
|
||||
BaseModel,
|
||||
Nullable,
|
||||
OptionalNullable,
|
||||
UNSET,
|
||||
UNSET_SENTINEL,
|
||||
)
|
||||
from pydantic import model_serializer
|
||||
from typing import Literal, Optional
|
||||
from typing_extensions import NotRequired, TypedDict
|
||||
|
||||
|
||||
AnthropicCompactionUsageIterationType = Literal["compaction",]
|
||||
|
||||
|
||||
class AnthropicCompactionUsageIterationTypedDict(TypedDict):
|
||||
type: AnthropicCompactionUsageIterationType
|
||||
cache_creation: NotRequired[Nullable[AnthropicIterationCacheCreationTypedDict]]
|
||||
cache_creation_input_tokens: NotRequired[int]
|
||||
cache_read_input_tokens: NotRequired[int]
|
||||
input_tokens: NotRequired[int]
|
||||
output_tokens: NotRequired[int]
|
||||
|
||||
|
||||
class AnthropicCompactionUsageIteration(BaseModel):
|
||||
type: AnthropicCompactionUsageIterationType
|
||||
|
||||
cache_creation: OptionalNullable[AnthropicIterationCacheCreation] = UNSET
|
||||
|
||||
cache_creation_input_tokens: Optional[int] = None
|
||||
|
||||
cache_read_input_tokens: Optional[int] = None
|
||||
|
||||
input_tokens: Optional[int] = None
|
||||
|
||||
output_tokens: Optional[int] = None
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = [
|
||||
"cache_creation",
|
||||
"cache_creation_input_tokens",
|
||||
"cache_read_input_tokens",
|
||||
"input_tokens",
|
||||
"output_tokens",
|
||||
]
|
||||
nullable_fields = ["cache_creation"]
|
||||
null_default_fields = []
|
||||
|
||||
serialized = handler(self)
|
||||
|
||||
m = {}
|
||||
|
||||
for n, f in type(self).model_fields.items():
|
||||
k = f.alias or n
|
||||
val = serialized.get(k)
|
||||
serialized.pop(k, None)
|
||||
|
||||
optional_nullable = k in optional_fields and k in nullable_fields
|
||||
is_set = (
|
||||
self.__pydantic_fields_set__.intersection({n})
|
||||
or k in null_default_fields
|
||||
) # pylint: disable=no-member
|
||||
|
||||
if val is not None and val != UNSET_SENTINEL:
|
||||
m[k] = val
|
||||
elif val != UNSET_SENTINEL and (
|
||||
not k in optional_fields or (optional_nullable and is_set)
|
||||
):
|
||||
m[k] = val
|
||||
|
||||
return m
|
||||
@@ -0,0 +1,17 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.types import BaseModel
|
||||
from typing import Optional
|
||||
from typing_extensions import NotRequired, TypedDict
|
||||
|
||||
|
||||
class AnthropicIterationCacheCreationTypedDict(TypedDict):
|
||||
ephemeral_1h_input_tokens: NotRequired[int]
|
||||
ephemeral_5m_input_tokens: NotRequired[int]
|
||||
|
||||
|
||||
class AnthropicIterationCacheCreation(BaseModel):
|
||||
ephemeral_1h_input_tokens: Optional[int] = None
|
||||
|
||||
ephemeral_5m_input_tokens: Optional[int] = None
|
||||
@@ -0,0 +1,83 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .anthropiciterationcachecreation import (
|
||||
AnthropicIterationCacheCreation,
|
||||
AnthropicIterationCacheCreationTypedDict,
|
||||
)
|
||||
from openrouter.types import (
|
||||
BaseModel,
|
||||
Nullable,
|
||||
OptionalNullable,
|
||||
UNSET,
|
||||
UNSET_SENTINEL,
|
||||
)
|
||||
from pydantic import model_serializer
|
||||
from typing import Literal, Optional
|
||||
from typing_extensions import NotRequired, TypedDict
|
||||
|
||||
|
||||
AnthropicMessageUsageIterationType = Literal["message",]
|
||||
|
||||
|
||||
class AnthropicMessageUsageIterationTypedDict(TypedDict):
|
||||
type: AnthropicMessageUsageIterationType
|
||||
cache_creation: NotRequired[Nullable[AnthropicIterationCacheCreationTypedDict]]
|
||||
cache_creation_input_tokens: NotRequired[int]
|
||||
cache_read_input_tokens: NotRequired[int]
|
||||
input_tokens: NotRequired[int]
|
||||
output_tokens: NotRequired[int]
|
||||
model: NotRequired[str]
|
||||
|
||||
|
||||
class AnthropicMessageUsageIteration(BaseModel):
|
||||
type: AnthropicMessageUsageIterationType
|
||||
|
||||
cache_creation: OptionalNullable[AnthropicIterationCacheCreation] = UNSET
|
||||
|
||||
cache_creation_input_tokens: Optional[int] = None
|
||||
|
||||
cache_read_input_tokens: Optional[int] = None
|
||||
|
||||
input_tokens: Optional[int] = None
|
||||
|
||||
output_tokens: Optional[int] = None
|
||||
|
||||
model: Optional[str] = None
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = [
|
||||
"cache_creation",
|
||||
"cache_creation_input_tokens",
|
||||
"cache_read_input_tokens",
|
||||
"input_tokens",
|
||||
"output_tokens",
|
||||
"model",
|
||||
]
|
||||
nullable_fields = ["cache_creation"]
|
||||
null_default_fields = []
|
||||
|
||||
serialized = handler(self)
|
||||
|
||||
m = {}
|
||||
|
||||
for n, f in type(self).model_fields.items():
|
||||
k = f.alias or n
|
||||
val = serialized.get(k)
|
||||
serialized.pop(k, None)
|
||||
|
||||
optional_nullable = k in optional_fields and k in nullable_fields
|
||||
is_set = (
|
||||
self.__pydantic_fields_set__.intersection({n})
|
||||
or k in null_default_fields
|
||||
) # pylint: disable=no-member
|
||||
|
||||
if val is not None and val != UNSET_SENTINEL:
|
||||
m[k] = val
|
||||
elif val != UNSET_SENTINEL and (
|
||||
not k in optional_fields or (optional_nullable and is_set)
|
||||
):
|
||||
m[k] = val
|
||||
|
||||
return m
|
||||
@@ -0,0 +1,14 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.types import UnrecognizedStr
|
||||
from typing import Literal, Union
|
||||
|
||||
|
||||
AnthropicSpeed = Union[
|
||||
Literal[
|
||||
"fast",
|
||||
"standard",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
@@ -0,0 +1,76 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .anthropiciterationcachecreation import (
|
||||
AnthropicIterationCacheCreation,
|
||||
AnthropicIterationCacheCreationTypedDict,
|
||||
)
|
||||
from openrouter.types import (
|
||||
BaseModel,
|
||||
Nullable,
|
||||
OptionalNullable,
|
||||
UNSET,
|
||||
UNSET_SENTINEL,
|
||||
)
|
||||
from pydantic import model_serializer
|
||||
from typing import Optional
|
||||
from typing_extensions import NotRequired, TypedDict
|
||||
|
||||
|
||||
class AnthropicUnknownUsageIterationTypedDict(TypedDict):
|
||||
type: str
|
||||
cache_creation: NotRequired[Nullable[AnthropicIterationCacheCreationTypedDict]]
|
||||
cache_creation_input_tokens: NotRequired[int]
|
||||
cache_read_input_tokens: NotRequired[int]
|
||||
input_tokens: NotRequired[int]
|
||||
output_tokens: NotRequired[int]
|
||||
|
||||
|
||||
class AnthropicUnknownUsageIteration(BaseModel):
|
||||
type: str
|
||||
|
||||
cache_creation: OptionalNullable[AnthropicIterationCacheCreation] = UNSET
|
||||
|
||||
cache_creation_input_tokens: Optional[int] = None
|
||||
|
||||
cache_read_input_tokens: Optional[int] = None
|
||||
|
||||
input_tokens: Optional[int] = None
|
||||
|
||||
output_tokens: Optional[int] = None
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = [
|
||||
"cache_creation",
|
||||
"cache_creation_input_tokens",
|
||||
"cache_read_input_tokens",
|
||||
"input_tokens",
|
||||
"output_tokens",
|
||||
]
|
||||
nullable_fields = ["cache_creation"]
|
||||
null_default_fields = []
|
||||
|
||||
serialized = handler(self)
|
||||
|
||||
m = {}
|
||||
|
||||
for n, f in type(self).model_fields.items():
|
||||
k = f.alias or n
|
||||
val = serialized.get(k)
|
||||
serialized.pop(k, None)
|
||||
|
||||
optional_nullable = k in optional_fields and k in nullable_fields
|
||||
is_set = (
|
||||
self.__pydantic_fields_set__.intersection({n})
|
||||
or k in null_default_fields
|
||||
) # pylint: disable=no-member
|
||||
|
||||
if val is not None and val != UNSET_SENTINEL:
|
||||
m[k] = val
|
||||
elif val != UNSET_SENTINEL and (
|
||||
not k in optional_fields or (optional_nullable and is_set)
|
||||
):
|
||||
m[k] = val
|
||||
|
||||
return m
|
||||
@@ -0,0 +1,43 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .anthropicadvisormessageusageiteration import (
|
||||
AnthropicAdvisorMessageUsageIteration,
|
||||
AnthropicAdvisorMessageUsageIterationTypedDict,
|
||||
)
|
||||
from .anthropiccompactionusageiteration import (
|
||||
AnthropicCompactionUsageIteration,
|
||||
AnthropicCompactionUsageIterationTypedDict,
|
||||
)
|
||||
from .anthropicmessageusageiteration import (
|
||||
AnthropicMessageUsageIteration,
|
||||
AnthropicMessageUsageIterationTypedDict,
|
||||
)
|
||||
from .anthropicunknownusageiteration import (
|
||||
AnthropicUnknownUsageIteration,
|
||||
AnthropicUnknownUsageIterationTypedDict,
|
||||
)
|
||||
from typing import Union
|
||||
from typing_extensions import TypeAliasType
|
||||
|
||||
|
||||
AnthropicUsageIterationTypedDict = TypeAliasType(
|
||||
"AnthropicUsageIterationTypedDict",
|
||||
Union[
|
||||
AnthropicCompactionUsageIterationTypedDict,
|
||||
AnthropicUnknownUsageIterationTypedDict,
|
||||
AnthropicMessageUsageIterationTypedDict,
|
||||
AnthropicAdvisorMessageUsageIterationTypedDict,
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
AnthropicUsageIteration = TypeAliasType(
|
||||
"AnthropicUsageIteration",
|
||||
Union[
|
||||
AnthropicCompactionUsageIteration,
|
||||
AnthropicUnknownUsageIteration,
|
||||
AnthropicMessageUsageIteration,
|
||||
AnthropicAdvisorMessageUsageIteration,
|
||||
],
|
||||
)
|
||||
@@ -0,0 +1,40 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.types import UnrecognizedStr
|
||||
from typing import Literal, Union
|
||||
|
||||
|
||||
APIErrorType = Union[
|
||||
Literal[
|
||||
"context_length_exceeded",
|
||||
"max_tokens_exceeded",
|
||||
"token_limit_exceeded",
|
||||
"string_too_long",
|
||||
"authentication",
|
||||
"permission_denied",
|
||||
"payment_required",
|
||||
"rate_limit_exceeded",
|
||||
"provider_overloaded",
|
||||
"provider_unavailable",
|
||||
"invalid_request",
|
||||
"invalid_prompt",
|
||||
"not_found",
|
||||
"precondition_failed",
|
||||
"payload_too_large",
|
||||
"unprocessable",
|
||||
"content_policy_violation",
|
||||
"refusal",
|
||||
"invalid_image",
|
||||
"image_too_large",
|
||||
"image_too_small",
|
||||
"unsupported_image_format",
|
||||
"image_not_found",
|
||||
"image_download_failed",
|
||||
"server",
|
||||
"timeout",
|
||||
"unmapped",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
r"""Canonical OpenRouter error type, stable across all API formats"""
|
||||
@@ -1,53 +0,0 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.types import BaseModel
|
||||
from typing import Literal
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
|
||||
BenchmarksAAMetaSource = Literal["artificial-analysis",]
|
||||
r"""Data source identifier."""
|
||||
|
||||
|
||||
BenchmarksAAMetaSourceURL = Literal["https://artificialanalysis.ai",]
|
||||
r"""URL of the upstream data source."""
|
||||
|
||||
|
||||
BenchmarksAAMetaVersion = Literal["v1",]
|
||||
r"""Dataset version."""
|
||||
|
||||
|
||||
class BenchmarksAAMetaTypedDict(TypedDict):
|
||||
as_of: str
|
||||
r"""ISO-8601 timestamp of when this data was last updated."""
|
||||
citation: str
|
||||
r"""Required attribution when republishing this data."""
|
||||
model_count: int
|
||||
r"""Number of unique models in the response."""
|
||||
source: BenchmarksAAMetaSource
|
||||
r"""Data source identifier."""
|
||||
source_url: BenchmarksAAMetaSourceURL
|
||||
r"""URL of the upstream data source."""
|
||||
version: BenchmarksAAMetaVersion
|
||||
r"""Dataset version."""
|
||||
|
||||
|
||||
class BenchmarksAAMeta(BaseModel):
|
||||
as_of: str
|
||||
r"""ISO-8601 timestamp of when this data was last updated."""
|
||||
|
||||
citation: str
|
||||
r"""Required attribution when republishing this data."""
|
||||
|
||||
model_count: int
|
||||
r"""Number of unique models in the response."""
|
||||
|
||||
source: BenchmarksAAMetaSource
|
||||
r"""Data source identifier."""
|
||||
|
||||
source_url: BenchmarksAAMetaSourceURL
|
||||
r"""URL of the upstream data source."""
|
||||
|
||||
version: BenchmarksAAMetaVersion
|
||||
r"""Dataset version."""
|
||||
@@ -1,19 +0,0 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .benchmarksaaitem import BenchmarksAAItem, BenchmarksAAItemTypedDict
|
||||
from .benchmarksaameta import BenchmarksAAMeta, BenchmarksAAMetaTypedDict
|
||||
from openrouter.types import BaseModel
|
||||
from typing import List
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
|
||||
class BenchmarksAAResponseTypedDict(TypedDict):
|
||||
data: List[BenchmarksAAItemTypedDict]
|
||||
meta: BenchmarksAAMetaTypedDict
|
||||
|
||||
|
||||
class BenchmarksAAResponse(BaseModel):
|
||||
data: List[BenchmarksAAItem]
|
||||
|
||||
meta: BenchmarksAAMeta
|
||||
@@ -1,118 +0,0 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL
|
||||
from pydantic import model_serializer
|
||||
from typing import Literal
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
|
||||
class EloBoundsTypedDict(TypedDict):
|
||||
r"""ELO range across all returned models for normalization."""
|
||||
|
||||
max: float
|
||||
r"""Maximum ELO in the result set."""
|
||||
min: float
|
||||
r"""Minimum ELO in the result set."""
|
||||
|
||||
|
||||
class EloBounds(BaseModel):
|
||||
r"""ELO range across all returned models for normalization."""
|
||||
|
||||
max: float
|
||||
r"""Maximum ELO in the result set."""
|
||||
|
||||
min: float
|
||||
r"""Minimum ELO in the result set."""
|
||||
|
||||
|
||||
BenchmarksDAMetaSource = Literal["design-arena",]
|
||||
r"""Data source identifier."""
|
||||
|
||||
|
||||
BenchmarksDAMetaSourceURL = Literal["https://www.designarena.ai",]
|
||||
r"""URL of the upstream data source."""
|
||||
|
||||
|
||||
BenchmarksDAMetaVersion = Literal["v1",]
|
||||
r"""Dataset version."""
|
||||
|
||||
|
||||
class BenchmarksDAMetaTypedDict(TypedDict):
|
||||
arena: str
|
||||
r"""The arena filter applied."""
|
||||
as_of: str
|
||||
r"""ISO-8601 timestamp of when this data was generated."""
|
||||
category: Nullable[str]
|
||||
r"""The category filter applied, or null if showing all."""
|
||||
citation: str
|
||||
r"""Required attribution when republishing this data."""
|
||||
elo_bounds: EloBoundsTypedDict
|
||||
r"""ELO range across all returned models for normalization."""
|
||||
model_count: int
|
||||
r"""Number of unique models in the response."""
|
||||
source: BenchmarksDAMetaSource
|
||||
r"""Data source identifier."""
|
||||
source_url: BenchmarksDAMetaSourceURL
|
||||
r"""URL of the upstream data source."""
|
||||
version: BenchmarksDAMetaVersion
|
||||
r"""Dataset version."""
|
||||
|
||||
|
||||
class BenchmarksDAMeta(BaseModel):
|
||||
arena: str
|
||||
r"""The arena filter applied."""
|
||||
|
||||
as_of: str
|
||||
r"""ISO-8601 timestamp of when this data was generated."""
|
||||
|
||||
category: Nullable[str]
|
||||
r"""The category filter applied, or null if showing all."""
|
||||
|
||||
citation: str
|
||||
r"""Required attribution when republishing this data."""
|
||||
|
||||
elo_bounds: EloBounds
|
||||
r"""ELO range across all returned models for normalization."""
|
||||
|
||||
model_count: int
|
||||
r"""Number of unique models in the response."""
|
||||
|
||||
source: BenchmarksDAMetaSource
|
||||
r"""Data source identifier."""
|
||||
|
||||
source_url: BenchmarksDAMetaSourceURL
|
||||
r"""URL of the upstream data source."""
|
||||
|
||||
version: BenchmarksDAMetaVersion
|
||||
r"""Dataset version."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = []
|
||||
nullable_fields = ["category"]
|
||||
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
|
||||
@@ -1,19 +0,0 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .benchmarksdaitem import BenchmarksDAItem, BenchmarksDAItemTypedDict
|
||||
from .benchmarksdameta import BenchmarksDAMeta, BenchmarksDAMetaTypedDict
|
||||
from openrouter.types import BaseModel
|
||||
from typing import List
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
|
||||
class BenchmarksDAResponseTypedDict(TypedDict):
|
||||
data: List[BenchmarksDAItemTypedDict]
|
||||
meta: BenchmarksDAMetaTypedDict
|
||||
|
||||
|
||||
class BenchmarksDAResponse(BaseModel):
|
||||
data: List[BenchmarksDAItem]
|
||||
|
||||
meta: BenchmarksDAMeta
|
||||
@@ -0,0 +1,21 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.types import BaseModel
|
||||
from typing import Literal
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
|
||||
BooleanCapabilityType = Literal["boolean",]
|
||||
|
||||
|
||||
class BooleanCapabilityTypedDict(TypedDict):
|
||||
r"""A supported-or-not flag. Present means the parameter is accepted."""
|
||||
|
||||
type: BooleanCapabilityType
|
||||
|
||||
|
||||
class BooleanCapability(BaseModel):
|
||||
r"""A supported-or-not flag. Present means the parameter is accepted."""
|
||||
|
||||
type: BooleanCapabilityType
|
||||
@@ -43,8 +43,10 @@ BYOKProviderSlug = Union[
|
||||
"google-ai-studio",
|
||||
"google-vertex",
|
||||
"groq",
|
||||
"heygen",
|
||||
"inception",
|
||||
"inceptron",
|
||||
"inferact-vllm",
|
||||
"inference-net",
|
||||
"infermatic",
|
||||
"inflection",
|
||||
@@ -75,6 +77,7 @@ BYOKProviderSlug = Union[
|
||||
"recraft",
|
||||
"reka",
|
||||
"relace",
|
||||
"sakana-ai",
|
||||
"sambanova",
|
||||
"seed",
|
||||
"siliconflow",
|
||||
@@ -82,6 +85,7 @@ BYOKProviderSlug = Union[
|
||||
"stepfun",
|
||||
"streamlake",
|
||||
"switchpoint",
|
||||
"tenstorrent",
|
||||
"together",
|
||||
"upstage",
|
||||
"venice",
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .booleancapability import BooleanCapability, BooleanCapabilityTypedDict
|
||||
from .enumcapability import EnumCapability, EnumCapabilityTypedDict
|
||||
from .rangecapability import RangeCapability, RangeCapabilityTypedDict
|
||||
from openrouter.utils import get_discriminator
|
||||
from pydantic import Discriminator, Tag
|
||||
from typing import Union
|
||||
from typing_extensions import Annotated, TypeAliasType
|
||||
|
||||
|
||||
CapabilityDescriptorTypedDict = TypeAliasType(
|
||||
"CapabilityDescriptorTypedDict",
|
||||
Union[
|
||||
BooleanCapabilityTypedDict, EnumCapabilityTypedDict, RangeCapabilityTypedDict
|
||||
],
|
||||
)
|
||||
r"""A typed descriptor for one supported request parameter."""
|
||||
|
||||
|
||||
CapabilityDescriptor = Annotated[
|
||||
Union[
|
||||
Annotated[EnumCapability, Tag("enum")],
|
||||
Annotated[RangeCapability, Tag("range")],
|
||||
Annotated[BooleanCapability, Tag("boolean")],
|
||||
],
|
||||
Discriminator(lambda m: get_discriminator(m, "type", "type")),
|
||||
]
|
||||
r"""A typed descriptor for one supported request parameter."""
|
||||
@@ -106,6 +106,7 @@ ChatRequestPlugin = Annotated[
|
||||
|
||||
ChatRequestEffort = Union[
|
||||
Literal[
|
||||
"max",
|
||||
"xhigh",
|
||||
"high",
|
||||
"medium",
|
||||
@@ -172,6 +173,7 @@ class ChatRequestReasoning(BaseModel):
|
||||
|
||||
ChatRequestReasoningEffort = Union[
|
||||
Literal[
|
||||
"max",
|
||||
"xhigh",
|
||||
"high",
|
||||
"medium",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .apierrortype import APIErrorType
|
||||
from .chatstreamchoice import ChatStreamChoice, ChatStreamChoiceTypedDict
|
||||
from .chatusage import ChatUsage, ChatUsageTypedDict
|
||||
from .openroutermetadata import OpenRouterMetadata, OpenRouterMetadataTypedDict
|
||||
@@ -11,21 +12,44 @@ from openrouter.types import (
|
||||
UNSET,
|
||||
UNSET_SENTINEL,
|
||||
)
|
||||
from openrouter.utils import validate_open_enum
|
||||
from pydantic import model_serializer
|
||||
from pydantic.functional_validators import PlainValidator
|
||||
from typing import List, Literal, Optional
|
||||
from typing_extensions import NotRequired, TypedDict
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
|
||||
class ErrorTypedDict(TypedDict):
|
||||
class ChatStreamChunkMetadataTypedDict(TypedDict):
|
||||
r"""Structured error metadata"""
|
||||
|
||||
error_type: APIErrorType
|
||||
r"""Canonical OpenRouter error type, stable across all API formats"""
|
||||
provider_code: NotRequired[str]
|
||||
r"""Upstream provider-specific error code, when available"""
|
||||
|
||||
|
||||
class ChatStreamChunkMetadata(BaseModel):
|
||||
r"""Structured error metadata"""
|
||||
|
||||
error_type: Annotated[APIErrorType, PlainValidator(validate_open_enum(False))]
|
||||
r"""Canonical OpenRouter error type, stable across all API formats"""
|
||||
|
||||
provider_code: Optional[str] = None
|
||||
r"""Upstream provider-specific error code, when available"""
|
||||
|
||||
|
||||
class ChatStreamChunkErrorTypedDict(TypedDict):
|
||||
r"""Error information"""
|
||||
|
||||
code: int
|
||||
r"""Error code"""
|
||||
message: str
|
||||
r"""Error message"""
|
||||
metadata: NotRequired[ChatStreamChunkMetadataTypedDict]
|
||||
r"""Structured error metadata"""
|
||||
|
||||
|
||||
class Error(BaseModel):
|
||||
class ChatStreamChunkError(BaseModel):
|
||||
r"""Error information"""
|
||||
|
||||
code: int
|
||||
@@ -34,6 +58,9 @@ class Error(BaseModel):
|
||||
message: str
|
||||
r"""Error message"""
|
||||
|
||||
metadata: Optional[ChatStreamChunkMetadata] = None
|
||||
r"""Structured error metadata"""
|
||||
|
||||
|
||||
ChatStreamChunkObject = Literal["chat.completion.chunk",]
|
||||
|
||||
@@ -50,7 +77,7 @@ class ChatStreamChunkTypedDict(TypedDict):
|
||||
model: str
|
||||
r"""Model used for completion"""
|
||||
object: ChatStreamChunkObject
|
||||
error: NotRequired[ErrorTypedDict]
|
||||
error: NotRequired[ChatStreamChunkErrorTypedDict]
|
||||
r"""Error information"""
|
||||
openrouter_metadata: NotRequired[OpenRouterMetadataTypedDict]
|
||||
service_tier: NotRequired[Nullable[str]]
|
||||
@@ -78,7 +105,7 @@ class ChatStreamChunk(BaseModel):
|
||||
|
||||
object: ChatStreamChunkObject
|
||||
|
||||
error: Optional[Error] = None
|
||||
error: Optional[ChatStreamChunkError] = None
|
||||
r"""Error information"""
|
||||
|
||||
openrouter_metadata: Optional[OpenRouterMetadata] = None
|
||||
|
||||
@@ -14,7 +14,7 @@ from typing import Optional
|
||||
from typing_extensions import NotRequired, TypedDict
|
||||
|
||||
|
||||
class CompletionTokensDetailsTypedDict(TypedDict):
|
||||
class ChatUsageCompletionTokensDetailsTypedDict(TypedDict):
|
||||
r"""Detailed completion token usage"""
|
||||
|
||||
accepted_prediction_tokens: NotRequired[Nullable[int]]
|
||||
@@ -27,7 +27,7 @@ class CompletionTokensDetailsTypedDict(TypedDict):
|
||||
r"""Rejected prediction tokens"""
|
||||
|
||||
|
||||
class CompletionTokensDetails(BaseModel):
|
||||
class ChatUsageCompletionTokensDetails(BaseModel):
|
||||
r"""Detailed completion token usage"""
|
||||
|
||||
accepted_prediction_tokens: OptionalNullable[int] = UNSET
|
||||
@@ -83,7 +83,7 @@ class CompletionTokensDetails(BaseModel):
|
||||
return m
|
||||
|
||||
|
||||
class PromptTokensDetailsTypedDict(TypedDict):
|
||||
class ChatUsagePromptTokensDetailsTypedDict(TypedDict):
|
||||
r"""Detailed prompt token usage"""
|
||||
|
||||
audio_tokens: NotRequired[int]
|
||||
@@ -96,7 +96,7 @@ class PromptTokensDetailsTypedDict(TypedDict):
|
||||
r"""Video input tokens"""
|
||||
|
||||
|
||||
class PromptTokensDetails(BaseModel):
|
||||
class ChatUsagePromptTokensDetails(BaseModel):
|
||||
r"""Detailed prompt token usage"""
|
||||
|
||||
audio_tokens: Optional[int] = None
|
||||
@@ -112,68 +112,141 @@ class PromptTokensDetails(BaseModel):
|
||||
r"""Video input tokens"""
|
||||
|
||||
|
||||
class ChatUsageTypedDict(TypedDict):
|
||||
r"""Token usage statistics"""
|
||||
class ServerToolUseDetailsTypedDict(TypedDict):
|
||||
r"""Usage for server-side tool execution (e.g., web search)"""
|
||||
|
||||
completion_tokens: int
|
||||
r"""Number of tokens in the completion"""
|
||||
prompt_tokens: int
|
||||
r"""Number of tokens in the prompt"""
|
||||
total_tokens: int
|
||||
r"""Total number of tokens"""
|
||||
completion_tokens_details: NotRequired[Nullable[CompletionTokensDetailsTypedDict]]
|
||||
r"""Detailed completion token usage"""
|
||||
cost: NotRequired[Nullable[float]]
|
||||
r"""Cost of the completion"""
|
||||
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[Nullable[PromptTokensDetailsTypedDict]]
|
||||
r"""Detailed prompt token usage"""
|
||||
tool_calls_executed: NotRequired[Nullable[int]]
|
||||
r"""Number of OpenRouter server tool calls that executed and produced a result"""
|
||||
tool_calls_requested: NotRequired[Nullable[int]]
|
||||
r"""Total number of OpenRouter server-orchestrated tool calls the model requested, across all tool types. Provider-native tools (e.g. native web search) are not counted here."""
|
||||
web_search_requests: NotRequired[Nullable[int]]
|
||||
r"""Number of web searches performed by server-side tools. For server-orchestrated tool calls a web search is also counted in tool_calls_requested; provider-native web search may report web_search_requests only. Do not sum the two."""
|
||||
|
||||
|
||||
class ChatUsage(BaseModel):
|
||||
r"""Token usage statistics"""
|
||||
class ServerToolUseDetails(BaseModel):
|
||||
r"""Usage for server-side tool execution (e.g., web search)"""
|
||||
|
||||
completion_tokens: int
|
||||
r"""Number of tokens in the completion"""
|
||||
tool_calls_executed: OptionalNullable[int] = UNSET
|
||||
r"""Number of OpenRouter server tool calls that executed and produced a result"""
|
||||
|
||||
prompt_tokens: int
|
||||
r"""Number of tokens in the prompt"""
|
||||
tool_calls_requested: OptionalNullable[int] = UNSET
|
||||
r"""Total number of OpenRouter server-orchestrated tool calls the model requested, across all tool types. Provider-native tools (e.g. native web search) are not counted here."""
|
||||
|
||||
total_tokens: int
|
||||
r"""Total number of tokens"""
|
||||
|
||||
completion_tokens_details: OptionalNullable[CompletionTokensDetails] = UNSET
|
||||
r"""Detailed completion token usage"""
|
||||
|
||||
cost: OptionalNullable[float] = UNSET
|
||||
r"""Cost of the completion"""
|
||||
|
||||
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: OptionalNullable[PromptTokensDetails] = UNSET
|
||||
r"""Detailed prompt token usage"""
|
||||
web_search_requests: OptionalNullable[int] = UNSET
|
||||
r"""Number of web searches performed by server-side tools. For server-orchestrated tool calls a web search is also counted in tool_calls_requested; provider-native web search may report web_search_requests only. Do not sum the two."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = [
|
||||
"completion_tokens_details",
|
||||
"cost",
|
||||
"cost_details",
|
||||
"is_byok",
|
||||
"prompt_tokens_details",
|
||||
"tool_calls_executed",
|
||||
"tool_calls_requested",
|
||||
"web_search_requests",
|
||||
]
|
||||
nullable_fields = [
|
||||
"tool_calls_executed",
|
||||
"tool_calls_requested",
|
||||
"web_search_requests",
|
||||
]
|
||||
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 ChatUsageTypedDict(TypedDict):
|
||||
r"""Token usage statistics"""
|
||||
|
||||
completion_tokens: int
|
||||
r"""Number of tokens in the completion"""
|
||||
prompt_tokens: int
|
||||
r"""Number of tokens in the prompt"""
|
||||
total_tokens: int
|
||||
r"""Total number of tokens"""
|
||||
completion_tokens_details: NotRequired[
|
||||
Nullable[ChatUsageCompletionTokensDetailsTypedDict]
|
||||
]
|
||||
r"""Detailed completion token usage"""
|
||||
cost: NotRequired[Nullable[float]]
|
||||
r"""Cost of the completion"""
|
||||
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[Nullable[ChatUsagePromptTokensDetailsTypedDict]]
|
||||
r"""Detailed prompt token usage"""
|
||||
server_tool_use_details: NotRequired[Nullable[ServerToolUseDetailsTypedDict]]
|
||||
r"""Usage for server-side tool execution (e.g., web search)"""
|
||||
|
||||
|
||||
class ChatUsage(BaseModel):
|
||||
r"""Token usage statistics"""
|
||||
|
||||
completion_tokens: int
|
||||
r"""Number of tokens in the completion"""
|
||||
|
||||
prompt_tokens: int
|
||||
r"""Number of tokens in the prompt"""
|
||||
|
||||
total_tokens: int
|
||||
r"""Total number of tokens"""
|
||||
|
||||
completion_tokens_details: OptionalNullable[ChatUsageCompletionTokensDetails] = (
|
||||
UNSET
|
||||
)
|
||||
r"""Detailed completion token usage"""
|
||||
|
||||
cost: OptionalNullable[float] = UNSET
|
||||
r"""Cost of the completion"""
|
||||
|
||||
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: OptionalNullable[ChatUsagePromptTokensDetails] = UNSET
|
||||
r"""Detailed prompt token usage"""
|
||||
|
||||
server_tool_use_details: OptionalNullable[ServerToolUseDetails] = UNSET
|
||||
r"""Usage for server-side tool execution (e.g., web search)"""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = [
|
||||
"completion_tokens_details",
|
||||
"cost",
|
||||
"cost_details",
|
||||
"is_byok",
|
||||
"prompt_tokens_details",
|
||||
"server_tool_use_details",
|
||||
]
|
||||
nullable_fields = [
|
||||
"completion_tokens_details",
|
||||
"cost",
|
||||
"cost_details",
|
||||
"prompt_tokens_details",
|
||||
"server_tool_use_details",
|
||||
]
|
||||
null_default_fields = []
|
||||
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.types import BaseModel, Nullable, UnrecognizedStr
|
||||
from openrouter.utils import validate_open_enum
|
||||
from pydantic.functional_validators import PlainValidator
|
||||
from typing import Any, Dict, Literal, Optional, Union
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
|
||||
Event = Union[
|
||||
Literal[
|
||||
"adapter_request",
|
||||
"upstream_headers_received",
|
||||
"first_token_received",
|
||||
"upstream_body_ended",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
|
||||
|
||||
class TimingsTypedDict(TypedDict):
|
||||
epoch_ms: int
|
||||
event: Event
|
||||
start_ms: int
|
||||
|
||||
|
||||
class Timings(BaseModel):
|
||||
epoch_ms: int
|
||||
|
||||
event: Annotated[Event, PlainValidator(validate_open_enum(False))]
|
||||
|
||||
start_ms: int
|
||||
|
||||
|
||||
class DebugTypedDict(TypedDict):
|
||||
echo_upstream_body: NotRequired[Dict[str, Nullable[Any]]]
|
||||
timings: NotRequired[TimingsTypedDict]
|
||||
|
||||
|
||||
class Debug(BaseModel):
|
||||
echo_upstream_body: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
timings: Optional[Timings] = None
|
||||
|
||||
|
||||
DebugEventType = Literal["response.debug",]
|
||||
|
||||
|
||||
class DebugEventTypedDict(TypedDict):
|
||||
r"""Debug event emitted when debug.echo_upstream_body is true. Contains the transformed upstream request body or timing milestones."""
|
||||
|
||||
debug: DebugTypedDict
|
||||
sequence_number: int
|
||||
type: DebugEventType
|
||||
|
||||
|
||||
class DebugEvent(BaseModel):
|
||||
r"""Debug event emitted when debug.echo_upstream_body is true. Contains the transformed upstream request body or timing milestones."""
|
||||
|
||||
debug: Debug
|
||||
|
||||
sequence_number: int
|
||||
|
||||
type: DebugEventType
|
||||
@@ -0,0 +1,24 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.types import BaseModel
|
||||
from typing import List, Literal
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
|
||||
EnumCapabilityType = Literal["enum",]
|
||||
|
||||
|
||||
class EnumCapabilityTypedDict(TypedDict):
|
||||
r"""A parameter that accepts one of a discrete set of string values."""
|
||||
|
||||
type: EnumCapabilityType
|
||||
values: List[str]
|
||||
|
||||
|
||||
class EnumCapability(BaseModel):
|
||||
r"""A parameter that accepts one of a discrete set of string values."""
|
||||
|
||||
type: EnumCapabilityType
|
||||
|
||||
values: List[str]
|
||||
@@ -15,6 +15,7 @@ PresetEnum = Union[
|
||||
Literal[
|
||||
"general-high",
|
||||
"general-budget",
|
||||
"general-fast",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .anthropiccachecontroldirective import (
|
||||
AnthropicCacheControlDirective,
|
||||
AnthropicCacheControlDirectiveTypedDict,
|
||||
)
|
||||
from openrouter.types import BaseModel, Nullable, UnrecognizedStr
|
||||
from openrouter.utils import validate_open_enum
|
||||
from pydantic.functional_validators import PlainValidator
|
||||
@@ -10,6 +14,7 @@ from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
FusionServerToolConfigEffort = Union[
|
||||
Literal[
|
||||
"max",
|
||||
"xhigh",
|
||||
"high",
|
||||
"medium",
|
||||
@@ -64,6 +69,8 @@ class FusionServerToolConfigTypedDict(TypedDict):
|
||||
|
||||
analysis_models: NotRequired[List[str]]
|
||||
r"""Slugs of models to run in parallel as the analysis panel. Each model receives the user prompt with openrouter:web_search and openrouter:web_fetch enabled, then a judge model summarizes the collective output into structured analysis JSON. Capped at 8 models to bound cost amplification. Defaults to the Quality preset from /labs/fusion."""
|
||||
cache_control: NotRequired[AnthropicCacheControlDirectiveTypedDict]
|
||||
r"""Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models."""
|
||||
max_completion_tokens: NotRequired[int]
|
||||
r"""Maximum number of output tokens (including reasoning tokens) each panelist and the judge model may produce per inner call. Controls the total output budget so reasoning-heavy models like GPT-5.5 do not exhaust their token allowance before producing visible text. When omitted, the provider's default applies."""
|
||||
max_tool_calls: NotRequired[int]
|
||||
@@ -73,7 +80,7 @@ class FusionServerToolConfigTypedDict(TypedDict):
|
||||
reasoning: NotRequired[FusionServerToolConfigReasoningTypedDict]
|
||||
r"""Reasoning configuration forwarded to panelist and judge inner calls. Use this to control reasoning effort and token budget for models that support extended thinking."""
|
||||
temperature: NotRequired[float]
|
||||
r"""Sampling temperature forwarded to panelist and judge inner calls. When omitted, the provider's default applies."""
|
||||
r"""Temperature forwarded to panelist inner calls. The judge always runs at temperature 0 regardless of this value. When omitted, the provider's default applies."""
|
||||
tools: NotRequired[List[FusionServerToolConfigToolTypedDict]]
|
||||
r"""Server tools available to panelist and judge inner calls. Each entry uses the same `{ type, parameters? }` shorthand as the outer Chat Completions request. When omitted, defaults to `[{ type: \"openrouter:web_search\" }, { type: \"openrouter:web_fetch\" }]`. Pass an empty array to disable tools entirely (panelists answer from parametric knowledge only)."""
|
||||
|
||||
@@ -84,6 +91,9 @@ class FusionServerToolConfig(BaseModel):
|
||||
analysis_models: Optional[List[str]] = None
|
||||
r"""Slugs of models to run in parallel as the analysis panel. Each model receives the user prompt with openrouter:web_search and openrouter:web_fetch enabled, then a judge model summarizes the collective output into structured analysis JSON. Capped at 8 models to bound cost amplification. Defaults to the Quality preset from /labs/fusion."""
|
||||
|
||||
cache_control: Optional[AnthropicCacheControlDirective] = None
|
||||
r"""Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models."""
|
||||
|
||||
max_completion_tokens: Optional[int] = None
|
||||
r"""Maximum number of output tokens (including reasoning tokens) each panelist and the judge model may produce per inner call. Controls the total output budget so reasoning-heavy models like GPT-5.5 do not exhaust their token allowance before producing visible text. When omitted, the provider's default applies."""
|
||||
|
||||
@@ -97,7 +107,7 @@ class FusionServerToolConfig(BaseModel):
|
||||
r"""Reasoning configuration forwarded to panelist and judge inner calls. Use this to control reasoning effort and token budget for models that support extended thinking."""
|
||||
|
||||
temperature: Optional[float] = None
|
||||
r"""Sampling temperature forwarded to panelist and judge inner calls. When omitted, the provider's default applies."""
|
||||
r"""Temperature forwarded to panelist inner calls. The judge always runs at temperature 0 regardless of this value. When omitted, the provider's default applies."""
|
||||
|
||||
tools: Optional[List[FusionServerToolConfigTool]] = None
|
||||
r"""Server tools available to panelist and judge inner calls. Each entry uses the same `{ type, parameters? }` shorthand as the outer Chat Completions request. When omitted, defaults to `[{ type: \"openrouter:web_search\" }, { type: \"openrouter:web_fetch\" }]`. Pass an empty array to disable tools entirely (panelists answer from parametric knowledge only)."""
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .capabilitydescriptor import CapabilityDescriptor, CapabilityDescriptorTypedDict
|
||||
from .imagepricingentry import ImagePricingEntry, ImagePricingEntryTypedDict
|
||||
from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL
|
||||
from pydantic import model_serializer
|
||||
from typing import Dict, List
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
|
||||
class ImageEndpointTypedDict(TypedDict):
|
||||
r"""An endpoint that serves a given image model."""
|
||||
|
||||
allowed_passthrough_parameters: List[str]
|
||||
r"""Provider-specific options accepted under provider.options[provider_slug]."""
|
||||
pricing: List[ImagePricingEntryTypedDict]
|
||||
r"""Billable pricing lines for this endpoint."""
|
||||
provider_name: str
|
||||
r"""Provider display name"""
|
||||
provider_slug: str
|
||||
r"""Provider slug"""
|
||||
provider_tag: Nullable[str]
|
||||
r"""Provider tag for request-side selection"""
|
||||
supported_parameters: Dict[str, CapabilityDescriptorTypedDict]
|
||||
supports_streaming: bool
|
||||
r"""Whether this endpoint supports native SSE streaming (`stream: true` in the request)."""
|
||||
|
||||
|
||||
class ImageEndpoint(BaseModel):
|
||||
r"""An endpoint that serves a given image model."""
|
||||
|
||||
allowed_passthrough_parameters: List[str]
|
||||
r"""Provider-specific options accepted under provider.options[provider_slug]."""
|
||||
|
||||
pricing: List[ImagePricingEntry]
|
||||
r"""Billable pricing lines for this endpoint."""
|
||||
|
||||
provider_name: str
|
||||
r"""Provider display name"""
|
||||
|
||||
provider_slug: str
|
||||
r"""Provider slug"""
|
||||
|
||||
provider_tag: Nullable[str]
|
||||
r"""Provider tag for request-side selection"""
|
||||
|
||||
supported_parameters: Dict[str, CapabilityDescriptor]
|
||||
|
||||
supports_streaming: bool
|
||||
r"""Whether this endpoint supports native SSE streaming (`stream: true` in the request)."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = []
|
||||
nullable_fields = ["provider_tag"]
|
||||
null_default_fields = []
|
||||
|
||||
serialized = handler(self)
|
||||
|
||||
m = {}
|
||||
|
||||
for n, f in type(self).model_fields.items():
|
||||
k = f.alias or n
|
||||
val = serialized.get(k)
|
||||
serialized.pop(k, None)
|
||||
|
||||
optional_nullable = k in optional_fields and k in nullable_fields
|
||||
is_set = (
|
||||
self.__pydantic_fields_set__.intersection({n})
|
||||
or k in null_default_fields
|
||||
) # pylint: disable=no-member
|
||||
|
||||
if val is not None and val != UNSET_SENTINEL:
|
||||
m[k] = val
|
||||
elif val != UNSET_SENTINEL and (
|
||||
not k in optional_fields or (optional_nullable and is_set)
|
||||
):
|
||||
m[k] = val
|
||||
|
||||
return m
|
||||
@@ -0,0 +1,40 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .imagegenerationusage import ImageGenerationUsage, ImageGenerationUsageTypedDict
|
||||
from openrouter.types import BaseModel
|
||||
from typing import Literal, Optional
|
||||
from typing_extensions import NotRequired, TypedDict
|
||||
|
||||
|
||||
ImageGenCompletedEventType = Literal["image_generation.completed",]
|
||||
r"""The event type"""
|
||||
|
||||
|
||||
class ImageGenCompletedEventTypedDict(TypedDict):
|
||||
r"""Emitted when generation completes and the final image is available"""
|
||||
|
||||
b64_json: str
|
||||
r"""Base64-encoded final image data"""
|
||||
created: int
|
||||
r"""Unix timestamp (seconds) when the image was generated"""
|
||||
type: ImageGenCompletedEventType
|
||||
r"""The event type"""
|
||||
usage: NotRequired[ImageGenerationUsageTypedDict]
|
||||
r"""Token and cost usage for the image generation request, when available"""
|
||||
|
||||
|
||||
class ImageGenCompletedEvent(BaseModel):
|
||||
r"""Emitted when generation completes and the final image is available"""
|
||||
|
||||
b64_json: str
|
||||
r"""Base64-encoded final image data"""
|
||||
|
||||
created: int
|
||||
r"""Unix timestamp (seconds) when the image was generated"""
|
||||
|
||||
type: ImageGenCompletedEventType
|
||||
r"""The event type"""
|
||||
|
||||
usage: Optional[ImageGenerationUsage] = None
|
||||
r"""Token and cost usage for the image generation request, when available"""
|
||||
@@ -0,0 +1,606 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .contentpartimage import ContentPartImage, ContentPartImageTypedDict
|
||||
from openrouter.types import BaseModel, Nullable, UnrecognizedStr
|
||||
from openrouter.utils import validate_open_enum
|
||||
import pydantic
|
||||
from pydantic.functional_validators import PlainValidator
|
||||
from typing import Any, Dict, List, Literal, Optional, Union
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
|
||||
ImageGenerationRequestAspectRatio = Union[
|
||||
Literal[
|
||||
"1:1",
|
||||
"1:2",
|
||||
"1:4",
|
||||
"1:8",
|
||||
"2:1",
|
||||
"2:3",
|
||||
"3:2",
|
||||
"3:4",
|
||||
"4:1",
|
||||
"4:3",
|
||||
"4:5",
|
||||
"5:4",
|
||||
"8:1",
|
||||
"9:16",
|
||||
"16:9",
|
||||
"9:19.5",
|
||||
"19.5:9",
|
||||
"9:20",
|
||||
"20:9",
|
||||
"9:21",
|
||||
"21:9",
|
||||
"auto",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
r"""Normalized aspect ratio of the generated image. Providers clamp to their supported subset."""
|
||||
|
||||
|
||||
ImageGenerationRequestBackground = Union[
|
||||
Literal[
|
||||
"auto",
|
||||
"transparent",
|
||||
"opaque",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
r"""Background treatment. `transparent` requires an output_format that supports alpha (png or webp)."""
|
||||
|
||||
|
||||
ImageGenerationRequestOutputFormat = Union[
|
||||
Literal[
|
||||
"png",
|
||||
"jpeg",
|
||||
"webp",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
r"""Encoding of the returned image bytes."""
|
||||
|
||||
|
||||
class ImageGenerationRequestOptionsTypedDict(TypedDict):
|
||||
r"""Provider-specific options keyed by provider slug. Only options for the matched provider are forwarded; the rest are ignored. Unrecognized keys are silently dropped."""
|
||||
|
||||
oneai: NotRequired[Dict[str, Nullable[Any]]]
|
||||
ai21: NotRequired[Dict[str, Nullable[Any]]]
|
||||
aion_labs: NotRequired[Dict[str, Nullable[Any]]]
|
||||
akashml: NotRequired[Dict[str, Nullable[Any]]]
|
||||
alibaba: NotRequired[Dict[str, Nullable[Any]]]
|
||||
amazon_bedrock: NotRequired[Dict[str, Nullable[Any]]]
|
||||
amazon_nova: NotRequired[Dict[str, Nullable[Any]]]
|
||||
ambient: NotRequired[Dict[str, Nullable[Any]]]
|
||||
anthropic: NotRequired[Dict[str, Nullable[Any]]]
|
||||
anyscale: NotRequired[Dict[str, Nullable[Any]]]
|
||||
arcee_ai: NotRequired[Dict[str, Nullable[Any]]]
|
||||
atlas_cloud: NotRequired[Dict[str, Nullable[Any]]]
|
||||
atoma: NotRequired[Dict[str, Nullable[Any]]]
|
||||
avian: NotRequired[Dict[str, Nullable[Any]]]
|
||||
azure: NotRequired[Dict[str, Nullable[Any]]]
|
||||
baidu: NotRequired[Dict[str, Nullable[Any]]]
|
||||
baseten: NotRequired[Dict[str, Nullable[Any]]]
|
||||
black_forest_labs: NotRequired[Dict[str, Nullable[Any]]]
|
||||
byteplus: NotRequired[Dict[str, Nullable[Any]]]
|
||||
centml: NotRequired[Dict[str, Nullable[Any]]]
|
||||
cerebras: NotRequired[Dict[str, Nullable[Any]]]
|
||||
chutes: NotRequired[Dict[str, Nullable[Any]]]
|
||||
cirrascale: NotRequired[Dict[str, Nullable[Any]]]
|
||||
clarifai: NotRequired[Dict[str, Nullable[Any]]]
|
||||
cloudflare: NotRequired[Dict[str, Nullable[Any]]]
|
||||
cohere: NotRequired[Dict[str, Nullable[Any]]]
|
||||
crofai: NotRequired[Dict[str, Nullable[Any]]]
|
||||
crucible: NotRequired[Dict[str, Nullable[Any]]]
|
||||
crusoe: NotRequired[Dict[str, Nullable[Any]]]
|
||||
darkbloom: NotRequired[Dict[str, Nullable[Any]]]
|
||||
decart: NotRequired[Dict[str, Nullable[Any]]]
|
||||
deepinfra: NotRequired[Dict[str, Nullable[Any]]]
|
||||
deepseek: NotRequired[Dict[str, Nullable[Any]]]
|
||||
dekallm: NotRequired[Dict[str, Nullable[Any]]]
|
||||
digitalocean: NotRequired[Dict[str, Nullable[Any]]]
|
||||
enfer: NotRequired[Dict[str, Nullable[Any]]]
|
||||
fake_provider: NotRequired[Dict[str, Nullable[Any]]]
|
||||
featherless: NotRequired[Dict[str, Nullable[Any]]]
|
||||
fireworks: NotRequired[Dict[str, Nullable[Any]]]
|
||||
friendli: NotRequired[Dict[str, Nullable[Any]]]
|
||||
gmicloud: NotRequired[Dict[str, Nullable[Any]]]
|
||||
google_ai_studio: NotRequired[Dict[str, Nullable[Any]]]
|
||||
google_vertex: NotRequired[Dict[str, Nullable[Any]]]
|
||||
gopomelo: NotRequired[Dict[str, Nullable[Any]]]
|
||||
groq: NotRequired[Dict[str, Nullable[Any]]]
|
||||
heygen: NotRequired[Dict[str, Nullable[Any]]]
|
||||
huggingface: NotRequired[Dict[str, Nullable[Any]]]
|
||||
hyperbolic: NotRequired[Dict[str, Nullable[Any]]]
|
||||
hyperbolic_quantized: NotRequired[Dict[str, Nullable[Any]]]
|
||||
inception: NotRequired[Dict[str, Nullable[Any]]]
|
||||
inceptron: NotRequired[Dict[str, Nullable[Any]]]
|
||||
inferact_vllm: NotRequired[Dict[str, Nullable[Any]]]
|
||||
inference_net: NotRequired[Dict[str, Nullable[Any]]]
|
||||
infermatic: NotRequired[Dict[str, Nullable[Any]]]
|
||||
inflection: NotRequired[Dict[str, Nullable[Any]]]
|
||||
inocloud: NotRequired[Dict[str, Nullable[Any]]]
|
||||
io_net: NotRequired[Dict[str, Nullable[Any]]]
|
||||
ionstream: NotRequired[Dict[str, Nullable[Any]]]
|
||||
klusterai: NotRequired[Dict[str, Nullable[Any]]]
|
||||
lambda_: NotRequired[Dict[str, Nullable[Any]]]
|
||||
lepton: NotRequired[Dict[str, Nullable[Any]]]
|
||||
liquid: NotRequired[Dict[str, Nullable[Any]]]
|
||||
lynn: NotRequired[Dict[str, Nullable[Any]]]
|
||||
lynn_private: NotRequired[Dict[str, Nullable[Any]]]
|
||||
mancer: NotRequired[Dict[str, Nullable[Any]]]
|
||||
mancer_old: NotRequired[Dict[str, Nullable[Any]]]
|
||||
mara: NotRequired[Dict[str, Nullable[Any]]]
|
||||
meta: NotRequired[Dict[str, Nullable[Any]]]
|
||||
minimax: NotRequired[Dict[str, Nullable[Any]]]
|
||||
mistral: NotRequired[Dict[str, Nullable[Any]]]
|
||||
modal: NotRequired[Dict[str, Nullable[Any]]]
|
||||
modelrun: NotRequired[Dict[str, Nullable[Any]]]
|
||||
modular: NotRequired[Dict[str, Nullable[Any]]]
|
||||
moonshotai: NotRequired[Dict[str, Nullable[Any]]]
|
||||
morph: NotRequired[Dict[str, Nullable[Any]]]
|
||||
ncompass: NotRequired[Dict[str, Nullable[Any]]]
|
||||
nebius: NotRequired[Dict[str, Nullable[Any]]]
|
||||
nex_agi: NotRequired[Dict[str, Nullable[Any]]]
|
||||
nextbit: NotRequired[Dict[str, Nullable[Any]]]
|
||||
nineteen: NotRequired[Dict[str, Nullable[Any]]]
|
||||
novita: NotRequired[Dict[str, Nullable[Any]]]
|
||||
nvidia: NotRequired[Dict[str, Nullable[Any]]]
|
||||
octoai: NotRequired[Dict[str, Nullable[Any]]]
|
||||
open_inference: NotRequired[Dict[str, Nullable[Any]]]
|
||||
openai: NotRequired[Dict[str, Nullable[Any]]]
|
||||
parasail: NotRequired[Dict[str, Nullable[Any]]]
|
||||
perceptron: NotRequired[Dict[str, Nullable[Any]]]
|
||||
perplexity: NotRequired[Dict[str, Nullable[Any]]]
|
||||
phala: NotRequired[Dict[str, Nullable[Any]]]
|
||||
poolside: NotRequired[Dict[str, Nullable[Any]]]
|
||||
recraft: NotRequired[Dict[str, Nullable[Any]]]
|
||||
recursal: NotRequired[Dict[str, Nullable[Any]]]
|
||||
reflection: NotRequired[Dict[str, Nullable[Any]]]
|
||||
reka: NotRequired[Dict[str, Nullable[Any]]]
|
||||
relace: NotRequired[Dict[str, Nullable[Any]]]
|
||||
replicate: NotRequired[Dict[str, Nullable[Any]]]
|
||||
sakana_ai: NotRequired[Dict[str, Nullable[Any]]]
|
||||
sambanova: NotRequired[Dict[str, Nullable[Any]]]
|
||||
sambanova_cloaked: NotRequired[Dict[str, Nullable[Any]]]
|
||||
seed: NotRequired[Dict[str, Nullable[Any]]]
|
||||
sf_compute: NotRequired[Dict[str, Nullable[Any]]]
|
||||
siliconflow: NotRequired[Dict[str, Nullable[Any]]]
|
||||
sourceful: NotRequired[Dict[str, Nullable[Any]]]
|
||||
stealth: NotRequired[Dict[str, Nullable[Any]]]
|
||||
stepfun: NotRequired[Dict[str, Nullable[Any]]]
|
||||
streamlake: NotRequired[Dict[str, Nullable[Any]]]
|
||||
switchpoint: NotRequired[Dict[str, Nullable[Any]]]
|
||||
targon: NotRequired[Dict[str, Nullable[Any]]]
|
||||
tenstorrent: NotRequired[Dict[str, Nullable[Any]]]
|
||||
together: NotRequired[Dict[str, Nullable[Any]]]
|
||||
together_lite: NotRequired[Dict[str, Nullable[Any]]]
|
||||
ubicloud: NotRequired[Dict[str, Nullable[Any]]]
|
||||
upstage: NotRequired[Dict[str, Nullable[Any]]]
|
||||
venice: NotRequired[Dict[str, Nullable[Any]]]
|
||||
wafer: NotRequired[Dict[str, Nullable[Any]]]
|
||||
wandb: NotRequired[Dict[str, Nullable[Any]]]
|
||||
xai: NotRequired[Dict[str, Nullable[Any]]]
|
||||
xiaomi: NotRequired[Dict[str, Nullable[Any]]]
|
||||
z_ai: NotRequired[Dict[str, Nullable[Any]]]
|
||||
|
||||
|
||||
class ImageGenerationRequestOptions(BaseModel):
|
||||
r"""Provider-specific options keyed by provider slug. Only options for the matched provider are forwarded; the rest are ignored. Unrecognized keys are silently dropped."""
|
||||
|
||||
oneai: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="01ai")
|
||||
] = None
|
||||
|
||||
ai21: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
aion_labs: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="aion-labs")
|
||||
] = None
|
||||
|
||||
akashml: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
alibaba: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
amazon_bedrock: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="amazon-bedrock")
|
||||
] = None
|
||||
|
||||
amazon_nova: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="amazon-nova")
|
||||
] = None
|
||||
|
||||
ambient: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
anthropic: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
anyscale: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
arcee_ai: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="arcee-ai")
|
||||
] = None
|
||||
|
||||
atlas_cloud: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="atlas-cloud")
|
||||
] = None
|
||||
|
||||
atoma: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
avian: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
azure: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
baidu: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
baseten: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
black_forest_labs: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="black-forest-labs")
|
||||
] = None
|
||||
|
||||
byteplus: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
centml: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
cerebras: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
chutes: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
cirrascale: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
clarifai: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
cloudflare: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
cohere: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
crofai: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
crucible: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
crusoe: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
darkbloom: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
decart: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
deepinfra: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
deepseek: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
dekallm: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
digitalocean: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
enfer: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
fake_provider: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="fake-provider")
|
||||
] = None
|
||||
|
||||
featherless: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
fireworks: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
friendli: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
gmicloud: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
google_ai_studio: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="google-ai-studio")
|
||||
] = None
|
||||
|
||||
google_vertex: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="google-vertex")
|
||||
] = None
|
||||
|
||||
gopomelo: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
groq: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
heygen: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
huggingface: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
hyperbolic: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
hyperbolic_quantized: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="hyperbolic-quantized")
|
||||
] = None
|
||||
|
||||
inception: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
inceptron: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
inferact_vllm: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="inferact-vllm")
|
||||
] = None
|
||||
|
||||
inference_net: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="inference-net")
|
||||
] = None
|
||||
|
||||
infermatic: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
inflection: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
inocloud: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
io_net: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="io-net")
|
||||
] = None
|
||||
|
||||
ionstream: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
klusterai: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
lambda_: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="lambda")
|
||||
] = None
|
||||
|
||||
lepton: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
liquid: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
lynn: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
lynn_private: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="lynn-private")
|
||||
] = None
|
||||
|
||||
mancer: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
mancer_old: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="mancer-old")
|
||||
] = None
|
||||
|
||||
mara: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
meta: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
minimax: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
mistral: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
modal: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
modelrun: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
modular: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
moonshotai: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
morph: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
ncompass: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
nebius: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
nex_agi: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="nex-agi")
|
||||
] = None
|
||||
|
||||
nextbit: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
nineteen: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
novita: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
nvidia: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
octoai: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
open_inference: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="open-inference")
|
||||
] = None
|
||||
|
||||
openai: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
parasail: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
perceptron: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
perplexity: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
phala: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
poolside: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
recraft: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
recursal: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
reflection: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
reka: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
relace: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
replicate: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
sakana_ai: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="sakana-ai")
|
||||
] = None
|
||||
|
||||
sambanova: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
sambanova_cloaked: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="sambanova-cloaked")
|
||||
] = None
|
||||
|
||||
seed: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
sf_compute: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="sf-compute")
|
||||
] = None
|
||||
|
||||
siliconflow: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
sourceful: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
stealth: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
stepfun: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
streamlake: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
switchpoint: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
targon: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
tenstorrent: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
together: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
together_lite: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="together-lite")
|
||||
] = None
|
||||
|
||||
ubicloud: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
upstage: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
venice: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
wafer: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
wandb: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
xai: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
xiaomi: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
z_ai: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="z-ai")
|
||||
] = None
|
||||
|
||||
|
||||
class ImageGenerationRequestProviderTypedDict(TypedDict):
|
||||
r"""Provider-specific passthrough configuration"""
|
||||
|
||||
options: NotRequired[ImageGenerationRequestOptionsTypedDict]
|
||||
|
||||
|
||||
class ImageGenerationRequestProvider(BaseModel):
|
||||
r"""Provider-specific passthrough configuration"""
|
||||
|
||||
options: Optional[ImageGenerationRequestOptions] = None
|
||||
|
||||
|
||||
ImageGenerationRequestQuality = Union[
|
||||
Literal[
|
||||
"auto",
|
||||
"low",
|
||||
"medium",
|
||||
"high",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
r"""Rendering quality. Providers without a quality knob ignore this."""
|
||||
|
||||
|
||||
ImageGenerationRequestResolution = Union[
|
||||
Literal[
|
||||
"512",
|
||||
"1K",
|
||||
"2K",
|
||||
"4K",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
r"""Normalized resolution tier of the generated image. Concrete pixel dimensions are derived per-provider."""
|
||||
|
||||
|
||||
class ImageGenerationRequestTypedDict(TypedDict):
|
||||
r"""Image generation request input"""
|
||||
|
||||
model: str
|
||||
r"""The image generation model to use"""
|
||||
prompt: str
|
||||
r"""Text description of the desired image"""
|
||||
aspect_ratio: NotRequired[ImageGenerationRequestAspectRatio]
|
||||
r"""Normalized aspect ratio of the generated image. Providers clamp to their supported subset."""
|
||||
background: NotRequired[ImageGenerationRequestBackground]
|
||||
r"""Background treatment. `transparent` requires an output_format that supports alpha (png or webp)."""
|
||||
input_references: NotRequired[List[ContentPartImageTypedDict]]
|
||||
r"""Reference images to guide image-to-image generation, as base64 data URLs or HTTP(S) URLs."""
|
||||
n: NotRequired[int]
|
||||
r"""Number of images to generate (1-10). Providers that only support single-image generation reject n > 1."""
|
||||
output_compression: NotRequired[int]
|
||||
r"""Compression level (0-100) for webp/jpeg output. Ignored for png and by providers without a compression knob."""
|
||||
output_format: NotRequired[ImageGenerationRequestOutputFormat]
|
||||
r"""Encoding of the returned image bytes."""
|
||||
provider: NotRequired[ImageGenerationRequestProviderTypedDict]
|
||||
r"""Provider-specific passthrough configuration"""
|
||||
quality: NotRequired[ImageGenerationRequestQuality]
|
||||
r"""Rendering quality. Providers without a quality knob ignore this."""
|
||||
resolution: NotRequired[ImageGenerationRequestResolution]
|
||||
r"""Normalized resolution tier of the generated image. Concrete pixel dimensions are derived per-provider."""
|
||||
seed: NotRequired[int]
|
||||
r"""If specified, the generation will sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed for all providers."""
|
||||
size: NotRequired[str]
|
||||
r"""Optional. A convenience shorthand for output dimensions — pass a tier (\"2K\", \"4K\") or explicit pixels (\"2048x2048\") and we normalize it to the right dimensions for the chosen provider. Interchangeable with resolution + aspect_ratio; use those directly for enumerated, per-model discoverable values. Conflicting size + resolution/aspect_ratio is rejected."""
|
||||
stream: NotRequired[bool]
|
||||
r"""If true, partial images are streamed as SSE events as they become available. Only supported by providers with native streaming (currently OpenAI). Non-streaming providers ignore this flag and return a buffered response."""
|
||||
|
||||
|
||||
class ImageGenerationRequest(BaseModel):
|
||||
r"""Image generation request input"""
|
||||
|
||||
model: str
|
||||
r"""The image generation model to use"""
|
||||
|
||||
prompt: str
|
||||
r"""Text description of the desired image"""
|
||||
|
||||
aspect_ratio: Annotated[
|
||||
Optional[ImageGenerationRequestAspectRatio],
|
||||
PlainValidator(validate_open_enum(False)),
|
||||
] = None
|
||||
r"""Normalized aspect ratio of the generated image. Providers clamp to their supported subset."""
|
||||
|
||||
background: Annotated[
|
||||
Optional[ImageGenerationRequestBackground],
|
||||
PlainValidator(validate_open_enum(False)),
|
||||
] = None
|
||||
r"""Background treatment. `transparent` requires an output_format that supports alpha (png or webp)."""
|
||||
|
||||
input_references: Optional[List[ContentPartImage]] = None
|
||||
r"""Reference images to guide image-to-image generation, as base64 data URLs or HTTP(S) URLs."""
|
||||
|
||||
n: Optional[int] = None
|
||||
r"""Number of images to generate (1-10). Providers that only support single-image generation reject n > 1."""
|
||||
|
||||
output_compression: Optional[int] = None
|
||||
r"""Compression level (0-100) for webp/jpeg output. Ignored for png and by providers without a compression knob."""
|
||||
|
||||
output_format: Annotated[
|
||||
Optional[ImageGenerationRequestOutputFormat],
|
||||
PlainValidator(validate_open_enum(False)),
|
||||
] = None
|
||||
r"""Encoding of the returned image bytes."""
|
||||
|
||||
provider: Optional[ImageGenerationRequestProvider] = None
|
||||
r"""Provider-specific passthrough configuration"""
|
||||
|
||||
quality: Annotated[
|
||||
Optional[ImageGenerationRequestQuality],
|
||||
PlainValidator(validate_open_enum(False)),
|
||||
] = None
|
||||
r"""Rendering quality. Providers without a quality knob ignore this."""
|
||||
|
||||
resolution: Annotated[
|
||||
Optional[ImageGenerationRequestResolution],
|
||||
PlainValidator(validate_open_enum(False)),
|
||||
] = None
|
||||
r"""Normalized resolution tier of the generated image. Concrete pixel dimensions are derived per-provider."""
|
||||
|
||||
seed: Optional[int] = None
|
||||
r"""If specified, the generation will sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed for all providers."""
|
||||
|
||||
size: Optional[str] = None
|
||||
r"""Optional. A convenience shorthand for output dimensions — pass a tier (\"2K\", \"4K\") or explicit pixels (\"2048x2048\") and we normalize it to the right dimensions for the chosen provider. Interchangeable with resolution + aspect_ratio; use those directly for enumerated, per-model discoverable values. Conflicting size + resolution/aspect_ratio is rejected."""
|
||||
|
||||
stream: Optional[bool] = None
|
||||
r"""If true, partial images are streamed as SSE events as they become available. Only supported by providers with native streaming (currently OpenAI). Non-streaming providers ignore this flag and return a buffered response."""
|
||||
@@ -0,0 +1,41 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .imagegenerationusage import ImageGenerationUsage, ImageGenerationUsageTypedDict
|
||||
from openrouter.types import BaseModel
|
||||
from typing import List, Optional
|
||||
from typing_extensions import NotRequired, TypedDict
|
||||
|
||||
|
||||
class ImageGenerationResponseDataTypedDict(TypedDict):
|
||||
b64_json: str
|
||||
r"""Base64-encoded image bytes"""
|
||||
|
||||
|
||||
class ImageGenerationResponseData(BaseModel):
|
||||
b64_json: str
|
||||
r"""Base64-encoded image bytes"""
|
||||
|
||||
|
||||
class ImageGenerationResponseTypedDict(TypedDict):
|
||||
r"""Image generation response"""
|
||||
|
||||
created: int
|
||||
r"""Unix timestamp (seconds) when the image was generated"""
|
||||
data: List[ImageGenerationResponseDataTypedDict]
|
||||
r"""Generated images"""
|
||||
usage: NotRequired[ImageGenerationUsageTypedDict]
|
||||
r"""Token and cost usage for the image generation request, when available"""
|
||||
|
||||
|
||||
class ImageGenerationResponse(BaseModel):
|
||||
r"""Image generation response"""
|
||||
|
||||
created: int
|
||||
r"""Unix timestamp (seconds) when the image was generated"""
|
||||
|
||||
data: List[ImageGenerationResponseData]
|
||||
r"""Generated images"""
|
||||
|
||||
usage: Optional[ImageGenerationUsage] = None
|
||||
r"""Token and cost usage for the image generation request, when available"""
|
||||
@@ -16,7 +16,7 @@ from typing import Literal, Optional, Union
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
|
||||
Background = Union[
|
||||
ImageGenerationServerToolBackground = Union[
|
||||
Literal[
|
||||
"transparent",
|
||||
"opaque",
|
||||
@@ -64,7 +64,7 @@ Moderation = Union[
|
||||
]
|
||||
|
||||
|
||||
OutputFormat = Union[
|
||||
ImageGenerationServerToolOutputFormat = Union[
|
||||
Literal[
|
||||
"png",
|
||||
"webp",
|
||||
@@ -74,7 +74,7 @@ OutputFormat = Union[
|
||||
]
|
||||
|
||||
|
||||
Quality = Union[
|
||||
ImageGenerationServerToolQuality = Union[
|
||||
Literal[
|
||||
"low",
|
||||
"medium",
|
||||
@@ -103,15 +103,15 @@ class ImageGenerationServerToolTypedDict(TypedDict):
|
||||
r"""Image generation tool configuration"""
|
||||
|
||||
type: ImageGenerationServerToolType
|
||||
background: NotRequired[Background]
|
||||
background: NotRequired[ImageGenerationServerToolBackground]
|
||||
input_fidelity: NotRequired[Nullable[InputFidelity]]
|
||||
input_image_mask: NotRequired[InputImageMaskTypedDict]
|
||||
model: NotRequired[ModelEnum]
|
||||
moderation: NotRequired[Moderation]
|
||||
output_compression: NotRequired[int]
|
||||
output_format: NotRequired[OutputFormat]
|
||||
output_format: NotRequired[ImageGenerationServerToolOutputFormat]
|
||||
partial_images: NotRequired[int]
|
||||
quality: NotRequired[Quality]
|
||||
quality: NotRequired[ImageGenerationServerToolQuality]
|
||||
size: NotRequired[Size]
|
||||
|
||||
|
||||
@@ -121,7 +121,8 @@ class ImageGenerationServerTool(BaseModel):
|
||||
type: ImageGenerationServerToolType
|
||||
|
||||
background: Annotated[
|
||||
Optional[Background], PlainValidator(validate_open_enum(False))
|
||||
Optional[ImageGenerationServerToolBackground],
|
||||
PlainValidator(validate_open_enum(False)),
|
||||
] = None
|
||||
|
||||
input_fidelity: Annotated[
|
||||
@@ -141,14 +142,16 @@ class ImageGenerationServerTool(BaseModel):
|
||||
output_compression: Optional[int] = None
|
||||
|
||||
output_format: Annotated[
|
||||
Optional[OutputFormat], PlainValidator(validate_open_enum(False))
|
||||
Optional[ImageGenerationServerToolOutputFormat],
|
||||
PlainValidator(validate_open_enum(False)),
|
||||
] = None
|
||||
|
||||
partial_images: Optional[int] = None
|
||||
|
||||
quality: Annotated[Optional[Quality], PlainValidator(validate_open_enum(False))] = (
|
||||
None
|
||||
)
|
||||
quality: Annotated[
|
||||
Optional[ImageGenerationServerToolQuality],
|
||||
PlainValidator(validate_open_enum(False)),
|
||||
] = None
|
||||
|
||||
size: Annotated[Optional[Size], PlainValidator(validate_open_enum(False))] = None
|
||||
|
||||
|
||||
@@ -0,0 +1,331 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .anthropicspeed import AnthropicSpeed
|
||||
from .anthropicusageiteration import (
|
||||
AnthropicUsageIteration,
|
||||
AnthropicUsageIterationTypedDict,
|
||||
)
|
||||
from .costdetails import CostDetails, CostDetailsTypedDict
|
||||
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 import List, Optional
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
|
||||
class ImageGenerationUsageCompletionTokensDetailsTypedDict(TypedDict):
|
||||
audio_tokens: NotRequired[Nullable[int]]
|
||||
r"""Tokens generated by the model for audio output."""
|
||||
image_tokens: NotRequired[Nullable[int]]
|
||||
r"""Tokens generated by the model for image output."""
|
||||
reasoning_tokens: NotRequired[Nullable[int]]
|
||||
r"""Tokens generated by the model for reasoning."""
|
||||
|
||||
|
||||
class ImageGenerationUsageCompletionTokensDetails(BaseModel):
|
||||
audio_tokens: OptionalNullable[int] = UNSET
|
||||
r"""Tokens generated by the model for audio output."""
|
||||
|
||||
image_tokens: OptionalNullable[int] = UNSET
|
||||
r"""Tokens generated by the model for image output."""
|
||||
|
||||
reasoning_tokens: OptionalNullable[int] = UNSET
|
||||
r"""Tokens generated by the model for reasoning."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = ["audio_tokens", "image_tokens", "reasoning_tokens"]
|
||||
nullable_fields = ["audio_tokens", "image_tokens", "reasoning_tokens"]
|
||||
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 ImageGenerationUsagePromptTokensDetailsTypedDict(TypedDict):
|
||||
r"""Breakdown of tokens used in the prompt."""
|
||||
|
||||
audio_tokens: NotRequired[Nullable[int]]
|
||||
r"""Tokens used for input audio."""
|
||||
cache_write_tokens: NotRequired[Nullable[int]]
|
||||
r"""Tokens written to cache. Only returned for models with explicit caching and cache write pricing."""
|
||||
cached_tokens: NotRequired[Nullable[int]]
|
||||
r"""Tokens cached by the endpoint."""
|
||||
file_tokens: NotRequired[Nullable[int]]
|
||||
r"""Tokens used for input files/documents."""
|
||||
video_tokens: NotRequired[Nullable[int]]
|
||||
r"""Tokens used for input video."""
|
||||
|
||||
|
||||
class ImageGenerationUsagePromptTokensDetails(BaseModel):
|
||||
r"""Breakdown of tokens used in the prompt."""
|
||||
|
||||
audio_tokens: OptionalNullable[int] = UNSET
|
||||
r"""Tokens used for input audio."""
|
||||
|
||||
cache_write_tokens: OptionalNullable[int] = UNSET
|
||||
r"""Tokens written to cache. Only returned for models with explicit caching and cache write pricing."""
|
||||
|
||||
cached_tokens: OptionalNullable[int] = UNSET
|
||||
r"""Tokens cached by the endpoint."""
|
||||
|
||||
file_tokens: OptionalNullable[int] = UNSET
|
||||
r"""Tokens used for input files/documents."""
|
||||
|
||||
video_tokens: OptionalNullable[int] = UNSET
|
||||
r"""Tokens used for input video."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = [
|
||||
"audio_tokens",
|
||||
"cache_write_tokens",
|
||||
"cached_tokens",
|
||||
"file_tokens",
|
||||
"video_tokens",
|
||||
]
|
||||
nullable_fields = [
|
||||
"audio_tokens",
|
||||
"cache_write_tokens",
|
||||
"cached_tokens",
|
||||
"file_tokens",
|
||||
"video_tokens",
|
||||
]
|
||||
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 ServerToolUseTypedDict(TypedDict):
|
||||
r"""Usage for server-side tool execution (e.g., web search)"""
|
||||
|
||||
tool_calls_executed: NotRequired[Nullable[int]]
|
||||
r"""Number of OpenRouter server tool calls that executed and produced a result."""
|
||||
tool_calls_requested: NotRequired[Nullable[int]]
|
||||
r"""Total number of OpenRouter server-orchestrated tool calls the model requested, across all tool types. Provider-native tools (e.g. native web search) are not counted here."""
|
||||
web_search_requests: NotRequired[Nullable[int]]
|
||||
r"""Number of web searches performed by server-side tools. For server-orchestrated tool calls a web search is also counted in tool_calls_requested; provider-native web search may report web_search_requests only. Do not sum the two."""
|
||||
|
||||
|
||||
class ServerToolUse(BaseModel):
|
||||
r"""Usage for server-side tool execution (e.g., web search)"""
|
||||
|
||||
tool_calls_executed: OptionalNullable[int] = UNSET
|
||||
r"""Number of OpenRouter server tool calls that executed and produced a result."""
|
||||
|
||||
tool_calls_requested: OptionalNullable[int] = UNSET
|
||||
r"""Total number of OpenRouter server-orchestrated tool calls the model requested, across all tool types. Provider-native tools (e.g. native web search) are not counted here."""
|
||||
|
||||
web_search_requests: OptionalNullable[int] = UNSET
|
||||
r"""Number of web searches performed by server-side tools. For server-orchestrated tool calls a web search is also counted in tool_calls_requested; provider-native web search may report web_search_requests only. Do not sum the two."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = [
|
||||
"tool_calls_executed",
|
||||
"tool_calls_requested",
|
||||
"web_search_requests",
|
||||
]
|
||||
nullable_fields = [
|
||||
"tool_calls_executed",
|
||||
"tool_calls_requested",
|
||||
"web_search_requests",
|
||||
]
|
||||
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 ImageGenerationUsageTypedDict(TypedDict):
|
||||
r"""Token and cost usage for the image generation request, when available"""
|
||||
|
||||
completion_tokens: int
|
||||
r"""The tokens generated"""
|
||||
prompt_tokens: int
|
||||
r"""Including images, input audio, and tools if any"""
|
||||
total_tokens: int
|
||||
r"""Sum of the above two fields"""
|
||||
completion_tokens_details: NotRequired[
|
||||
Nullable[ImageGenerationUsageCompletionTokensDetailsTypedDict]
|
||||
]
|
||||
cost: NotRequired[Nullable[float]]
|
||||
r"""Cost of the completion"""
|
||||
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"""
|
||||
iterations: NotRequired[Nullable[List[AnthropicUsageIterationTypedDict]]]
|
||||
prompt_tokens_details: NotRequired[
|
||||
Nullable[ImageGenerationUsagePromptTokensDetailsTypedDict]
|
||||
]
|
||||
r"""Breakdown of tokens used in the prompt."""
|
||||
server_tool_use: NotRequired[Nullable[ServerToolUseTypedDict]]
|
||||
r"""Usage for server-side tool execution (e.g., web search)"""
|
||||
service_tier: NotRequired[Nullable[str]]
|
||||
r"""The service tier used by the upstream provider for this request"""
|
||||
speed: NotRequired[Nullable[AnthropicSpeed]]
|
||||
|
||||
|
||||
class ImageGenerationUsage(BaseModel):
|
||||
r"""Token and cost usage for the image generation request, when available"""
|
||||
|
||||
completion_tokens: int
|
||||
r"""The tokens generated"""
|
||||
|
||||
prompt_tokens: int
|
||||
r"""Including images, input audio, and tools if any"""
|
||||
|
||||
total_tokens: int
|
||||
r"""Sum of the above two fields"""
|
||||
|
||||
completion_tokens_details: OptionalNullable[
|
||||
ImageGenerationUsageCompletionTokensDetails
|
||||
] = UNSET
|
||||
|
||||
cost: OptionalNullable[float] = UNSET
|
||||
r"""Cost of the completion"""
|
||||
|
||||
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"""
|
||||
|
||||
iterations: OptionalNullable[List[AnthropicUsageIteration]] = UNSET
|
||||
|
||||
prompt_tokens_details: OptionalNullable[ImageGenerationUsagePromptTokensDetails] = (
|
||||
UNSET
|
||||
)
|
||||
r"""Breakdown of tokens used in the prompt."""
|
||||
|
||||
server_tool_use: OptionalNullable[ServerToolUse] = UNSET
|
||||
r"""Usage for server-side tool execution (e.g., web search)"""
|
||||
|
||||
service_tier: OptionalNullable[str] = UNSET
|
||||
r"""The service tier used by the upstream provider for this request"""
|
||||
|
||||
speed: Annotated[
|
||||
OptionalNullable[AnthropicSpeed], PlainValidator(validate_open_enum(False))
|
||||
] = UNSET
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = [
|
||||
"completion_tokens_details",
|
||||
"cost",
|
||||
"cost_details",
|
||||
"is_byok",
|
||||
"iterations",
|
||||
"prompt_tokens_details",
|
||||
"server_tool_use",
|
||||
"service_tier",
|
||||
"speed",
|
||||
]
|
||||
nullable_fields = [
|
||||
"completion_tokens_details",
|
||||
"cost",
|
||||
"cost_details",
|
||||
"iterations",
|
||||
"prompt_tokens_details",
|
||||
"server_tool_use",
|
||||
"service_tier",
|
||||
"speed",
|
||||
]
|
||||
null_default_fields = []
|
||||
|
||||
serialized = handler(self)
|
||||
|
||||
m = {}
|
||||
|
||||
for n, f in type(self).model_fields.items():
|
||||
k = f.alias or n
|
||||
val = serialized.get(k)
|
||||
serialized.pop(k, None)
|
||||
|
||||
optional_nullable = k in optional_fields and k in nullable_fields
|
||||
is_set = (
|
||||
self.__pydantic_fields_set__.intersection({n})
|
||||
or k in null_default_fields
|
||||
) # pylint: disable=no-member
|
||||
|
||||
if val is not None and val != UNSET_SENTINEL:
|
||||
m[k] = val
|
||||
elif val != UNSET_SENTINEL and (
|
||||
not k in optional_fields or (optional_nullable and is_set)
|
||||
):
|
||||
m[k] = val
|
||||
|
||||
return m
|
||||
@@ -0,0 +1,34 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.types import BaseModel
|
||||
from typing import Literal
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
|
||||
ImageGenPartialImageEventType = Literal["image_generation.partial_image",]
|
||||
r"""The event type"""
|
||||
|
||||
|
||||
class ImageGenPartialImageEventTypedDict(TypedDict):
|
||||
r"""Emitted when a partial image becomes available during streaming generation"""
|
||||
|
||||
b64_json: str
|
||||
r"""Base64-encoded partial image data"""
|
||||
partial_image_index: int
|
||||
r"""0-based index indicating which partial image this is in the sequence"""
|
||||
type: ImageGenPartialImageEventType
|
||||
r"""The event type"""
|
||||
|
||||
|
||||
class ImageGenPartialImageEvent(BaseModel):
|
||||
r"""Emitted when a partial image becomes available during streaming generation"""
|
||||
|
||||
b64_json: str
|
||||
r"""Base64-encoded partial image data"""
|
||||
|
||||
partial_image_index: int
|
||||
r"""0-based index indicating which partial image this is in the sequence"""
|
||||
|
||||
type: ImageGenPartialImageEventType
|
||||
r"""The event type"""
|
||||
@@ -0,0 +1,95 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.types import (
|
||||
BaseModel,
|
||||
Nullable,
|
||||
OptionalNullable,
|
||||
UNSET,
|
||||
UNSET_SENTINEL,
|
||||
)
|
||||
from pydantic import model_serializer
|
||||
from typing import Literal
|
||||
from typing_extensions import NotRequired, TypedDict
|
||||
|
||||
|
||||
class ImageGenStreamErrorEventErrorTypedDict(TypedDict):
|
||||
r"""Provider error details"""
|
||||
|
||||
message: str
|
||||
r"""Provider error message"""
|
||||
code: NotRequired[Nullable[str]]
|
||||
r"""Provider error code, when supplied"""
|
||||
param: NotRequired[Nullable[str]]
|
||||
r"""Request parameter associated with the error, when supplied"""
|
||||
type: NotRequired[Nullable[str]]
|
||||
r"""Provider error type, when supplied"""
|
||||
|
||||
|
||||
class ImageGenStreamErrorEventError(BaseModel):
|
||||
r"""Provider error details"""
|
||||
|
||||
message: str
|
||||
r"""Provider error message"""
|
||||
|
||||
code: OptionalNullable[str] = UNSET
|
||||
r"""Provider error code, when supplied"""
|
||||
|
||||
param: OptionalNullable[str] = UNSET
|
||||
r"""Request parameter associated with the error, when supplied"""
|
||||
|
||||
type: OptionalNullable[str] = UNSET
|
||||
r"""Provider error type, when supplied"""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = ["code", "param", "type"]
|
||||
nullable_fields = ["code", "param", "type"]
|
||||
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
|
||||
|
||||
|
||||
ImageGenStreamErrorEventType = Literal["error",]
|
||||
r"""The event type"""
|
||||
|
||||
|
||||
class ImageGenStreamErrorEventTypedDict(TypedDict):
|
||||
r"""Emitted when streaming generation fails after the SSE response starts"""
|
||||
|
||||
error: ImageGenStreamErrorEventErrorTypedDict
|
||||
r"""Provider error details"""
|
||||
type: ImageGenStreamErrorEventType
|
||||
r"""The event type"""
|
||||
|
||||
|
||||
class ImageGenStreamErrorEvent(BaseModel):
|
||||
r"""Emitted when streaming generation fails after the SSE response starts"""
|
||||
|
||||
error: ImageGenStreamErrorEventError
|
||||
r"""Provider error details"""
|
||||
|
||||
type: ImageGenStreamErrorEventType
|
||||
r"""The event type"""
|
||||
@@ -0,0 +1,29 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .imageoutputmodality import ImageOutputModality
|
||||
from .inputmodality import InputModality
|
||||
from openrouter.types import BaseModel
|
||||
from openrouter.utils import validate_open_enum
|
||||
from pydantic.functional_validators import PlainValidator
|
||||
from typing import List
|
||||
from typing_extensions import Annotated, TypedDict
|
||||
|
||||
|
||||
class ImageModelArchitectureTypedDict(TypedDict):
|
||||
input_modalities: List[InputModality]
|
||||
r"""Supported input modalities"""
|
||||
output_modalities: List[ImageOutputModality]
|
||||
r"""Supported output modalities"""
|
||||
|
||||
|
||||
class ImageModelArchitecture(BaseModel):
|
||||
input_modalities: List[
|
||||
Annotated[InputModality, PlainValidator(validate_open_enum(False))]
|
||||
]
|
||||
r"""Supported input modalities"""
|
||||
|
||||
output_modalities: List[
|
||||
Annotated[ImageOutputModality, PlainValidator(validate_open_enum(False))]
|
||||
]
|
||||
r"""Supported output modalities"""
|
||||
@@ -0,0 +1,24 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .imageendpoint import ImageEndpoint, ImageEndpointTypedDict
|
||||
from openrouter.types import BaseModel
|
||||
from typing import List
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
|
||||
class ImageModelEndpointsResponseTypedDict(TypedDict):
|
||||
r"""The full per-endpoint records for an image model."""
|
||||
|
||||
endpoints: List[ImageEndpointTypedDict]
|
||||
id: str
|
||||
r"""Model slug"""
|
||||
|
||||
|
||||
class ImageModelEndpointsResponse(BaseModel):
|
||||
r"""The full per-endpoint records for an image model."""
|
||||
|
||||
endpoints: List[ImageEndpoint]
|
||||
|
||||
id: str
|
||||
r"""Model slug"""
|
||||
@@ -0,0 +1,56 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .capabilitydescriptor import CapabilityDescriptor, CapabilityDescriptorTypedDict
|
||||
from .imagemodelarchitecture import (
|
||||
ImageModelArchitecture,
|
||||
ImageModelArchitectureTypedDict,
|
||||
)
|
||||
from openrouter.types import BaseModel
|
||||
from typing import Dict
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
|
||||
class ImageModelListItemTypedDict(TypedDict):
|
||||
r"""A single image model in the discovery listing."""
|
||||
|
||||
architecture: ImageModelArchitectureTypedDict
|
||||
created: int
|
||||
r"""Unix timestamp (seconds) of when the model was created"""
|
||||
description: str
|
||||
endpoints: str
|
||||
r"""Relative URL to the full per-endpoint records for this model"""
|
||||
id: str
|
||||
r"""Model slug"""
|
||||
name: str
|
||||
r"""Display name"""
|
||||
supported_parameters: Dict[str, CapabilityDescriptorTypedDict]
|
||||
r"""Union of supported parameters across every endpoint of this model. Coarse discovery aid; the definitive per-endpoint set is behind the endpoints URL."""
|
||||
supports_streaming: bool
|
||||
r"""Whether any endpoint of this model supports native SSE streaming on the dedicated Image API (i.e. `stream: true` in the request). OR across endpoints."""
|
||||
|
||||
|
||||
class ImageModelListItem(BaseModel):
|
||||
r"""A single image model in the discovery listing."""
|
||||
|
||||
architecture: ImageModelArchitecture
|
||||
|
||||
created: int
|
||||
r"""Unix timestamp (seconds) of when the model was created"""
|
||||
|
||||
description: str
|
||||
|
||||
endpoints: str
|
||||
r"""Relative URL to the full per-endpoint records for this model"""
|
||||
|
||||
id: str
|
||||
r"""Model slug"""
|
||||
|
||||
name: str
|
||||
r"""Display name"""
|
||||
|
||||
supported_parameters: Dict[str, CapabilityDescriptor]
|
||||
r"""Union of supported parameters across every endpoint of this model. Coarse discovery aid; the definitive per-endpoint set is behind the endpoints URL."""
|
||||
|
||||
supports_streaming: bool
|
||||
r"""Whether any endpoint of this model supports native SSE streaming on the dedicated Image API (i.e. `stream: true` in the request). OR across endpoints."""
|
||||
@@ -0,0 +1,19 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .imagemodellistitem import ImageModelListItem, ImageModelListItemTypedDict
|
||||
from openrouter.types import BaseModel
|
||||
from typing import List
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
|
||||
class ImageModelsListResponseTypedDict(TypedDict):
|
||||
r"""List of image generation models."""
|
||||
|
||||
data: List[ImageModelListItemTypedDict]
|
||||
|
||||
|
||||
class ImageModelsListResponse(BaseModel):
|
||||
r"""List of image generation models."""
|
||||
|
||||
data: List[ImageModelListItem]
|
||||
@@ -0,0 +1,20 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.types import UnrecognizedStr
|
||||
from typing import Literal, Union
|
||||
|
||||
|
||||
ImageOutputModality = Union[
|
||||
Literal[
|
||||
"text",
|
||||
"image",
|
||||
"embeddings",
|
||||
"audio",
|
||||
"video",
|
||||
"rerank",
|
||||
"speech",
|
||||
"transcription",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
@@ -0,0 +1,51 @@
|
||||
"""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_open_enum
|
||||
from pydantic.functional_validators import PlainValidator
|
||||
from typing import Literal, Optional, Union
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
|
||||
Billable = Union[
|
||||
Literal[
|
||||
"output_image",
|
||||
"input_image",
|
||||
"input_font",
|
||||
"input_reference",
|
||||
"input_text",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
|
||||
|
||||
Unit = Union[
|
||||
Literal[
|
||||
"image",
|
||||
"megapixel",
|
||||
"token",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
|
||||
|
||||
class ImagePricingEntryTypedDict(TypedDict):
|
||||
r"""One billable pricing line for an image provider."""
|
||||
|
||||
billable: Billable
|
||||
cost_usd: float
|
||||
unit: Unit
|
||||
variant: NotRequired[str]
|
||||
|
||||
|
||||
class ImagePricingEntry(BaseModel):
|
||||
r"""One billable pricing line for an image provider."""
|
||||
|
||||
billable: Annotated[Billable, PlainValidator(validate_open_enum(False))]
|
||||
|
||||
cost_usd: float
|
||||
|
||||
unit: Annotated[Unit, PlainValidator(validate_open_enum(False))]
|
||||
|
||||
variant: Optional[str] = None
|
||||
@@ -0,0 +1,48 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .imagegencompletedevent import (
|
||||
ImageGenCompletedEvent,
|
||||
ImageGenCompletedEventTypedDict,
|
||||
)
|
||||
from .imagegenpartialimageevent import (
|
||||
ImageGenPartialImageEvent,
|
||||
ImageGenPartialImageEventTypedDict,
|
||||
)
|
||||
from .imagegenstreamerrorevent import (
|
||||
ImageGenStreamErrorEvent,
|
||||
ImageGenStreamErrorEventTypedDict,
|
||||
)
|
||||
from openrouter.types import BaseModel
|
||||
from openrouter.utils import get_discriminator
|
||||
from pydantic import Discriminator, Tag
|
||||
from typing import Union
|
||||
from typing_extensions import Annotated, TypeAliasType, TypedDict
|
||||
|
||||
|
||||
ImageStreamingResponseDataTypedDict = TypeAliasType(
|
||||
"ImageStreamingResponseDataTypedDict",
|
||||
Union[
|
||||
ImageGenStreamErrorEventTypedDict,
|
||||
ImageGenPartialImageEventTypedDict,
|
||||
ImageGenCompletedEventTypedDict,
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
ImageStreamingResponseData = Annotated[
|
||||
Union[
|
||||
Annotated[ImageGenPartialImageEvent, Tag("image_generation.partial_image")],
|
||||
Annotated[ImageGenCompletedEvent, Tag("image_generation.completed")],
|
||||
Annotated[ImageGenStreamErrorEvent, Tag("error")],
|
||||
],
|
||||
Discriminator(lambda m: get_discriminator(m, "type", "type")),
|
||||
]
|
||||
|
||||
|
||||
class ImageStreamingResponseTypedDict(TypedDict):
|
||||
data: ImageStreamingResponseDataTypedDict
|
||||
|
||||
|
||||
class ImageStreamingResponse(BaseModel):
|
||||
data: ImageStreamingResponseData
|
||||
@@ -298,11 +298,11 @@ class ContextManagement(BaseModel):
|
||||
edits: Optional[List[Edit]] = None
|
||||
|
||||
|
||||
class MetadataTypedDict(TypedDict):
|
||||
class MessagesRequestMetadataTypedDict(TypedDict):
|
||||
user_id: NotRequired[Nullable[str]]
|
||||
|
||||
|
||||
class Metadata(BaseModel):
|
||||
class MessagesRequestMetadata(BaseModel):
|
||||
user_id: OptionalNullable[str] = UNSET
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
@@ -1050,7 +1050,7 @@ class MessagesRequestTypedDict(TypedDict):
|
||||
fallbacks: NotRequired[Nullable[List[MessagesFallbackParamTypedDict]]]
|
||||
r"""Fallback models to try if the primary model fails or refuses, in order. Handled by OpenRouter multi-model routing rather than Anthropic server-side fallbacks; cannot be combined with `models`. Each entry accepts only `model`. Maximum of 3 entries."""
|
||||
max_tokens: NotRequired[int]
|
||||
metadata: NotRequired[MetadataTypedDict]
|
||||
metadata: NotRequired[MessagesRequestMetadataTypedDict]
|
||||
models: NotRequired[List[str]]
|
||||
output_config: NotRequired[MessagesOutputConfigTypedDict]
|
||||
r"""Configuration for controlling output behavior. Supports the effort parameter and structured output format."""
|
||||
@@ -1096,7 +1096,7 @@ class MessagesRequest(BaseModel):
|
||||
|
||||
max_tokens: Optional[int] = None
|
||||
|
||||
metadata: Optional[Metadata] = None
|
||||
metadata: Optional[MessagesRequestMetadata] = None
|
||||
|
||||
models: Optional[List[str]] = None
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ from .defaultparameters import DefaultParameters, DefaultParametersTypedDict
|
||||
from .modelarchitecture import ModelArchitecture, ModelArchitectureTypedDict
|
||||
from .modelbenchmarks import ModelBenchmarks, ModelBenchmarksTypedDict
|
||||
from .modellinks import ModelLinks, ModelLinksTypedDict
|
||||
from .modelreasoning import ModelReasoning, ModelReasoningTypedDict
|
||||
from .parameter import Parameter
|
||||
from .perrequestlimits import PerRequestLimits, PerRequestLimitsTypedDict
|
||||
from .publicpricing import PublicPricing, PublicPricingTypedDict
|
||||
@@ -62,6 +63,8 @@ class ModelTypedDict(TypedDict):
|
||||
r"""Hugging Face model identifier, if applicable"""
|
||||
knowledge_cutoff: NotRequired[Nullable[str]]
|
||||
r"""The date up to which the model was trained on data. ISO 8601 date string (YYYY-MM-DD) or null if unknown."""
|
||||
reasoning: NotRequired[ModelReasoningTypedDict]
|
||||
r"""Reasoning effort configuration. Omitted for non-reasoning models and dynamic router models."""
|
||||
|
||||
|
||||
class Model(BaseModel):
|
||||
@@ -123,6 +126,9 @@ class Model(BaseModel):
|
||||
knowledge_cutoff: OptionalNullable[str] = UNSET
|
||||
r"""The date up to which the model was trained on data. ISO 8601 date string (YYYY-MM-DD) or null if unknown."""
|
||||
|
||||
reasoning: Optional[ModelReasoning] = None
|
||||
r"""Reasoning effort configuration. Omitted for non-reasoning models and dynamic router models."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = [
|
||||
@@ -131,6 +137,7 @@ class Model(BaseModel):
|
||||
"expiration_date",
|
||||
"hugging_face_id",
|
||||
"knowledge_cutoff",
|
||||
"reasoning",
|
||||
]
|
||||
nullable_fields = [
|
||||
"context_length",
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .reasoningeffort import ReasoningEffort
|
||||
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 List, Literal, Optional, Union
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
|
||||
DefaultEffort = Union[
|
||||
Literal[
|
||||
"max",
|
||||
"xhigh",
|
||||
"high",
|
||||
"medium",
|
||||
"low",
|
||||
"minimal",
|
||||
"none",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
r"""Default reasoning effort when the client enables reasoning without specifying effort. Maps to `reasoning.effort` in chat requests. When `\"none\"`, prefer omitting effort unless the user explicitly disables reasoning."""
|
||||
|
||||
|
||||
class ModelReasoningTypedDict(TypedDict):
|
||||
r"""Reasoning effort configuration. Omitted for non-reasoning models and dynamic router models."""
|
||||
|
||||
mandatory: bool
|
||||
r"""When true, reasoning cannot be disabled and effort \"none\" is rejected."""
|
||||
default_effort: NotRequired[Nullable[DefaultEffort]]
|
||||
default_enabled: NotRequired[bool]
|
||||
r"""Default reasoning enabled state when the client does not set `reasoning.enabled`."""
|
||||
supported_efforts: NotRequired[Nullable[List[Nullable[ReasoningEffort]]]]
|
||||
r"""Allowed reasoning effort values for this model, in descending effort order (highest first). Null means no allowlist — all gateway effort values are accepted."""
|
||||
supports_max_tokens: NotRequired[bool]
|
||||
r"""Present and `true` when the model accepts `reasoning.max_tokens` in requests (Anthropic-style) instead of or in addition to `reasoning.effort`. Omitted otherwise."""
|
||||
|
||||
|
||||
class ModelReasoning(BaseModel):
|
||||
r"""Reasoning effort configuration. Omitted for non-reasoning models and dynamic router models."""
|
||||
|
||||
mandatory: bool
|
||||
r"""When true, reasoning cannot be disabled and effort \"none\" is rejected."""
|
||||
|
||||
default_effort: Annotated[
|
||||
OptionalNullable[DefaultEffort], PlainValidator(validate_open_enum(False))
|
||||
] = UNSET
|
||||
|
||||
default_enabled: Optional[bool] = None
|
||||
r"""Default reasoning enabled state when the client does not set `reasoning.enabled`."""
|
||||
|
||||
supported_efforts: OptionalNullable[
|
||||
List[
|
||||
Annotated[
|
||||
Nullable[ReasoningEffort], PlainValidator(validate_open_enum(False))
|
||||
]
|
||||
]
|
||||
] = UNSET
|
||||
r"""Allowed reasoning effort values for this model, in descending effort order (highest first). Null means no allowlist — all gateway effort values are accepted."""
|
||||
|
||||
supports_max_tokens: Optional[bool] = None
|
||||
r"""Present and `true` when the model accepts `reasoning.max_tokens` in requests (Anthropic-style) instead of or in addition to `reasoning.effort`. Omitted otherwise."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = [
|
||||
"default_effort",
|
||||
"default_enabled",
|
||||
"supported_efforts",
|
||||
"supports_max_tokens",
|
||||
]
|
||||
nullable_fields = ["default_effort", "supported_efforts"]
|
||||
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
|
||||
@@ -15,6 +15,7 @@ from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
class ObservabilityArizeDestinationConfigTypedDict(TypedDict):
|
||||
api_key: str
|
||||
model_id: str
|
||||
r"""The name of the tracing project in Arize AX"""
|
||||
space_key: str
|
||||
base_url: NotRequired[str]
|
||||
headers: NotRequired[Dict[str, str]]
|
||||
@@ -25,6 +26,7 @@ class ObservabilityArizeDestinationConfig(BaseModel):
|
||||
api_key: Annotated[str, pydantic.Field(alias="apiKey")]
|
||||
|
||||
model_id: Annotated[str, pydantic.Field(alias="modelId")]
|
||||
r"""The name of the tracing project in Arize AX"""
|
||||
|
||||
space_key: Annotated[str, pydantic.Field(alias="spaceKey")]
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .apierrortype import APIErrorType
|
||||
from .applypatchservertool import ApplyPatchServerTool, ApplyPatchServerToolTypedDict
|
||||
from .baseinputs_union import BaseInputsUnion, BaseInputsUnionTypedDict
|
||||
from .basereasoningconfig import BaseReasoningConfig, BaseReasoningConfigTypedDict
|
||||
@@ -203,6 +204,8 @@ class OpenResponsesResultTypedDict(TypedDict):
|
||||
usage: NotRequired[Nullable[UsageTypedDict]]
|
||||
r"""Token usage information for the response"""
|
||||
user: NotRequired[Nullable[str]]
|
||||
error_type: NotRequired[APIErrorType]
|
||||
r"""Canonical OpenRouter error type, stable across all API formats"""
|
||||
openrouter_metadata: NotRequired[OpenRouterMetadataTypedDict]
|
||||
|
||||
|
||||
@@ -285,6 +288,11 @@ class OpenResponsesResult(BaseModel):
|
||||
|
||||
user: OptionalNullable[str] = UNSET
|
||||
|
||||
error_type: Annotated[
|
||||
Optional[APIErrorType], PlainValidator(validate_open_enum(False))
|
||||
] = None
|
||||
r"""Canonical OpenRouter error type, stable across all API formats"""
|
||||
|
||||
openrouter_metadata: Optional[OpenRouterMetadata] = None
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
@@ -306,6 +314,7 @@ class OpenResponsesResult(BaseModel):
|
||||
"truncation",
|
||||
"usage",
|
||||
"user",
|
||||
"error_type",
|
||||
"openrouter_metadata",
|
||||
]
|
||||
nullable_fields = [
|
||||
|
||||
@@ -44,12 +44,14 @@ ProviderName = Union[
|
||||
"Google",
|
||||
"Google AI Studio",
|
||||
"Groq",
|
||||
"HeyGen",
|
||||
"Inception",
|
||||
"Inceptron",
|
||||
"InferenceNet",
|
||||
"Ionstream",
|
||||
"Infermatic",
|
||||
"Io Net",
|
||||
"Inferact vLLM",
|
||||
"Inflection",
|
||||
"Liquid",
|
||||
"Mara",
|
||||
@@ -76,6 +78,7 @@ ProviderName = Union[
|
||||
"Recraft",
|
||||
"Reka",
|
||||
"Relace",
|
||||
"Sakana AI",
|
||||
"SambaNova",
|
||||
"Seed",
|
||||
"SiliconFlow",
|
||||
@@ -84,6 +87,7 @@ ProviderName = Union[
|
||||
"Stealth",
|
||||
"StreamLake",
|
||||
"Switchpoint",
|
||||
"Tenstorrent",
|
||||
"Together",
|
||||
"Upstage",
|
||||
"Venice",
|
||||
|
||||
@@ -55,11 +55,13 @@ class ProviderOptionsTypedDict(TypedDict):
|
||||
google_vertex: NotRequired[Dict[str, Nullable[Any]]]
|
||||
gopomelo: NotRequired[Dict[str, Nullable[Any]]]
|
||||
groq: NotRequired[Dict[str, Nullable[Any]]]
|
||||
heygen: NotRequired[Dict[str, Nullable[Any]]]
|
||||
huggingface: NotRequired[Dict[str, Nullable[Any]]]
|
||||
hyperbolic: NotRequired[Dict[str, Nullable[Any]]]
|
||||
hyperbolic_quantized: NotRequired[Dict[str, Nullable[Any]]]
|
||||
inception: NotRequired[Dict[str, Nullable[Any]]]
|
||||
inceptron: NotRequired[Dict[str, Nullable[Any]]]
|
||||
inferact_vllm: NotRequired[Dict[str, Nullable[Any]]]
|
||||
inference_net: NotRequired[Dict[str, Nullable[Any]]]
|
||||
infermatic: NotRequired[Dict[str, Nullable[Any]]]
|
||||
inflection: NotRequired[Dict[str, Nullable[Any]]]
|
||||
@@ -104,6 +106,7 @@ class ProviderOptionsTypedDict(TypedDict):
|
||||
reka: NotRequired[Dict[str, Nullable[Any]]]
|
||||
relace: NotRequired[Dict[str, Nullable[Any]]]
|
||||
replicate: NotRequired[Dict[str, Nullable[Any]]]
|
||||
sakana_ai: NotRequired[Dict[str, Nullable[Any]]]
|
||||
sambanova: NotRequired[Dict[str, Nullable[Any]]]
|
||||
sambanova_cloaked: NotRequired[Dict[str, Nullable[Any]]]
|
||||
seed: NotRequired[Dict[str, Nullable[Any]]]
|
||||
@@ -115,6 +118,7 @@ class ProviderOptionsTypedDict(TypedDict):
|
||||
streamlake: NotRequired[Dict[str, Nullable[Any]]]
|
||||
switchpoint: NotRequired[Dict[str, Nullable[Any]]]
|
||||
targon: NotRequired[Dict[str, Nullable[Any]]]
|
||||
tenstorrent: NotRequired[Dict[str, Nullable[Any]]]
|
||||
together: NotRequired[Dict[str, Nullable[Any]]]
|
||||
together_lite: NotRequired[Dict[str, Nullable[Any]]]
|
||||
ubicloud: NotRequired[Dict[str, Nullable[Any]]]
|
||||
@@ -240,6 +244,8 @@ class ProviderOptions(BaseModel):
|
||||
|
||||
groq: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
heygen: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
huggingface: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
hyperbolic: Optional[Dict[str, Nullable[Any]]] = None
|
||||
@@ -252,6 +258,10 @@ class ProviderOptions(BaseModel):
|
||||
|
||||
inceptron: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
inferact_vllm: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="inferact-vllm")
|
||||
] = None
|
||||
|
||||
inference_net: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="inference-net")
|
||||
] = None
|
||||
@@ -354,6 +364,10 @@ class ProviderOptions(BaseModel):
|
||||
|
||||
replicate: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
sakana_ai: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="sakana-ai")
|
||||
] = None
|
||||
|
||||
sambanova: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
sambanova_cloaked: Annotated[
|
||||
@@ -380,6 +394,8 @@ class ProviderOptions(BaseModel):
|
||||
|
||||
targon: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
tenstorrent: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
together: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
together_lite: Annotated[
|
||||
|
||||
@@ -77,12 +77,14 @@ ProviderResponseProviderName = Union[
|
||||
"Google",
|
||||
"Google AI Studio",
|
||||
"Groq",
|
||||
"HeyGen",
|
||||
"Inception",
|
||||
"Inceptron",
|
||||
"InferenceNet",
|
||||
"Ionstream",
|
||||
"Infermatic",
|
||||
"Io Net",
|
||||
"Inferact vLLM",
|
||||
"Inflection",
|
||||
"Liquid",
|
||||
"Mara",
|
||||
@@ -109,6 +111,7 @@ ProviderResponseProviderName = Union[
|
||||
"Recraft",
|
||||
"Reka",
|
||||
"Relace",
|
||||
"Sakana AI",
|
||||
"SambaNova",
|
||||
"Seed",
|
||||
"SiliconFlow",
|
||||
@@ -117,6 +120,7 @@ ProviderResponseProviderName = Union[
|
||||
"Stealth",
|
||||
"StreamLake",
|
||||
"Switchpoint",
|
||||
"Tenstorrent",
|
||||
"Together",
|
||||
"Upstage",
|
||||
"Venice",
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.types import BaseModel
|
||||
from typing import Literal
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
|
||||
RangeCapabilityType = Literal["range",]
|
||||
|
||||
|
||||
class RangeCapabilityTypedDict(TypedDict):
|
||||
r"""A parameter that accepts any value within an inclusive numeric range."""
|
||||
|
||||
max: float
|
||||
min: float
|
||||
type: RangeCapabilityType
|
||||
|
||||
|
||||
class RangeCapability(BaseModel):
|
||||
r"""A parameter that accepts any value within an inclusive numeric range."""
|
||||
|
||||
max: float
|
||||
|
||||
min: float
|
||||
|
||||
type: RangeCapabilityType
|
||||
@@ -7,6 +7,7 @@ from typing import Literal, Union
|
||||
|
||||
ReasoningEffort = Union[
|
||||
Literal[
|
||||
"max",
|
||||
"xhigh",
|
||||
"high",
|
||||
"medium",
|
||||
|
||||
@@ -16,6 +16,7 @@ from .applypatchservertool_openrouter import (
|
||||
)
|
||||
from .autorouterplugin import AutoRouterPlugin, AutoRouterPluginTypedDict
|
||||
from .bashservertool import BashServerTool, BashServerToolTypedDict
|
||||
from .chatdebugoptions import ChatDebugOptions, ChatDebugOptionsTypedDict
|
||||
from .chatsearchmodelsservertool import (
|
||||
ChatSearchModelsServerTool,
|
||||
ChatSearchModelsServerToolTypedDict,
|
||||
@@ -291,6 +292,8 @@ class ResponsesRequestTypedDict(TypedDict):
|
||||
background: NotRequired[Nullable[bool]]
|
||||
cache_control: NotRequired[AnthropicCacheControlDirectiveTypedDict]
|
||||
r"""Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models."""
|
||||
debug: NotRequired[ChatDebugOptionsTypedDict]
|
||||
r"""Debug options for inspecting request transformations (streaming only)"""
|
||||
frequency_penalty: NotRequired[Nullable[float]]
|
||||
image_config: NotRequired[Dict[str, ImageConfigTypedDict]]
|
||||
r"""Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details."""
|
||||
@@ -348,6 +351,9 @@ class ResponsesRequest(BaseModel):
|
||||
cache_control: Optional[AnthropicCacheControlDirective] = None
|
||||
r"""Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models."""
|
||||
|
||||
debug: Optional[ChatDebugOptions] = None
|
||||
r"""Debug options for inspecting request transformations (streaming only)"""
|
||||
|
||||
frequency_penalty: OptionalNullable[float] = UNSET
|
||||
|
||||
image_config: Optional[Dict[str, ImageConfig]] = None
|
||||
@@ -448,6 +454,7 @@ class ResponsesRequest(BaseModel):
|
||||
optional_fields = [
|
||||
"background",
|
||||
"cache_control",
|
||||
"debug",
|
||||
"frequency_penalty",
|
||||
"image_config",
|
||||
"include",
|
||||
|
||||
@@ -20,6 +20,7 @@ from .customtoolcallinputdoneevent import (
|
||||
CustomToolCallInputDoneEvent,
|
||||
CustomToolCallInputDoneEventTypedDict,
|
||||
)
|
||||
from .debugevent import DebugEvent, DebugEventTypedDict
|
||||
from .errorevent import ErrorEvent, ErrorEventTypedDict
|
||||
from .functioncallargsdeltaevent import (
|
||||
FunctionCallArgsDeltaEvent,
|
||||
@@ -152,34 +153,35 @@ from typing_extensions import Annotated, TypeAliasType
|
||||
StreamEventsTypedDict = TypeAliasType(
|
||||
"StreamEventsTypedDict",
|
||||
Union[
|
||||
OpenResponsesCreatedEventTypedDict,
|
||||
DebugEventTypedDict,
|
||||
OpenResponsesInProgressEventTypedDict,
|
||||
StreamEventsResponseCompletedTypedDict,
|
||||
StreamEventsResponseIncompleteTypedDict,
|
||||
StreamEventsResponseFailedTypedDict,
|
||||
FusionCallInProgressEventTypedDict,
|
||||
OpenResponsesCreatedEventTypedDict,
|
||||
FusionCallCompletedEventTypedDict,
|
||||
StreamEventsResponseOutputItemAddedTypedDict,
|
||||
WebSearchCallCompletedEventTypedDict,
|
||||
StreamEventsResponseOutputItemDoneTypedDict,
|
||||
FusionCallCompletedEventTypedDict,
|
||||
ImageGenCallInProgressEventTypedDict,
|
||||
StreamEventsResponseOutputItemAddedTypedDict,
|
||||
ImageGenCallCompletedEventTypedDict,
|
||||
ImageGenCallGeneratingEventTypedDict,
|
||||
ImageGenCallCompletedEventTypedDict,
|
||||
FusionCallInProgressEventTypedDict,
|
||||
WebSearchCallInProgressEventTypedDict,
|
||||
WebSearchCallSearchingEventTypedDict,
|
||||
FusionCallAnalysisInProgressEventTypedDict,
|
||||
FusionCallPanelAddedEventTypedDict,
|
||||
CustomToolCallInputDoneEventTypedDict,
|
||||
CustomToolCallInputDeltaEventTypedDict,
|
||||
FunctionCallArgsDeltaEventTypedDict,
|
||||
ApplyPatchCallOperationDiffDeltaEventTypedDict,
|
||||
ErrorEventTypedDict,
|
||||
FunctionCallArgsDeltaEventTypedDict,
|
||||
ApplyPatchCallOperationDiffDoneEventTypedDict,
|
||||
FusionCallPanelAddedEventTypedDict,
|
||||
FusionCallAnalysisInProgressEventTypedDict,
|
||||
FusionCallAnalysisCompletedEventTypedDict,
|
||||
ReasoningSummaryPartDoneEventTypedDict,
|
||||
RefusalDoneEventTypedDict,
|
||||
ErrorEventTypedDict,
|
||||
ReasoningSummaryTextDoneEventTypedDict,
|
||||
RefusalDoneEventTypedDict,
|
||||
ReasoningSummaryTextDeltaEventTypedDict,
|
||||
ReasoningSummaryPartDoneEventTypedDict,
|
||||
ReasoningSummaryPartAddedEventTypedDict,
|
||||
ReasoningDoneEventTypedDict,
|
||||
ReasoningDeltaEventTypedDict,
|
||||
@@ -187,13 +189,13 @@ StreamEventsTypedDict = TypeAliasType(
|
||||
ContentPartAddedEventTypedDict,
|
||||
ImageGenCallPartialImageEventTypedDict,
|
||||
RefusalDeltaEventTypedDict,
|
||||
ContentPartDoneEventTypedDict,
|
||||
FusionCallPanelDeltaEventTypedDict,
|
||||
FusionCallPanelReasoningDeltaEventTypedDict,
|
||||
FusionCallPanelCompletedEventTypedDict,
|
||||
FusionCallPanelFailedEventTypedDict,
|
||||
TextDeltaEventTypedDict,
|
||||
ContentPartDoneEventTypedDict,
|
||||
TextDoneEventTypedDict,
|
||||
TextDeltaEventTypedDict,
|
||||
FusionCallPanelFailedEventTypedDict,
|
||||
AnnotationAddedEventTypedDict,
|
||||
],
|
||||
)
|
||||
@@ -221,6 +223,7 @@ StreamEvents = Annotated[
|
||||
Annotated[
|
||||
CustomToolCallInputDoneEvent, Tag("response.custom_tool_call_input.done")
|
||||
],
|
||||
Annotated[DebugEvent, Tag("response.debug")],
|
||||
Annotated[StreamEventsResponseFailed, Tag("response.failed")],
|
||||
Annotated[
|
||||
FunctionCallArgsDeltaEvent, Tag("response.function_call_arguments.delta")
|
||||
|
||||
@@ -10,6 +10,7 @@ from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
SubagentReasoningEffort = Union[
|
||||
Literal[
|
||||
"max",
|
||||
"xhigh",
|
||||
"high",
|
||||
"medium",
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .taskclassificationmodel import (
|
||||
TaskClassificationModel,
|
||||
TaskClassificationModelTypedDict,
|
||||
)
|
||||
from openrouter.types import BaseModel
|
||||
from typing import List
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
|
||||
class TaskClassificationItemTypedDict(TypedDict):
|
||||
category_token_share: float
|
||||
r"""Fraction of this classification's token volume within its macro-category (0–1). Sums to 1 across all classifications sharing the same `macro_category`."""
|
||||
category_usage_share: float
|
||||
r"""Fraction of this classification's usage within its macro-category (0–1). Sums to 1 across all classifications sharing the same `macro_category`."""
|
||||
display_name: str
|
||||
r"""Human-readable label for the classification."""
|
||||
macro_category: str
|
||||
r"""Coarse grouping derived from the tag prefix: `code`, `data`, `agent`, or `general`."""
|
||||
models: List[TaskClassificationModelTypedDict]
|
||||
r"""Top models for this classification by request volume, sorted descending. Each entry reports the model's share of this classification's requests and tokens."""
|
||||
tag: str
|
||||
r"""Classification tag identifier (e.g. `code:general_impl`, `agent:web_search`)."""
|
||||
token_share: float
|
||||
r"""Fraction of classified sampled token volume (prompt + completion) attributed to this classification (0–1). The unclassified `other` bucket is excluded from the denominator."""
|
||||
usage_share: float
|
||||
r"""Fraction of classified sampled requests attributed to this classification (0–1). The unclassified `other` bucket is excluded from the denominator."""
|
||||
|
||||
|
||||
class TaskClassificationItem(BaseModel):
|
||||
category_token_share: float
|
||||
r"""Fraction of this classification's token volume within its macro-category (0–1). Sums to 1 across all classifications sharing the same `macro_category`."""
|
||||
|
||||
category_usage_share: float
|
||||
r"""Fraction of this classification's usage within its macro-category (0–1). Sums to 1 across all classifications sharing the same `macro_category`."""
|
||||
|
||||
display_name: str
|
||||
r"""Human-readable label for the classification."""
|
||||
|
||||
macro_category: str
|
||||
r"""Coarse grouping derived from the tag prefix: `code`, `data`, `agent`, or `general`."""
|
||||
|
||||
models: List[TaskClassificationModel]
|
||||
r"""Top models for this classification by request volume, sorted descending. Each entry reports the model's share of this classification's requests and tokens."""
|
||||
|
||||
tag: str
|
||||
r"""Classification tag identifier (e.g. `code:general_impl`, `agent:web_search`)."""
|
||||
|
||||
token_share: float
|
||||
r"""Fraction of classified sampled token volume (prompt + completion) attributed to this classification (0–1). The unclassified `other` bucket is excluded from the denominator."""
|
||||
|
||||
usage_share: float
|
||||
r"""Fraction of classified sampled requests attributed to this classification (0–1). The unclassified `other` bucket is excluded from the denominator."""
|
||||
@@ -0,0 +1,30 @@
|
||||
"""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 TaskClassificationMacroCategoryTypedDict(TypedDict):
|
||||
key: str
|
||||
r"""Macro-category identifier."""
|
||||
label: str
|
||||
r"""Human-readable label for the macro-category."""
|
||||
token_share: float
|
||||
r"""Combined token share of all classifications in this macro-category (0–1)."""
|
||||
usage_share: float
|
||||
r"""Combined usage share of all classifications in this macro-category (0–1)."""
|
||||
|
||||
|
||||
class TaskClassificationMacroCategory(BaseModel):
|
||||
key: str
|
||||
r"""Macro-category identifier."""
|
||||
|
||||
label: str
|
||||
r"""Human-readable label for the macro-category."""
|
||||
|
||||
token_share: float
|
||||
r"""Combined token share of all classifications in this macro-category (0–1)."""
|
||||
|
||||
usage_share: float
|
||||
r"""Combined usage share of all classifications in this macro-category (0–1)."""
|
||||
@@ -0,0 +1,25 @@
|
||||
"""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 TaskClassificationModelTypedDict(TypedDict):
|
||||
id: str
|
||||
r"""Model identifier (permaslug)."""
|
||||
tag_token_share: float
|
||||
r"""Fraction of this classification's sampled token volume attributed to this model (0–1). Sums to ≤1 across the returned models (only top-N are included and unattributed requests are excluded)."""
|
||||
tag_usage_share: float
|
||||
r"""Fraction of this classification's sampled requests attributed to this model (0–1). Sums to ≤1 across the returned models (only top-N are included and unattributed requests are excluded)."""
|
||||
|
||||
|
||||
class TaskClassificationModel(BaseModel):
|
||||
id: str
|
||||
r"""Model identifier (permaslug)."""
|
||||
|
||||
tag_token_share: float
|
||||
r"""Fraction of this classification's sampled token volume attributed to this model (0–1). Sums to ≤1 across the returned models (only top-N are included and unattributed requests are excluded)."""
|
||||
|
||||
tag_usage_share: float
|
||||
r"""Fraction of this classification's sampled requests attributed to this model (0–1). Sums to ≤1 across the returned models (only top-N are included and unattributed requests are excluded)."""
|
||||
@@ -0,0 +1,47 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .taskclassificationitem import (
|
||||
TaskClassificationItem,
|
||||
TaskClassificationItemTypedDict,
|
||||
)
|
||||
from .taskclassificationmacrocategory import (
|
||||
TaskClassificationMacroCategory,
|
||||
TaskClassificationMacroCategoryTypedDict,
|
||||
)
|
||||
from openrouter.types import BaseModel
|
||||
from typing import List
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
|
||||
class TaskClassificationResponseDataTypedDict(TypedDict):
|
||||
as_of: str
|
||||
r"""UTC date (YYYY-MM-DD) of the window upper bound (yesterday). Data is exclusive of the current incomplete UTC day. This is the expected latest date in the snapshot; it does not confirm data presence for that date."""
|
||||
classifications: List[TaskClassificationItemTypedDict]
|
||||
r"""Per-task classification market-share data, sorted by usage_share descending."""
|
||||
macro_categories: List[TaskClassificationMacroCategoryTypedDict]
|
||||
r"""Aggregate market-share data per macro-category (code, data, agent, general)."""
|
||||
window_days: int
|
||||
r"""Number of trailing days covered by this snapshot."""
|
||||
|
||||
|
||||
class TaskClassificationResponseData(BaseModel):
|
||||
as_of: str
|
||||
r"""UTC date (YYYY-MM-DD) of the window upper bound (yesterday). Data is exclusive of the current incomplete UTC day. This is the expected latest date in the snapshot; it does not confirm data presence for that date."""
|
||||
|
||||
classifications: List[TaskClassificationItem]
|
||||
r"""Per-task classification market-share data, sorted by usage_share descending."""
|
||||
|
||||
macro_categories: List[TaskClassificationMacroCategory]
|
||||
r"""Aggregate market-share data per macro-category (code, data, agent, general)."""
|
||||
|
||||
window_days: int
|
||||
r"""Number of trailing days covered by this snapshot."""
|
||||
|
||||
|
||||
class TaskClassificationResponseTypedDict(TypedDict):
|
||||
data: TaskClassificationResponseDataTypedDict
|
||||
|
||||
|
||||
class TaskClassificationResponse(BaseModel):
|
||||
data: TaskClassificationResponseData
|
||||
+2
-2
@@ -5,7 +5,7 @@ from openrouter.types import BaseModel
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
|
||||
class BenchmarkPricingTypedDict(TypedDict):
|
||||
class UnifiedBenchmarkPricingTypedDict(TypedDict):
|
||||
r"""OpenRouter pricing per token for this model. Null if pricing is unavailable."""
|
||||
|
||||
completion: str
|
||||
@@ -14,7 +14,7 @@ class BenchmarkPricingTypedDict(TypedDict):
|
||||
r"""Cost per input token (USD, decimal string)."""
|
||||
|
||||
|
||||
class BenchmarkPricing(BaseModel):
|
||||
class UnifiedBenchmarkPricing(BaseModel):
|
||||
r"""OpenRouter pricing per token for this model. Null if pricing is unavailable."""
|
||||
|
||||
completion: str
|
||||
+23
-10
@@ -1,46 +1,59 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .benchmarkpricing import BenchmarkPricing, BenchmarkPricingTypedDict
|
||||
from .unifiedbenchmarkpricing import (
|
||||
UnifiedBenchmarkPricing,
|
||||
UnifiedBenchmarkPricingTypedDict,
|
||||
)
|
||||
from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL
|
||||
from pydantic import model_serializer
|
||||
from typing import Literal
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
|
||||
class BenchmarksAAItemTypedDict(TypedDict):
|
||||
aa_name: str
|
||||
r"""Model name as listed on Artificial Analysis."""
|
||||
UnifiedBenchmarksAAItemSource = Literal["artificial-analysis",]
|
||||
r"""Benchmark source discriminator."""
|
||||
|
||||
|
||||
class UnifiedBenchmarksAAItemTypedDict(TypedDict):
|
||||
agentic_index: Nullable[float]
|
||||
r"""Artificial Analysis Agentic Index composite score. Higher is better."""
|
||||
coding_index: Nullable[float]
|
||||
r"""Artificial Analysis Coding Index composite score. Higher is better."""
|
||||
display_name: str
|
||||
r"""Model name as listed on Artificial Analysis."""
|
||||
intelligence_index: Nullable[float]
|
||||
r"""Artificial Analysis Intelligence Index composite score. Higher is better."""
|
||||
model_permaslug: str
|
||||
r"""Stable OpenRouter model identifier."""
|
||||
pricing: Nullable[BenchmarkPricingTypedDict]
|
||||
pricing: Nullable[UnifiedBenchmarkPricingTypedDict]
|
||||
r"""OpenRouter pricing per token for this model. Null if pricing is unavailable."""
|
||||
source: UnifiedBenchmarksAAItemSource
|
||||
r"""Benchmark source discriminator."""
|
||||
|
||||
|
||||
class BenchmarksAAItem(BaseModel):
|
||||
aa_name: str
|
||||
r"""Model name as listed on Artificial Analysis."""
|
||||
|
||||
class UnifiedBenchmarksAAItem(BaseModel):
|
||||
agentic_index: Nullable[float]
|
||||
r"""Artificial Analysis Agentic Index composite score. Higher is better."""
|
||||
|
||||
coding_index: Nullable[float]
|
||||
r"""Artificial Analysis Coding Index composite score. Higher is better."""
|
||||
|
||||
display_name: str
|
||||
r"""Model name as listed on Artificial Analysis."""
|
||||
|
||||
intelligence_index: Nullable[float]
|
||||
r"""Artificial Analysis Intelligence Index composite score. Higher is better."""
|
||||
|
||||
model_permaslug: str
|
||||
r"""Stable OpenRouter model identifier."""
|
||||
|
||||
pricing: Nullable[BenchmarkPricing]
|
||||
pricing: Nullable[UnifiedBenchmarkPricing]
|
||||
r"""OpenRouter pricing per token for this model. Null if pricing is unavailable."""
|
||||
|
||||
source: UnifiedBenchmarksAAItemSource
|
||||
r"""Benchmark source discriminator."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = []
|
||||
+20
-7
@@ -1,12 +1,20 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .benchmarkpricing import BenchmarkPricing, BenchmarkPricingTypedDict
|
||||
from .unifiedbenchmarkpricing import (
|
||||
UnifiedBenchmarkPricing,
|
||||
UnifiedBenchmarkPricingTypedDict,
|
||||
)
|
||||
from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL
|
||||
from pydantic import model_serializer
|
||||
from typing import Literal
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
|
||||
UnifiedBenchmarksDAItemSource = Literal["design-arena",]
|
||||
r"""Benchmark source discriminator."""
|
||||
|
||||
|
||||
class TournamentStatsTypedDict(TypedDict):
|
||||
r"""Placement distribution from tournament matches."""
|
||||
|
||||
@@ -67,7 +75,7 @@ class TournamentStats(BaseModel):
|
||||
return m
|
||||
|
||||
|
||||
class BenchmarksDAItemTypedDict(TypedDict):
|
||||
class UnifiedBenchmarksDAItemTypedDict(TypedDict):
|
||||
arena: str
|
||||
r"""Arena this ranking belongs to."""
|
||||
avg_generation_time_ms: Nullable[float]
|
||||
@@ -79,16 +87,18 @@ class BenchmarksDAItemTypedDict(TypedDict):
|
||||
elo: float
|
||||
r"""ELO rating from head-to-head arena battles."""
|
||||
model_permaslug: str
|
||||
r"""Stable OpenRouter model identifier when the model is on OpenRouter; otherwise the upstream Design Arena model id. Use pricing != null to detect OpenRouter-mapped models."""
|
||||
pricing: Nullable[BenchmarkPricingTypedDict]
|
||||
r"""Stable OpenRouter model identifier when mapped; otherwise the upstream Design Arena model id."""
|
||||
pricing: Nullable[UnifiedBenchmarkPricingTypedDict]
|
||||
r"""OpenRouter pricing per token for this model. Null if pricing is unavailable."""
|
||||
source: UnifiedBenchmarksDAItemSource
|
||||
r"""Benchmark source discriminator."""
|
||||
tournament_stats: TournamentStatsTypedDict
|
||||
r"""Placement distribution from tournament matches."""
|
||||
win_rate: float
|
||||
r"""Win rate as a percentage (0–100)."""
|
||||
|
||||
|
||||
class BenchmarksDAItem(BaseModel):
|
||||
class UnifiedBenchmarksDAItem(BaseModel):
|
||||
arena: str
|
||||
r"""Arena this ranking belongs to."""
|
||||
|
||||
@@ -105,11 +115,14 @@ class BenchmarksDAItem(BaseModel):
|
||||
r"""ELO rating from head-to-head arena battles."""
|
||||
|
||||
model_permaslug: str
|
||||
r"""Stable OpenRouter model identifier when the model is on OpenRouter; otherwise the upstream Design Arena model id. Use pricing != null to detect OpenRouter-mapped models."""
|
||||
r"""Stable OpenRouter model identifier when mapped; otherwise the upstream Design Arena model id."""
|
||||
|
||||
pricing: Nullable[BenchmarkPricing]
|
||||
pricing: Nullable[UnifiedBenchmarkPricing]
|
||||
r"""OpenRouter pricing per token for this model. Null if pricing is unavailable."""
|
||||
|
||||
source: UnifiedBenchmarksDAItemSource
|
||||
r"""Benchmark source discriminator."""
|
||||
|
||||
tournament_stats: TournamentStats
|
||||
r"""Placement distribution from tournament matches."""
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.types import BaseModel, Nullable, 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
|
||||
|
||||
|
||||
UnifiedBenchmarksMetaSource = Union[
|
||||
Literal[
|
||||
"artificial-analysis",
|
||||
"design-arena",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
r"""The source filter applied, or null when all sources are returned."""
|
||||
|
||||
|
||||
UnifiedBenchmarksMetaVersion = Literal["v1",]
|
||||
r"""Dataset version."""
|
||||
|
||||
|
||||
class UnifiedBenchmarksMetaTypedDict(TypedDict):
|
||||
as_of: str
|
||||
r"""ISO-8601 timestamp of when this data was last updated."""
|
||||
citation: Nullable[str]
|
||||
r"""Required attribution when republishing this data, or null when results span multiple sources (attribute each item individually by its `source` discriminator)."""
|
||||
model_count: int
|
||||
r"""Number of unique models in the response."""
|
||||
source: Nullable[UnifiedBenchmarksMetaSource]
|
||||
r"""The source filter applied, or null when all sources are returned."""
|
||||
source_url: Nullable[str]
|
||||
r"""URL of the upstream data source, or null when results span multiple sources."""
|
||||
task_type: Nullable[str]
|
||||
r"""The task_type filter applied, or null if showing all."""
|
||||
version: UnifiedBenchmarksMetaVersion
|
||||
r"""Dataset version."""
|
||||
|
||||
|
||||
class UnifiedBenchmarksMeta(BaseModel):
|
||||
as_of: str
|
||||
r"""ISO-8601 timestamp of when this data was last updated."""
|
||||
|
||||
citation: Nullable[str]
|
||||
r"""Required attribution when republishing this data, or null when results span multiple sources (attribute each item individually by its `source` discriminator)."""
|
||||
|
||||
model_count: int
|
||||
r"""Number of unique models in the response."""
|
||||
|
||||
source: Annotated[
|
||||
Nullable[UnifiedBenchmarksMetaSource], PlainValidator(validate_open_enum(False))
|
||||
]
|
||||
r"""The source filter applied, or null when all sources are returned."""
|
||||
|
||||
source_url: Nullable[str]
|
||||
r"""URL of the upstream data source, or null when results span multiple sources."""
|
||||
|
||||
task_type: Nullable[str]
|
||||
r"""The task_type filter applied, or null if showing all."""
|
||||
|
||||
version: UnifiedBenchmarksMetaVersion
|
||||
r"""Dataset version."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = []
|
||||
nullable_fields = ["citation", "source", "source_url", "task_type"]
|
||||
null_default_fields = []
|
||||
|
||||
serialized = handler(self)
|
||||
|
||||
m = {}
|
||||
|
||||
for n, f in type(self).model_fields.items():
|
||||
k = f.alias or n
|
||||
val = serialized.get(k)
|
||||
serialized.pop(k, None)
|
||||
|
||||
optional_nullable = k in optional_fields and k in nullable_fields
|
||||
is_set = (
|
||||
self.__pydantic_fields_set__.intersection({n})
|
||||
or k in null_default_fields
|
||||
) # pylint: disable=no-member
|
||||
|
||||
if val is not None and val != UNSET_SENTINEL:
|
||||
m[k] = val
|
||||
elif val != UNSET_SENTINEL and (
|
||||
not k in optional_fields or (optional_nullable and is_set)
|
||||
):
|
||||
m[k] = val
|
||||
|
||||
return m
|
||||
@@ -0,0 +1,43 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from .unifiedbenchmarksaaitem import (
|
||||
UnifiedBenchmarksAAItem,
|
||||
UnifiedBenchmarksAAItemTypedDict,
|
||||
)
|
||||
from .unifiedbenchmarksdaitem import (
|
||||
UnifiedBenchmarksDAItem,
|
||||
UnifiedBenchmarksDAItemTypedDict,
|
||||
)
|
||||
from .unifiedbenchmarksmeta import UnifiedBenchmarksMeta, UnifiedBenchmarksMetaTypedDict
|
||||
from openrouter.types import BaseModel
|
||||
from openrouter.utils import get_discriminator
|
||||
from pydantic import Discriminator, Tag
|
||||
from typing import List, Union
|
||||
from typing_extensions import Annotated, TypeAliasType, TypedDict
|
||||
|
||||
|
||||
UnifiedBenchmarksResponseDataTypedDict = TypeAliasType(
|
||||
"UnifiedBenchmarksResponseDataTypedDict",
|
||||
Union[UnifiedBenchmarksAAItemTypedDict, UnifiedBenchmarksDAItemTypedDict],
|
||||
)
|
||||
|
||||
|
||||
UnifiedBenchmarksResponseData = Annotated[
|
||||
Union[
|
||||
Annotated[UnifiedBenchmarksAAItem, Tag("artificial-analysis")],
|
||||
Annotated[UnifiedBenchmarksDAItem, Tag("design-arena")],
|
||||
],
|
||||
Discriminator(lambda m: get_discriminator(m, "source", "source")),
|
||||
]
|
||||
|
||||
|
||||
class UnifiedBenchmarksResponseTypedDict(TypedDict):
|
||||
data: List[UnifiedBenchmarksResponseDataTypedDict]
|
||||
meta: UnifiedBenchmarksMetaTypedDict
|
||||
|
||||
|
||||
class UnifiedBenchmarksResponse(BaseModel):
|
||||
data: List[UnifiedBenchmarksResponseData]
|
||||
|
||||
meta: UnifiedBenchmarksMeta
|
||||
@@ -11,7 +11,7 @@ from typing import Any, Dict, List, Literal, Optional, Union
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
|
||||
AspectRatio = Union[
|
||||
VideoGenerationRequestAspectRatio = Union[
|
||||
Literal[
|
||||
"16:9",
|
||||
"9:16",
|
||||
@@ -28,7 +28,7 @@ AspectRatio = Union[
|
||||
r"""Aspect ratio of the generated video"""
|
||||
|
||||
|
||||
class OptionsTypedDict(TypedDict):
|
||||
class VideoGenerationRequestOptionsTypedDict(TypedDict):
|
||||
r"""Provider-specific options keyed by provider slug. Only options for the matched provider are forwarded; the rest are ignored. Unrecognized keys are silently dropped."""
|
||||
|
||||
oneai: NotRequired[Dict[str, Nullable[Any]]]
|
||||
@@ -76,11 +76,13 @@ class OptionsTypedDict(TypedDict):
|
||||
google_vertex: NotRequired[Dict[str, Nullable[Any]]]
|
||||
gopomelo: NotRequired[Dict[str, Nullable[Any]]]
|
||||
groq: NotRequired[Dict[str, Nullable[Any]]]
|
||||
heygen: NotRequired[Dict[str, Nullable[Any]]]
|
||||
huggingface: NotRequired[Dict[str, Nullable[Any]]]
|
||||
hyperbolic: NotRequired[Dict[str, Nullable[Any]]]
|
||||
hyperbolic_quantized: NotRequired[Dict[str, Nullable[Any]]]
|
||||
inception: NotRequired[Dict[str, Nullable[Any]]]
|
||||
inceptron: NotRequired[Dict[str, Nullable[Any]]]
|
||||
inferact_vllm: NotRequired[Dict[str, Nullable[Any]]]
|
||||
inference_net: NotRequired[Dict[str, Nullable[Any]]]
|
||||
infermatic: NotRequired[Dict[str, Nullable[Any]]]
|
||||
inflection: NotRequired[Dict[str, Nullable[Any]]]
|
||||
@@ -125,6 +127,7 @@ class OptionsTypedDict(TypedDict):
|
||||
reka: NotRequired[Dict[str, Nullable[Any]]]
|
||||
relace: NotRequired[Dict[str, Nullable[Any]]]
|
||||
replicate: NotRequired[Dict[str, Nullable[Any]]]
|
||||
sakana_ai: NotRequired[Dict[str, Nullable[Any]]]
|
||||
sambanova: NotRequired[Dict[str, Nullable[Any]]]
|
||||
sambanova_cloaked: NotRequired[Dict[str, Nullable[Any]]]
|
||||
seed: NotRequired[Dict[str, Nullable[Any]]]
|
||||
@@ -136,6 +139,7 @@ class OptionsTypedDict(TypedDict):
|
||||
streamlake: NotRequired[Dict[str, Nullable[Any]]]
|
||||
switchpoint: NotRequired[Dict[str, Nullable[Any]]]
|
||||
targon: NotRequired[Dict[str, Nullable[Any]]]
|
||||
tenstorrent: NotRequired[Dict[str, Nullable[Any]]]
|
||||
together: NotRequired[Dict[str, Nullable[Any]]]
|
||||
together_lite: NotRequired[Dict[str, Nullable[Any]]]
|
||||
ubicloud: NotRequired[Dict[str, Nullable[Any]]]
|
||||
@@ -148,7 +152,7 @@ class OptionsTypedDict(TypedDict):
|
||||
z_ai: NotRequired[Dict[str, Nullable[Any]]]
|
||||
|
||||
|
||||
class Options(BaseModel):
|
||||
class VideoGenerationRequestOptions(BaseModel):
|
||||
r"""Provider-specific options keyed by provider slug. Only options for the matched provider are forwarded; the rest are ignored. Unrecognized keys are silently dropped."""
|
||||
|
||||
oneai: Annotated[
|
||||
@@ -261,6 +265,8 @@ class Options(BaseModel):
|
||||
|
||||
groq: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
heygen: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
huggingface: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
hyperbolic: Optional[Dict[str, Nullable[Any]]] = None
|
||||
@@ -273,6 +279,10 @@ class Options(BaseModel):
|
||||
|
||||
inceptron: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
inferact_vllm: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="inferact-vllm")
|
||||
] = None
|
||||
|
||||
inference_net: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="inference-net")
|
||||
] = None
|
||||
@@ -375,6 +385,10 @@ class Options(BaseModel):
|
||||
|
||||
replicate: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
sakana_ai: Annotated[
|
||||
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="sakana-ai")
|
||||
] = None
|
||||
|
||||
sambanova: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
sambanova_cloaked: Annotated[
|
||||
@@ -401,6 +415,8 @@ class Options(BaseModel):
|
||||
|
||||
targon: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
tenstorrent: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
together: Optional[Dict[str, Nullable[Any]]] = None
|
||||
|
||||
together_lite: Annotated[
|
||||
@@ -429,16 +445,16 @@ class Options(BaseModel):
|
||||
class VideoGenerationRequestProviderTypedDict(TypedDict):
|
||||
r"""Provider-specific passthrough configuration"""
|
||||
|
||||
options: NotRequired[OptionsTypedDict]
|
||||
options: NotRequired[VideoGenerationRequestOptionsTypedDict]
|
||||
|
||||
|
||||
class VideoGenerationRequestProvider(BaseModel):
|
||||
r"""Provider-specific passthrough configuration"""
|
||||
|
||||
options: Optional[Options] = None
|
||||
options: Optional[VideoGenerationRequestOptions] = None
|
||||
|
||||
|
||||
Resolution = Union[
|
||||
VideoGenerationRequestResolution = Union[
|
||||
Literal[
|
||||
"480p",
|
||||
"720p",
|
||||
@@ -455,7 +471,7 @@ r"""Resolution of the generated video"""
|
||||
class VideoGenerationRequestTypedDict(TypedDict):
|
||||
model: str
|
||||
prompt: str
|
||||
aspect_ratio: NotRequired[AspectRatio]
|
||||
aspect_ratio: NotRequired[VideoGenerationRequestAspectRatio]
|
||||
r"""Aspect ratio of the generated video"""
|
||||
callback_url: NotRequired[str]
|
||||
r"""URL to receive a webhook notification when the video generation job completes. Overrides the workspace-level default callback URL if set. Must be HTTPS."""
|
||||
@@ -469,7 +485,7 @@ class VideoGenerationRequestTypedDict(TypedDict):
|
||||
r"""Reference assets to guide video generation. Accepts image, audio, and video references. Audio and video references are only honored by providers that support them (currently BytePlus Seedance 2.0); other providers use image references and ignore the rest."""
|
||||
provider: NotRequired[VideoGenerationRequestProviderTypedDict]
|
||||
r"""Provider-specific passthrough configuration"""
|
||||
resolution: NotRequired[Resolution]
|
||||
resolution: NotRequired[VideoGenerationRequestResolution]
|
||||
r"""Resolution of the generated video"""
|
||||
seed: NotRequired[int]
|
||||
r"""If specified, the generation will sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed for all providers."""
|
||||
@@ -483,7 +499,8 @@ class VideoGenerationRequest(BaseModel):
|
||||
prompt: str
|
||||
|
||||
aspect_ratio: Annotated[
|
||||
Optional[AspectRatio], PlainValidator(validate_open_enum(False))
|
||||
Optional[VideoGenerationRequestAspectRatio],
|
||||
PlainValidator(validate_open_enum(False)),
|
||||
] = None
|
||||
r"""Aspect ratio of the generated video"""
|
||||
|
||||
@@ -506,7 +523,8 @@ class VideoGenerationRequest(BaseModel):
|
||||
r"""Provider-specific passthrough configuration"""
|
||||
|
||||
resolution: Annotated[
|
||||
Optional[Resolution], PlainValidator(validate_open_enum(False))
|
||||
Optional[VideoGenerationRequestResolution],
|
||||
PlainValidator(validate_open_enum(False)),
|
||||
] = None
|
||||
r"""Resolution of the generated video"""
|
||||
|
||||
|
||||
@@ -426,542 +426,6 @@ class Datasets(BaseSDK):
|
||||
|
||||
raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
|
||||
|
||||
def get_benchmarks_artificial_analysis(
|
||||
self,
|
||||
*,
|
||||
http_referer: Optional[str] = None,
|
||||
x_open_router_title: Optional[str] = None,
|
||||
x_open_router_categories: Optional[str] = None,
|
||||
max_results: Optional[int] = 50,
|
||||
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
||||
server_url: Optional[str] = None,
|
||||
timeout_ms: Optional[int] = None,
|
||||
http_headers: Optional[Mapping[str, str]] = None,
|
||||
) -> components.BenchmarksAAResponse:
|
||||
r"""Artificial Analysis Benchmark Indices
|
||||
|
||||
Returns composite index scores (Intelligence, Coding, Agentic) from Artificial Analysis for LLM models. Includes OpenRouter pricing per model. Authenticate with any valid OpenRouter API key. Rate-limited to 30 requests/minute per key and 500 requests/day per account.
|
||||
|
||||
:param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
:param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
:param max_results: Max results to return (1–100, default 50).
|
||||
: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
|
||||
:param http_headers: Additional headers to set or replace on requests.
|
||||
"""
|
||||
base_url = None
|
||||
url_variables = None
|
||||
if timeout_ms is None:
|
||||
timeout_ms = self.sdk_configuration.timeout_ms
|
||||
|
||||
if server_url is not None:
|
||||
base_url = server_url
|
||||
else:
|
||||
base_url = self._get_url(base_url, url_variables)
|
||||
|
||||
request = operations.GetBenchmarksArtificialAnalysisRequest(
|
||||
http_referer=http_referer,
|
||||
x_open_router_title=x_open_router_title,
|
||||
x_open_router_categories=x_open_router_categories,
|
||||
max_results=max_results,
|
||||
)
|
||||
|
||||
req = self._build_request(
|
||||
method="GET",
|
||||
path="/datasets/benchmarks/artificial-analysis",
|
||||
base_url=base_url,
|
||||
url_variables=url_variables,
|
||||
request=request,
|
||||
request_body_required=False,
|
||||
request_has_path_params=False,
|
||||
request_has_query_params=True,
|
||||
user_agent_header="user-agent",
|
||||
accept_header_value="application/json",
|
||||
http_headers=http_headers,
|
||||
_globals=operations.GetBenchmarksArtificialAnalysisGlobals(
|
||||
http_referer=self.sdk_configuration.globals.http_referer,
|
||||
x_open_router_title=self.sdk_configuration.globals.x_open_router_title,
|
||||
x_open_router_categories=self.sdk_configuration.globals.x_open_router_categories,
|
||||
),
|
||||
security=self.sdk_configuration.security,
|
||||
allow_empty_value=None,
|
||||
timeout_ms=timeout_ms,
|
||||
)
|
||||
|
||||
if retries == UNSET:
|
||||
if self.sdk_configuration.retry_config is not UNSET:
|
||||
retries = self.sdk_configuration.retry_config
|
||||
else:
|
||||
retries = utils.RetryConfig(
|
||||
"backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True
|
||||
)
|
||||
|
||||
retry_config = None
|
||||
if isinstance(retries, utils.RetryConfig):
|
||||
retry_config = (retries, ["5XX"])
|
||||
|
||||
http_res = self.do_request(
|
||||
hook_ctx=HookContext(
|
||||
config=self.sdk_configuration,
|
||||
base_url=base_url or "",
|
||||
operation_id="getBenchmarksArtificialAnalysis",
|
||||
oauth2_scopes=None,
|
||||
security_source=get_security_from_env(
|
||||
self.sdk_configuration.security, components.Security
|
||||
),
|
||||
),
|
||||
request=req,
|
||||
error_status_codes=["400", "401", "429", "4XX", "500", "5XX"],
|
||||
retry_config=retry_config,
|
||||
)
|
||||
|
||||
response_data: Any = None
|
||||
if utils.match_response(http_res, "200", "application/json"):
|
||||
return unmarshal_json_response(components.BenchmarksAAResponse, http_res)
|
||||
if utils.match_response(http_res, "400", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.BadRequestResponseErrorData, http_res
|
||||
)
|
||||
raise errors.BadRequestResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "401", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.UnauthorizedResponseErrorData, http_res
|
||||
)
|
||||
raise errors.UnauthorizedResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "429", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.TooManyRequestsResponseErrorData, http_res
|
||||
)
|
||||
raise errors.TooManyRequestsResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "500", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.InternalServerResponseErrorData, http_res
|
||||
)
|
||||
raise errors.InternalServerResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "4XX", "*"):
|
||||
http_res_text = utils.stream_to_text(http_res)
|
||||
raise errors.OpenRouterDefaultError(
|
||||
"API error occurred", http_res, http_res_text
|
||||
)
|
||||
if utils.match_response(http_res, "5XX", "*"):
|
||||
http_res_text = utils.stream_to_text(http_res)
|
||||
raise errors.OpenRouterDefaultError(
|
||||
"API error occurred", http_res, http_res_text
|
||||
)
|
||||
|
||||
raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
|
||||
|
||||
async def get_benchmarks_artificial_analysis_async(
|
||||
self,
|
||||
*,
|
||||
http_referer: Optional[str] = None,
|
||||
x_open_router_title: Optional[str] = None,
|
||||
x_open_router_categories: Optional[str] = None,
|
||||
max_results: Optional[int] = 50,
|
||||
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
||||
server_url: Optional[str] = None,
|
||||
timeout_ms: Optional[int] = None,
|
||||
http_headers: Optional[Mapping[str, str]] = None,
|
||||
) -> components.BenchmarksAAResponse:
|
||||
r"""Artificial Analysis Benchmark Indices
|
||||
|
||||
Returns composite index scores (Intelligence, Coding, Agentic) from Artificial Analysis for LLM models. Includes OpenRouter pricing per model. Authenticate with any valid OpenRouter API key. Rate-limited to 30 requests/minute per key and 500 requests/day per account.
|
||||
|
||||
:param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
:param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
:param max_results: Max results to return (1–100, default 50).
|
||||
: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
|
||||
:param http_headers: Additional headers to set or replace on requests.
|
||||
"""
|
||||
base_url = None
|
||||
url_variables = None
|
||||
if timeout_ms is None:
|
||||
timeout_ms = self.sdk_configuration.timeout_ms
|
||||
|
||||
if server_url is not None:
|
||||
base_url = server_url
|
||||
else:
|
||||
base_url = self._get_url(base_url, url_variables)
|
||||
|
||||
request = operations.GetBenchmarksArtificialAnalysisRequest(
|
||||
http_referer=http_referer,
|
||||
x_open_router_title=x_open_router_title,
|
||||
x_open_router_categories=x_open_router_categories,
|
||||
max_results=max_results,
|
||||
)
|
||||
|
||||
req = self._build_request_async(
|
||||
method="GET",
|
||||
path="/datasets/benchmarks/artificial-analysis",
|
||||
base_url=base_url,
|
||||
url_variables=url_variables,
|
||||
request=request,
|
||||
request_body_required=False,
|
||||
request_has_path_params=False,
|
||||
request_has_query_params=True,
|
||||
user_agent_header="user-agent",
|
||||
accept_header_value="application/json",
|
||||
http_headers=http_headers,
|
||||
_globals=operations.GetBenchmarksArtificialAnalysisGlobals(
|
||||
http_referer=self.sdk_configuration.globals.http_referer,
|
||||
x_open_router_title=self.sdk_configuration.globals.x_open_router_title,
|
||||
x_open_router_categories=self.sdk_configuration.globals.x_open_router_categories,
|
||||
),
|
||||
security=self.sdk_configuration.security,
|
||||
allow_empty_value=None,
|
||||
timeout_ms=timeout_ms,
|
||||
)
|
||||
|
||||
if retries == UNSET:
|
||||
if self.sdk_configuration.retry_config is not UNSET:
|
||||
retries = self.sdk_configuration.retry_config
|
||||
else:
|
||||
retries = utils.RetryConfig(
|
||||
"backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True
|
||||
)
|
||||
|
||||
retry_config = None
|
||||
if isinstance(retries, utils.RetryConfig):
|
||||
retry_config = (retries, ["5XX"])
|
||||
|
||||
http_res = await self.do_request_async(
|
||||
hook_ctx=HookContext(
|
||||
config=self.sdk_configuration,
|
||||
base_url=base_url or "",
|
||||
operation_id="getBenchmarksArtificialAnalysis",
|
||||
oauth2_scopes=None,
|
||||
security_source=get_security_from_env(
|
||||
self.sdk_configuration.security, components.Security
|
||||
),
|
||||
),
|
||||
request=req,
|
||||
error_status_codes=["400", "401", "429", "4XX", "500", "5XX"],
|
||||
retry_config=retry_config,
|
||||
)
|
||||
|
||||
response_data: Any = None
|
||||
if utils.match_response(http_res, "200", "application/json"):
|
||||
return unmarshal_json_response(components.BenchmarksAAResponse, http_res)
|
||||
if utils.match_response(http_res, "400", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.BadRequestResponseErrorData, http_res
|
||||
)
|
||||
raise errors.BadRequestResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "401", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.UnauthorizedResponseErrorData, http_res
|
||||
)
|
||||
raise errors.UnauthorizedResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "429", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.TooManyRequestsResponseErrorData, http_res
|
||||
)
|
||||
raise errors.TooManyRequestsResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "500", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.InternalServerResponseErrorData, http_res
|
||||
)
|
||||
raise errors.InternalServerResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "4XX", "*"):
|
||||
http_res_text = await utils.stream_to_text_async(http_res)
|
||||
raise errors.OpenRouterDefaultError(
|
||||
"API error occurred", http_res, http_res_text
|
||||
)
|
||||
if utils.match_response(http_res, "5XX", "*"):
|
||||
http_res_text = await utils.stream_to_text_async(http_res)
|
||||
raise errors.OpenRouterDefaultError(
|
||||
"API error occurred", http_res, http_res_text
|
||||
)
|
||||
|
||||
raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
|
||||
|
||||
def get_benchmarks_design_arena(
|
||||
self,
|
||||
*,
|
||||
http_referer: Optional[str] = None,
|
||||
x_open_router_title: Optional[str] = None,
|
||||
x_open_router_categories: Optional[str] = None,
|
||||
arena: Optional[operations.Arena] = "models",
|
||||
category: Optional[str] = None,
|
||||
max_results: Optional[int] = 50,
|
||||
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
||||
server_url: Optional[str] = None,
|
||||
timeout_ms: Optional[int] = None,
|
||||
http_headers: Optional[Mapping[str, str]] = None,
|
||||
) -> components.BenchmarksDAResponse:
|
||||
r"""Design Arena Benchmark Rankings
|
||||
|
||||
Returns ELO ratings from head-to-head arena battles on Design Arena. Filterable by arena (models/builders/agents) and category. Includes OpenRouter pricing per model. Authenticate with any valid OpenRouter API key. Rate-limited to 30 requests/minute per key and 500 requests/day per account.
|
||||
|
||||
:param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
:param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
:param arena: Arena to query. Defaults to `models`.
|
||||
:param category: Category within the arena (e.g. `codecategories`, `uicomponent`, `gamedev`, `3d`, `dataviz`, `image`, `video`, `svg`). When omitted, returns all categories.
|
||||
:param max_results: Max results to return: per category when no category filter is applied (1–100, default 50).
|
||||
: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
|
||||
:param http_headers: Additional headers to set or replace on requests.
|
||||
"""
|
||||
base_url = None
|
||||
url_variables = None
|
||||
if timeout_ms is None:
|
||||
timeout_ms = self.sdk_configuration.timeout_ms
|
||||
|
||||
if server_url is not None:
|
||||
base_url = server_url
|
||||
else:
|
||||
base_url = self._get_url(base_url, url_variables)
|
||||
|
||||
request = operations.GetBenchmarksDesignArenaRequest(
|
||||
http_referer=http_referer,
|
||||
x_open_router_title=x_open_router_title,
|
||||
x_open_router_categories=x_open_router_categories,
|
||||
arena=arena,
|
||||
category=category,
|
||||
max_results=max_results,
|
||||
)
|
||||
|
||||
req = self._build_request(
|
||||
method="GET",
|
||||
path="/datasets/benchmarks/design-arena",
|
||||
base_url=base_url,
|
||||
url_variables=url_variables,
|
||||
request=request,
|
||||
request_body_required=False,
|
||||
request_has_path_params=False,
|
||||
request_has_query_params=True,
|
||||
user_agent_header="user-agent",
|
||||
accept_header_value="application/json",
|
||||
http_headers=http_headers,
|
||||
_globals=operations.GetBenchmarksDesignArenaGlobals(
|
||||
http_referer=self.sdk_configuration.globals.http_referer,
|
||||
x_open_router_title=self.sdk_configuration.globals.x_open_router_title,
|
||||
x_open_router_categories=self.sdk_configuration.globals.x_open_router_categories,
|
||||
),
|
||||
security=self.sdk_configuration.security,
|
||||
allow_empty_value=None,
|
||||
timeout_ms=timeout_ms,
|
||||
)
|
||||
|
||||
if retries == UNSET:
|
||||
if self.sdk_configuration.retry_config is not UNSET:
|
||||
retries = self.sdk_configuration.retry_config
|
||||
else:
|
||||
retries = utils.RetryConfig(
|
||||
"backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True
|
||||
)
|
||||
|
||||
retry_config = None
|
||||
if isinstance(retries, utils.RetryConfig):
|
||||
retry_config = (retries, ["5XX"])
|
||||
|
||||
http_res = self.do_request(
|
||||
hook_ctx=HookContext(
|
||||
config=self.sdk_configuration,
|
||||
base_url=base_url or "",
|
||||
operation_id="getBenchmarksDesignArena",
|
||||
oauth2_scopes=None,
|
||||
security_source=get_security_from_env(
|
||||
self.sdk_configuration.security, components.Security
|
||||
),
|
||||
),
|
||||
request=req,
|
||||
error_status_codes=["400", "401", "429", "4XX", "500", "5XX"],
|
||||
retry_config=retry_config,
|
||||
)
|
||||
|
||||
response_data: Any = None
|
||||
if utils.match_response(http_res, "200", "application/json"):
|
||||
return unmarshal_json_response(components.BenchmarksDAResponse, http_res)
|
||||
if utils.match_response(http_res, "400", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.BadRequestResponseErrorData, http_res
|
||||
)
|
||||
raise errors.BadRequestResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "401", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.UnauthorizedResponseErrorData, http_res
|
||||
)
|
||||
raise errors.UnauthorizedResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "429", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.TooManyRequestsResponseErrorData, http_res
|
||||
)
|
||||
raise errors.TooManyRequestsResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "500", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.InternalServerResponseErrorData, http_res
|
||||
)
|
||||
raise errors.InternalServerResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "4XX", "*"):
|
||||
http_res_text = utils.stream_to_text(http_res)
|
||||
raise errors.OpenRouterDefaultError(
|
||||
"API error occurred", http_res, http_res_text
|
||||
)
|
||||
if utils.match_response(http_res, "5XX", "*"):
|
||||
http_res_text = utils.stream_to_text(http_res)
|
||||
raise errors.OpenRouterDefaultError(
|
||||
"API error occurred", http_res, http_res_text
|
||||
)
|
||||
|
||||
raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
|
||||
|
||||
async def get_benchmarks_design_arena_async(
|
||||
self,
|
||||
*,
|
||||
http_referer: Optional[str] = None,
|
||||
x_open_router_title: Optional[str] = None,
|
||||
x_open_router_categories: Optional[str] = None,
|
||||
arena: Optional[operations.Arena] = "models",
|
||||
category: Optional[str] = None,
|
||||
max_results: Optional[int] = 50,
|
||||
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
||||
server_url: Optional[str] = None,
|
||||
timeout_ms: Optional[int] = None,
|
||||
http_headers: Optional[Mapping[str, str]] = None,
|
||||
) -> components.BenchmarksDAResponse:
|
||||
r"""Design Arena Benchmark Rankings
|
||||
|
||||
Returns ELO ratings from head-to-head arena battles on Design Arena. Filterable by arena (models/builders/agents) and category. Includes OpenRouter pricing per model. Authenticate with any valid OpenRouter API key. Rate-limited to 30 requests/minute per key and 500 requests/day per account.
|
||||
|
||||
:param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
:param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
:param arena: Arena to query. Defaults to `models`.
|
||||
:param category: Category within the arena (e.g. `codecategories`, `uicomponent`, `gamedev`, `3d`, `dataviz`, `image`, `video`, `svg`). When omitted, returns all categories.
|
||||
:param max_results: Max results to return: per category when no category filter is applied (1–100, default 50).
|
||||
: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
|
||||
:param http_headers: Additional headers to set or replace on requests.
|
||||
"""
|
||||
base_url = None
|
||||
url_variables = None
|
||||
if timeout_ms is None:
|
||||
timeout_ms = self.sdk_configuration.timeout_ms
|
||||
|
||||
if server_url is not None:
|
||||
base_url = server_url
|
||||
else:
|
||||
base_url = self._get_url(base_url, url_variables)
|
||||
|
||||
request = operations.GetBenchmarksDesignArenaRequest(
|
||||
http_referer=http_referer,
|
||||
x_open_router_title=x_open_router_title,
|
||||
x_open_router_categories=x_open_router_categories,
|
||||
arena=arena,
|
||||
category=category,
|
||||
max_results=max_results,
|
||||
)
|
||||
|
||||
req = self._build_request_async(
|
||||
method="GET",
|
||||
path="/datasets/benchmarks/design-arena",
|
||||
base_url=base_url,
|
||||
url_variables=url_variables,
|
||||
request=request,
|
||||
request_body_required=False,
|
||||
request_has_path_params=False,
|
||||
request_has_query_params=True,
|
||||
user_agent_header="user-agent",
|
||||
accept_header_value="application/json",
|
||||
http_headers=http_headers,
|
||||
_globals=operations.GetBenchmarksDesignArenaGlobals(
|
||||
http_referer=self.sdk_configuration.globals.http_referer,
|
||||
x_open_router_title=self.sdk_configuration.globals.x_open_router_title,
|
||||
x_open_router_categories=self.sdk_configuration.globals.x_open_router_categories,
|
||||
),
|
||||
security=self.sdk_configuration.security,
|
||||
allow_empty_value=None,
|
||||
timeout_ms=timeout_ms,
|
||||
)
|
||||
|
||||
if retries == UNSET:
|
||||
if self.sdk_configuration.retry_config is not UNSET:
|
||||
retries = self.sdk_configuration.retry_config
|
||||
else:
|
||||
retries = utils.RetryConfig(
|
||||
"backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True
|
||||
)
|
||||
|
||||
retry_config = None
|
||||
if isinstance(retries, utils.RetryConfig):
|
||||
retry_config = (retries, ["5XX"])
|
||||
|
||||
http_res = await self.do_request_async(
|
||||
hook_ctx=HookContext(
|
||||
config=self.sdk_configuration,
|
||||
base_url=base_url or "",
|
||||
operation_id="getBenchmarksDesignArena",
|
||||
oauth2_scopes=None,
|
||||
security_source=get_security_from_env(
|
||||
self.sdk_configuration.security, components.Security
|
||||
),
|
||||
),
|
||||
request=req,
|
||||
error_status_codes=["400", "401", "429", "4XX", "500", "5XX"],
|
||||
retry_config=retry_config,
|
||||
)
|
||||
|
||||
response_data: Any = None
|
||||
if utils.match_response(http_res, "200", "application/json"):
|
||||
return unmarshal_json_response(components.BenchmarksDAResponse, http_res)
|
||||
if utils.match_response(http_res, "400", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.BadRequestResponseErrorData, http_res
|
||||
)
|
||||
raise errors.BadRequestResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "401", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.UnauthorizedResponseErrorData, http_res
|
||||
)
|
||||
raise errors.UnauthorizedResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "429", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.TooManyRequestsResponseErrorData, http_res
|
||||
)
|
||||
raise errors.TooManyRequestsResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "500", "application/json"):
|
||||
response_data = unmarshal_json_response(
|
||||
errors.InternalServerResponseErrorData, http_res
|
||||
)
|
||||
raise errors.InternalServerResponseError(response_data, http_res)
|
||||
if utils.match_response(http_res, "4XX", "*"):
|
||||
http_res_text = await utils.stream_to_text_async(http_res)
|
||||
raise errors.OpenRouterDefaultError(
|
||||
"API error occurred", http_res, http_res_text
|
||||
)
|
||||
if utils.match_response(http_res, "5XX", "*"):
|
||||
http_res_text = await utils.stream_to_text_async(http_res)
|
||||
raise errors.OpenRouterDefaultError(
|
||||
"API error occurred", http_res, http_res_text
|
||||
)
|
||||
|
||||
raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
|
||||
|
||||
def get_rankings_daily(
|
||||
self,
|
||||
*,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -298,7 +298,7 @@ class Models(BaseSDK):
|
||||
:param category: Filter models by use case category
|
||||
:param supported_parameters: Filter models by supported parameter (comma-separated)
|
||||
:param output_modalities: Filter models by output modality. Accepts a comma-separated list of modalities (text, image, audio, embeddings) or \"all\" to include all models. Defaults to \"text\".
|
||||
:param sort: Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date). When omitted, the existing default ordering is preserved.
|
||||
:param sort: Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date), intelligence-high-to-low (Artificial Analysis intelligence index), design-arena-elo-high-to-low (best Design Arena ELO across arenas). Models without a score for the chosen benchmark are placed last. When omitted, the existing default ordering is preserved.
|
||||
:param q: Free-text search by model name or slug.
|
||||
:param input_modalities: Filter models by input modality. Comma-separated list of: text, image, audio, file.
|
||||
:param context: Minimum context length (tokens). Models with smaller context are excluded.
|
||||
@@ -459,7 +459,7 @@ class Models(BaseSDK):
|
||||
:param category: Filter models by use case category
|
||||
:param supported_parameters: Filter models by supported parameter (comma-separated)
|
||||
:param output_modalities: Filter models by output modality. Accepts a comma-separated list of modalities (text, image, audio, embeddings) or \"all\" to include all models. Defaults to \"text\".
|
||||
:param sort: Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date). When omitted, the existing default ordering is preserved.
|
||||
:param sort: Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date), intelligence-high-to-low (Artificial Analysis intelligence index), design-arena-elo-high-to-low (best Design Arena ELO across arenas). Models without a score for the chosen benchmark are placed last. When omitted, the existing default ordering is preserved.
|
||||
:param q: Free-text search by model name or slug.
|
||||
:param input_modalities: Filter models by input modality. Comma-separated list of: text, image, audio, file.
|
||||
:param context: Minimum context length (tokens). Models with smaller context are excluded.
|
||||
|
||||
@@ -81,6 +81,8 @@ if TYPE_CHECKING:
|
||||
ContentText,
|
||||
ContentTextTypedDict,
|
||||
ContentTypedDict,
|
||||
CostDetails,
|
||||
CostDetailsTypedDict,
|
||||
CreateEmbeddingsData,
|
||||
CreateEmbeddingsDataTypedDict,
|
||||
CreateEmbeddingsGlobals,
|
||||
@@ -117,6 +119,14 @@ if TYPE_CHECKING:
|
||||
CreateGuardrailRequest,
|
||||
CreateGuardrailRequestTypedDict,
|
||||
)
|
||||
from .createimages import (
|
||||
CreateImagesGlobals,
|
||||
CreateImagesGlobalsTypedDict,
|
||||
CreateImagesRequest,
|
||||
CreateImagesRequestTypedDict,
|
||||
CreateImagesResponse,
|
||||
CreateImagesResponseTypedDict,
|
||||
)
|
||||
from .createkeys import (
|
||||
CreateKeysData,
|
||||
CreateKeysDataTypedDict,
|
||||
@@ -290,18 +300,14 @@ if TYPE_CHECKING:
|
||||
GetAppRankingsSort,
|
||||
Subcategory,
|
||||
)
|
||||
from .getbenchmarksartificialanalysis import (
|
||||
GetBenchmarksArtificialAnalysisGlobals,
|
||||
GetBenchmarksArtificialAnalysisGlobalsTypedDict,
|
||||
GetBenchmarksArtificialAnalysisRequest,
|
||||
GetBenchmarksArtificialAnalysisRequestTypedDict,
|
||||
)
|
||||
from .getbenchmarksdesignarena import (
|
||||
from .getbenchmarks import (
|
||||
Arena,
|
||||
GetBenchmarksDesignArenaGlobals,
|
||||
GetBenchmarksDesignArenaGlobalsTypedDict,
|
||||
GetBenchmarksDesignArenaRequest,
|
||||
GetBenchmarksDesignArenaRequestTypedDict,
|
||||
GetBenchmarksGlobals,
|
||||
GetBenchmarksGlobalsTypedDict,
|
||||
GetBenchmarksRequest,
|
||||
GetBenchmarksRequestTypedDict,
|
||||
Source,
|
||||
TaskType,
|
||||
)
|
||||
from .getbyokkey import (
|
||||
GetBYOKKeyGlobals,
|
||||
@@ -400,6 +406,13 @@ if TYPE_CHECKING:
|
||||
GetRankingsDailyRequest,
|
||||
GetRankingsDailyRequestTypedDict,
|
||||
)
|
||||
from .gettaskclassifications import (
|
||||
GetTaskClassificationsGlobals,
|
||||
GetTaskClassificationsGlobalsTypedDict,
|
||||
GetTaskClassificationsRequest,
|
||||
GetTaskClassificationsRequestTypedDict,
|
||||
Window,
|
||||
)
|
||||
from .getuseractivity import (
|
||||
GetUserActivityGlobals,
|
||||
GetUserActivityGlobalsTypedDict,
|
||||
@@ -497,6 +510,18 @@ if TYPE_CHECKING:
|
||||
ListGuardrailsResponse,
|
||||
ListGuardrailsResponseTypedDict,
|
||||
)
|
||||
from .listimagemodelendpoints import (
|
||||
ListImageModelEndpointsGlobals,
|
||||
ListImageModelEndpointsGlobalsTypedDict,
|
||||
ListImageModelEndpointsRequest,
|
||||
ListImageModelEndpointsRequestTypedDict,
|
||||
)
|
||||
from .listimagemodels import (
|
||||
ListImageModelsGlobals,
|
||||
ListImageModelsGlobalsTypedDict,
|
||||
ListImageModelsRequest,
|
||||
ListImageModelsRequestTypedDict,
|
||||
)
|
||||
from .listkeyassignments import (
|
||||
ListKeyAssignmentsGlobals,
|
||||
ListKeyAssignmentsGlobalsTypedDict,
|
||||
@@ -723,6 +748,8 @@ __all__ = [
|
||||
"ContentText",
|
||||
"ContentTextTypedDict",
|
||||
"ContentTypedDict",
|
||||
"CostDetails",
|
||||
"CostDetailsTypedDict",
|
||||
"CreateAudioSpeechGlobals",
|
||||
"CreateAudioSpeechGlobalsTypedDict",
|
||||
"CreateAudioSpeechRequest",
|
||||
@@ -764,6 +791,12 @@ __all__ = [
|
||||
"CreateGuardrailGlobalsTypedDict",
|
||||
"CreateGuardrailRequest",
|
||||
"CreateGuardrailRequestTypedDict",
|
||||
"CreateImagesGlobals",
|
||||
"CreateImagesGlobalsTypedDict",
|
||||
"CreateImagesRequest",
|
||||
"CreateImagesRequestTypedDict",
|
||||
"CreateImagesResponse",
|
||||
"CreateImagesResponseTypedDict",
|
||||
"CreateKeysData",
|
||||
"CreateKeysDataTypedDict",
|
||||
"CreateKeysGlobals",
|
||||
@@ -899,14 +932,10 @@ __all__ = [
|
||||
"GetBYOKKeyGlobalsTypedDict",
|
||||
"GetBYOKKeyRequest",
|
||||
"GetBYOKKeyRequestTypedDict",
|
||||
"GetBenchmarksArtificialAnalysisGlobals",
|
||||
"GetBenchmarksArtificialAnalysisGlobalsTypedDict",
|
||||
"GetBenchmarksArtificialAnalysisRequest",
|
||||
"GetBenchmarksArtificialAnalysisRequestTypedDict",
|
||||
"GetBenchmarksDesignArenaGlobals",
|
||||
"GetBenchmarksDesignArenaGlobalsTypedDict",
|
||||
"GetBenchmarksDesignArenaRequest",
|
||||
"GetBenchmarksDesignArenaRequestTypedDict",
|
||||
"GetBenchmarksGlobals",
|
||||
"GetBenchmarksGlobalsTypedDict",
|
||||
"GetBenchmarksRequest",
|
||||
"GetBenchmarksRequestTypedDict",
|
||||
"GetCreditsData",
|
||||
"GetCreditsDataTypedDict",
|
||||
"GetCreditsGlobals",
|
||||
@@ -969,6 +998,10 @@ __all__ = [
|
||||
"GetRankingsDailyGlobalsTypedDict",
|
||||
"GetRankingsDailyRequest",
|
||||
"GetRankingsDailyRequestTypedDict",
|
||||
"GetTaskClassificationsGlobals",
|
||||
"GetTaskClassificationsGlobalsTypedDict",
|
||||
"GetTaskClassificationsRequest",
|
||||
"GetTaskClassificationsRequestTypedDict",
|
||||
"GetUserActivityGlobals",
|
||||
"GetUserActivityGlobalsTypedDict",
|
||||
"GetUserActivityRequest",
|
||||
@@ -1045,6 +1078,14 @@ __all__ = [
|
||||
"ListGuardrailsRequestTypedDict",
|
||||
"ListGuardrailsResponse",
|
||||
"ListGuardrailsResponseTypedDict",
|
||||
"ListImageModelEndpointsGlobals",
|
||||
"ListImageModelEndpointsGlobalsTypedDict",
|
||||
"ListImageModelEndpointsRequest",
|
||||
"ListImageModelEndpointsRequestTypedDict",
|
||||
"ListImageModelsGlobals",
|
||||
"ListImageModelsGlobalsTypedDict",
|
||||
"ListImageModelsRequest",
|
||||
"ListImageModelsRequestTypedDict",
|
||||
"ListKeyAssignmentsGlobals",
|
||||
"ListKeyAssignmentsGlobalsTypedDict",
|
||||
"ListKeyAssignmentsRequest",
|
||||
@@ -1163,7 +1204,9 @@ __all__ = [
|
||||
"SendChatCompletionRequestRequestTypedDict",
|
||||
"SendChatCompletionRequestResponse",
|
||||
"SendChatCompletionRequestResponseTypedDict",
|
||||
"Source",
|
||||
"Subcategory",
|
||||
"TaskType",
|
||||
"TimeRange",
|
||||
"TimeRangeTypedDict",
|
||||
"TypeImageURL",
|
||||
@@ -1211,6 +1254,7 @@ __all__ = [
|
||||
"Value2",
|
||||
"Value2TypedDict",
|
||||
"ValueType",
|
||||
"Window",
|
||||
"Zdr",
|
||||
]
|
||||
|
||||
@@ -1269,6 +1313,8 @@ _dynamic_imports: dict[str, str] = {
|
||||
"ContentText": ".createembeddings",
|
||||
"ContentTextTypedDict": ".createembeddings",
|
||||
"ContentTypedDict": ".createembeddings",
|
||||
"CostDetails": ".createembeddings",
|
||||
"CostDetailsTypedDict": ".createembeddings",
|
||||
"CreateEmbeddingsData": ".createembeddings",
|
||||
"CreateEmbeddingsDataTypedDict": ".createembeddings",
|
||||
"CreateEmbeddingsGlobals": ".createembeddings",
|
||||
@@ -1302,6 +1348,12 @@ _dynamic_imports: dict[str, str] = {
|
||||
"CreateGuardrailGlobalsTypedDict": ".createguardrail",
|
||||
"CreateGuardrailRequest": ".createguardrail",
|
||||
"CreateGuardrailRequestTypedDict": ".createguardrail",
|
||||
"CreateImagesGlobals": ".createimages",
|
||||
"CreateImagesGlobalsTypedDict": ".createimages",
|
||||
"CreateImagesRequest": ".createimages",
|
||||
"CreateImagesRequestTypedDict": ".createimages",
|
||||
"CreateImagesResponse": ".createimages",
|
||||
"CreateImagesResponseTypedDict": ".createimages",
|
||||
"CreateKeysData": ".createkeys",
|
||||
"CreateKeysDataTypedDict": ".createkeys",
|
||||
"CreateKeysGlobals": ".createkeys",
|
||||
@@ -1435,15 +1487,13 @@ _dynamic_imports: dict[str, str] = {
|
||||
"GetAppRankingsResponseTypedDict": ".getapprankings",
|
||||
"GetAppRankingsSort": ".getapprankings",
|
||||
"Subcategory": ".getapprankings",
|
||||
"GetBenchmarksArtificialAnalysisGlobals": ".getbenchmarksartificialanalysis",
|
||||
"GetBenchmarksArtificialAnalysisGlobalsTypedDict": ".getbenchmarksartificialanalysis",
|
||||
"GetBenchmarksArtificialAnalysisRequest": ".getbenchmarksartificialanalysis",
|
||||
"GetBenchmarksArtificialAnalysisRequestTypedDict": ".getbenchmarksartificialanalysis",
|
||||
"Arena": ".getbenchmarksdesignarena",
|
||||
"GetBenchmarksDesignArenaGlobals": ".getbenchmarksdesignarena",
|
||||
"GetBenchmarksDesignArenaGlobalsTypedDict": ".getbenchmarksdesignarena",
|
||||
"GetBenchmarksDesignArenaRequest": ".getbenchmarksdesignarena",
|
||||
"GetBenchmarksDesignArenaRequestTypedDict": ".getbenchmarksdesignarena",
|
||||
"Arena": ".getbenchmarks",
|
||||
"GetBenchmarksGlobals": ".getbenchmarks",
|
||||
"GetBenchmarksGlobalsTypedDict": ".getbenchmarks",
|
||||
"GetBenchmarksRequest": ".getbenchmarks",
|
||||
"GetBenchmarksRequestTypedDict": ".getbenchmarks",
|
||||
"Source": ".getbenchmarks",
|
||||
"TaskType": ".getbenchmarks",
|
||||
"GetBYOKKeyGlobals": ".getbyokkey",
|
||||
"GetBYOKKeyGlobalsTypedDict": ".getbyokkey",
|
||||
"GetBYOKKeyRequest": ".getbyokkey",
|
||||
@@ -1515,6 +1565,11 @@ _dynamic_imports: dict[str, str] = {
|
||||
"GetRankingsDailyGlobalsTypedDict": ".getrankingsdaily",
|
||||
"GetRankingsDailyRequest": ".getrankingsdaily",
|
||||
"GetRankingsDailyRequestTypedDict": ".getrankingsdaily",
|
||||
"GetTaskClassificationsGlobals": ".gettaskclassifications",
|
||||
"GetTaskClassificationsGlobalsTypedDict": ".gettaskclassifications",
|
||||
"GetTaskClassificationsRequest": ".gettaskclassifications",
|
||||
"GetTaskClassificationsRequestTypedDict": ".gettaskclassifications",
|
||||
"Window": ".gettaskclassifications",
|
||||
"GetUserActivityGlobals": ".getuseractivity",
|
||||
"GetUserActivityGlobalsTypedDict": ".getuseractivity",
|
||||
"GetUserActivityRequest": ".getuseractivity",
|
||||
@@ -1586,6 +1641,14 @@ _dynamic_imports: dict[str, str] = {
|
||||
"ListGuardrailsRequestTypedDict": ".listguardrails",
|
||||
"ListGuardrailsResponse": ".listguardrails",
|
||||
"ListGuardrailsResponseTypedDict": ".listguardrails",
|
||||
"ListImageModelEndpointsGlobals": ".listimagemodelendpoints",
|
||||
"ListImageModelEndpointsGlobalsTypedDict": ".listimagemodelendpoints",
|
||||
"ListImageModelEndpointsRequest": ".listimagemodelendpoints",
|
||||
"ListImageModelEndpointsRequestTypedDict": ".listimagemodelendpoints",
|
||||
"ListImageModelsGlobals": ".listimagemodels",
|
||||
"ListImageModelsGlobalsTypedDict": ".listimagemodels",
|
||||
"ListImageModelsRequest": ".listimagemodels",
|
||||
"ListImageModelsRequestTypedDict": ".listimagemodels",
|
||||
"ListKeyAssignmentsGlobals": ".listkeyassignments",
|
||||
"ListKeyAssignmentsGlobalsTypedDict": ".listkeyassignments",
|
||||
"ListKeyAssignmentsRequest": ".listkeyassignments",
|
||||
|
||||
@@ -344,6 +344,54 @@ 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."""
|
||||
|
||||
@@ -387,6 +435,10 @@ 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."""
|
||||
|
||||
@@ -403,9 +455,45 @@ 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"""
|
||||
|
||||
@@ -0,0 +1,150 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.components import (
|
||||
imagegenerationrequest as components_imagegenerationrequest,
|
||||
imagegenerationresponse as components_imagegenerationresponse,
|
||||
imagestreamingresponse as components_imagestreamingresponse,
|
||||
)
|
||||
from openrouter.types import BaseModel
|
||||
from openrouter.utils import (
|
||||
FieldMetadata,
|
||||
HeaderMetadata,
|
||||
RequestMetadata,
|
||||
eventstreaming,
|
||||
)
|
||||
import pydantic
|
||||
from typing import Optional, Union
|
||||
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
|
||||
|
||||
|
||||
class CreateImagesGlobalsTypedDict(TypedDict):
|
||||
http_referer: NotRequired[str]
|
||||
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
"""
|
||||
x_open_router_title: NotRequired[str]
|
||||
r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
"""
|
||||
x_open_router_categories: NotRequired[str]
|
||||
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
"""
|
||||
|
||||
|
||||
class CreateImagesGlobals(BaseModel):
|
||||
http_referer: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="HTTP-Referer"),
|
||||
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
|
||||
] = None
|
||||
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
"""
|
||||
|
||||
x_open_router_title: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="X-OpenRouter-Title"),
|
||||
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
|
||||
] = None
|
||||
r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
"""
|
||||
|
||||
x_open_router_categories: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="X-OpenRouter-Categories"),
|
||||
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
|
||||
] = None
|
||||
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
"""
|
||||
|
||||
|
||||
class CreateImagesRequestTypedDict(TypedDict):
|
||||
image_generation_request: (
|
||||
components_imagegenerationrequest.ImageGenerationRequestTypedDict
|
||||
)
|
||||
http_referer: NotRequired[str]
|
||||
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
"""
|
||||
x_open_router_title: NotRequired[str]
|
||||
r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
"""
|
||||
x_open_router_categories: NotRequired[str]
|
||||
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
"""
|
||||
|
||||
|
||||
class CreateImagesRequest(BaseModel):
|
||||
image_generation_request: Annotated[
|
||||
components_imagegenerationrequest.ImageGenerationRequest,
|
||||
FieldMetadata(request=RequestMetadata(media_type="application/json")),
|
||||
]
|
||||
|
||||
http_referer: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="HTTP-Referer"),
|
||||
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
|
||||
] = None
|
||||
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
"""
|
||||
|
||||
x_open_router_title: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="X-OpenRouter-Title"),
|
||||
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
|
||||
] = None
|
||||
r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
"""
|
||||
|
||||
x_open_router_categories: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="X-OpenRouter-Categories"),
|
||||
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
|
||||
] = None
|
||||
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
"""
|
||||
|
||||
|
||||
CreateImagesResponseTypedDict = TypeAliasType(
|
||||
"CreateImagesResponseTypedDict",
|
||||
Union[
|
||||
components_imagegenerationresponse.ImageGenerationResponseTypedDict,
|
||||
Union[
|
||||
eventstreaming.EventStream[
|
||||
components_imagestreamingresponse.ImageStreamingResponseDataTypedDict
|
||||
],
|
||||
eventstreaming.EventStreamAsync[
|
||||
components_imagestreamingresponse.ImageStreamingResponseDataTypedDict
|
||||
],
|
||||
],
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
CreateImagesResponse = TypeAliasType(
|
||||
"CreateImagesResponse",
|
||||
Union[
|
||||
components_imagegenerationresponse.ImageGenerationResponse,
|
||||
Union[
|
||||
eventstreaming.EventStream[
|
||||
components_imagestreamingresponse.ImageStreamingResponseData
|
||||
],
|
||||
eventstreaming.EventStreamAsync[
|
||||
components_imagestreamingresponse.ImageStreamingResponseData
|
||||
],
|
||||
],
|
||||
],
|
||||
)
|
||||
@@ -0,0 +1,178 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.types import BaseModel, UnrecognizedStr
|
||||
from openrouter.utils import (
|
||||
FieldMetadata,
|
||||
HeaderMetadata,
|
||||
QueryParamMetadata,
|
||||
validate_open_enum,
|
||||
)
|
||||
import pydantic
|
||||
from pydantic.functional_validators import PlainValidator
|
||||
from typing import Literal, Optional, Union
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
|
||||
class GetBenchmarksGlobalsTypedDict(TypedDict):
|
||||
http_referer: NotRequired[str]
|
||||
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
"""
|
||||
x_open_router_title: NotRequired[str]
|
||||
r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
"""
|
||||
x_open_router_categories: NotRequired[str]
|
||||
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
"""
|
||||
|
||||
|
||||
class GetBenchmarksGlobals(BaseModel):
|
||||
http_referer: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="HTTP-Referer"),
|
||||
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
|
||||
] = None
|
||||
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
"""
|
||||
|
||||
x_open_router_title: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="X-OpenRouter-Title"),
|
||||
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
|
||||
] = None
|
||||
r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
"""
|
||||
|
||||
x_open_router_categories: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="X-OpenRouter-Categories"),
|
||||
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
|
||||
] = None
|
||||
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
"""
|
||||
|
||||
|
||||
Source = Union[
|
||||
Literal[
|
||||
"artificial-analysis",
|
||||
"design-arena",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
r"""Benchmark source to query. Determines the shape of the returned items. When omitted, returns results from all sources."""
|
||||
|
||||
|
||||
TaskType = Union[
|
||||
Literal[
|
||||
"coding",
|
||||
"intelligence",
|
||||
"agentic",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
r"""Filter results by task type. For Artificial Analysis, maps to the corresponding index. For Design Arena, maps to the matching category."""
|
||||
|
||||
|
||||
Arena = Union[
|
||||
Literal[
|
||||
"models",
|
||||
"builders",
|
||||
"agents",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
r"""Design Arena only: arena to query. Defaults to `models` when source is `design-arena`."""
|
||||
|
||||
|
||||
class GetBenchmarksRequestTypedDict(TypedDict):
|
||||
http_referer: NotRequired[str]
|
||||
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
"""
|
||||
x_open_router_title: NotRequired[str]
|
||||
r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
"""
|
||||
x_open_router_categories: NotRequired[str]
|
||||
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
"""
|
||||
source: NotRequired[Source]
|
||||
r"""Benchmark source to query. Determines the shape of the returned items. When omitted, returns results from all sources."""
|
||||
task_type: NotRequired[TaskType]
|
||||
r"""Filter results by task type. For Artificial Analysis, maps to the corresponding index. For Design Arena, maps to the matching category."""
|
||||
arena: NotRequired[Arena]
|
||||
r"""Design Arena only: arena to query. Defaults to `models` when source is `design-arena`."""
|
||||
category: NotRequired[str]
|
||||
r"""Design Arena only: category within the arena (e.g. `codecategories`, `uicomponent`, `gamedev`, `3d`, `dataviz`, `image`, `video`, `svg`). When omitted, returns all categories."""
|
||||
max_results: NotRequired[int]
|
||||
r"""Maximum number of items to return. When omitted, all matching results are returned."""
|
||||
|
||||
|
||||
class GetBenchmarksRequest(BaseModel):
|
||||
http_referer: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="HTTP-Referer"),
|
||||
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
|
||||
] = None
|
||||
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
"""
|
||||
|
||||
x_open_router_title: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="X-OpenRouter-Title"),
|
||||
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
|
||||
] = None
|
||||
r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
"""
|
||||
|
||||
x_open_router_categories: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="X-OpenRouter-Categories"),
|
||||
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
|
||||
] = None
|
||||
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
"""
|
||||
|
||||
source: Annotated[
|
||||
Annotated[Optional[Source], PlainValidator(validate_open_enum(False))],
|
||||
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
|
||||
] = None
|
||||
r"""Benchmark source to query. Determines the shape of the returned items. When omitted, returns results from all sources."""
|
||||
|
||||
task_type: Annotated[
|
||||
Annotated[Optional[TaskType], PlainValidator(validate_open_enum(False))],
|
||||
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
|
||||
] = None
|
||||
r"""Filter results by task type. For Artificial Analysis, maps to the corresponding index. For Design Arena, maps to the matching category."""
|
||||
|
||||
arena: Annotated[
|
||||
Annotated[Optional[Arena], PlainValidator(validate_open_enum(False))],
|
||||
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
|
||||
] = None
|
||||
r"""Design Arena only: arena to query. Defaults to `models` when source is `design-arena`."""
|
||||
|
||||
category: Annotated[
|
||||
Optional[str],
|
||||
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
|
||||
] = None
|
||||
r"""Design Arena only: category within the arena (e.g. `codecategories`, `uicomponent`, `gamedev`, `3d`, `dataviz`, `image`, `video`, `svg`). When omitted, returns all categories."""
|
||||
|
||||
max_results: Annotated[
|
||||
Optional[int],
|
||||
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
|
||||
] = None
|
||||
r"""Maximum number of items to return. When omitted, all matching results are returned."""
|
||||
@@ -98,10 +98,12 @@ GetModelsSort = Union[
|
||||
"context-high-to-low",
|
||||
"throughput-high-to-low",
|
||||
"latency-low-to-high",
|
||||
"intelligence-high-to-low",
|
||||
"design-arena-elo-high-to-low",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
r"""Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date). When omitted, the existing default ordering is preserved."""
|
||||
r"""Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date), intelligence-high-to-low (Artificial Analysis intelligence index), design-arena-elo-high-to-low (best Design Arena ELO across arenas). Models without a score for the chosen benchmark are placed last. When omitted, the existing default ordering is preserved."""
|
||||
|
||||
|
||||
Distillable = Union[
|
||||
@@ -143,7 +145,7 @@ class GetModelsRequestTypedDict(TypedDict):
|
||||
output_modalities: NotRequired[str]
|
||||
r"""Filter models by output modality. Accepts a comma-separated list of modalities (text, image, audio, embeddings) or \"all\" to include all models. Defaults to \"text\"."""
|
||||
sort: NotRequired[GetModelsSort]
|
||||
r"""Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date). When omitted, the existing default ordering is preserved."""
|
||||
r"""Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date), intelligence-high-to-low (Artificial Analysis intelligence index), design-arena-elo-high-to-low (best Design Arena ELO across arenas). Models without a score for the chosen benchmark are placed last. When omitted, the existing default ordering is preserved."""
|
||||
q: NotRequired[str]
|
||||
r"""Free-text search by model name or slug."""
|
||||
input_modalities: NotRequired[str]
|
||||
@@ -221,7 +223,7 @@ class GetModelsRequest(BaseModel):
|
||||
Annotated[Optional[GetModelsSort], PlainValidator(validate_open_enum(False))],
|
||||
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
|
||||
] = None
|
||||
r"""Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date). When omitted, the existing default ordering is preserved."""
|
||||
r"""Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date), intelligence-high-to-low (Artificial Analysis intelligence index), design-arena-elo-high-to-low (best Design Arena ELO across arenas). Models without a score for the chosen benchmark are placed last. When omitted, the existing default ordering is preserved."""
|
||||
|
||||
q: Annotated[
|
||||
Optional[str],
|
||||
|
||||
+15
-44
@@ -1,20 +1,14 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.types import BaseModel, UnrecognizedStr
|
||||
from openrouter.utils import (
|
||||
FieldMetadata,
|
||||
HeaderMetadata,
|
||||
QueryParamMetadata,
|
||||
validate_open_enum,
|
||||
)
|
||||
from openrouter.types import BaseModel
|
||||
from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
|
||||
import pydantic
|
||||
from pydantic.functional_validators import PlainValidator
|
||||
from typing import Literal, Optional, Union
|
||||
from typing import Literal, Optional
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
|
||||
class GetBenchmarksDesignArenaGlobalsTypedDict(TypedDict):
|
||||
class GetTaskClassificationsGlobalsTypedDict(TypedDict):
|
||||
http_referer: NotRequired[str]
|
||||
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
@@ -30,7 +24,7 @@ class GetBenchmarksDesignArenaGlobalsTypedDict(TypedDict):
|
||||
"""
|
||||
|
||||
|
||||
class GetBenchmarksDesignArenaGlobals(BaseModel):
|
||||
class GetTaskClassificationsGlobals(BaseModel):
|
||||
http_referer: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="HTTP-Referer"),
|
||||
@@ -60,18 +54,11 @@ class GetBenchmarksDesignArenaGlobals(BaseModel):
|
||||
"""
|
||||
|
||||
|
||||
Arena = Union[
|
||||
Literal[
|
||||
"models",
|
||||
"builders",
|
||||
"agents",
|
||||
],
|
||||
UnrecognizedStr,
|
||||
]
|
||||
r"""Arena to query. Defaults to `models`."""
|
||||
Window = Literal["7d",]
|
||||
r"""Trailing time window for the classification data. Currently only `7d` (trailing 7 days) is supported."""
|
||||
|
||||
|
||||
class GetBenchmarksDesignArenaRequestTypedDict(TypedDict):
|
||||
class GetTaskClassificationsRequestTypedDict(TypedDict):
|
||||
http_referer: NotRequired[str]
|
||||
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
@@ -85,15 +72,11 @@ class GetBenchmarksDesignArenaRequestTypedDict(TypedDict):
|
||||
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
"""
|
||||
arena: NotRequired[Arena]
|
||||
r"""Arena to query. Defaults to `models`."""
|
||||
category: NotRequired[str]
|
||||
r"""Category within the arena (e.g. `codecategories`, `uicomponent`, `gamedev`, `3d`, `dataviz`, `image`, `video`, `svg`). When omitted, returns all categories."""
|
||||
max_results: NotRequired[int]
|
||||
r"""Max results to return: per category when no category filter is applied (1–100, default 50)."""
|
||||
window: NotRequired[Window]
|
||||
r"""Trailing time window for the classification data. Currently only `7d` (trailing 7 days) is supported."""
|
||||
|
||||
|
||||
class GetBenchmarksDesignArenaRequest(BaseModel):
|
||||
class GetTaskClassificationsRequest(BaseModel):
|
||||
http_referer: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="HTTP-Referer"),
|
||||
@@ -122,20 +105,8 @@ class GetBenchmarksDesignArenaRequest(BaseModel):
|
||||
|
||||
"""
|
||||
|
||||
arena: Annotated[
|
||||
Annotated[Optional[Arena], PlainValidator(validate_open_enum(False))],
|
||||
window: Annotated[
|
||||
Optional[Window],
|
||||
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
|
||||
] = "models"
|
||||
r"""Arena to query. Defaults to `models`."""
|
||||
|
||||
category: Annotated[
|
||||
Optional[str],
|
||||
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
|
||||
] = None
|
||||
r"""Category within the arena (e.g. `codecategories`, `uicomponent`, `gamedev`, `3d`, `dataviz`, `image`, `video`, `svg`). When omitted, returns all categories."""
|
||||
|
||||
max_results: Annotated[
|
||||
Optional[int],
|
||||
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
|
||||
] = 50
|
||||
r"""Max results to return: per category when no category filter is applied (1–100, default 50)."""
|
||||
] = "7d"
|
||||
r"""Trailing time window for the classification data. Currently only `7d` (trailing 7 days) is supported."""
|
||||
@@ -101,8 +101,10 @@ Provider = Union[
|
||||
"google-ai-studio",
|
||||
"google-vertex",
|
||||
"groq",
|
||||
"heygen",
|
||||
"inception",
|
||||
"inceptron",
|
||||
"inferact-vllm",
|
||||
"inference-net",
|
||||
"infermatic",
|
||||
"inflection",
|
||||
@@ -133,6 +135,7 @@ Provider = Union[
|
||||
"recraft",
|
||||
"reka",
|
||||
"relace",
|
||||
"sakana-ai",
|
||||
"sambanova",
|
||||
"seed",
|
||||
"siliconflow",
|
||||
@@ -140,6 +143,7 @@ Provider = Union[
|
||||
"stepfun",
|
||||
"streamlake",
|
||||
"switchpoint",
|
||||
"tenstorrent",
|
||||
"together",
|
||||
"upstage",
|
||||
"venice",
|
||||
|
||||
@@ -0,0 +1,114 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.types import BaseModel
|
||||
from openrouter.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
|
||||
import pydantic
|
||||
from typing import Optional
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
|
||||
class ListImageModelEndpointsGlobalsTypedDict(TypedDict):
|
||||
http_referer: NotRequired[str]
|
||||
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
"""
|
||||
x_open_router_title: NotRequired[str]
|
||||
r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
"""
|
||||
x_open_router_categories: NotRequired[str]
|
||||
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
"""
|
||||
|
||||
|
||||
class ListImageModelEndpointsGlobals(BaseModel):
|
||||
http_referer: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="HTTP-Referer"),
|
||||
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
|
||||
] = None
|
||||
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
"""
|
||||
|
||||
x_open_router_title: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="X-OpenRouter-Title"),
|
||||
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
|
||||
] = None
|
||||
r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
"""
|
||||
|
||||
x_open_router_categories: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="X-OpenRouter-Categories"),
|
||||
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
|
||||
] = None
|
||||
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
"""
|
||||
|
||||
|
||||
class ListImageModelEndpointsRequestTypedDict(TypedDict):
|
||||
author: str
|
||||
r"""Model author/organization"""
|
||||
slug: str
|
||||
r"""Model slug"""
|
||||
http_referer: NotRequired[str]
|
||||
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
"""
|
||||
x_open_router_title: NotRequired[str]
|
||||
r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
"""
|
||||
x_open_router_categories: NotRequired[str]
|
||||
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
"""
|
||||
|
||||
|
||||
class ListImageModelEndpointsRequest(BaseModel):
|
||||
author: Annotated[
|
||||
str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
|
||||
]
|
||||
r"""Model author/organization"""
|
||||
|
||||
slug: Annotated[
|
||||
str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
|
||||
]
|
||||
r"""Model slug"""
|
||||
|
||||
http_referer: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="HTTP-Referer"),
|
||||
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
|
||||
] = None
|
||||
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
|
||||
"""
|
||||
|
||||
x_open_router_title: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="X-OpenRouter-Title"),
|
||||
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
|
||||
] = None
|
||||
r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
||||
|
||||
"""
|
||||
|
||||
x_open_router_categories: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="X-OpenRouter-Categories"),
|
||||
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
|
||||
] = None
|
||||
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
"""
|
||||
+5
-13
@@ -2,13 +2,13 @@
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.types import BaseModel
|
||||
from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
|
||||
from openrouter.utils import FieldMetadata, HeaderMetadata
|
||||
import pydantic
|
||||
from typing import Optional
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
|
||||
class GetBenchmarksArtificialAnalysisGlobalsTypedDict(TypedDict):
|
||||
class ListImageModelsGlobalsTypedDict(TypedDict):
|
||||
http_referer: NotRequired[str]
|
||||
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
@@ -24,7 +24,7 @@ class GetBenchmarksArtificialAnalysisGlobalsTypedDict(TypedDict):
|
||||
"""
|
||||
|
||||
|
||||
class GetBenchmarksArtificialAnalysisGlobals(BaseModel):
|
||||
class ListImageModelsGlobals(BaseModel):
|
||||
http_referer: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="HTTP-Referer"),
|
||||
@@ -54,7 +54,7 @@ class GetBenchmarksArtificialAnalysisGlobals(BaseModel):
|
||||
"""
|
||||
|
||||
|
||||
class GetBenchmarksArtificialAnalysisRequestTypedDict(TypedDict):
|
||||
class ListImageModelsRequestTypedDict(TypedDict):
|
||||
http_referer: NotRequired[str]
|
||||
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
||||
This is used to track API usage per application.
|
||||
@@ -68,11 +68,9 @@ class GetBenchmarksArtificialAnalysisRequestTypedDict(TypedDict):
|
||||
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
"""
|
||||
max_results: NotRequired[int]
|
||||
r"""Max results to return (1–100, default 50)."""
|
||||
|
||||
|
||||
class GetBenchmarksArtificialAnalysisRequest(BaseModel):
|
||||
class ListImageModelsRequest(BaseModel):
|
||||
http_referer: Annotated[
|
||||
Optional[str],
|
||||
pydantic.Field(alias="HTTP-Referer"),
|
||||
@@ -100,9 +98,3 @@ class GetBenchmarksArtificialAnalysisRequest(BaseModel):
|
||||
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
||||
|
||||
"""
|
||||
|
||||
max_results: Annotated[
|
||||
Optional[int],
|
||||
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
|
||||
] = 50
|
||||
r"""Max results to return (1–100, default 50)."""
|
||||
@@ -1295,7 +1295,10 @@ class Presets(BaseSDK):
|
||||
] = UNSET,
|
||||
max_tokens: Optional[int] = None,
|
||||
metadata: Optional[
|
||||
Union[components.Metadata, components.MetadataTypedDict]
|
||||
Union[
|
||||
components.MessagesRequestMetadata,
|
||||
components.MessagesRequestMetadataTypedDict,
|
||||
]
|
||||
] = None,
|
||||
models: Optional[List[str]] = None,
|
||||
output_config: Optional[
|
||||
@@ -1424,7 +1427,7 @@ class Presets(BaseSDK):
|
||||
messages, Nullable[List[components.MessagesMessageParam]]
|
||||
),
|
||||
metadata=utils.get_pydantic_model(
|
||||
metadata, Optional[components.Metadata]
|
||||
metadata, Optional[components.MessagesRequestMetadata]
|
||||
),
|
||||
model=model,
|
||||
models=models,
|
||||
@@ -1599,7 +1602,10 @@ class Presets(BaseSDK):
|
||||
] = UNSET,
|
||||
max_tokens: Optional[int] = None,
|
||||
metadata: Optional[
|
||||
Union[components.Metadata, components.MetadataTypedDict]
|
||||
Union[
|
||||
components.MessagesRequestMetadata,
|
||||
components.MessagesRequestMetadataTypedDict,
|
||||
]
|
||||
] = None,
|
||||
models: Optional[List[str]] = None,
|
||||
output_config: Optional[
|
||||
@@ -1728,7 +1734,7 @@ class Presets(BaseSDK):
|
||||
messages, Nullable[List[components.MessagesMessageParam]]
|
||||
),
|
||||
metadata=utils.get_pydantic_model(
|
||||
metadata, Optional[components.Metadata]
|
||||
metadata, Optional[components.MessagesRequestMetadata]
|
||||
),
|
||||
model=model,
|
||||
models=models,
|
||||
@@ -1886,6 +1892,9 @@ class Presets(BaseSDK):
|
||||
components.AnthropicCacheControlDirectiveTypedDict,
|
||||
]
|
||||
] = None,
|
||||
debug: Optional[
|
||||
Union[components.ChatDebugOptions, components.ChatDebugOptionsTypedDict]
|
||||
] = None,
|
||||
frequency_penalty: OptionalNullable[float] = UNSET,
|
||||
image_config: Optional[
|
||||
Union[
|
||||
@@ -1981,6 +1990,7 @@ class Presets(BaseSDK):
|
||||
|
||||
:param background:
|
||||
:param cache_control: Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models.
|
||||
:param debug: Debug options for inspecting request transformations (streaming only)
|
||||
:param frequency_penalty:
|
||||
:param image_config: Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details.
|
||||
:param include:
|
||||
@@ -2040,6 +2050,9 @@ class Presets(BaseSDK):
|
||||
cache_control=utils.get_pydantic_model(
|
||||
cache_control, Optional[components.AnthropicCacheControlDirective]
|
||||
),
|
||||
debug=utils.get_pydantic_model(
|
||||
debug, Optional[components.ChatDebugOptions]
|
||||
),
|
||||
frequency_penalty=frequency_penalty,
|
||||
image_config=image_config,
|
||||
include=include,
|
||||
@@ -2212,6 +2225,9 @@ class Presets(BaseSDK):
|
||||
components.AnthropicCacheControlDirectiveTypedDict,
|
||||
]
|
||||
] = None,
|
||||
debug: Optional[
|
||||
Union[components.ChatDebugOptions, components.ChatDebugOptionsTypedDict]
|
||||
] = None,
|
||||
frequency_penalty: OptionalNullable[float] = UNSET,
|
||||
image_config: Optional[
|
||||
Union[
|
||||
@@ -2307,6 +2323,7 @@ class Presets(BaseSDK):
|
||||
|
||||
:param background:
|
||||
:param cache_control: Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models.
|
||||
:param debug: Debug options for inspecting request transformations (streaming only)
|
||||
:param frequency_penalty:
|
||||
:param image_config: Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details.
|
||||
:param include:
|
||||
@@ -2366,6 +2383,9 @@ class Presets(BaseSDK):
|
||||
cache_control=utils.get_pydantic_model(
|
||||
cache_control, Optional[components.AnthropicCacheControlDirective]
|
||||
),
|
||||
debug=utils.get_pydantic_model(
|
||||
debug, Optional[components.ChatDebugOptions]
|
||||
),
|
||||
frequency_penalty=frequency_penalty,
|
||||
image_config=image_config,
|
||||
include=include,
|
||||
|
||||
@@ -33,6 +33,9 @@ class Responses(BaseSDK):
|
||||
components.AnthropicCacheControlDirectiveTypedDict,
|
||||
]
|
||||
] = None,
|
||||
debug: Optional[
|
||||
Union[components.ChatDebugOptions, components.ChatDebugOptionsTypedDict]
|
||||
] = None,
|
||||
frequency_penalty: OptionalNullable[float] = UNSET,
|
||||
image_config: Optional[
|
||||
Union[
|
||||
@@ -128,6 +131,7 @@ class Responses(BaseSDK):
|
||||
:param x_open_router_metadata: Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility.
|
||||
:param background:
|
||||
:param cache_control: Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models.
|
||||
:param debug: Debug options for inspecting request transformations (streaming only)
|
||||
:param frequency_penalty:
|
||||
:param image_config: Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details.
|
||||
:param include:
|
||||
@@ -184,6 +188,9 @@ class Responses(BaseSDK):
|
||||
components.AnthropicCacheControlDirectiveTypedDict,
|
||||
]
|
||||
] = None,
|
||||
debug: Optional[
|
||||
Union[components.ChatDebugOptions, components.ChatDebugOptionsTypedDict]
|
||||
] = None,
|
||||
frequency_penalty: OptionalNullable[float] = UNSET,
|
||||
image_config: Optional[
|
||||
Union[
|
||||
@@ -279,6 +286,7 @@ class Responses(BaseSDK):
|
||||
:param x_open_router_metadata: Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility.
|
||||
:param background:
|
||||
:param cache_control: Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models.
|
||||
:param debug: Debug options for inspecting request transformations (streaming only)
|
||||
:param frequency_penalty:
|
||||
:param image_config: Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details.
|
||||
:param include:
|
||||
@@ -334,6 +342,9 @@ class Responses(BaseSDK):
|
||||
components.AnthropicCacheControlDirectiveTypedDict,
|
||||
]
|
||||
] = None,
|
||||
debug: Optional[
|
||||
Union[components.ChatDebugOptions, components.ChatDebugOptionsTypedDict]
|
||||
] = None,
|
||||
frequency_penalty: OptionalNullable[float] = UNSET,
|
||||
image_config: Optional[
|
||||
Union[
|
||||
@@ -429,6 +440,7 @@ class Responses(BaseSDK):
|
||||
:param x_open_router_metadata: Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility.
|
||||
:param background:
|
||||
:param cache_control: Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models.
|
||||
:param debug: Debug options for inspecting request transformations (streaming only)
|
||||
:param frequency_penalty:
|
||||
:param image_config: Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details.
|
||||
:param include:
|
||||
@@ -489,6 +501,9 @@ class Responses(BaseSDK):
|
||||
cache_control=utils.get_pydantic_model(
|
||||
cache_control, Optional[components.AnthropicCacheControlDirective]
|
||||
),
|
||||
debug=utils.get_pydantic_model(
|
||||
debug, Optional[components.ChatDebugOptions]
|
||||
),
|
||||
frequency_penalty=frequency_penalty,
|
||||
image_config=image_config,
|
||||
include=include,
|
||||
@@ -767,6 +782,9 @@ class Responses(BaseSDK):
|
||||
components.AnthropicCacheControlDirectiveTypedDict,
|
||||
]
|
||||
] = None,
|
||||
debug: Optional[
|
||||
Union[components.ChatDebugOptions, components.ChatDebugOptionsTypedDict]
|
||||
] = None,
|
||||
frequency_penalty: OptionalNullable[float] = UNSET,
|
||||
image_config: Optional[
|
||||
Union[
|
||||
@@ -862,6 +880,7 @@ class Responses(BaseSDK):
|
||||
:param x_open_router_metadata: Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility.
|
||||
:param background:
|
||||
:param cache_control: Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models.
|
||||
:param debug: Debug options for inspecting request transformations (streaming only)
|
||||
:param frequency_penalty:
|
||||
:param image_config: Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details.
|
||||
:param include:
|
||||
@@ -918,6 +937,9 @@ class Responses(BaseSDK):
|
||||
components.AnthropicCacheControlDirectiveTypedDict,
|
||||
]
|
||||
] = None,
|
||||
debug: Optional[
|
||||
Union[components.ChatDebugOptions, components.ChatDebugOptionsTypedDict]
|
||||
] = None,
|
||||
frequency_penalty: OptionalNullable[float] = UNSET,
|
||||
image_config: Optional[
|
||||
Union[
|
||||
@@ -1013,6 +1035,7 @@ class Responses(BaseSDK):
|
||||
:param x_open_router_metadata: Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility.
|
||||
:param background:
|
||||
:param cache_control: Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models.
|
||||
:param debug: Debug options for inspecting request transformations (streaming only)
|
||||
:param frequency_penalty:
|
||||
:param image_config: Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details.
|
||||
:param include:
|
||||
@@ -1068,6 +1091,9 @@ class Responses(BaseSDK):
|
||||
components.AnthropicCacheControlDirectiveTypedDict,
|
||||
]
|
||||
] = None,
|
||||
debug: Optional[
|
||||
Union[components.ChatDebugOptions, components.ChatDebugOptionsTypedDict]
|
||||
] = None,
|
||||
frequency_penalty: OptionalNullable[float] = UNSET,
|
||||
image_config: Optional[
|
||||
Union[
|
||||
@@ -1163,6 +1189,7 @@ class Responses(BaseSDK):
|
||||
:param x_open_router_metadata: Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility.
|
||||
:param background:
|
||||
:param cache_control: Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models.
|
||||
:param debug: Debug options for inspecting request transformations (streaming only)
|
||||
:param frequency_penalty:
|
||||
:param image_config: Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details.
|
||||
:param include:
|
||||
@@ -1223,6 +1250,9 @@ class Responses(BaseSDK):
|
||||
cache_control=utils.get_pydantic_model(
|
||||
cache_control, Optional[components.AnthropicCacheControlDirective]
|
||||
),
|
||||
debug=utils.get_pydantic_model(
|
||||
debug, Optional[components.ChatDebugOptions]
|
||||
),
|
||||
frequency_penalty=frequency_penalty,
|
||||
image_config=image_config,
|
||||
include=include,
|
||||
|
||||
@@ -18,9 +18,11 @@ import weakref
|
||||
if TYPE_CHECKING:
|
||||
from openrouter.analytics import Analytics
|
||||
from openrouter.api_keys import APIKeys
|
||||
from openrouter.benchmarks import Benchmarks
|
||||
from openrouter.beta import Beta
|
||||
from openrouter.byok import Byok
|
||||
from openrouter.chat import Chat
|
||||
from openrouter.classifications import Classifications
|
||||
from openrouter.credits import Credits
|
||||
from openrouter.datasets import Datasets
|
||||
from openrouter.embeddings import Embeddings
|
||||
@@ -28,6 +30,7 @@ if TYPE_CHECKING:
|
||||
from openrouter.files import Files
|
||||
from openrouter.generations import Generations
|
||||
from openrouter.guardrails import Guardrails
|
||||
from openrouter.images import Images
|
||||
from openrouter.models_ import Models
|
||||
from openrouter.oauth import OAuth
|
||||
from openrouter.observability import Observability
|
||||
@@ -55,9 +58,13 @@ class OpenRouter(BaseSDK):
|
||||
r"""Speech-to-text endpoints"""
|
||||
o_auth: "OAuth"
|
||||
r"""OAuth authentication endpoints"""
|
||||
benchmarks: "Benchmarks"
|
||||
r"""Benchmarks endpoints"""
|
||||
byok: "Byok"
|
||||
r"""BYOK endpoints"""
|
||||
chat: "Chat"
|
||||
classifications: "Classifications"
|
||||
r"""Task classification market-share endpoints"""
|
||||
credits: "Credits"
|
||||
r"""Credit management endpoints"""
|
||||
datasets: "Datasets"
|
||||
@@ -72,6 +79,8 @@ class OpenRouter(BaseSDK):
|
||||
r"""Generation history endpoints"""
|
||||
guardrails: "Guardrails"
|
||||
r"""Guardrails endpoints"""
|
||||
images: "Images"
|
||||
r"""Images endpoints"""
|
||||
api_keys: "APIKeys"
|
||||
r"""API key management endpoints"""
|
||||
models: "Models"
|
||||
@@ -96,8 +105,10 @@ class OpenRouter(BaseSDK):
|
||||
"tts": ("openrouter.tts", "Tts"),
|
||||
"stt": ("openrouter.stt", "Stt"),
|
||||
"o_auth": ("openrouter.oauth", "OAuth"),
|
||||
"benchmarks": ("openrouter.benchmarks", "Benchmarks"),
|
||||
"byok": ("openrouter.byok", "Byok"),
|
||||
"chat": ("openrouter.chat", "Chat"),
|
||||
"classifications": ("openrouter.classifications", "Classifications"),
|
||||
"credits": ("openrouter.credits", "Credits"),
|
||||
"datasets": ("openrouter.datasets", "Datasets"),
|
||||
"embeddings": ("openrouter.embeddings", "Embeddings"),
|
||||
@@ -105,6 +116,7 @@ class OpenRouter(BaseSDK):
|
||||
"files": ("openrouter.files", "Files"),
|
||||
"generations": ("openrouter.generations", "Generations"),
|
||||
"guardrails": ("openrouter.guardrails", "Guardrails"),
|
||||
"images": ("openrouter.images", "Images"),
|
||||
"api_keys": ("openrouter.api_keys", "APIKeys"),
|
||||
"models": ("openrouter.models_", "Models"),
|
||||
"observability": ("openrouter.observability", "Observability"),
|
||||
|
||||
@@ -21,7 +21,7 @@ class VideoGeneration(BaseSDK):
|
||||
http_referer: Optional[str] = None,
|
||||
x_open_router_title: Optional[str] = None,
|
||||
x_open_router_categories: Optional[str] = None,
|
||||
aspect_ratio: Optional[components.AspectRatio] = None,
|
||||
aspect_ratio: Optional[components.VideoGenerationRequestAspectRatio] = None,
|
||||
callback_url: Optional[str] = None,
|
||||
duration: Optional[int] = None,
|
||||
frame_images: Optional[
|
||||
@@ -40,7 +40,7 @@ class VideoGeneration(BaseSDK):
|
||||
components.VideoGenerationRequestProviderTypedDict,
|
||||
]
|
||||
] = None,
|
||||
resolution: Optional[components.Resolution] = None,
|
||||
resolution: Optional[components.VideoGenerationRequestResolution] = None,
|
||||
seed: Optional[int] = None,
|
||||
size: Optional[str] = None,
|
||||
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
||||
@@ -222,7 +222,7 @@ class VideoGeneration(BaseSDK):
|
||||
http_referer: Optional[str] = None,
|
||||
x_open_router_title: Optional[str] = None,
|
||||
x_open_router_categories: Optional[str] = None,
|
||||
aspect_ratio: Optional[components.AspectRatio] = None,
|
||||
aspect_ratio: Optional[components.VideoGenerationRequestAspectRatio] = None,
|
||||
callback_url: Optional[str] = None,
|
||||
duration: Optional[int] = None,
|
||||
frame_images: Optional[
|
||||
@@ -241,7 +241,7 @@ class VideoGeneration(BaseSDK):
|
||||
components.VideoGenerationRequestProviderTypedDict,
|
||||
]
|
||||
] = None,
|
||||
resolution: Optional[components.Resolution] = None,
|
||||
resolution: Optional[components.VideoGenerationRequestResolution] = None,
|
||||
seed: Optional[int] = None,
|
||||
size: Optional[str] = None,
|
||||
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
||||
|
||||
Reference in New Issue
Block a user