From aed8199b2b2cbf4764a4ed3beb757e7d31ed1e16 Mon Sep 17 00:00:00 2001 From: Matt Apperson Date: Thu, 4 Dec 2025 13:07:01 -0500 Subject: [PATCH] updates --- .speakeasy/gen.lock | 63 ++++--- .speakeasy/gen.yaml | 12 +- .speakeasy/out.openapi.yaml | 164 ++++++++---------- USAGE.md | 112 +----------- docs/components/chatgenerationparams.md | 3 +- docs/components/chatmessagecontentitem.md | 6 + .../chatmessagecontentitemaudioformat.md | 14 ++ .../chatmessagecontentitemaudioinputaudio.md | 8 +- .../chatmessagecontentitemcachecontrol.md | 9 - docs/components/chatmessagecontentitemfile.md | 9 + docs/components/chatmessagecontentitemtext.md | 9 +- .../chatmessagecontentitemvideoinputvideo.md | 8 +- .../chatmessagecontentitemvideovideourl.md | 8 +- ...essagecontentitemvideovideourlvideourl.md} | 2 +- docs/components/completionchoice.md | 4 +- docs/components/completionresponse.md | 1 - docs/components/debug.md | 8 - docs/components/file.md | 10 ++ docs/components/idresponsehealing.md | 8 - docs/components/openresponsesrequest.md | 4 +- docs/components/plugin.md | 6 - docs/components/pluginresponsehealing.md | 8 - docs/components/providername.md | 6 +- docs/components/servicetier.md | 10 +- docs/components/ttl.md | 9 - docs/components/{videourl1.md => videourl.md} | 2 +- docs/operations/createembeddingsresponse.md | 21 ++- .../createembeddingsresponsebody.md | 14 ++ docs/operations/getcreditsdata.md | 9 - docs/operations/getcreditsresponse.md | 5 +- docs/operations/getparametersprovider.md | 6 +- docs/operations/updatekeysrequest.md | 2 +- docs/sdks/apikeys/README.md | 5 +- docs/sdks/chat/README.md | 1 - docs/sdks/embeddings/README.md | 19 +- docs/sdks/oauth/README.md | 4 +- docs/sdks/responses/README.md | 59 +------ pyproject.toml | 2 +- src/openrouter/_version.py | 4 +- src/openrouter/api_keys.py | 16 +- src/openrouter/chat.py | 14 -- src/openrouter/components/__init__.py | 80 ++++----- .../components/chatcompletionfinishreason.py | 17 -- .../components/chatgenerationparams.py | 12 -- .../components/chatmessagecontentitem.py | 8 +- .../components/chatmessagecontentitemaudio.py | 31 +++- .../chatmessagecontentitemcachecontrol.py | 32 ---- .../components/chatmessagecontentitemfile.py | 37 ++++ .../components/chatmessagecontentitemtext.py | 11 +- .../components/chatmessagecontentitemvideo.py | 21 +-- .../components/chatresponsechoice.py | 68 +++++++- .../components/chatstreamingchoice.py | 72 -------- .../components/chatstreamingresponsechunk.py | 2 +- src/openrouter/components/completionchoice.py | 23 +-- .../components/completionresponse.py | 3 - .../components/openresponsesrequest.py | 50 +++--- src/openrouter/components/providername.py | 6 +- src/openrouter/components/videourl.py | 13 ++ src/openrouter/embeddings.py | 26 ++- src/openrouter/operations/__init__.py | 17 +- src/openrouter/operations/createembeddings.py | 15 +- src/openrouter/operations/getcredits.py | 19 -- src/openrouter/operations/getparameters.py | 6 +- src/openrouter/operations/updatekeys.py | 4 +- src/openrouter/responses.py | 26 ++- 65 files changed, 518 insertions(+), 765 deletions(-) create mode 100644 docs/components/chatmessagecontentitemaudioformat.md delete mode 100644 docs/components/chatmessagecontentitemcachecontrol.md create mode 100644 docs/components/chatmessagecontentitemfile.md rename docs/components/{videourl2.md => chatmessagecontentitemvideovideourlvideourl.md} (85%) delete mode 100644 docs/components/debug.md create mode 100644 docs/components/file.md delete mode 100644 docs/components/idresponsehealing.md delete mode 100644 docs/components/pluginresponsehealing.md delete mode 100644 docs/components/ttl.md rename docs/components/{videourl1.md => videourl.md} (95%) create mode 100644 docs/operations/createembeddingsresponsebody.md delete mode 100644 docs/operations/getcreditsdata.md delete mode 100644 src/openrouter/components/chatcompletionfinishreason.py delete mode 100644 src/openrouter/components/chatmessagecontentitemcachecontrol.py create mode 100644 src/openrouter/components/chatmessagecontentitemfile.py delete mode 100644 src/openrouter/components/chatstreamingchoice.py create mode 100644 src/openrouter/components/videourl.py diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index a859182..569c59c 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,12 +1,12 @@ lockVersion: 2.0.0 id: cfd52247-6a25-4c6d-bbce-fe6fce0cd69d management: - docChecksum: 7c3a22e3f6b8d7c91ff063e2951aed2f + docChecksum: bcccd1abd05f6654a822386f2eefbd8a docVersion: 1.0.0 speakeasyVersion: 1.666.0 generationVersion: 2.768.0 - releaseVersion: 0.1.1 - configChecksum: 1206f35a1f0802441ea1b8674cd04f00 + releaseVersion: 0.0.16 + configChecksum: cd00e781b0ef78cfcb3fe812f51e93ff repoURL: https://github.com/OpenRouterTeam/python-sdk.git installationURL: https://github.com/OpenRouterTeam/python-sdk.git published: true @@ -66,14 +66,16 @@ generatedFiles: - docs/components/chatgenerationtokenusage.md - docs/components/chatmessagecontentitem.md - docs/components/chatmessagecontentitemaudio.md + - docs/components/chatmessagecontentitemaudioformat.md - docs/components/chatmessagecontentitemaudioinputaudio.md - - docs/components/chatmessagecontentitemcachecontrol.md + - docs/components/chatmessagecontentitemfile.md - docs/components/chatmessagecontentitemimage.md - docs/components/chatmessagecontentitemimagedetail.md - docs/components/chatmessagecontentitemtext.md - docs/components/chatmessagecontentitemvideo.md - docs/components/chatmessagecontentitemvideoinputvideo.md - docs/components/chatmessagecontentitemvideovideourl.md + - docs/components/chatmessagecontentitemvideovideourlvideourl.md - docs/components/chatmessagetokenlogprob.md - docs/components/chatmessagetokenlogprobs.md - docs/components/chatmessagetoolcall.md @@ -106,12 +108,12 @@ generatedFiles: - docs/components/costdetails.md - docs/components/createchargerequest.md - docs/components/datacollection.md - - docs/components/debug.md - docs/components/defaultparameters.md - docs/components/edgenetworktimeoutresponseerrordata.md - docs/components/effort.md - docs/components/endpointstatus.md - docs/components/engine.md + - docs/components/file.md - docs/components/filecitation.md - docs/components/filecitationtype.md - docs/components/filepath.md @@ -119,7 +121,6 @@ generatedFiles: - docs/components/forbiddenresponseerrordata.md - docs/components/idfileparser.md - docs/components/idmoderation.md - - docs/components/idresponsehealing.md - docs/components/idweb.md - docs/components/ignore.md - docs/components/imagegenerationstatus.md @@ -303,7 +304,6 @@ generatedFiles: - docs/components/plugin.md - docs/components/pluginfileparser.md - docs/components/pluginmoderation.md - - docs/components/pluginresponsehealing.md - docs/components/pluginweb.md - docs/components/pricing.md - docs/components/prompt.md @@ -395,7 +395,6 @@ generatedFiles: - docs/components/toplogprob.md - docs/components/topproviderinfo.md - docs/components/truncation.md - - docs/components/ttl.md - docs/components/type.md - docs/components/typeresponsecompleted.md - docs/components/typeresponsecontentpartadded.md @@ -421,8 +420,7 @@ generatedFiles: - docs/components/usermessage.md - docs/components/usermessagecontent.md - docs/components/variables.md - - docs/components/videourl1.md - - docs/components/videourl2.md + - docs/components/videourl.md - docs/components/websearchpreviewtooluserlocation.md - docs/components/websearchpreviewtooluserlocationtype.md - docs/components/websearchstatus.md @@ -459,6 +457,7 @@ generatedFiles: - docs/operations/createembeddingsprovider.md - docs/operations/createembeddingsrequest.md - docs/operations/createembeddingsresponse.md + - docs/operations/createembeddingsresponsebody.md - docs/operations/createkeysdata.md - docs/operations/createkeyslimitreset.md - docs/operations/createkeysrequest.md @@ -472,7 +471,6 @@ generatedFiles: - docs/operations/exchangeauthcodeforapikeycodechallengemethod.md - docs/operations/exchangeauthcodeforapikeyrequest.md - docs/operations/exchangeauthcodeforapikeyresponse.md - - docs/operations/getcreditsdata.md - docs/operations/getcreditsresponse.md - docs/operations/getcurrentkeydata.md - docs/operations/getcurrentkeyresponse.md @@ -555,13 +553,12 @@ generatedFiles: - src/openrouter/components/assistantmessage.py - src/openrouter/components/badgatewayresponseerrordata.py - src/openrouter/components/badrequestresponseerrordata.py - - src/openrouter/components/chatcompletionfinishreason.py - src/openrouter/components/chaterror.py - src/openrouter/components/chatgenerationparams.py - src/openrouter/components/chatgenerationtokenusage.py - src/openrouter/components/chatmessagecontentitem.py - src/openrouter/components/chatmessagecontentitemaudio.py - - src/openrouter/components/chatmessagecontentitemcachecontrol.py + - src/openrouter/components/chatmessagecontentitemfile.py - src/openrouter/components/chatmessagecontentitemimage.py - src/openrouter/components/chatmessagecontentitemtext.py - src/openrouter/components/chatmessagecontentitemvideo.py @@ -570,7 +567,6 @@ generatedFiles: - src/openrouter/components/chatmessagetoolcall.py - src/openrouter/components/chatresponse.py - src/openrouter/components/chatresponsechoice.py - - src/openrouter/components/chatstreamingchoice.py - src/openrouter/components/chatstreamingmessagechunk.py - src/openrouter/components/chatstreamingmessagetoolcall.py - src/openrouter/components/chatstreamingresponsechunk.py @@ -693,6 +689,7 @@ generatedFiles: - src/openrouter/components/unprocessableentityresponseerrordata.py - src/openrouter/components/urlcitation.py - src/openrouter/components/usermessage.py + - src/openrouter/components/videourl.py - src/openrouter/components/websearchpreviewtooluserlocation.py - src/openrouter/components/websearchstatus.py - src/openrouter/credits.py @@ -776,10 +773,10 @@ examples: createResponses: speakeasy-default-create-responses: requestBody: - application/json: {"input": [{"type": "message", "role": "user", "content": "Hello, how are you?"}], "tools": [{"type": "function", "name": "get_current_weather", "description": "Get the current weather in a given location", "parameters": {"type": "object", "properties": {"location": {"type": "string"}}}}], "model": "anthropic/claude-4.5-sonnet-20250929", "temperature": 0.7, "top_p": 0.9, "store": false, "service_tier": "auto", "stream": false} + application/json: {"stream": false} responses: "200": - application/json: {"id": "resp-abc123", "object": "response", "created_at": 1704067200, "model": "gpt-4", "status": "completed", "output": [{"id": "msg-abc123", "role": "assistant", "type": "message", "status": "completed", "content": [{"type": "output_text", "text": "Hello! How can I help you today?", "annotations": []}]}], "error": null, "incomplete_details": null, "usage": {"input_tokens": 10, "input_tokens_details": {"cached_tokens": 0}, "output_tokens": 25, "output_tokens_details": {"reasoning_tokens": 0}, "total_tokens": 35}, "max_output_tokens": null, "temperature": null, "top_p": null, "instructions": null, "metadata": null, "tools": [], "tool_choice": "auto", "parallel_tool_calls": true} + application/json: {"id": "resp-abc123", "object": "response", "created_at": 1704067200, "model": "gpt-4", "output": [{"id": "msg-abc123", "role": "assistant", "type": "message", "content": [{"type": "output_text", "text": "Hello! How can I help you today?"}]}], "error": null, "incomplete_details": null, "temperature": null, "top_p": null, "instructions": null, "metadata": null, "tools": [], "tool_choice": "auto", "parallel_tool_calls": true} "400": application/json: {"error": {"code": 400, "message": "Invalid request parameters"}} "401": @@ -826,7 +823,7 @@ examples: speakeasy-default-get-credits: responses: "200": - application/json: {"data": {"total_credits": 100.5, "total_usage": 25.75}} + application/json: {} "401": application/json: {"error": {"code": 401, "message": "Missing Authentication header"}} "403": @@ -851,7 +848,7 @@ examples: createEmbeddings: speakeasy-default-create-embeddings: requestBody: - application/json: {"input": "", "model": "Taurus", "provider": {"data_collection": "allow", "zdr": true, "enforce_distillable_text": true, "order": ["OpenAI"], "only": ["OpenAI"], "ignore": ["OpenAI"], "quantizations": ["fp16"], "sort": "price"}} + application/json: {"input": "", "model": "Taurus"} responses: "200": application/json: {"object": "list", "data": [], "model": "Land Cruiser"} @@ -880,7 +877,7 @@ examples: speakeasy-default-list-embeddings-models: responses: "200": - application/json: {"data": [{"id": "openai/gpt-4", "canonical_slug": "openai/gpt-4", "name": "GPT-4", "created": 1692901234, "description": "GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.", "pricing": {"prompt": "0.00003", "completion": "0.00006", "request": "0", "image": "0"}, "context_length": 8192, "architecture": {"tokenizer": "GPT", "instruct_type": "chatml", "modality": "text->text", "input_modalities": ["text"], "output_modalities": ["text"]}, "top_provider": {"context_length": 8192, "max_completion_tokens": 4096, "is_moderated": true}, "per_request_limits": null, "supported_parameters": ["temperature", "top_p", "max_tokens", "frequency_penalty", "presence_penalty"], "default_parameters": null}]} + application/json: {"data": [{"id": "openai/gpt-4", "canonical_slug": "openai/gpt-4", "name": "GPT-4", "created": 1692901234, "pricing": {"prompt": "0.00003", "completion": "0.00006"}, "context_length": 8192, "architecture": {"modality": "text->text", "input_modalities": ["text"], "output_modalities": ["text"]}, "top_provider": {"is_moderated": true}, "per_request_limits": null, "supported_parameters": ["temperature", "top_p", "max_tokens", "frequency_penalty", "presence_penalty"], "default_parameters": null}]} "400": application/json: {"error": {"code": 400, "message": "Invalid request parameters"}} "500": @@ -920,7 +917,7 @@ examples: speakeasy-default-get-models: responses: "200": - application/json: {"data": [{"id": "openai/gpt-4", "canonical_slug": "openai/gpt-4", "name": "GPT-4", "created": 1692901234, "description": "GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.", "pricing": {"prompt": "0.00003", "completion": "0.00006", "request": "0", "image": "0"}, "context_length": 8192, "architecture": {"tokenizer": "GPT", "instruct_type": "chatml", "modality": "text->text", "input_modalities": ["text"], "output_modalities": ["text"]}, "top_provider": {"context_length": 8192, "max_completion_tokens": 4096, "is_moderated": true}, "per_request_limits": null, "supported_parameters": ["temperature", "top_p", "max_tokens", "frequency_penalty", "presence_penalty"], "default_parameters": null}]} + application/json: {"data": [{"id": "openai/gpt-4", "canonical_slug": "openai/gpt-4", "name": "GPT-4", "created": 1692901234, "pricing": {"prompt": "0.00003", "completion": "0.00006"}, "context_length": 8192, "architecture": {"modality": "text->text", "input_modalities": ["text"], "output_modalities": ["text"]}, "top_provider": {"is_moderated": true}, "per_request_limits": null, "supported_parameters": ["temperature", "top_p", "max_tokens", "frequency_penalty", "presence_penalty"], "default_parameters": null}]} "400": application/json: {"error": {"code": 400, "message": "Invalid request parameters"}} "500": @@ -929,7 +926,7 @@ examples: speakeasy-default-list-models-user: responses: "200": - application/json: {"data": [{"id": "openai/gpt-4", "canonical_slug": "openai/gpt-4", "name": "GPT-4", "created": 1692901234, "description": "GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.", "pricing": {"prompt": "0.00003", "completion": "0.00006", "request": "0", "image": "0"}, "context_length": 8192, "architecture": {"tokenizer": "GPT", "instruct_type": "chatml", "modality": "text->text", "input_modalities": ["text"], "output_modalities": ["text"]}, "top_provider": {"context_length": 8192, "max_completion_tokens": 4096, "is_moderated": true}, "per_request_limits": null, "supported_parameters": ["temperature", "top_p", "max_tokens", "frequency_penalty", "presence_penalty"], "default_parameters": null}]} + application/json: {"data": [{"id": "openai/gpt-4", "canonical_slug": "openai/gpt-4", "name": "GPT-4", "created": 1692901234, "pricing": {"prompt": "0.00003", "completion": "0.00006"}, "context_length": 8192, "architecture": {"modality": "text->text", "input_modalities": ["text"], "output_modalities": ["text"]}, "top_provider": {"is_moderated": true}, "per_request_limits": null, "supported_parameters": ["temperature", "top_p", "max_tokens", "frequency_penalty", "presence_penalty"], "default_parameters": null}]} "401": application/json: {"error": {"code": 401, "message": "Missing Authentication header"}} "500": @@ -942,7 +939,7 @@ examples: slug: "" responses: "200": - application/json: {"data": {"id": "openai/gpt-4", "name": "GPT-4", "created": 1692901234, "description": "GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.", "architecture": {"tokenizer": "GPT", "instruct_type": "chatml", "modality": "text->text", "input_modalities": ["text"], "output_modalities": ["text"]}, "endpoints": [{"name": "OpenAI: GPT-4", "model_name": "GPT-4", "context_length": 8192, "pricing": {"prompt": "0.00003", "completion": "0.00006", "request": "0", "image": "0"}, "provider_name": "OpenAI", "tag": "openai", "quantization": "fp16", "max_completion_tokens": 4096, "max_prompt_tokens": 8192, "supported_parameters": ["temperature", "top_p", "max_tokens", "frequency_penalty", "presence_penalty"], "status": -3, "uptime_last_30m": 99.5, "supports_implicit_caching": true}]}} + application/json: {"data": {"id": "openai/gpt-4", "name": "GPT-4", "created": 1692901234, "description": "GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.", "architecture": {"tokenizer": "GPT", "instruct_type": "chatml", "modality": "text->text", "input_modalities": ["text"], "output_modalities": ["text"]}, "endpoints": [{"name": "OpenAI: GPT-4", "model_name": "GPT-4", "context_length": 8192, "pricing": {"prompt": "0.00003", "completion": "0.00006"}, "provider_name": "OpenAI", "tag": "openai", "quantization": "fp16", "max_completion_tokens": 4096, "max_prompt_tokens": 8192, "supported_parameters": ["temperature", "top_p", "max_tokens", "frequency_penalty", "presence_penalty"], "uptime_last_30m": 99.5, "supports_implicit_caching": true}]}} "404": application/json: {"error": {"code": 404, "message": "Resource not found"}} "500": @@ -951,7 +948,7 @@ examples: speakeasy-default-list-endpoints-zdr: responses: "200": - application/json: {"data": [{"name": "OpenAI: GPT-4", "model_name": "GPT-4", "context_length": 8192, "pricing": {"prompt": "0.00003", "completion": "0.00006", "request": "0", "image": "0"}, "provider_name": "OpenAI", "tag": "openai", "quantization": "fp16", "max_completion_tokens": 4096, "max_prompt_tokens": 8192, "supported_parameters": ["temperature", "top_p", "max_tokens"], "status": 0, "uptime_last_30m": 99.5, "supports_implicit_caching": true}]} + application/json: {"data": [{"name": "OpenAI: GPT-4", "model_name": "GPT-4", "context_length": 8192, "pricing": {"prompt": "0.00003", "completion": "0.00006"}, "provider_name": "OpenAI", "tag": "openai", "quantization": "fp16", "max_completion_tokens": 4096, "max_prompt_tokens": 8192, "supported_parameters": ["temperature", "top_p", "max_tokens"], "uptime_last_30m": 99.5, "supports_implicit_caching": true}]} "500": application/json: {"error": {"code": 500, "message": "Internal Server Error"}} getParameters: @@ -973,7 +970,7 @@ examples: speakeasy-default-list-providers: responses: "200": - application/json: {"data": [{"name": "OpenAI", "slug": "openai", "privacy_policy_url": "https://openai.com/privacy", "terms_of_service_url": "https://openai.com/terms", "status_page_url": "https://status.openai.com"}]} + application/json: {"data": [{"name": "OpenAI", "slug": "openai", "privacy_policy_url": "https://openai.com/privacy"}]} "500": application/json: {"error": {"code": 500, "message": "Internal Server Error"}} list: @@ -984,7 +981,7 @@ examples: offset: "0" responses: "200": - application/json: {"data": [{"hash": "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", "name": "My Production Key", "label": "Production API Key", "disabled": false, "limit": 100, "limit_remaining": 74.5, "limit_reset": "monthly", "include_byok_in_limit": false, "usage": 25.5, "usage_daily": 25.5, "usage_weekly": 25.5, "usage_monthly": 25.5, "byok_usage": 17.38, "byok_usage_daily": 17.38, "byok_usage_weekly": 17.38, "byok_usage_monthly": 17.38, "created_at": "2025-08-24T10:30:00Z", "updated_at": "2025-08-24T15:45:00Z", "expires_at": "2027-12-31T23:59:59Z"}]} + application/json: {"data": [{"hash": "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", "name": "My Production Key", "label": "Production API Key", "disabled": false, "limit": 100, "limit_remaining": 74.5, "limit_reset": "monthly", "include_byok_in_limit": false, "usage": 25.5, "usage_daily": 25.5, "usage_weekly": 25.5, "usage_monthly": 25.5, "byok_usage": 17.38, "byok_usage_daily": 17.38, "byok_usage_weekly": 17.38, "byok_usage_monthly": 17.38, "created_at": "2025-08-24T10:30:00Z", "updated_at": "2025-08-24T15:45:00Z"}]} "401": application/json: {"error": {"code": 401, "message": "Missing Authentication header"}} "429": @@ -994,10 +991,10 @@ examples: createKeys: speakeasy-default-create-keys: requestBody: - application/json: {"name": "My New API Key", "limit": 50, "limit_reset": "monthly", "include_byok_in_limit": true, "expires_at": "2027-12-31T23:59:59Z"} + application/json: {"name": "My New API Key"} responses: "201": - application/json: {"data": {"hash": "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", "name": "My New API Key", "label": "My New API Key", "disabled": false, "limit": 50, "limit_remaining": 50, "limit_reset": "monthly", "include_byok_in_limit": true, "usage": 0, "usage_daily": 0, "usage_weekly": 0, "usage_monthly": 0, "byok_usage": 0, "byok_usage_daily": 0, "byok_usage_weekly": 0, "byok_usage_monthly": 0, "created_at": "2025-08-24T10:30:00Z", "updated_at": null, "expires_at": "2027-12-31T23:59:59Z"}, "key": "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"} + application/json: {"data": {"hash": "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", "name": "My New API Key", "label": "My New API Key", "disabled": false, "limit": 50, "limit_remaining": 50, "limit_reset": "monthly", "include_byok_in_limit": true, "usage": 0, "usage_daily": 0, "usage_weekly": 0, "usage_monthly": 0, "byok_usage": 0, "byok_usage_daily": 0, "byok_usage_weekly": 0, "byok_usage_monthly": 0, "created_at": "2025-08-24T10:30:00Z", "updated_at": null}, "key": "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"} "400": application/json: {"error": {"code": 400, "message": "Invalid request parameters"}} "401": @@ -1012,10 +1009,10 @@ examples: path: hash: "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" requestBody: - application/json: {"name": "Updated API Key Name", "disabled": false, "limit": 75, "limit_reset": "daily", "include_byok_in_limit": true} + application/json: {} responses: "200": - application/json: {"data": {"hash": "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", "name": "Updated API Key Name", "label": "Updated API Key Name", "disabled": false, "limit": 75, "limit_remaining": 49.5, "limit_reset": "daily", "include_byok_in_limit": true, "usage": 25.5, "usage_daily": 25.5, "usage_weekly": 25.5, "usage_monthly": 25.5, "byok_usage": 17.38, "byok_usage_daily": 17.38, "byok_usage_weekly": 17.38, "byok_usage_monthly": 17.38, "created_at": "2025-08-24T10:30:00Z", "updated_at": "2025-08-24T16:00:00Z", "expires_at": null}} + application/json: {"data": {"hash": "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", "name": "Updated API Key Name", "label": "Updated API Key Name", "disabled": false, "limit": 75, "limit_remaining": 49.5, "limit_reset": "daily", "include_byok_in_limit": true, "usage": 25.5, "usage_daily": 25.5, "usage_weekly": 25.5, "usage_monthly": 25.5, "byok_usage": 17.38, "byok_usage_daily": 17.38, "byok_usage_weekly": 17.38, "byok_usage_monthly": 17.38, "created_at": "2025-08-24T10:30:00Z", "updated_at": "2025-08-24T16:00:00Z"}} "400": application/json: {"error": {"code": 400, "message": "Invalid request parameters"}} "401": @@ -1049,7 +1046,7 @@ examples: hash: "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" responses: "200": - application/json: {"data": {"hash": "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", "name": "My Production Key", "label": "Production API Key", "disabled": false, "limit": 100, "limit_remaining": 74.5, "limit_reset": "monthly", "include_byok_in_limit": false, "usage": 25.5, "usage_daily": 25.5, "usage_weekly": 25.5, "usage_monthly": 25.5, "byok_usage": 17.38, "byok_usage_daily": 17.38, "byok_usage_weekly": 17.38, "byok_usage_monthly": 17.38, "created_at": "2025-08-24T10:30:00Z", "updated_at": "2025-08-24T15:45:00Z", "expires_at": "2027-12-31T23:59:59Z"}} + application/json: {"data": {"hash": "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", "name": "My Production Key", "label": "Production API Key", "disabled": false, "limit": 100, "limit_remaining": 74.5, "limit_reset": "monthly", "include_byok_in_limit": false, "usage": 25.5, "usage_daily": 25.5, "usage_weekly": 25.5, "usage_monthly": 25.5, "byok_usage": 17.38, "byok_usage_daily": 17.38, "byok_usage_weekly": 17.38, "byok_usage_monthly": 17.38, "created_at": "2025-08-24T10:30:00Z", "updated_at": "2025-08-24T15:45:00Z"}} "401": application/json: {"error": {"code": 401, "message": "Missing Authentication header"}} "404": @@ -1062,7 +1059,7 @@ examples: speakeasy-default-get-current-key: responses: "200": - application/json: {"data": {"label": "sk-or-v1-au78b3456789012345678901234567890", "limit": 100, "usage": 25.5, "usage_daily": 25.5, "usage_weekly": 25.5, "usage_monthly": 25.5, "byok_usage": 17.38, "byok_usage_daily": 17.38, "byok_usage_weekly": 17.38, "byok_usage_monthly": 17.38, "is_free_tier": false, "is_provisioning_key": false, "limit_remaining": 74.5, "limit_reset": "monthly", "include_byok_in_limit": false, "expires_at": "2027-12-31T23:59:59Z", "rate_limit": {"requests": 1000, "interval": "1h", "note": "This field is deprecated and safe to ignore."}}} + application/json: {"data": {"label": "sk-or-v1-au78b3456789012345678901234567890", "limit": 100, "usage": 25.5, "usage_daily": 25.5, "usage_weekly": 25.5, "usage_monthly": 25.5, "byok_usage": 17.38, "byok_usage_daily": 17.38, "byok_usage_weekly": 17.38, "byok_usage_monthly": 17.38, "is_free_tier": false, "is_provisioning_key": false, "limit_remaining": 74.5, "limit_reset": "monthly", "include_byok_in_limit": false, "rate_limit": {"requests": 1000, "interval": "1h", "note": "This field is deprecated and safe to ignore."}}} "401": application/json: {"error": {"code": 401, "message": "Missing Authentication header"}} "500": @@ -1070,7 +1067,7 @@ examples: exchangeAuthCodeForAPIKey: speakeasy-default-exchange-auth-code-for-API-key: requestBody: - application/json: {"code": "auth_code_abc123def456", "code_verifier": "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk", "code_challenge_method": "S256"} + application/json: {"code": "auth_code_abc123def456"} responses: "200": application/json: {"key": "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", "user_id": "user_2yOPcMpKoQhcd4bVgSMlELRaIah"} @@ -1083,7 +1080,7 @@ examples: createAuthKeysCode: speakeasy-default-create-auth-keys-code: requestBody: - application/json: {"callback_url": "https://myapp.com/auth/callback", "code_challenge": "E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM", "code_challenge_method": "S256", "limit": 100} + application/json: {"callback_url": "https://myapp.com/auth/callback"} responses: "200": application/json: {"data": {"id": "auth_code_xyz789", "app_id": 12345, "created_at": "2025-08-24T10:30:00Z"}} diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 80ecc68..5006069 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -6,7 +6,7 @@ generation: sdkClassName: OpenRouter maintainOpenAPIOrder: true usageSnippets: - optionalPropertyRendering: withExample + optionalPropertyRendering: never sdkInitStyle: constructor useClassNamesForArrayFields: true fixes: @@ -24,13 +24,14 @@ generation: sdkHooksConfigAccess: true schemas: allOfMergeStrategy: shallowMerge - requestBodyFieldName: body + requestBodyFieldName: "" tests: generateTests: false generateNewTests: true skipResponseBodyAssertions: false + preApplyUnionDiscriminators: true python: - version: 0.1.1 + version: 0.0.16 additionalDependencies: dev: {} main: {} @@ -57,11 +58,12 @@ python: imports: option: openapi paths: - callbacks: "" + callbacks: callbacks errors: errors operations: operations shared: components - webhooks: "" + webhooks: webhooks + inferSSEOverload: true inferUnionDiscriminators: true inputModelSuffix: input legacyPyright: false diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index c609cc4..d99089f 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -3464,14 +3464,12 @@ components: - AionLabs - Alibaba - Amazon Bedrock - - Amazon Nova - Anthropic - - Arcee AI + - Arcee - AtlasCloud - Avian - Azure - BaseTen - - BytePlus - Black Forest Labs - Cerebras - Chutes @@ -3486,7 +3484,6 @@ components: - Fireworks - Friendli - GMICloud - - GoPomelo - Google - Google AI Studio - Groq @@ -3517,7 +3514,6 @@ components: - SambaNova - SiliconFlow - Stealth - - StreamLake - Switchpoint - Targon - Together @@ -3652,13 +3648,18 @@ components: nullable: true store: type: boolean - const: false - default: false + nullable: true service_tier: - type: string - enum: - - auto - default: auto + allOf: + - $ref: '#/components/schemas/OpenAIResponsesServiceTier' + - enum: + - auto + - default + - flex + - scale + - priority + example: auto + x-speakeasy-unknown-values: allow truncation: allOf: - $ref: '#/components/schemas/OpenAIResponsesTruncation' @@ -3802,14 +3803,6 @@ components: x-speakeasy-unknown-values: allow required: - id - - type: object - properties: - id: - type: string - enum: - - response-healing - required: - - id description: Plugins you want to enable for this request, including their settings. user: type: string @@ -4604,10 +4597,6 @@ components: status: default uptime_last_30m: 99.5 supports_implicit_caching: true - __schema0: - anyOf: - - $ref: '#/components/schemas/ChatCompletionFinishReason' - - type: 'null' ModelName: type: string ChatMessageContentItemText: @@ -4618,8 +4607,6 @@ components: const: text text: type: string - cache_control: - $ref: '#/components/schemas/ChatMessageContentItemCacheControl' required: - type - text @@ -4659,6 +4646,15 @@ components: type: string format: type: string + enum: + - wav + - mp3 + - flac + - m4a + - ogg + - pcm16 + - pcm24 + x-speakeasy-unknown-values: allow required: - data - format @@ -4673,12 +4669,7 @@ components: type: string const: input_video video_url: - type: object - properties: - url: - type: string - required: - - url + $ref: '#/components/schemas/VideoURL' required: - type - video_url @@ -4698,12 +4689,40 @@ components: - type - video_url type: object + VideoURL: + type: object + properties: + url: + type: string + required: + - url + ChatMessageContentItemFile: + type: object + properties: + type: + type: string + const: file + file: + type: object + properties: + file_data: + type: string + file_id: + type: string + filename: + type: string + required: + - file_data + required: + - type + - file ChatMessageContentItem: oneOf: - $ref: '#/components/schemas/ChatMessageContentItemText' - $ref: '#/components/schemas/ChatMessageContentItemImage' - $ref: '#/components/schemas/ChatMessageContentItemAudio' - $ref: '#/components/schemas/ChatMessageContentItemVideo' + - $ref: '#/components/schemas/ChatMessageContentItemFile' type: object discriminator: propertyName: type @@ -4713,6 +4732,7 @@ components: input_audio: '#/components/schemas/ChatMessageContentItemAudio' input_video: '#/components/schemas/ChatMessageContentItemVideo' video_url: '#/components/schemas/ChatMessageContentItemVideo' + file: '#/components/schemas/ChatMessageContentItemFile' ChatMessageToolCall: type: object properties: @@ -4836,14 +4856,16 @@ components: - prompt_tokens - total_tokens ChatCompletionFinishReason: - type: string - enum: - - tool_calls - - stop - - length - - content_filter - - error - x-speakeasy-unknown-values: allow + anyOf: + - type: string + enum: + - tool_calls + - stop + - length + - content_filter + - error + x-speakeasy-unknown-values: allow + - type: 'null' JSONSchemaConfig: type: object properties: @@ -4885,20 +4907,6 @@ components: required: - type - grammar - ChatMessageContentItemCacheControl: - type: object - properties: - type: - type: string - const: ephemeral - ttl: - type: string - enum: - - 5m - - 1h - x-speakeasy-unknown-values: allow - required: - - type SystemMessage: type: object properties: @@ -5210,18 +5218,13 @@ components: - type: 'null' user: type: string - debug: - type: object - properties: - echo_upstream_body: - type: boolean required: - messages ChatResponseChoice: type: object properties: finish_reason: - $ref: '#/components/schemas/__schema0' + $ref: '#/components/schemas/ChatCompletionFinishReason' index: type: number message: @@ -5282,7 +5285,7 @@ components: delta: $ref: '#/components/schemas/ChatStreamingMessageChunk' finish_reason: - $ref: '#/components/schemas/__schema0' + $ref: '#/components/schemas/ChatCompletionFinishReason' index: type: number logprobs: @@ -5615,12 +5618,6 @@ components: - type: 'null' finish_reason: $ref: '#/components/schemas/CompletionFinishReason' - native_finish_reason: - type: string - reasoning: - anyOf: - - type: string - - type: 'null' required: - text - index @@ -5638,8 +5635,6 @@ components: type: number model: type: string - provider: - type: string system_fingerprint: type: string choices: @@ -5858,26 +5853,6 @@ paths: application/json: schema: type: object - properties: - data: - type: object - properties: - total_credits: - type: number - description: Total credits purchased - example: 100.5 - total_usage: - type: number - description: Total credits used - example: 25.75 - required: - - total_credits - - total_usage - example: - total_credits: 100.5 - total_usage: 25.75 - required: - - data description: Total credits purchased and used example: data: @@ -6242,6 +6217,11 @@ paths: - object - data - model + text/event-stream: + schema: + type: string + description: Not used for embeddings - embeddings do not support streaming + x-speakeasy-sse-sentinel: '[DONE]' '400': description: Bad Request - Invalid request parameters or malformed input content: @@ -6774,14 +6754,12 @@ paths: - AionLabs - Alibaba - Amazon Bedrock - - Amazon Nova - Anthropic - - Arcee AI + - Arcee - AtlasCloud - Avian - Azure - BaseTen - - BytePlus - Black Forest Labs - Cerebras - Chutes @@ -6796,7 +6774,6 @@ paths: - Fireworks - Friendli - GMICloud - - GoPomelo - Google - Google AI Studio - Groq @@ -6827,7 +6804,6 @@ paths: - SambaNova - SiliconFlow - Stealth - - StreamLake - Switchpoint - Targon - Together @@ -8437,5 +8413,3 @@ x-speakeasy-globals: parameters: - $ref: "#/components/parameters/AppIdentifier" - $ref: "#/components/parameters/AppDisplayName" - - $ref: "#/components/parameters/AppIdentifier" - - $ref: "#/components/parameters/AppDisplayName" diff --git a/USAGE.md b/USAGE.md index 4fd5a77..6d76a30 100644 --- a/USAGE.md +++ b/USAGE.md @@ -9,61 +9,7 @@ with OpenRouter( api_key=os.getenv("OPENROUTER_API_KEY", ""), ) as open_router: - res = open_router.beta.responses.send(input=[ - { - "type": "message", - "role": "user", - "content": "Hello, how are you?", - }, - ], metadata={ - "user_id": "123", - "session_id": "abc-def-ghi", - }, tools=[ - { - "type": "function", - "name": "get_current_weather", - "description": "Get the current weather in a given location", - "parameters": { - "type": "object", - "properties": { - "location": { - "type": "string", - }, - }, - }, - }, - ], model="anthropic/claude-4.5-sonnet-20250929", text={ - "format_": { - "type": "text", - }, - "verbosity": "medium", - }, reasoning={ - "summary": "auto", - "enabled": True, - }, temperature=0.7, top_p=0.9, prompt={ - "id": "", - "variables": { - "key": { - "type": "input_text", - "text": "Hello, how can I help you?", - }, - }, - }, service_tier="auto", truncation="auto", stream=False, provider={ - "data_collection": "allow", - "zdr": True, - "enforce_distillable_text": True, - "order": [ - "OpenAI", - ], - "only": [ - "OpenAI", - ], - "ignore": [ - "OpenAI", - ], - "quantizations": None, - "sort": "price", - }) + res = open_router.beta.responses.send(stream=False) with res as event_stream: for event in event_stream: @@ -87,61 +33,7 @@ async def main(): api_key=os.getenv("OPENROUTER_API_KEY", ""), ) as open_router: - res = await open_router.beta.responses.send_async(input=[ - { - "type": "message", - "role": "user", - "content": "Hello, how are you?", - }, - ], metadata={ - "user_id": "123", - "session_id": "abc-def-ghi", - }, tools=[ - { - "type": "function", - "name": "get_current_weather", - "description": "Get the current weather in a given location", - "parameters": { - "type": "object", - "properties": { - "location": { - "type": "string", - }, - }, - }, - }, - ], model="anthropic/claude-4.5-sonnet-20250929", text={ - "format_": { - "type": "text", - }, - "verbosity": "medium", - }, reasoning={ - "summary": "auto", - "enabled": True, - }, temperature=0.7, top_p=0.9, prompt={ - "id": "", - "variables": { - "key": { - "type": "input_text", - "text": "Hello, how can I help you?", - }, - }, - }, service_tier="auto", truncation="auto", stream=False, provider={ - "data_collection": "allow", - "zdr": True, - "enforce_distillable_text": True, - "order": [ - "OpenAI", - ], - "only": [ - "OpenAI", - ], - "ignore": [ - "OpenAI", - ], - "quantizations": None, - "sort": "price", - }) + res = await open_router.beta.responses.send_async(stream=False) async with res as event_stream: async for event in event_stream: diff --git a/docs/components/chatgenerationparams.md b/docs/components/chatgenerationparams.md index 41db71b..238044f 100644 --- a/docs/components/chatgenerationparams.md +++ b/docs/components/chatgenerationparams.md @@ -26,5 +26,4 @@ | `tool_choice` | *Optional[Any]* | :heavy_minus_sign: | N/A | | `tools` | List[[components.ToolDefinitionJSON](../components/tooldefinitionjson.md)] | :heavy_minus_sign: | N/A | | `top_p` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | -| `user` | *Optional[str]* | :heavy_minus_sign: | N/A | -| `debug` | [Optional[components.Debug]](../components/debug.md) | :heavy_minus_sign: | N/A | \ No newline at end of file +| `user` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/components/chatmessagecontentitem.md b/docs/components/chatmessagecontentitem.md index 7063cdb..2ac5390 100644 --- a/docs/components/chatmessagecontentitem.md +++ b/docs/components/chatmessagecontentitem.md @@ -33,3 +33,9 @@ value: components.ChatMessageContentItemVideo = /* values here */ value: components.ChatMessageContentItemVideo = /* values here */ ``` +### `components.ChatMessageContentItemFile` + +```python +value: components.ChatMessageContentItemFile = /* values here */ +``` + diff --git a/docs/components/chatmessagecontentitemaudioformat.md b/docs/components/chatmessagecontentitemaudioformat.md new file mode 100644 index 0000000..97119c0 --- /dev/null +++ b/docs/components/chatmessagecontentitemaudioformat.md @@ -0,0 +1,14 @@ +# ChatMessageContentItemAudioFormat + + +## Values + +| Name | Value | +| ------- | ------- | +| `WAV` | wav | +| `MP3` | mp3 | +| `FLAC` | flac | +| `M4A` | m4a | +| `OGG` | ogg | +| `PCM16` | pcm16 | +| `PCM24` | pcm24 | \ No newline at end of file diff --git a/docs/components/chatmessagecontentitemaudioinputaudio.md b/docs/components/chatmessagecontentitemaudioinputaudio.md index f7a62b5..3665698 100644 --- a/docs/components/chatmessagecontentitemaudioinputaudio.md +++ b/docs/components/chatmessagecontentitemaudioinputaudio.md @@ -3,7 +3,7 @@ ## Fields -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `data` | *str* | :heavy_check_mark: | N/A | -| `format_` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `data` | *str* | :heavy_check_mark: | N/A | +| `format_` | [components.ChatMessageContentItemAudioFormat](../components/chatmessagecontentitemaudioformat.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/components/chatmessagecontentitemcachecontrol.md b/docs/components/chatmessagecontentitemcachecontrol.md deleted file mode 100644 index 2ad30d0..0000000 --- a/docs/components/chatmessagecontentitemcachecontrol.md +++ /dev/null @@ -1,9 +0,0 @@ -# ChatMessageContentItemCacheControl - - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | -| `type` | *Literal["ephemeral"]* | :heavy_check_mark: | N/A | -| `ttl` | [Optional[components.TTL]](../components/ttl.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/components/chatmessagecontentitemfile.md b/docs/components/chatmessagecontentitemfile.md new file mode 100644 index 0000000..ca73897 --- /dev/null +++ b/docs/components/chatmessagecontentitemfile.md @@ -0,0 +1,9 @@ +# ChatMessageContentItemFile + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | +| `type` | *Literal["file"]* | :heavy_check_mark: | N/A | +| `file` | [components.File](../components/file.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/components/chatmessagecontentitemtext.md b/docs/components/chatmessagecontentitemtext.md index 4f8a874..4fa8b7b 100644 --- a/docs/components/chatmessagecontentitemtext.md +++ b/docs/components/chatmessagecontentitemtext.md @@ -3,8 +3,7 @@ ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -| `type` | *Literal["text"]* | :heavy_check_mark: | N/A | -| `text` | *str* | :heavy_check_mark: | N/A | -| `cache_control` | [Optional[components.ChatMessageContentItemCacheControl]](../components/chatmessagecontentitemcachecontrol.md) | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `type` | *Literal["text"]* | :heavy_check_mark: | N/A | +| `text` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/components/chatmessagecontentitemvideoinputvideo.md b/docs/components/chatmessagecontentitemvideoinputvideo.md index 4d7dd0e..da28cf1 100644 --- a/docs/components/chatmessagecontentitemvideoinputvideo.md +++ b/docs/components/chatmessagecontentitemvideoinputvideo.md @@ -3,7 +3,7 @@ ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `type` | *Literal["input_video"]* | :heavy_check_mark: | N/A | -| `video_url` | [components.VideoURL1](../components/videourl1.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | +| `type` | *Literal["input_video"]* | :heavy_check_mark: | N/A | +| `video_url` | [components.VideoURL](../components/videourl.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/components/chatmessagecontentitemvideovideourl.md b/docs/components/chatmessagecontentitemvideovideourl.md index 0585b55..023d696 100644 --- a/docs/components/chatmessagecontentitemvideovideourl.md +++ b/docs/components/chatmessagecontentitemvideovideourl.md @@ -3,7 +3,7 @@ ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `type` | *Literal["video_url"]* | :heavy_check_mark: | N/A | -| `video_url` | [components.VideoURL2](../components/videourl2.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `type` | *Literal["video_url"]* | :heavy_check_mark: | N/A | +| `video_url` | [components.ChatMessageContentItemVideoVideoURLVideoURL](../components/chatmessagecontentitemvideovideourlvideourl.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/components/videourl2.md b/docs/components/chatmessagecontentitemvideovideourlvideourl.md similarity index 85% rename from docs/components/videourl2.md rename to docs/components/chatmessagecontentitemvideovideourlvideourl.md index b7f2463..ee08920 100644 --- a/docs/components/videourl2.md +++ b/docs/components/chatmessagecontentitemvideovideourlvideourl.md @@ -1,4 +1,4 @@ -# VideoURL2 +# ChatMessageContentItemVideoVideoURLVideoURL ## Fields diff --git a/docs/components/completionchoice.md b/docs/components/completionchoice.md index cb489be..758eea9 100644 --- a/docs/components/completionchoice.md +++ b/docs/components/completionchoice.md @@ -8,6 +8,4 @@ | `text` | *str* | :heavy_check_mark: | N/A | | `index` | *float* | :heavy_check_mark: | N/A | | `logprobs` | [Nullable[components.CompletionLogprobs]](../components/completionlogprobs.md) | :heavy_check_mark: | N/A | -| `finish_reason` | [Nullable[components.CompletionFinishReason]](../components/completionfinishreason.md) | :heavy_check_mark: | N/A | -| `native_finish_reason` | *Optional[str]* | :heavy_minus_sign: | N/A | -| `reasoning` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file +| `finish_reason` | [Nullable[components.CompletionFinishReason]](../components/completionfinishreason.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/components/completionresponse.md b/docs/components/completionresponse.md index 3e9a9bd..404f19d 100644 --- a/docs/components/completionresponse.md +++ b/docs/components/completionresponse.md @@ -9,7 +9,6 @@ | `object` | *Literal["text_completion"]* | :heavy_check_mark: | N/A | | `created` | *float* | :heavy_check_mark: | N/A | | `model` | *str* | :heavy_check_mark: | N/A | -| `provider` | *Optional[str]* | :heavy_minus_sign: | N/A | | `system_fingerprint` | *Optional[str]* | :heavy_minus_sign: | N/A | | `choices` | List[[components.CompletionChoice](../components/completionchoice.md)] | :heavy_check_mark: | N/A | | `usage` | [Optional[components.CompletionUsage]](../components/completionusage.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/components/debug.md b/docs/components/debug.md deleted file mode 100644 index 459bb4b..0000000 --- a/docs/components/debug.md +++ /dev/null @@ -1,8 +0,0 @@ -# Debug - - -## Fields - -| Field | Type | Required | Description | -| -------------------- | -------------------- | -------------------- | -------------------- | -| `echo_upstream_body` | *Optional[bool]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/components/file.md b/docs/components/file.md new file mode 100644 index 0000000..d5b3937 --- /dev/null +++ b/docs/components/file.md @@ -0,0 +1,10 @@ +# File + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `file_data` | *str* | :heavy_check_mark: | N/A | +| `file_id` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `filename` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/components/idresponsehealing.md b/docs/components/idresponsehealing.md deleted file mode 100644 index 4a12790..0000000 --- a/docs/components/idresponsehealing.md +++ /dev/null @@ -1,8 +0,0 @@ -# IDResponseHealing - - -## Values - -| Name | Value | -| ------------------ | ------------------ | -| `RESPONSE_HEALING` | response-healing | \ No newline at end of file diff --git a/docs/components/openresponsesrequest.md b/docs/components/openresponsesrequest.md index 56283da..fcc6420 100644 --- a/docs/components/openresponsesrequest.md +++ b/docs/components/openresponsesrequest.md @@ -27,8 +27,8 @@ Request schema for Responses endpoint | `include` | List[[components.OpenAIResponsesIncludable](../components/openairesponsesincludable.md)] | :heavy_minus_sign: | N/A | | | `background` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | | | `safety_identifier` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | -| `store` | *Optional[Literal[False]]* | :heavy_minus_sign: | N/A | | -| `service_tier` | [Optional[components.ServiceTier]](../components/servicetier.md) | :heavy_minus_sign: | N/A | | +| `store` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | | +| `service_tier` | [OptionalNullable[components.ServiceTier]](../components/servicetier.md) | :heavy_minus_sign: | N/A | auto | | `truncation` | [OptionalNullable[components.Truncation]](../components/truncation.md) | :heavy_minus_sign: | N/A | auto | | `stream` | *Optional[bool]* | :heavy_minus_sign: | N/A | | | `provider` | [OptionalNullable[components.Provider]](../components/provider.md) | :heavy_minus_sign: | When multiple model providers are available, optionally indicate your routing preference. | | diff --git a/docs/components/plugin.md b/docs/components/plugin.md index bc21cd4..7f6e744 100644 --- a/docs/components/plugin.md +++ b/docs/components/plugin.md @@ -21,9 +21,3 @@ value: components.PluginWeb = /* values here */ value: components.PluginFileParser = /* values here */ ``` -### `components.PluginResponseHealing` - -```python -value: components.PluginResponseHealing = /* values here */ -``` - diff --git a/docs/components/pluginresponsehealing.md b/docs/components/pluginresponsehealing.md deleted file mode 100644 index ecee55d..0000000 --- a/docs/components/pluginresponsehealing.md +++ /dev/null @@ -1,8 +0,0 @@ -# PluginResponseHealing - - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | -| `id` | [components.IDResponseHealing](../components/idresponsehealing.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/components/providername.md b/docs/components/providername.md index 47b7be5..9c86cd3 100644 --- a/docs/components/providername.md +++ b/docs/components/providername.md @@ -9,14 +9,12 @@ | `AION_LABS` | AionLabs | | `ALIBABA` | Alibaba | | `AMAZON_BEDROCK` | Amazon Bedrock | -| `AMAZON_NOVA` | Amazon Nova | | `ANTHROPIC` | Anthropic | -| `ARCEE_AI` | Arcee AI | +| `ARCEE` | Arcee | | `ATLAS_CLOUD` | AtlasCloud | | `AVIAN` | Avian | | `AZURE` | Azure | | `BASE_TEN` | BaseTen | -| `BYTE_PLUS` | BytePlus | | `BLACK_FOREST_LABS` | Black Forest Labs | | `CEREBRAS` | Cerebras | | `CHUTES` | Chutes | @@ -31,7 +29,6 @@ | `FIREWORKS` | Fireworks | | `FRIENDLI` | Friendli | | `GMI_CLOUD` | GMICloud | -| `GO_POMELO` | GoPomelo | | `GOOGLE` | Google | | `GOOGLE_AI_STUDIO` | Google AI Studio | | `GROQ` | Groq | @@ -62,7 +59,6 @@ | `SAMBA_NOVA` | SambaNova | | `SILICON_FLOW` | SiliconFlow | | `STEALTH` | Stealth | -| `STREAM_LAKE` | StreamLake | | `SWITCHPOINT` | Switchpoint | | `TARGON` | Targon | | `TOGETHER` | Together | diff --git a/docs/components/servicetier.md b/docs/components/servicetier.md index bfc6187..3a7a020 100644 --- a/docs/components/servicetier.md +++ b/docs/components/servicetier.md @@ -3,6 +3,10 @@ ## Values -| Name | Value | -| ------ | ------ | -| `AUTO` | auto | \ No newline at end of file +| Name | Value | +| ---------- | ---------- | +| `AUTO` | auto | +| `DEFAULT` | default | +| `FLEX` | flex | +| `PRIORITY` | priority | +| `SCALE` | scale | \ No newline at end of file diff --git a/docs/components/ttl.md b/docs/components/ttl.md deleted file mode 100644 index 0cbc7f3..0000000 --- a/docs/components/ttl.md +++ /dev/null @@ -1,9 +0,0 @@ -# TTL - - -## Values - -| Name | Value | -| ------- | ------- | -| `FIVEM` | 5m | -| `ONEH` | 1h | \ No newline at end of file diff --git a/docs/components/videourl1.md b/docs/components/videourl.md similarity index 95% rename from docs/components/videourl1.md rename to docs/components/videourl.md index 505c186..5bd5dec 100644 --- a/docs/components/videourl1.md +++ b/docs/components/videourl.md @@ -1,4 +1,4 @@ -# VideoURL1 +# VideoURL ## Fields diff --git a/docs/operations/createembeddingsresponse.md b/docs/operations/createembeddingsresponse.md index 2dc9adf..4c379be 100644 --- a/docs/operations/createembeddingsresponse.md +++ b/docs/operations/createembeddingsresponse.md @@ -1,14 +1,17 @@ # CreateEmbeddingsResponse -Embedding response +## Supported Types -## Fields +### `operations.CreateEmbeddingsResponseBody` + +```python +value: operations.CreateEmbeddingsResponseBody = /* values here */ +``` + +### `str` + +```python +value: str = /* values here */ +``` -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | -| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | -| `object` | [operations.Object](../operations/object.md) | :heavy_check_mark: | N/A | -| `data` | List[[operations.CreateEmbeddingsData](../operations/createembeddingsdata.md)] | :heavy_check_mark: | N/A | -| `model` | *str* | :heavy_check_mark: | N/A | -| `usage` | [Optional[operations.Usage]](../operations/usage.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/operations/createembeddingsresponsebody.md b/docs/operations/createembeddingsresponsebody.md new file mode 100644 index 0000000..2252cfd --- /dev/null +++ b/docs/operations/createembeddingsresponsebody.md @@ -0,0 +1,14 @@ +# CreateEmbeddingsResponseBody + +Embedding response + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `object` | [operations.Object](../operations/object.md) | :heavy_check_mark: | N/A | +| `data` | List[[operations.CreateEmbeddingsData](../operations/createembeddingsdata.md)] | :heavy_check_mark: | N/A | +| `model` | *str* | :heavy_check_mark: | N/A | +| `usage` | [Optional[operations.Usage]](../operations/usage.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/operations/getcreditsdata.md b/docs/operations/getcreditsdata.md deleted file mode 100644 index 9ba4582..0000000 --- a/docs/operations/getcreditsdata.md +++ /dev/null @@ -1,9 +0,0 @@ -# GetCreditsData - - -## Fields - -| Field | Type | Required | Description | Example | -| ----------------------- | ----------------------- | ----------------------- | ----------------------- | ----------------------- | -| `total_credits` | *float* | :heavy_check_mark: | Total credits purchased | 100.5 | -| `total_usage` | *float* | :heavy_check_mark: | Total credits used | 25.75 | \ No newline at end of file diff --git a/docs/operations/getcreditsresponse.md b/docs/operations/getcreditsresponse.md index a58a336..c52bc01 100644 --- a/docs/operations/getcreditsresponse.md +++ b/docs/operations/getcreditsresponse.md @@ -5,6 +5,5 @@ Total credits purchased and used ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| `data` | [operations.GetCreditsData](../operations/getcreditsdata.md) | :heavy_check_mark: | N/A | {
"total_credits": 100.5,
"total_usage": 25.75
} | \ No newline at end of file +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/operations/getparametersprovider.md b/docs/operations/getparametersprovider.md index f8728f0..21a0244 100644 --- a/docs/operations/getparametersprovider.md +++ b/docs/operations/getparametersprovider.md @@ -9,14 +9,12 @@ | `AION_LABS` | AionLabs | | `ALIBABA` | Alibaba | | `AMAZON_BEDROCK` | Amazon Bedrock | -| `AMAZON_NOVA` | Amazon Nova | | `ANTHROPIC` | Anthropic | -| `ARCEE_AI` | Arcee AI | +| `ARCEE` | Arcee | | `ATLAS_CLOUD` | AtlasCloud | | `AVIAN` | Avian | | `AZURE` | Azure | | `BASE_TEN` | BaseTen | -| `BYTE_PLUS` | BytePlus | | `BLACK_FOREST_LABS` | Black Forest Labs | | `CEREBRAS` | Cerebras | | `CHUTES` | Chutes | @@ -31,7 +29,6 @@ | `FIREWORKS` | Fireworks | | `FRIENDLI` | Friendli | | `GMI_CLOUD` | GMICloud | -| `GO_POMELO` | GoPomelo | | `GOOGLE` | Google | | `GOOGLE_AI_STUDIO` | Google AI Studio | | `GROQ` | Groq | @@ -62,7 +59,6 @@ | `SAMBA_NOVA` | SambaNova | | `SILICON_FLOW` | SiliconFlow | | `STEALTH` | Stealth | -| `STREAM_LAKE` | StreamLake | | `SWITCHPOINT` | Switchpoint | | `TARGON` | Targon | | `TOGETHER` | Together | diff --git a/docs/operations/updatekeysrequest.md b/docs/operations/updatekeysrequest.md index cb4c0a0..ff908da 100644 --- a/docs/operations/updatekeysrequest.md +++ b/docs/operations/updatekeysrequest.md @@ -6,4 +6,4 @@ | Field | Type | Required | Description | Example | | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | `hash` | *str* | :heavy_check_mark: | The hash identifier of the API key to update | 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 | -| `body` | [operations.UpdateKeysRequestBody](../operations/updatekeysrequestbody.md) | :heavy_check_mark: | N/A | {
"name": "Updated API Key Name",
"disabled": false,
"limit": 75,
"limit_reset": "daily",
"include_byok_in_limit": true
} | \ No newline at end of file +| `request_body` | [operations.UpdateKeysRequestBody](../operations/updatekeysrequestbody.md) | :heavy_check_mark: | N/A | {
"name": "Updated API Key Name",
"disabled": false,
"limit": 75,
"limit_reset": "daily",
"include_byok_in_limit": true
} | \ No newline at end of file diff --git a/docs/sdks/apikeys/README.md b/docs/sdks/apikeys/README.md index 829b8d3..303ac8f 100644 --- a/docs/sdks/apikeys/README.md +++ b/docs/sdks/apikeys/README.md @@ -67,7 +67,6 @@ Create a new API key ```python from openrouter import OpenRouter -from openrouter.utils import parse_datetime import os @@ -75,7 +74,7 @@ with OpenRouter( api_key=os.getenv("OPENROUTER_API_KEY", ""), ) as open_router: - res = open_router.api_keys.create(name="My New API Key", limit=50, limit_reset="monthly", include_byok_in_limit=True, expires_at=parse_datetime("2027-12-31T23:59:59Z")) + res = open_router.api_keys.create(name="My New API Key") # Handle response print(res) @@ -123,7 +122,7 @@ with OpenRouter( api_key=os.getenv("OPENROUTER_API_KEY", ""), ) as open_router: - res = open_router.api_keys.update(hash="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", name="Updated API Key Name", disabled=False, limit=75, limit_reset="daily", include_byok_in_limit=True) + res = open_router.api_keys.update(hash="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") # Handle response print(res) diff --git a/docs/sdks/chat/README.md b/docs/sdks/chat/README.md index 78c3a29..94ffd97 100644 --- a/docs/sdks/chat/README.md +++ b/docs/sdks/chat/README.md @@ -58,7 +58,6 @@ with OpenRouter( | `tools` | List[[components.ToolDefinitionJSON](../../components/tooldefinitionjson.md)] | :heavy_minus_sign: | N/A | | `top_p` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | | `user` | *Optional[str]* | :heavy_minus_sign: | N/A | -| `debug` | [Optional[components.Debug]](../../components/debug.md) | :heavy_minus_sign: | N/A | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response diff --git a/docs/sdks/embeddings/README.md b/docs/sdks/embeddings/README.md index 0f75d96..4f4244b 100644 --- a/docs/sdks/embeddings/README.md +++ b/docs/sdks/embeddings/README.md @@ -26,24 +26,7 @@ with OpenRouter( api_key=os.getenv("OPENROUTER_API_KEY", ""), ) as open_router: - res = open_router.embeddings.generate(input="", model="Taurus", provider={ - "data_collection": "allow", - "zdr": True, - "enforce_distillable_text": True, - "order": [ - "OpenAI", - ], - "only": [ - "OpenAI", - ], - "ignore": [ - "OpenAI", - ], - "quantizations": [ - "fp16", - ], - "sort": "price", - }) + res = open_router.embeddings.generate(input="", model="Taurus") # Handle response print(res) diff --git a/docs/sdks/oauth/README.md b/docs/sdks/oauth/README.md index ae77e75..0c17abc 100644 --- a/docs/sdks/oauth/README.md +++ b/docs/sdks/oauth/README.md @@ -26,7 +26,7 @@ with OpenRouter( api_key=os.getenv("OPENROUTER_API_KEY", ""), ) as open_router: - res = open_router.o_auth.exchange_auth_code_for_api_key(code="auth_code_abc123def456", code_verifier="dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk", code_challenge_method="S256") + res = open_router.o_auth.exchange_auth_code_for_api_key(code="auth_code_abc123def456") # Handle response print(res) @@ -71,7 +71,7 @@ with OpenRouter( api_key=os.getenv("OPENROUTER_API_KEY", ""), ) as open_router: - res = open_router.o_auth.create_auth_code(callback_url="https://myapp.com/auth/callback", code_challenge="E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM", code_challenge_method="S256", limit=100) + res = open_router.o_auth.create_auth_code(callback_url="https://myapp.com/auth/callback") # Handle response print(res) diff --git a/docs/sdks/responses/README.md b/docs/sdks/responses/README.md index 001617b..4918bce 100644 --- a/docs/sdks/responses/README.md +++ b/docs/sdks/responses/README.md @@ -25,61 +25,7 @@ with OpenRouter( api_key=os.getenv("OPENROUTER_API_KEY", ""), ) as open_router: - res = open_router.beta.responses.send(input=[ - { - "type": "message", - "role": "user", - "content": "Hello, how are you?", - }, - ], metadata={ - "user_id": "123", - "session_id": "abc-def-ghi", - }, tools=[ - { - "type": "function", - "name": "get_current_weather", - "description": "Get the current weather in a given location", - "parameters": { - "type": "object", - "properties": { - "location": { - "type": "string", - }, - }, - }, - }, - ], model="anthropic/claude-4.5-sonnet-20250929", text={ - "format_": { - "type": "text", - }, - "verbosity": "medium", - }, reasoning={ - "summary": "auto", - "enabled": True, - }, temperature=0.7, top_p=0.9, prompt={ - "id": "", - "variables": { - "key": { - "type": "input_text", - "text": "Hello, how can I help you?", - }, - }, - }, service_tier="auto", truncation="auto", stream=False, provider={ - "data_collection": "allow", - "zdr": True, - "enforce_distillable_text": True, - "order": [ - "OpenAI", - ], - "only": [ - "OpenAI", - ], - "ignore": [ - "OpenAI", - ], - "quantizations": None, - "sort": "price", - }) + res = open_router.beta.responses.send(stream=False) with res as event_stream: for event in event_stream: @@ -112,7 +58,8 @@ with OpenRouter( | `include` | List[[components.OpenAIResponsesIncludable](../../components/openairesponsesincludable.md)] | :heavy_minus_sign: | N/A | | | `background` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | | | `safety_identifier` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | -| `service_tier` | [Optional[components.ServiceTier]](../../components/servicetier.md) | :heavy_minus_sign: | N/A | | +| `store` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | | +| `service_tier` | [OptionalNullable[components.ServiceTier]](../../components/servicetier.md) | :heavy_minus_sign: | N/A | auto | | `truncation` | [OptionalNullable[components.Truncation]](../../components/truncation.md) | :heavy_minus_sign: | N/A | auto | | `stream` | *Optional[bool]* | :heavy_minus_sign: | N/A | | | `provider` | [OptionalNullable[components.Provider]](../../components/provider.md) | :heavy_minus_sign: | When multiple model providers are available, optionally indicate your routing preference. | | diff --git a/pyproject.toml b/pyproject.toml index 7d65137..0bca6bd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "openrouter" -version = "0.1.1" +version = "0.0.16" description = "Official Python Client SDK for OpenRouter." authors = [{ name = "OpenRouter" },] readme = "README-PYPI.md" diff --git a/src/openrouter/_version.py b/src/openrouter/_version.py index 43d4d8d..af0bab6 100644 --- a/src/openrouter/_version.py +++ b/src/openrouter/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "openrouter" -__version__: str = "0.1.1" +__version__: str = "0.0.16" __openapi_doc_version__: str = "1.0.0" __gen_version__: str = "2.768.0" -__user_agent__: str = "speakeasy-sdk/python 0.1.1 2.768.0 1.0.0 openrouter" +__user_agent__: str = "speakeasy-sdk/python 0.0.16 2.768.0 1.0.0 openrouter" try: if __package__ is not None: diff --git a/src/openrouter/api_keys.py b/src/openrouter/api_keys.py index f4f0d23..39bbe5f 100644 --- a/src/openrouter/api_keys.py +++ b/src/openrouter/api_keys.py @@ -506,7 +506,7 @@ class APIKeys(BaseSDK): request = operations.UpdateKeysRequest( hash=hash, - body=operations.UpdateKeysRequestBody( + request_body=operations.UpdateKeysRequestBody( name=name, disabled=disabled, limit=limit, @@ -529,7 +529,11 @@ class APIKeys(BaseSDK): http_headers=http_headers, security=self.sdk_configuration.security, get_serialized_body=lambda: utils.serialize_request_body( - request.body, False, False, "json", operations.UpdateKeysRequestBody + request.request_body, + False, + False, + "json", + operations.UpdateKeysRequestBody, ), allow_empty_value=None, timeout_ms=timeout_ms, @@ -638,7 +642,7 @@ class APIKeys(BaseSDK): request = operations.UpdateKeysRequest( hash=hash, - body=operations.UpdateKeysRequestBody( + request_body=operations.UpdateKeysRequestBody( name=name, disabled=disabled, limit=limit, @@ -661,7 +665,11 @@ class APIKeys(BaseSDK): http_headers=http_headers, security=self.sdk_configuration.security, get_serialized_body=lambda: utils.serialize_request_body( - request.body, False, False, "json", operations.UpdateKeysRequestBody + request.request_body, + False, + False, + "json", + operations.UpdateKeysRequestBody, ), allow_empty_value=None, timeout_ms=timeout_ms, diff --git a/src/openrouter/chat.py b/src/openrouter/chat.py index bc00143..1587ae5 100644 --- a/src/openrouter/chat.py +++ b/src/openrouter/chat.py @@ -61,7 +61,6 @@ class Chat(BaseSDK): ] = None, top_p: OptionalNullable[float] = UNSET, user: Optional[str] = None, - debug: Optional[Union[components.Debug, components.DebugTypedDict]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -93,7 +92,6 @@ class Chat(BaseSDK): :param tools: :param top_p: :param user: - :param debug: :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -146,7 +144,6 @@ class Chat(BaseSDK): ] = None, top_p: OptionalNullable[float] = UNSET, user: Optional[str] = None, - debug: Optional[Union[components.Debug, components.DebugTypedDict]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -178,7 +175,6 @@ class Chat(BaseSDK): :param tools: :param top_p: :param user: - :param debug: :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -230,7 +226,6 @@ class Chat(BaseSDK): ] = None, top_p: OptionalNullable[float] = UNSET, user: Optional[str] = None, - debug: Optional[Union[components.Debug, components.DebugTypedDict]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -262,7 +257,6 @@ class Chat(BaseSDK): :param tools: :param top_p: :param user: - :param debug: :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -311,7 +305,6 @@ class Chat(BaseSDK): ), top_p=top_p, user=user, - debug=utils.get_pydantic_model(debug, Optional[components.Debug]), ) req = self._build_request( @@ -446,7 +439,6 @@ class Chat(BaseSDK): ] = None, top_p: OptionalNullable[float] = UNSET, user: Optional[str] = None, - debug: Optional[Union[components.Debug, components.DebugTypedDict]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -478,7 +470,6 @@ class Chat(BaseSDK): :param tools: :param top_p: :param user: - :param debug: :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -531,7 +522,6 @@ class Chat(BaseSDK): ] = None, top_p: OptionalNullable[float] = UNSET, user: Optional[str] = None, - debug: Optional[Union[components.Debug, components.DebugTypedDict]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -563,7 +553,6 @@ class Chat(BaseSDK): :param tools: :param top_p: :param user: - :param debug: :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -615,7 +604,6 @@ class Chat(BaseSDK): ] = None, top_p: OptionalNullable[float] = UNSET, user: Optional[str] = None, - debug: Optional[Union[components.Debug, components.DebugTypedDict]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -647,7 +635,6 @@ class Chat(BaseSDK): :param tools: :param top_p: :param user: - :param debug: :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -696,7 +683,6 @@ class Chat(BaseSDK): ), top_p=top_p, user=user, - debug=utils.get_pydantic_model(debug, Optional[components.Debug]), ) req = self._build_request_async( diff --git a/src/openrouter/components/__init__.py b/src/openrouter/components/__init__.py index d7818e6..1554012 100644 --- a/src/openrouter/components/__init__.py +++ b/src/openrouter/components/__init__.py @@ -21,7 +21,6 @@ if TYPE_CHECKING: BadRequestResponseErrorData, BadRequestResponseErrorDataTypedDict, ) - from .chatcompletionfinishreason import ChatCompletionFinishReason from .chaterror import ChatErrorError, ChatErrorErrorTypedDict, Code, CodeTypedDict from .chatgenerationparams import ( ChatGenerationParams, @@ -36,8 +35,6 @@ if TYPE_CHECKING: ChatGenerationParamsStop, ChatGenerationParamsStopTypedDict, ChatGenerationParamsTypedDict, - Debug, - DebugTypedDict, Effort, Reasoning, ReasoningTypedDict, @@ -56,14 +53,16 @@ if TYPE_CHECKING: ) from .chatmessagecontentitemaudio import ( ChatMessageContentItemAudio, + ChatMessageContentItemAudioFormat, ChatMessageContentItemAudioInputAudio, ChatMessageContentItemAudioInputAudioTypedDict, ChatMessageContentItemAudioTypedDict, ) - from .chatmessagecontentitemcachecontrol import ( - ChatMessageContentItemCacheControl, - ChatMessageContentItemCacheControlTypedDict, - TTL, + from .chatmessagecontentitemfile import ( + ChatMessageContentItemFile, + ChatMessageContentItemFileTypedDict, + File, + FileTypedDict, ) from .chatmessagecontentitemimage import ( ChatMessageContentItemImage, @@ -83,10 +82,8 @@ if TYPE_CHECKING: ChatMessageContentItemVideoTypedDict, ChatMessageContentItemVideoVideoURL, ChatMessageContentItemVideoVideoURLTypedDict, - VideoURL1, - VideoURL1TypedDict, - VideoURL2, - VideoURL2TypedDict, + ChatMessageContentItemVideoVideoURLVideoURL, + ChatMessageContentItemVideoVideoURLVideoURLTypedDict, ) from .chatmessagetokenlogprob import ( ChatMessageTokenLogprob, @@ -105,8 +102,13 @@ if TYPE_CHECKING: ChatMessageToolCallTypedDict, ) from .chatresponse import ChatResponse, ChatResponseTypedDict - from .chatresponsechoice import ChatResponseChoice, ChatResponseChoiceTypedDict - from .chatstreamingchoice import ChatStreamingChoice, ChatStreamingChoiceTypedDict + from .chatresponsechoice import ( + ChatCompletionFinishReason, + ChatResponseChoice, + ChatResponseChoiceTypedDict, + ChatStreamingChoice, + ChatStreamingChoiceTypedDict, + ) from .chatstreamingmessagechunk import ( ChatStreamingMessageChunk, ChatStreamingMessageChunkRole, @@ -424,7 +426,6 @@ if TYPE_CHECKING: Engine, IDFileParser, IDModeration, - IDResponseHealing, IDWeb, Ignore, IgnoreTypedDict, @@ -449,8 +450,6 @@ if TYPE_CHECKING: PluginFileParserTypedDict, PluginModeration, PluginModerationTypedDict, - PluginResponseHealing, - PluginResponseHealingTypedDict, PluginTypedDict, PluginWeb, PluginWebTypedDict, @@ -785,6 +784,7 @@ if TYPE_CHECKING: UserMessageContentTypedDict, UserMessageTypedDict, ) + from .videourl import VideoURL, VideoURLTypedDict from .websearchpreviewtooluserlocation import ( WebSearchPreviewToolUserLocation, WebSearchPreviewToolUserLocationType, @@ -825,11 +825,12 @@ __all__ = [ "ChatGenerationTokenUsageTypedDict", "ChatMessageContentItem", "ChatMessageContentItemAudio", + "ChatMessageContentItemAudioFormat", "ChatMessageContentItemAudioInputAudio", "ChatMessageContentItemAudioInputAudioTypedDict", "ChatMessageContentItemAudioTypedDict", - "ChatMessageContentItemCacheControl", - "ChatMessageContentItemCacheControlTypedDict", + "ChatMessageContentItemFile", + "ChatMessageContentItemFileTypedDict", "ChatMessageContentItemImage", "ChatMessageContentItemImageDetail", "ChatMessageContentItemImageTypedDict", @@ -842,6 +843,8 @@ __all__ = [ "ChatMessageContentItemVideoTypedDict", "ChatMessageContentItemVideoVideoURL", "ChatMessageContentItemVideoVideoURLTypedDict", + "ChatMessageContentItemVideoVideoURLVideoURL", + "ChatMessageContentItemVideoVideoURLVideoURLTypedDict", "ChatMessageTokenLogprob", "ChatMessageTokenLogprobTypedDict", "ChatMessageTokenLogprobs", @@ -902,8 +905,6 @@ __all__ = [ "CreateChargeRequest", "CreateChargeRequestTypedDict", "DataCollection", - "Debug", - "DebugTypedDict", "DefaultParameters", "DefaultParametersTypedDict", "EdgeNetworkTimeoutResponseErrorData", @@ -911,17 +912,18 @@ __all__ = [ "Effort", "EndpointStatus", "Engine", + "File", "FileCitation", "FileCitationType", "FileCitationTypedDict", "FilePath", "FilePathType", "FilePathTypedDict", + "FileTypedDict", "ForbiddenResponseErrorData", "ForbiddenResponseErrorDataTypedDict", "IDFileParser", "IDModeration", - "IDResponseHealing", "IDWeb", "Ignore", "IgnoreTypedDict", @@ -1215,8 +1217,6 @@ __all__ = [ "PluginFileParserTypedDict", "PluginModeration", "PluginModerationTypedDict", - "PluginResponseHealing", - "PluginResponseHealingTypedDict", "PluginTypedDict", "PluginWeb", "PluginWebTypedDict", @@ -1342,7 +1342,6 @@ __all__ = [ "SystemMessageContent", "SystemMessageContentTypedDict", "SystemMessageTypedDict", - "TTL", "Tokenizer", "TooManyRequestsResponseErrorData", "TooManyRequestsResponseErrorDataTypedDict", @@ -1392,10 +1391,8 @@ __all__ = [ "UserMessageTypedDict", "Variables", "VariablesTypedDict", - "VideoURL1", - "VideoURL1TypedDict", - "VideoURL2", - "VideoURL2TypedDict", + "VideoURL", + "VideoURLTypedDict", "WebSearchPreviewToolUserLocation", "WebSearchPreviewToolUserLocationType", "WebSearchPreviewToolUserLocationTypedDict", @@ -1413,7 +1410,6 @@ _dynamic_imports: dict[str, str] = { "BadGatewayResponseErrorDataTypedDict": ".badgatewayresponseerrordata", "BadRequestResponseErrorData": ".badrequestresponseerrordata", "BadRequestResponseErrorDataTypedDict": ".badrequestresponseerrordata", - "ChatCompletionFinishReason": ".chatcompletionfinishreason", "ChatErrorError": ".chaterror", "ChatErrorErrorTypedDict": ".chaterror", "Code": ".chaterror", @@ -1430,8 +1426,6 @@ _dynamic_imports: dict[str, str] = { "ChatGenerationParamsStop": ".chatgenerationparams", "ChatGenerationParamsStopTypedDict": ".chatgenerationparams", "ChatGenerationParamsTypedDict": ".chatgenerationparams", - "Debug": ".chatgenerationparams", - "DebugTypedDict": ".chatgenerationparams", "Effort": ".chatgenerationparams", "Reasoning": ".chatgenerationparams", "ReasoningTypedDict": ".chatgenerationparams", @@ -1444,12 +1438,14 @@ _dynamic_imports: dict[str, str] = { "ChatMessageContentItem": ".chatmessagecontentitem", "ChatMessageContentItemTypedDict": ".chatmessagecontentitem", "ChatMessageContentItemAudio": ".chatmessagecontentitemaudio", + "ChatMessageContentItemAudioFormat": ".chatmessagecontentitemaudio", "ChatMessageContentItemAudioInputAudio": ".chatmessagecontentitemaudio", "ChatMessageContentItemAudioInputAudioTypedDict": ".chatmessagecontentitemaudio", "ChatMessageContentItemAudioTypedDict": ".chatmessagecontentitemaudio", - "ChatMessageContentItemCacheControl": ".chatmessagecontentitemcachecontrol", - "ChatMessageContentItemCacheControlTypedDict": ".chatmessagecontentitemcachecontrol", - "TTL": ".chatmessagecontentitemcachecontrol", + "ChatMessageContentItemFile": ".chatmessagecontentitemfile", + "ChatMessageContentItemFileTypedDict": ".chatmessagecontentitemfile", + "File": ".chatmessagecontentitemfile", + "FileTypedDict": ".chatmessagecontentitemfile", "ChatMessageContentItemImage": ".chatmessagecontentitemimage", "ChatMessageContentItemImageDetail": ".chatmessagecontentitemimage", "ChatMessageContentItemImageTypedDict": ".chatmessagecontentitemimage", @@ -1463,10 +1459,8 @@ _dynamic_imports: dict[str, str] = { "ChatMessageContentItemVideoTypedDict": ".chatmessagecontentitemvideo", "ChatMessageContentItemVideoVideoURL": ".chatmessagecontentitemvideo", "ChatMessageContentItemVideoVideoURLTypedDict": ".chatmessagecontentitemvideo", - "VideoURL1": ".chatmessagecontentitemvideo", - "VideoURL1TypedDict": ".chatmessagecontentitemvideo", - "VideoURL2": ".chatmessagecontentitemvideo", - "VideoURL2TypedDict": ".chatmessagecontentitemvideo", + "ChatMessageContentItemVideoVideoURLVideoURL": ".chatmessagecontentitemvideo", + "ChatMessageContentItemVideoVideoURLVideoURLTypedDict": ".chatmessagecontentitemvideo", "ChatMessageTokenLogprob": ".chatmessagetokenlogprob", "ChatMessageTokenLogprobTypedDict": ".chatmessagetokenlogprob", "TopLogprob": ".chatmessagetokenlogprob", @@ -1479,10 +1473,11 @@ _dynamic_imports: dict[str, str] = { "ChatMessageToolCallTypedDict": ".chatmessagetoolcall", "ChatResponse": ".chatresponse", "ChatResponseTypedDict": ".chatresponse", + "ChatCompletionFinishReason": ".chatresponsechoice", "ChatResponseChoice": ".chatresponsechoice", "ChatResponseChoiceTypedDict": ".chatresponsechoice", - "ChatStreamingChoice": ".chatstreamingchoice", - "ChatStreamingChoiceTypedDict": ".chatstreamingchoice", + "ChatStreamingChoice": ".chatresponsechoice", + "ChatStreamingChoiceTypedDict": ".chatresponsechoice", "ChatStreamingMessageChunk": ".chatstreamingmessagechunk", "ChatStreamingMessageChunkRole": ".chatstreamingmessagechunk", "ChatStreamingMessageChunkTypedDict": ".chatstreamingmessagechunk", @@ -1729,7 +1724,6 @@ _dynamic_imports: dict[str, str] = { "Engine": ".openresponsesrequest", "IDFileParser": ".openresponsesrequest", "IDModeration": ".openresponsesrequest", - "IDResponseHealing": ".openresponsesrequest", "IDWeb": ".openresponsesrequest", "Ignore": ".openresponsesrequest", "IgnoreTypedDict": ".openresponsesrequest", @@ -1754,8 +1748,6 @@ _dynamic_imports: dict[str, str] = { "PluginFileParserTypedDict": ".openresponsesrequest", "PluginModeration": ".openresponsesrequest", "PluginModerationTypedDict": ".openresponsesrequest", - "PluginResponseHealing": ".openresponsesrequest", - "PluginResponseHealingTypedDict": ".openresponsesrequest", "PluginTypedDict": ".openresponsesrequest", "PluginWeb": ".openresponsesrequest", "PluginWebTypedDict": ".openresponsesrequest", @@ -2006,6 +1998,8 @@ _dynamic_imports: dict[str, str] = { "UserMessageContent": ".usermessage", "UserMessageContentTypedDict": ".usermessage", "UserMessageTypedDict": ".usermessage", + "VideoURL": ".videourl", + "VideoURLTypedDict": ".videourl", "WebSearchPreviewToolUserLocation": ".websearchpreviewtooluserlocation", "WebSearchPreviewToolUserLocationType": ".websearchpreviewtooluserlocation", "WebSearchPreviewToolUserLocationTypedDict": ".websearchpreviewtooluserlocation", diff --git a/src/openrouter/components/chatcompletionfinishreason.py b/src/openrouter/components/chatcompletionfinishreason.py deleted file mode 100644 index 686462c..0000000 --- a/src/openrouter/components/chatcompletionfinishreason.py +++ /dev/null @@ -1,17 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" - -from __future__ import annotations -from openrouter.types import UnrecognizedStr -from typing import Literal, Union - - -ChatCompletionFinishReason = Union[ - Literal[ - "tool_calls", - "stop", - "length", - "content_filter", - "error", - ], - UnrecognizedStr, -] diff --git a/src/openrouter/components/chatgenerationparams.py b/src/openrouter/components/chatgenerationparams.py index 07b4c33..2b9b05c 100644 --- a/src/openrouter/components/chatgenerationparams.py +++ b/src/openrouter/components/chatgenerationparams.py @@ -156,14 +156,6 @@ ChatGenerationParamsStop = TypeAliasType( ) -class DebugTypedDict(TypedDict): - echo_upstream_body: NotRequired[bool] - - -class Debug(BaseModel): - echo_upstream_body: Optional[bool] = None - - class ChatGenerationParamsTypedDict(TypedDict): messages: List[MessageTypedDict] model: NotRequired[str] @@ -187,7 +179,6 @@ class ChatGenerationParamsTypedDict(TypedDict): tools: NotRequired[List[ToolDefinitionJSONTypedDict]] top_p: NotRequired[Nullable[float]] user: NotRequired[str] - debug: NotRequired[DebugTypedDict] class ChatGenerationParams(BaseModel): @@ -235,8 +226,6 @@ class ChatGenerationParams(BaseModel): user: Optional[str] = None - debug: Optional[Debug] = None - @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = [ @@ -261,7 +250,6 @@ class ChatGenerationParams(BaseModel): "tools", "top_p", "user", - "debug", ] nullable_fields = [ "frequency_penalty", diff --git a/src/openrouter/components/chatmessagecontentitem.py b/src/openrouter/components/chatmessagecontentitem.py index eba0a3b..6d949b9 100644 --- a/src/openrouter/components/chatmessagecontentitem.py +++ b/src/openrouter/components/chatmessagecontentitem.py @@ -5,6 +5,10 @@ from .chatmessagecontentitemaudio import ( ChatMessageContentItemAudio, ChatMessageContentItemAudioTypedDict, ) +from .chatmessagecontentitemfile import ( + ChatMessageContentItemFile, + ChatMessageContentItemFileTypedDict, +) from .chatmessagecontentitemimage import ( ChatMessageContentItemImage, ChatMessageContentItemImageTypedDict, @@ -26,9 +30,10 @@ from typing_extensions import Annotated, TypeAliasType ChatMessageContentItemTypedDict = TypeAliasType( "ChatMessageContentItemTypedDict", Union[ + ChatMessageContentItemTextTypedDict, ChatMessageContentItemImageTypedDict, ChatMessageContentItemAudioTypedDict, - ChatMessageContentItemTextTypedDict, + ChatMessageContentItemFileTypedDict, ChatMessageContentItemVideoTypedDict, ], ) @@ -41,6 +46,7 @@ ChatMessageContentItem = Annotated[ Annotated[ChatMessageContentItemAudio, Tag("input_audio")], Annotated[ChatMessageContentItemVideo, Tag("input_video")], Annotated[ChatMessageContentItemVideo, Tag("video_url")], + Annotated[ChatMessageContentItemFile, Tag("file")], ], Discriminator(lambda m: get_discriminator(m, "type", "type")), ] diff --git a/src/openrouter/components/chatmessagecontentitemaudio.py b/src/openrouter/components/chatmessagecontentitemaudio.py index b251803..21a8803 100644 --- a/src/openrouter/components/chatmessagecontentitemaudio.py +++ b/src/openrouter/components/chatmessagecontentitemaudio.py @@ -1,23 +1,42 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from openrouter.types import BaseModel -from openrouter.utils import validate_const +from openrouter.types import BaseModel, UnrecognizedStr +from openrouter.utils import validate_const, validate_open_enum import pydantic -from pydantic.functional_validators import AfterValidator -from typing import Literal +from pydantic.functional_validators import AfterValidator, PlainValidator +from typing import Literal, Union from typing_extensions import Annotated, TypedDict +ChatMessageContentItemAudioFormat = Union[ + Literal[ + "wav", + "mp3", + "flac", + "m4a", + "ogg", + "pcm16", + "pcm24", + ], + UnrecognizedStr, +] + + class ChatMessageContentItemAudioInputAudioTypedDict(TypedDict): data: str - format_: str + format_: ChatMessageContentItemAudioFormat class ChatMessageContentItemAudioInputAudio(BaseModel): data: str - format_: Annotated[str, pydantic.Field(alias="format")] + format_: Annotated[ + Annotated[ + ChatMessageContentItemAudioFormat, PlainValidator(validate_open_enum(False)) + ], + pydantic.Field(alias="format"), + ] class ChatMessageContentItemAudioTypedDict(TypedDict): diff --git a/src/openrouter/components/chatmessagecontentitemcachecontrol.py b/src/openrouter/components/chatmessagecontentitemcachecontrol.py deleted file mode 100644 index b96625f..0000000 --- a/src/openrouter/components/chatmessagecontentitemcachecontrol.py +++ /dev/null @@ -1,32 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" - -from __future__ import annotations -from openrouter.types import BaseModel, UnrecognizedStr -from openrouter.utils import validate_const, validate_open_enum -import pydantic -from pydantic.functional_validators import AfterValidator, PlainValidator -from typing import Literal, Optional, Union -from typing_extensions import Annotated, NotRequired, TypedDict - - -TTL = Union[ - Literal[ - "5m", - "1h", - ], - UnrecognizedStr, -] - - -class ChatMessageContentItemCacheControlTypedDict(TypedDict): - type: Literal["ephemeral"] - ttl: NotRequired[TTL] - - -class ChatMessageContentItemCacheControl(BaseModel): - TYPE: Annotated[ - Annotated[Literal["ephemeral"], AfterValidator(validate_const("ephemeral"))], - pydantic.Field(alias="type"), - ] = "ephemeral" - - ttl: Annotated[Optional[TTL], PlainValidator(validate_open_enum(False))] = None diff --git a/src/openrouter/components/chatmessagecontentitemfile.py b/src/openrouter/components/chatmessagecontentitemfile.py new file mode 100644 index 0000000..f878dc3 --- /dev/null +++ b/src/openrouter/components/chatmessagecontentitemfile.py @@ -0,0 +1,37 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from openrouter.types import BaseModel +from openrouter.utils import validate_const +import pydantic +from pydantic.functional_validators import AfterValidator +from typing import Literal, Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class FileTypedDict(TypedDict): + file_data: str + file_id: NotRequired[str] + filename: NotRequired[str] + + +class File(BaseModel): + file_data: str + + file_id: Optional[str] = None + + filename: Optional[str] = None + + +class ChatMessageContentItemFileTypedDict(TypedDict): + file: FileTypedDict + type: Literal["file"] + + +class ChatMessageContentItemFile(BaseModel): + file: File + + TYPE: Annotated[ + Annotated[Literal["file"], AfterValidator(validate_const("file"))], + pydantic.Field(alias="type"), + ] = "file" diff --git a/src/openrouter/components/chatmessagecontentitemtext.py b/src/openrouter/components/chatmessagecontentitemtext.py index 4dc1662..c791fa9 100644 --- a/src/openrouter/components/chatmessagecontentitemtext.py +++ b/src/openrouter/components/chatmessagecontentitemtext.py @@ -1,22 +1,17 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .chatmessagecontentitemcachecontrol import ( - ChatMessageContentItemCacheControl, - ChatMessageContentItemCacheControlTypedDict, -) from openrouter.types import BaseModel from openrouter.utils import validate_const import pydantic from pydantic.functional_validators import AfterValidator -from typing import Literal, Optional -from typing_extensions import Annotated, NotRequired, TypedDict +from typing import Literal +from typing_extensions import Annotated, TypedDict class ChatMessageContentItemTextTypedDict(TypedDict): text: str type: Literal["text"] - cache_control: NotRequired[ChatMessageContentItemCacheControlTypedDict] class ChatMessageContentItemText(BaseModel): @@ -26,5 +21,3 @@ class ChatMessageContentItemText(BaseModel): Annotated[Literal["text"], AfterValidator(validate_const("text"))], pydantic.Field(alias="type"), ] = "text" - - cache_control: Optional[ChatMessageContentItemCacheControl] = None diff --git a/src/openrouter/components/chatmessagecontentitemvideo.py b/src/openrouter/components/chatmessagecontentitemvideo.py index 06be297..553d826 100644 --- a/src/openrouter/components/chatmessagecontentitemvideo.py +++ b/src/openrouter/components/chatmessagecontentitemvideo.py @@ -1,6 +1,7 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from .videourl import VideoURL, VideoURLTypedDict from openrouter.types import BaseModel from openrouter.utils import get_discriminator, validate_const import pydantic @@ -10,21 +11,21 @@ from typing import Literal, Union from typing_extensions import Annotated, TypeAliasType, TypedDict -class VideoURL2TypedDict(TypedDict): +class ChatMessageContentItemVideoVideoURLVideoURLTypedDict(TypedDict): url: str -class VideoURL2(BaseModel): +class ChatMessageContentItemVideoVideoURLVideoURL(BaseModel): url: str class ChatMessageContentItemVideoVideoURLTypedDict(TypedDict): - video_url: VideoURL2TypedDict + video_url: ChatMessageContentItemVideoVideoURLVideoURLTypedDict type: Literal["video_url"] class ChatMessageContentItemVideoVideoURL(BaseModel): - video_url: VideoURL2 + video_url: ChatMessageContentItemVideoVideoURLVideoURL TYPE: Annotated[ Annotated[Literal["video_url"], AfterValidator(validate_const("video_url"))], @@ -32,21 +33,13 @@ class ChatMessageContentItemVideoVideoURL(BaseModel): ] = "video_url" -class VideoURL1TypedDict(TypedDict): - url: str - - -class VideoURL1(BaseModel): - url: str - - class ChatMessageContentItemVideoInputVideoTypedDict(TypedDict): - video_url: VideoURL1TypedDict + video_url: VideoURLTypedDict type: Literal["input_video"] class ChatMessageContentItemVideoInputVideo(BaseModel): - video_url: VideoURL1 + video_url: VideoURL TYPE: Annotated[ Annotated[ diff --git a/src/openrouter/components/chatresponsechoice.py b/src/openrouter/components/chatresponsechoice.py index 9592bf1..e59f847 100644 --- a/src/openrouter/components/chatresponsechoice.py +++ b/src/openrouter/components/chatresponsechoice.py @@ -2,24 +2,41 @@ from __future__ import annotations from .assistantmessage import AssistantMessage, AssistantMessageTypedDict -from .chatcompletionfinishreason import ChatCompletionFinishReason from .chatmessagetokenlogprobs import ( ChatMessageTokenLogprobs, ChatMessageTokenLogprobsTypedDict, ) +from .chatstreamingmessagechunk import ( + ChatStreamingMessageChunk, + ChatStreamingMessageChunkTypedDict, +) from openrouter.types import ( BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL, + UnrecognizedStr, ) from openrouter.utils import validate_open_enum from pydantic import model_serializer from pydantic.functional_validators import PlainValidator +from typing import Literal, Union from typing_extensions import Annotated, NotRequired, TypedDict +ChatCompletionFinishReason = Union[ + Literal[ + "tool_calls", + "stop", + "length", + "content_filter", + "error", + ], + UnrecognizedStr, +] + + class ChatResponseChoiceTypedDict(TypedDict): finish_reason: Nullable[ChatCompletionFinishReason] index: float @@ -67,3 +84,52 @@ class ChatResponseChoice(BaseModel): m[k] = val return m + + +class ChatStreamingChoiceTypedDict(TypedDict): + delta: ChatStreamingMessageChunkTypedDict + finish_reason: Nullable[ChatCompletionFinishReason] + index: float + logprobs: NotRequired[Nullable[ChatMessageTokenLogprobsTypedDict]] + + +class ChatStreamingChoice(BaseModel): + delta: ChatStreamingMessageChunk + + finish_reason: Annotated[ + Nullable[ChatCompletionFinishReason], PlainValidator(validate_open_enum(False)) + ] + + index: float + + logprobs: OptionalNullable[ChatMessageTokenLogprobs] = UNSET + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = ["logprobs"] + nullable_fields = ["finish_reason", "logprobs"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m diff --git a/src/openrouter/components/chatstreamingchoice.py b/src/openrouter/components/chatstreamingchoice.py deleted file mode 100644 index b64b8ff..0000000 --- a/src/openrouter/components/chatstreamingchoice.py +++ /dev/null @@ -1,72 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" - -from __future__ import annotations -from .chatcompletionfinishreason import ChatCompletionFinishReason -from .chatmessagetokenlogprobs import ( - ChatMessageTokenLogprobs, - ChatMessageTokenLogprobsTypedDict, -) -from .chatstreamingmessagechunk import ( - ChatStreamingMessageChunk, - ChatStreamingMessageChunkTypedDict, -) -from openrouter.types import ( - BaseModel, - Nullable, - OptionalNullable, - UNSET, - UNSET_SENTINEL, -) -from openrouter.utils import validate_open_enum -from pydantic import model_serializer -from pydantic.functional_validators import PlainValidator -from typing_extensions import Annotated, NotRequired, TypedDict - - -class ChatStreamingChoiceTypedDict(TypedDict): - delta: ChatStreamingMessageChunkTypedDict - finish_reason: Nullable[ChatCompletionFinishReason] - index: float - logprobs: NotRequired[Nullable[ChatMessageTokenLogprobsTypedDict]] - - -class ChatStreamingChoice(BaseModel): - delta: ChatStreamingMessageChunk - - finish_reason: Annotated[ - Nullable[ChatCompletionFinishReason], PlainValidator(validate_open_enum(False)) - ] - - index: float - - logprobs: OptionalNullable[ChatMessageTokenLogprobs] = UNSET - - @model_serializer(mode="wrap") - def serialize_model(self, handler): - optional_fields = ["logprobs"] - nullable_fields = ["finish_reason", "logprobs"] - null_default_fields = [] - - serialized = handler(self) - - m = {} - - for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k) - serialized.pop(k, None) - - optional_nullable = k in optional_fields and k in nullable_fields - is_set = ( - self.__pydantic_fields_set__.intersection({n}) - or k in null_default_fields - ) # pylint: disable=no-member - - if val is not None and val != UNSET_SENTINEL: - m[k] = val - elif val != UNSET_SENTINEL and ( - not k in optional_fields or (optional_nullable and is_set) - ): - m[k] = val - - return m diff --git a/src/openrouter/components/chatstreamingresponsechunk.py b/src/openrouter/components/chatstreamingresponsechunk.py index 7c32481..0ec76bc 100644 --- a/src/openrouter/components/chatstreamingresponsechunk.py +++ b/src/openrouter/components/chatstreamingresponsechunk.py @@ -5,7 +5,7 @@ from .chatgenerationtokenusage import ( ChatGenerationTokenUsage, ChatGenerationTokenUsageTypedDict, ) -from .chatstreamingchoice import ChatStreamingChoice, ChatStreamingChoiceTypedDict +from .chatresponsechoice import ChatStreamingChoice, ChatStreamingChoiceTypedDict from openrouter.types import ( BaseModel, Nullable, diff --git a/src/openrouter/components/completionchoice.py b/src/openrouter/components/completionchoice.py index 21ce2b9..3e68a00 100644 --- a/src/openrouter/components/completionchoice.py +++ b/src/openrouter/components/completionchoice.py @@ -2,19 +2,12 @@ from __future__ import annotations from .completionlogprobs import CompletionLogprobs, CompletionLogprobsTypedDict -from openrouter.types import ( - BaseModel, - Nullable, - OptionalNullable, - UNSET, - UNSET_SENTINEL, - UnrecognizedStr, -) +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, Optional, Union -from typing_extensions import Annotated, NotRequired, TypedDict +from typing import Literal, Union +from typing_extensions import Annotated, TypedDict CompletionFinishReason = Union[ @@ -32,8 +25,6 @@ class CompletionChoiceTypedDict(TypedDict): index: float logprobs: Nullable[CompletionLogprobsTypedDict] finish_reason: Nullable[CompletionFinishReason] - native_finish_reason: NotRequired[str] - reasoning: NotRequired[Nullable[str]] class CompletionChoice(BaseModel): @@ -47,14 +38,10 @@ class CompletionChoice(BaseModel): Nullable[CompletionFinishReason], PlainValidator(validate_open_enum(False)) ] - native_finish_reason: Optional[str] = None - - reasoning: OptionalNullable[str] = UNSET - @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["native_finish_reason", "reasoning"] - nullable_fields = ["logprobs", "finish_reason", "reasoning"] + optional_fields = [] + nullable_fields = ["logprobs", "finish_reason"] null_default_fields = [] serialized = handler(self) diff --git a/src/openrouter/components/completionresponse.py b/src/openrouter/components/completionresponse.py index dcdd529..12bde5f 100644 --- a/src/openrouter/components/completionresponse.py +++ b/src/openrouter/components/completionresponse.py @@ -17,7 +17,6 @@ class CompletionResponseTypedDict(TypedDict): model: str choices: List[CompletionChoiceTypedDict] object: Literal["text_completion"] - provider: NotRequired[str] system_fingerprint: NotRequired[str] usage: NotRequired[CompletionUsageTypedDict] @@ -39,8 +38,6 @@ class CompletionResponse(BaseModel): pydantic.Field(alias="object"), ] = "text_completion" - provider: Optional[str] = None - system_fingerprint: Optional[str] = None usage: Optional[CompletionUsage] = None diff --git a/src/openrouter/components/openresponsesrequest.py b/src/openrouter/components/openresponsesrequest.py index 78f00d3..60a5e54 100644 --- a/src/openrouter/components/openresponsesrequest.py +++ b/src/openrouter/components/openresponsesrequest.py @@ -44,10 +44,9 @@ from openrouter.types import ( UNSET_SENTINEL, UnrecognizedStr, ) -from openrouter.utils import get_discriminator, validate_const, validate_open_enum -import pydantic +from openrouter.utils import get_discriminator, validate_open_enum from pydantic import Discriminator, Tag, model_serializer -from pydantic.functional_validators import AfterValidator, PlainValidator +from pydantic.functional_validators import PlainValidator from typing import Any, Dict, List, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict @@ -136,7 +135,16 @@ OpenResponsesRequestToolUnion = Annotated[ ] -ServiceTier = Literal["auto",] +ServiceTier = Union[ + Literal[ + "auto", + "default", + "flex", + "priority", + "scale", + ], + UnrecognizedStr, +] Truncation = Union[ @@ -348,17 +356,6 @@ class Provider(BaseModel): return m -IDResponseHealing = Literal["response-healing",] - - -class PluginResponseHealingTypedDict(TypedDict): - id: IDResponseHealing - - -class PluginResponseHealing(BaseModel): - id: IDResponseHealing - - IDFileParser = Literal["file-parser",] @@ -440,12 +437,7 @@ class PluginModeration(BaseModel): PluginTypedDict = TypeAliasType( "PluginTypedDict", - Union[ - PluginModerationTypedDict, - PluginResponseHealingTypedDict, - PluginFileParserTypedDict, - PluginWebTypedDict, - ], + Union[PluginModerationTypedDict, PluginFileParserTypedDict, PluginWebTypedDict], ) @@ -454,7 +446,6 @@ Plugin = Annotated[ Annotated[PluginModeration, Tag("moderation")], Annotated[PluginWeb, Tag("web")], Annotated[PluginFileParser, Tag("file-parser")], - Annotated[PluginResponseHealing, Tag("response-healing")], ], Discriminator(lambda m: get_discriminator(m, "id", "id")), ] @@ -487,8 +478,8 @@ class OpenResponsesRequestTypedDict(TypedDict): include: NotRequired[Nullable[List[OpenAIResponsesIncludable]]] background: NotRequired[Nullable[bool]] safety_identifier: NotRequired[Nullable[str]] - store: Literal[False] - service_tier: NotRequired[ServiceTier] + store: NotRequired[Nullable[bool]] + service_tier: NotRequired[Nullable[ServiceTier]] truncation: NotRequired[Nullable[Truncation]] stream: NotRequired[bool] provider: NotRequired[Nullable[ProviderTypedDict]] @@ -552,12 +543,11 @@ class OpenResponsesRequest(BaseModel): safety_identifier: OptionalNullable[str] = UNSET - STORE: Annotated[ - Annotated[Optional[Literal[False]], AfterValidator(validate_const(False))], - pydantic.Field(alias="store"), - ] = False + store: OptionalNullable[bool] = UNSET - service_tier: Optional[ServiceTier] = "auto" + service_tier: Annotated[ + OptionalNullable[ServiceTier], PlainValidator(validate_open_enum(False)) + ] = UNSET truncation: Annotated[ OptionalNullable[Truncation], PlainValidator(validate_open_enum(False)) @@ -619,6 +609,8 @@ class OpenResponsesRequest(BaseModel): "include", "background", "safety_identifier", + "store", + "service_tier", "truncation", "provider", ] diff --git a/src/openrouter/components/providername.py b/src/openrouter/components/providername.py index 62e892c..21f6345 100644 --- a/src/openrouter/components/providername.py +++ b/src/openrouter/components/providername.py @@ -11,14 +11,12 @@ ProviderName = Union[ "AionLabs", "Alibaba", "Amazon Bedrock", - "Amazon Nova", "Anthropic", - "Arcee AI", + "Arcee", "AtlasCloud", "Avian", "Azure", "BaseTen", - "BytePlus", "Black Forest Labs", "Cerebras", "Chutes", @@ -33,7 +31,6 @@ ProviderName = Union[ "Fireworks", "Friendli", "GMICloud", - "GoPomelo", "Google", "Google AI Studio", "Groq", @@ -64,7 +61,6 @@ ProviderName = Union[ "SambaNova", "SiliconFlow", "Stealth", - "StreamLake", "Switchpoint", "Targon", "Together", diff --git a/src/openrouter/components/videourl.py b/src/openrouter/components/videourl.py new file mode 100644 index 0000000..e1ef80d --- /dev/null +++ b/src/openrouter/components/videourl.py @@ -0,0 +1,13 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from openrouter.types import BaseModel +from typing_extensions import TypedDict + + +class VideoURLTypedDict(TypedDict): + url: str + + +class VideoURL(BaseModel): + url: str diff --git a/src/openrouter/embeddings.py b/src/openrouter/embeddings.py index eaa52b0..3ea39af 100644 --- a/src/openrouter/embeddings.py +++ b/src/openrouter/embeddings.py @@ -1,6 +1,7 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from .basesdk import BaseSDK +from enum import Enum from openrouter import components, errors, operations, utils from openrouter._hooks import HookContext from openrouter.types import OptionalNullable, UNSET @@ -9,6 +10,11 @@ from openrouter.utils.unmarshal_json_response import unmarshal_json_response from typing import Any, Mapping, Optional, Union +class GenerateAcceptEnum(str, Enum): + APPLICATION_JSON = "application/json" + TEXT_EVENT_STREAM = "text/event-stream" + + class Embeddings(BaseSDK): r"""Text embedding endpoints""" @@ -30,6 +36,7 @@ class Embeddings(BaseSDK): retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, + accept_header_override: Optional[GenerateAcceptEnum] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> operations.CreateEmbeddingsResponse: r"""Submit an embedding request @@ -46,6 +53,7 @@ class Embeddings(BaseSDK): :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 accept_header_override: Override the default accept header for this method :param http_headers: Additional headers to set or replace on requests. """ base_url = None @@ -80,7 +88,9 @@ class Embeddings(BaseSDK): request_has_path_params=False, request_has_query_params=True, user_agent_header="user-agent", - accept_header_value="application/json", + accept_header_value=accept_header_override.value + if accept_header_override is not None + else "application/json;q=1, text/event-stream;q=0", http_headers=http_headers, security=self.sdk_configuration.security, get_serialized_body=lambda: utils.serialize_request_body( @@ -129,8 +139,10 @@ class Embeddings(BaseSDK): response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response( - operations.CreateEmbeddingsResponse, http_res + operations.CreateEmbeddingsResponseBody, http_res ) + if utils.match_response(http_res, "200", "text/event-stream"): + return http_res.text if utils.match_response(http_res, "400", "application/json"): response_data = unmarshal_json_response( errors.BadRequestResponseErrorData, http_res @@ -212,6 +224,7 @@ class Embeddings(BaseSDK): retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, + accept_header_override: Optional[GenerateAcceptEnum] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> operations.CreateEmbeddingsResponse: r"""Submit an embedding request @@ -228,6 +241,7 @@ class Embeddings(BaseSDK): :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 accept_header_override: Override the default accept header for this method :param http_headers: Additional headers to set or replace on requests. """ base_url = None @@ -262,7 +276,9 @@ class Embeddings(BaseSDK): request_has_path_params=False, request_has_query_params=True, user_agent_header="user-agent", - accept_header_value="application/json", + accept_header_value=accept_header_override.value + if accept_header_override is not None + else "application/json;q=1, text/event-stream;q=0", http_headers=http_headers, security=self.sdk_configuration.security, get_serialized_body=lambda: utils.serialize_request_body( @@ -311,8 +327,10 @@ class Embeddings(BaseSDK): response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response( - operations.CreateEmbeddingsResponse, http_res + operations.CreateEmbeddingsResponseBody, http_res ) + if utils.match_response(http_res, "200", "text/event-stream"): + return http_res.text if utils.match_response(http_res, "400", "application/json"): response_data = unmarshal_json_response( errors.BadRequestResponseErrorData, http_res diff --git a/src/openrouter/operations/__init__.py b/src/openrouter/operations/__init__.py index 82d7f51..3ba8b45 100644 --- a/src/openrouter/operations/__init__.py +++ b/src/openrouter/operations/__init__.py @@ -45,6 +45,8 @@ if TYPE_CHECKING: CreateEmbeddingsRequest, CreateEmbeddingsRequestTypedDict, CreateEmbeddingsResponse, + CreateEmbeddingsResponseBody, + CreateEmbeddingsResponseBodyTypedDict, CreateEmbeddingsResponseTypedDict, Embedding, EmbeddingTypedDict, @@ -98,12 +100,7 @@ if TYPE_CHECKING: ExchangeAuthCodeForAPIKeyResponse, ExchangeAuthCodeForAPIKeyResponseTypedDict, ) - from .getcredits import ( - GetCreditsData, - GetCreditsDataTypedDict, - GetCreditsResponse, - GetCreditsResponseTypedDict, - ) + from .getcredits import GetCreditsResponse, GetCreditsResponseTypedDict from .getcurrentkey import ( GetCurrentKeyData, GetCurrentKeyDataTypedDict, @@ -219,6 +216,8 @@ __all__ = [ "CreateEmbeddingsRequest", "CreateEmbeddingsRequestTypedDict", "CreateEmbeddingsResponse", + "CreateEmbeddingsResponseBody", + "CreateEmbeddingsResponseBodyTypedDict", "CreateEmbeddingsResponseTypedDict", "CreateKeysData", "CreateKeysDataTypedDict", @@ -243,8 +242,6 @@ __all__ = [ "ExchangeAuthCodeForAPIKeyRequestTypedDict", "ExchangeAuthCodeForAPIKeyResponse", "ExchangeAuthCodeForAPIKeyResponseTypedDict", - "GetCreditsData", - "GetCreditsDataTypedDict", "GetCreditsResponse", "GetCreditsResponseTypedDict", "GetCurrentKeyData", @@ -373,6 +370,8 @@ _dynamic_imports: dict[str, str] = { "CreateEmbeddingsRequest": ".createembeddings", "CreateEmbeddingsRequestTypedDict": ".createembeddings", "CreateEmbeddingsResponse": ".createembeddings", + "CreateEmbeddingsResponseBody": ".createembeddings", + "CreateEmbeddingsResponseBodyTypedDict": ".createembeddings", "CreateEmbeddingsResponseTypedDict": ".createembeddings", "Embedding": ".createembeddings", "EmbeddingTypedDict": ".createembeddings", @@ -417,8 +416,6 @@ _dynamic_imports: dict[str, str] = { "ExchangeAuthCodeForAPIKeyRequestTypedDict": ".exchangeauthcodeforapikey", "ExchangeAuthCodeForAPIKeyResponse": ".exchangeauthcodeforapikey", "ExchangeAuthCodeForAPIKeyResponseTypedDict": ".exchangeauthcodeforapikey", - "GetCreditsData": ".getcredits", - "GetCreditsDataTypedDict": ".getcredits", "GetCreditsResponse": ".getcredits", "GetCreditsResponseTypedDict": ".getcredits", "GetCurrentKeyData": ".getcurrentkey", diff --git a/src/openrouter/operations/createembeddings.py b/src/openrouter/operations/createembeddings.py index c200370..b184d5a 100644 --- a/src/openrouter/operations/createembeddings.py +++ b/src/openrouter/operations/createembeddings.py @@ -395,7 +395,7 @@ class Usage(BaseModel): cost: Optional[float] = None -class CreateEmbeddingsResponseTypedDict(TypedDict): +class CreateEmbeddingsResponseBodyTypedDict(TypedDict): r"""Embedding response""" object: Object @@ -405,7 +405,7 @@ class CreateEmbeddingsResponseTypedDict(TypedDict): usage: NotRequired[UsageTypedDict] -class CreateEmbeddingsResponse(BaseModel): +class CreateEmbeddingsResponseBody(BaseModel): r"""Embedding response""" object: Object @@ -417,3 +417,14 @@ class CreateEmbeddingsResponse(BaseModel): id: Optional[str] = None usage: Optional[Usage] = None + + +CreateEmbeddingsResponseTypedDict = TypeAliasType( + "CreateEmbeddingsResponseTypedDict", + Union[CreateEmbeddingsResponseBodyTypedDict, str], +) + + +CreateEmbeddingsResponse = TypeAliasType( + "CreateEmbeddingsResponse", Union[CreateEmbeddingsResponseBody, str] +) diff --git a/src/openrouter/operations/getcredits.py b/src/openrouter/operations/getcredits.py index 8cab52d..9719016 100644 --- a/src/openrouter/operations/getcredits.py +++ b/src/openrouter/operations/getcredits.py @@ -5,28 +5,9 @@ from openrouter.types import BaseModel from typing_extensions import TypedDict -class GetCreditsDataTypedDict(TypedDict): - total_credits: float - r"""Total credits purchased""" - total_usage: float - r"""Total credits used""" - - -class GetCreditsData(BaseModel): - total_credits: float - r"""Total credits purchased""" - - total_usage: float - r"""Total credits used""" - - class GetCreditsResponseTypedDict(TypedDict): r"""Total credits purchased and used""" - data: GetCreditsDataTypedDict - class GetCreditsResponse(BaseModel): r"""Total credits purchased and used""" - - data: GetCreditsData diff --git a/src/openrouter/operations/getparameters.py b/src/openrouter/operations/getparameters.py index 14349a8..18da669 100644 --- a/src/openrouter/operations/getparameters.py +++ b/src/openrouter/operations/getparameters.py @@ -38,14 +38,12 @@ GetParametersProvider = Union[ "AionLabs", "Alibaba", "Amazon Bedrock", - "Amazon Nova", "Anthropic", - "Arcee AI", + "Arcee", "AtlasCloud", "Avian", "Azure", "BaseTen", - "BytePlus", "Black Forest Labs", "Cerebras", "Chutes", @@ -60,7 +58,6 @@ GetParametersProvider = Union[ "Fireworks", "Friendli", "GMICloud", - "GoPomelo", "Google", "Google AI Studio", "Groq", @@ -91,7 +88,6 @@ GetParametersProvider = Union[ "SambaNova", "SiliconFlow", "Stealth", - "StreamLake", "Switchpoint", "Targon", "Together", diff --git a/src/openrouter/operations/updatekeys.py b/src/openrouter/operations/updatekeys.py index bf3bf90..7f81066 100644 --- a/src/openrouter/operations/updatekeys.py +++ b/src/openrouter/operations/updatekeys.py @@ -105,7 +105,7 @@ class UpdateKeysRequestBody(BaseModel): class UpdateKeysRequestTypedDict(TypedDict): hash: str r"""The hash identifier of the API key to update""" - body: UpdateKeysRequestBodyTypedDict + request_body: UpdateKeysRequestBodyTypedDict class UpdateKeysRequest(BaseModel): @@ -114,7 +114,7 @@ class UpdateKeysRequest(BaseModel): ] r"""The hash identifier of the API key to update""" - body: Annotated[ + request_body: Annotated[ UpdateKeysRequestBody, FieldMetadata(request=RequestMetadata(media_type="application/json")), ] diff --git a/src/openrouter/responses.py b/src/openrouter/responses.py index fba3823..85701ff 100644 --- a/src/openrouter/responses.py +++ b/src/openrouter/responses.py @@ -69,7 +69,8 @@ class Responses(BaseSDK): include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET, background: OptionalNullable[bool] = UNSET, safety_identifier: OptionalNullable[str] = UNSET, - service_tier: Optional[components.ServiceTier] = "auto", + store: OptionalNullable[bool] = UNSET, + service_tier: OptionalNullable[components.ServiceTier] = UNSET, truncation: OptionalNullable[components.Truncation] = UNSET, stream: Union[Literal[False], None] = None, provider: OptionalNullable[ @@ -108,6 +109,7 @@ class Responses(BaseSDK): :param include: :param background: :param safety_identifier: + :param store: :param service_tier: :param truncation: :param stream: @@ -172,7 +174,8 @@ class Responses(BaseSDK): include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET, background: OptionalNullable[bool] = UNSET, safety_identifier: OptionalNullable[str] = UNSET, - service_tier: Optional[components.ServiceTier] = "auto", + store: OptionalNullable[bool] = UNSET, + service_tier: OptionalNullable[components.ServiceTier] = UNSET, truncation: OptionalNullable[components.Truncation] = UNSET, stream: Literal[True], provider: OptionalNullable[ @@ -211,6 +214,7 @@ class Responses(BaseSDK): :param include: :param background: :param safety_identifier: + :param store: :param service_tier: :param truncation: :param stream: @@ -274,7 +278,8 @@ class Responses(BaseSDK): include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET, background: OptionalNullable[bool] = UNSET, safety_identifier: OptionalNullable[str] = UNSET, - service_tier: Optional[components.ServiceTier] = "auto", + store: OptionalNullable[bool] = UNSET, + service_tier: OptionalNullable[components.ServiceTier] = UNSET, truncation: OptionalNullable[components.Truncation] = UNSET, stream: Optional[bool] = False, provider: OptionalNullable[ @@ -313,6 +318,7 @@ class Responses(BaseSDK): :param include: :param background: :param safety_identifier: + :param store: :param service_tier: :param truncation: :param stream: @@ -368,6 +374,7 @@ class Responses(BaseSDK): include=include, background=background, safety_identifier=safety_identifier, + store=store, service_tier=service_tier, truncation=truncation, stream=stream, @@ -620,7 +627,8 @@ class Responses(BaseSDK): include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET, background: OptionalNullable[bool] = UNSET, safety_identifier: OptionalNullable[str] = UNSET, - service_tier: Optional[components.ServiceTier] = "auto", + store: OptionalNullable[bool] = UNSET, + service_tier: OptionalNullable[components.ServiceTier] = UNSET, truncation: OptionalNullable[components.Truncation] = UNSET, stream: Union[Literal[False], None] = None, provider: OptionalNullable[ @@ -659,6 +667,7 @@ class Responses(BaseSDK): :param include: :param background: :param safety_identifier: + :param store: :param service_tier: :param truncation: :param stream: @@ -723,7 +732,8 @@ class Responses(BaseSDK): include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET, background: OptionalNullable[bool] = UNSET, safety_identifier: OptionalNullable[str] = UNSET, - service_tier: Optional[components.ServiceTier] = "auto", + store: OptionalNullable[bool] = UNSET, + service_tier: OptionalNullable[components.ServiceTier] = UNSET, truncation: OptionalNullable[components.Truncation] = UNSET, stream: Literal[True], provider: OptionalNullable[ @@ -762,6 +772,7 @@ class Responses(BaseSDK): :param include: :param background: :param safety_identifier: + :param store: :param service_tier: :param truncation: :param stream: @@ -825,7 +836,8 @@ class Responses(BaseSDK): include: OptionalNullable[List[components.OpenAIResponsesIncludable]] = UNSET, background: OptionalNullable[bool] = UNSET, safety_identifier: OptionalNullable[str] = UNSET, - service_tier: Optional[components.ServiceTier] = "auto", + store: OptionalNullable[bool] = UNSET, + service_tier: OptionalNullable[components.ServiceTier] = UNSET, truncation: OptionalNullable[components.Truncation] = UNSET, stream: Optional[bool] = False, provider: OptionalNullable[ @@ -864,6 +876,7 @@ class Responses(BaseSDK): :param include: :param background: :param safety_identifier: + :param store: :param service_tier: :param truncation: :param stream: @@ -919,6 +932,7 @@ class Responses(BaseSDK): include=include, background=background, safety_identifier=safety_identifier, + store=store, service_tier=service_tier, truncation=truncation, stream=stream,