diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 3056541d..b4f092fd 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,19 +1,19 @@ lockVersion: 2.0.0 id: c48cf606-fb42-4a45-9c23-8f0555307828 management: - docChecksum: 7021fe5b184fc767cdca7d6341eef638 + docChecksum: 0348498ce50592054d5ca7fca193e910 docVersion: 1.0.0 speakeasyVersion: 1.803.2 generationVersion: 2.950.13 - releaseVersion: 1.3.105 - configChecksum: f6b1d0678e999163af01dfbaa9c23acc + releaseVersion: 1.3.106 + configChecksum: f74db2f40ee6cd35c7cc6c73f4c7deea repoURL: https://github.com/OpenRouterTeam/python-sdk.git installationURL: https://github.com/OpenRouterTeam/python-sdk.git published: true persistentEdits: - generation_id: 0dbe2079-841d-4be1-b585-ea25ed80cc51 - pristine_commit_hash: 300b132576e6f9a25a70f86fdd969f8be8475df7 - pristine_tree_hash: 17295cc446a504bd5904e7e5b7be8072ce716da5 + generation_id: f35772b0-b463-455e-95c7-89965e9204b1 + pristine_commit_hash: 66151a3ae3ddf1cb68e803eda4b1ae93ed83edd4 + pristine_tree_hash: de5b42899fb6aad917a1fccd9e40c6523af8da79 features: python: acceptHeaders: 3.0.0 @@ -2716,8 +2716,8 @@ trackedFiles: pristine_git_object: 9029c97640e540a981dd3cf7ab6810045016da3b docs/components/createprivateproviderrequest.mdx: id: a3bd4b4c18b8 - last_write_checksum: sha1:2ace8b457c65d4784fb0cb4b51d076bb22cc2e7a - pristine_git_object: 0fba9adc191c92866416ec43f826bede1b3d16f2 + last_write_checksum: sha1:cfe8dafcff34dbeef2379ef1743b4d52d888ddeb + pristine_git_object: b9240ca7ac6835f581bbcd141251394208672b46 docs/components/createscimgroupmappingrequest.mdx: id: 652e24fba424 last_write_checksum: sha1:68885a75c254af579f1503da026266da3b9646c5 @@ -6724,16 +6724,8 @@ trackedFiles: pristine_git_object: 26932977bfd817ac0df95b9b647813ab962476d9 docs/components/privateprovider.mdx: id: 0671f6003692 - last_write_checksum: sha1:1624ee016d2a78168dd230f474ad7dd7a0a5b08b - pristine_git_object: d4a3b60344c175eb01e86f4180a7410034dde337 - docs/components/privateproviderdatapolicy.mdx: - id: b35b9214bc7e - last_write_checksum: sha1:d33353a373eae01c88ece5e251b3b49aa4445721 - pristine_git_object: 3e8025b360d27b6bde60757a4d05c9824cf7727e - docs/components/privateproviderdatapolicy1.mdx: - id: f1314f940e4f - last_write_checksum: sha1:80f415a242cf20067f1fac70dc892670fa86242a - pristine_git_object: b0987792c6d5f499284420482c421812a2fd20f0 + last_write_checksum: sha1:80809845ff6b0268fc2b31d0c7188bf074175cbc + pristine_git_object: 6c3e7e5d4da71c9aa3052bf628a98a37de57a648 docs/components/profile.mdx: id: cb682ce5da89 last_write_checksum: sha1:4cf126470a616a8097d53d721fbc5b50ca2a5495 @@ -8364,12 +8356,8 @@ trackedFiles: pristine_git_object: 22b45d12df9995c529f424dae56dd0b754dece10 docs/components/updateprivateproviderrequest.mdx: id: c92cb845b7bd - last_write_checksum: sha1:9d2454f828b96cf7fbdc722785ec42a439db146b - pristine_git_object: 27e83938288180adc6fcf53e98f7aaf4c48e1a08 - docs/components/updateprivateproviderrequestdatapolicy.mdx: - id: 97fea554de03 - last_write_checksum: sha1:05c0c9f25f25a7bec44056a6dabc3b3f1c1a7ceb - pristine_git_object: 15a807bfd555edbd55e535bcdbf81f219be5c1b4 + last_write_checksum: sha1:875fca5ed0fa7a2d1ac434a4d761bbbddbe92350 + pristine_git_object: 7663d54e11f6207bcff504a1b954a3367d5952be docs/components/updatescimgroupmappingrequest.mdx: id: 4318f4ed22f5 last_write_checksum: sha1:61c181d9a5b51e93c5b357176082b2f6a60b1dca @@ -9160,12 +9148,12 @@ trackedFiles: pristine_git_object: ebb2f4ae7cd1336a682bff81f666b2b6c8d95c6b docs/operations/createprivateproviderrequest.mdx: id: f17089be3d7d - last_write_checksum: sha1:0ead770d5c650bb7b562fb301c0d23d2288d89d9 - pristine_git_object: 3d14c6582bf7986c4f43bf7e68e80bbdb5903305 + last_write_checksum: sha1:620c6bc9326cf85a8ba762a580889c47e96ce670 + pristine_git_object: 16aab363c2a3b36f8cf2cd7745023ed3dda04e94 docs/operations/createprivateproviderresponse.mdx: id: 3891f6f3111f - last_write_checksum: sha1:c6670127d56dca8751fa2d7017fd3c236367af40 - pristine_git_object: 87fe5420d27a9ca954d3b556012f963efe3e24d0 + last_write_checksum: sha1:5b3d47af341782fa085bd5bbeb3d9c6d88e7a4bc + pristine_git_object: c2c0423e97d052425924f40f161f74c18ea62a1c docs/operations/creatererankglobals.mdx: id: 4cb9d6ca73a4 last_write_checksum: sha1:cb0c479b4721f6710af00515cf1eda5f2d3e8100 @@ -9700,8 +9688,8 @@ trackedFiles: pristine_git_object: 47bccd5fef28ab0bfd6c54313e1683fd8ead7eb7 docs/operations/getprivateproviderresponse.mdx: id: 098edc2a4604 - last_write_checksum: sha1:6951ac099bda88c82e711332d2172113d0855b88 - pristine_git_object: 3ff04d8ae44395f6c9cc402419be914bda1a7fe8 + last_write_checksum: sha1:7f67ba82347a3f7c30d4814a60723ee10a51deb7 + pristine_git_object: 8f5d5326236422c44420739f09497dd33ce6c22b docs/operations/getrankingsdailycategory.mdx: id: 37dbd531ea7d last_write_checksum: sha1:3c4ffc04da2558c3357a8759ba9984ea15b58db4 @@ -10548,8 +10536,8 @@ trackedFiles: pristine_git_object: 54fb50257d22757fc9f7eb90192a0308037ef065 docs/operations/updateprivateproviderresponse.mdx: id: cf7ad230efb4 - last_write_checksum: sha1:1403a72062231172d28f0a44f662404497fe115d - pristine_git_object: cf3260159a8668a763f2ed4e74d9b8266130acf2 + last_write_checksum: sha1:757f476297a0d392c6b5103ac97ae1544ae6f005 + pristine_git_object: a03220efbaa6e0f823a3971830361545f956ab39 docs/operations/updatescimgroupmappingglobals.mdx: id: 01643bdf3b7d last_write_checksum: sha1:f45629b1448695fcb9d16b74af5a9af30ae5edd7 @@ -10716,8 +10704,8 @@ trackedFiles: pristine_git_object: 4b496d94c6129d50b35fd1d6787afac16f9e49d4 docs/sdks/privateproviders/README.mdx: id: 517c31195442 - last_write_checksum: sha1:74fdf30e8e62cb868baaee363c57d8e93626cc44 - pristine_git_object: 8840f2ed0135779fe19fb9f0c20212f5c3cc2067 + last_write_checksum: sha1:22379f526020ffa2f754e48de54a7e641778c14e + pristine_git_object: 98256a265d17004ddd9ee1f62974e801deac6849 docs/sdks/providers/README.mdx: id: 5ea9af111324 last_write_checksum: sha1:782a6fe2f68c7e03c0496ce0e83cdc3f5a1512f0 @@ -10768,8 +10756,8 @@ trackedFiles: pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:54b99d324db9efe50e290ce6b0e3972bd9b19941 - pristine_git_object: eee4fbe981c6a96891c2e9e85fe9cba2f3b26cd3 + last_write_checksum: sha1:5647b9125853978d56fa11b6a81da2f6b9e2d766 + pristine_git_object: 68caafbd4dfd552644783adffeb39d0cfef2fccc scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54 @@ -10796,8 +10784,8 @@ trackedFiles: pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137 src/openrouter/_version.py: id: d8d15ad6c586 - last_write_checksum: sha1:77a9090ce9a36b990370abbdffe21a2deac21d20 - pristine_git_object: 82fd6be23091771ee11b1c8ee59edc48e404ecad + last_write_checksum: sha1:85fe7f3d39b4580f54c27d6fe0db4e2abfb7fd29 + pristine_git_object: 121dc3a9ebf29d34d5fbf68165b275fa8b428520 src/openrouter/alpha.py: id: 306c4d93308d last_write_checksum: sha1:80cc0f39649445431cc2247ed0e0765438467766 @@ -10844,8 +10832,8 @@ trackedFiles: pristine_git_object: ad3d247954547814054c01989a2dff3d12b3e4e1 src/openrouter/components/__init__.py: id: 81754e97b3f4 - last_write_checksum: sha1:0306d5fda8ea78f931eacbd7e470ca26b626f5e8 - pristine_git_object: 47676c451dd3c8bd1af0e2864b65641ea1f7c3ab + last_write_checksum: sha1:57b970c686b0bce1d7e6c2c73f5c3d293546e2d7 + pristine_git_object: ff853715718d1b1b754a5162449e38a2dff4a203 src/openrouter/components/aabenchmarkentry.py: id: e2e0f0b48c82 last_write_checksum: sha1:fab4d9a24d2cea937bb749d46c5f83941e99d65c @@ -11988,8 +11976,8 @@ trackedFiles: pristine_git_object: 2648161b1a975eaa62fcaaec7d011dabc15b6b79 src/openrouter/components/createprivateproviderrequest.py: id: 3ed3903ac816 - last_write_checksum: sha1:ffc358983f3b1479a537d2c052e55f16cf33bb29 - pristine_git_object: 2feb021cd9158d06e6005c5a0a6f3bd9db0e748b + last_write_checksum: sha1:bda5ac4176e65ec4e8ddb3821649d03211b5b854 + pristine_git_object: 01322409c7a9668379cbdf802a87b9121ac5ec0e src/openrouter/components/createscimgroupmappingrequest.py: id: 57d83beb2d2d last_write_checksum: sha1:152e425925cc126310cee52fb6a98f6187a09261 @@ -13512,12 +13500,8 @@ trackedFiles: pristine_git_object: 6e8b78ced26a0853ead11ec27400f8bf98f1fa83 src/openrouter/components/privateprovider.py: id: 958158825a77 - last_write_checksum: sha1:b7d1378bb1776ee2de3ca395ca1b4b2acfa111ea - pristine_git_object: 2e3df76124659f77cd85f95e4a27164db21d668a - src/openrouter/components/privateproviderdatapolicy.py: - id: a1fb1200b4cf - last_write_checksum: sha1:0ad8732d32ae4b4bbcf002c9ceecfb70e952aeb1 - pristine_git_object: 90e716a2f187ba0b97ae5b998fc48a073b9d0187 + last_write_checksum: sha1:979043710353ee70e9c3910feb272cfddc80ca16 + pristine_git_object: 08c755ff5638a0ac369beab768f38cb16d3a9083 src/openrouter/components/promptcachebreakpoint.py: id: f1e589a13300 last_write_checksum: sha1:f39a912f18e3d27aa9488700e981f282f585d58b @@ -14208,8 +14192,8 @@ trackedFiles: pristine_git_object: 4a3a6a0f3ce45aaffa2301eec6b10133bb6e948a src/openrouter/components/updateprivateproviderrequest.py: id: 62230b3a1857 - last_write_checksum: sha1:809dc5656e3ffb16e865a74868cfcf8a14168435 - pristine_git_object: 5aebd7da5985df962db2ad8909e75dcdd105506a + last_write_checksum: sha1:6519b721854aaec8576b50255f67b955f292169b + pristine_git_object: 0af4fdd60e40aa517d5391dd5c89a0891aca4b97 src/openrouter/components/updatescimgroupmappingrequest.py: id: e014a151bfdd last_write_checksum: sha1:cc62d7f12e168cbe7899f9d96144a480c32159e1 @@ -15188,8 +15172,8 @@ trackedFiles: pristine_git_object: 4407f1f32fc228b47344082d322d1502fc3fbcf1 src/openrouter/private_providers.py: id: d2b888527155 - last_write_checksum: sha1:de9893f9d5810dc90202ea32d1b676b81d97e8ef - pristine_git_object: f65b0d06ec3f02c21ab85ed59d00d1076aa7a10b + last_write_checksum: sha1:c795b1d9ab2dc4a86055bb1e32430e3832be6cc2 + pristine_git_object: e3ac9adcf59f2e4e373959adf05d1a6e557f2287 src/openrouter/providers.py: id: debc4c48f149 last_write_checksum: sha1:11dbc607825edee8dcc84b39ee8171e097c47acf @@ -19738,7 +19722,7 @@ examples: speakeasy-default-list-private-providers: responses: "200": - application/json: {"data": [{"base_url": "https://inference.example.com/v1", "created_at": "2026-10-06T12:00:00.000Z", "data_policy": {"prompt_retention_days": null, "retains_prompts": false, "training": false}, "display_name": "Acme", "name": "Acme", "slug": "acme"}]} + application/json: {"data": [{"base_url": "https://inference.example.com/v1", "created_at": "2026-10-06T12:00:00.000Z", "display_name": "Acme", "name": "Acme", "slug": "acme"}]} "401": application/json: {"error": {"code": 401, "message": "Missing Authentication header"}} "403": @@ -19751,7 +19735,7 @@ examples: application/json: {"name": "Acme"} responses: "201": - application/json: {"data": {"base_url": "https://inference.example.com/v1", "created_at": "2026-10-06T12:00:00.000Z", "data_policy": {"prompt_retention_days": null, "retains_prompts": false, "training": false}, "display_name": "Acme", "name": "Acme", "slug": "acme"}} + application/json: {"data": {"base_url": "https://inference.example.com/v1", "created_at": "2026-10-06T12:00:00.000Z", "display_name": "Acme", "name": "Acme", "slug": "acme"}} "400": application/json: {"error": {"code": 400, "message": "Invalid request parameters"}} "401": @@ -19807,7 +19791,7 @@ examples: slug: "acme" responses: "200": - application/json: {"data": {"base_url": "https://inference.example.com/v1", "created_at": "2026-10-06T12:00:00.000Z", "data_policy": {"prompt_retention_days": null, "retains_prompts": false, "training": false}, "display_name": "Acme", "name": "Acme", "slug": "acme"}} + application/json: {"data": {"base_url": "https://inference.example.com/v1", "created_at": "2026-10-06T12:00:00.000Z", "display_name": "Acme", "name": "Acme", "slug": "acme"}} "401": application/json: {"error": {"code": 401, "message": "Missing Authentication header"}} "403": @@ -19825,7 +19809,7 @@ examples: application/json: {} responses: "200": - application/json: {"data": {"base_url": "https://inference.example.com/v1", "created_at": "2026-10-06T12:00:00.000Z", "data_policy": {"prompt_retention_days": null, "retains_prompts": false, "training": false}, "display_name": "Acme", "name": "Acme", "slug": "acme"}} + application/json: {"data": {"base_url": "https://inference.example.com/v1", "created_at": "2026-10-06T12:00:00.000Z", "display_name": "Acme", "name": "Acme", "slug": "acme"}} "400": application/json: {"error": {"code": 400, "message": "Invalid request parameters"}} "401": @@ -19878,8 +19862,4 @@ examples: "529": application/json: {"error": {"code": 529, "message": "Provider returned error"}} examplesVersion: 1.0.2 -releaseNotes: | - ## Python SDK Changes: - * `open_router.api_keys.list()`: `error.status[403]` **Added** - * `open_router.api_keys.delete()`: `error.status[403]` **Added** - * `open_router.api_keys.get()`: `error.status[403]` **Added** +releaseNotes: "## Python SDK Changes:\n* `open_router.private_providers.list()`: `response.data[].data_policy` **Removed** (Breaking ⚠️)\n* `open_router.private_providers.create()`: \n * `request.data_policy` **Removed** (Breaking ⚠️)\n * `response.data.data_policy` **Removed** (Breaking ⚠️)\n* `open_router.private_providers.get()`: `response.data.data_policy` **Removed** (Breaking ⚠️)\n* `open_router.private_providers.update()`: \n * `request.data_policy` **Removed** (Breaking ⚠️)\n * `response.data.data_policy` **Removed** (Breaking ⚠️)\n" diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 83ed7b1b..2cb74532 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -37,7 +37,7 @@ generation: documentation: mintlify preApplyUnionDiscriminators: true python: - version: 1.3.105 + version: 1.3.106 additionalDependencies: dev: pytest: '>=8.3' diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index cf68acfa..dff4bb9d 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -10550,14 +10550,18 @@ components: - 'data' type: 'object' CreatePrivateProviderRequest: + description: 'A private provider serves only your organization, so its endpoints are recorded as retaining no prompts, training on none and publishing none, and pass every data-policy filter your account or guardrails apply.' + example: + base_url: 'https://inference.example.com/v1' + display_name: 'Acme' + name: 'Acme' + slug: 'acme' properties: base_url: description: 'HTTPS base URL of an OpenAI-compatible API, used by private endpoints under this provider that set no URL of their own. Without it, each endpoint must set its own. Private, internal, metadata and OpenRouter hosts are rejected.' example: 'https://inference.example.com/v1' minLength: 1 type: 'string' - data_policy: - $ref: '#/components/schemas/PrivateProviderDataPolicy' display_name: description: 'Defaults to `name`.' example: 'Acme' @@ -27555,10 +27559,6 @@ components: example: base_url: 'https://inference.example.com/v1' created_at: '2026-10-06T12:00:00.000Z' - data_policy: - prompt_retention_days: null - retains_prompts: false - training: false display_name: 'Acme' name: 'Acme' slug: 'acme' @@ -27572,29 +27572,6 @@ components: - 'null' created_at: type: 'string' - data_policy: - description: 'Your declared data policy, or `null` when none was declared.' - properties: - prompt_retention_days: - description: 'Days prompts are retained. Must be `null` unless `retains_prompts` is true.' - maximum: 3650 - minimum: 1 - type: - - 'integer' - - 'null' - retains_prompts: - description: 'Whether the provider retains prompts or completions.' - type: 'boolean' - training: - description: 'Whether the provider trains on prompts.' - type: 'boolean' - required: - - 'training' - - 'retains_prompts' - - 'prompt_retention_days' - type: - - 'object' - - 'null' display_name: description: 'Human-readable provider name shown in the UI.' example: 'Acme' @@ -27612,34 +27589,8 @@ components: - 'slug' - 'display_name' - 'base_url' - - 'data_policy' - 'created_at' type: 'object' - PrivateProviderDataPolicy: - description: 'Defaults to training on and retaining prompts, the most conservative declaration. Your own declaration; it applies to your own traffic and OpenRouter does not verify it.' - example: - prompt_retention_days: null - retains_prompts: false - training: false - properties: - prompt_retention_days: - description: 'Days prompts are retained. Must be `null` unless `retains_prompts` is true.' - maximum: 3650 - minimum: 1 - type: - - 'integer' - - 'null' - retains_prompts: - description: 'Whether the provider retains prompts or completions.' - type: 'boolean' - training: - description: 'Whether the provider trains on prompts.' - type: 'boolean' - required: - - 'training' - - 'retains_prompts' - - 'prompt_retention_days' - type: 'object' PromptCacheBreakpoint: description: 'Marks an explicit prompt-cache boundary on this content block (OpenAI-style). Everything through the block carrying this marker is part of the candidate cached prefix. Supported natively by OpenAI GPT-5.6 and newer; on providers that use Anthropic-style `cache_control`, OpenRouter converts the marker to that format automatically. `ttl` ("30m" or "12h") overrides the request-level `prompt_cache_options.ttl` for this boundary; 12h writes bill at the higher cache-write rate.' example: @@ -34185,22 +34136,6 @@ components: example: 'https://inference.example.com/v1' minLength: 1 type: 'string' - data_policy: - properties: - prompt_retention_days: - description: 'Days prompts are retained. Must be `null` unless `retains_prompts` is true.' - maximum: 3650 - minimum: 1 - type: - - 'integer' - - 'null' - retains_prompts: - description: 'Whether the provider retains prompts or completions.' - type: 'boolean' - training: - description: 'Whether the provider trains on prompts.' - type: 'boolean' - type: 'object' display_name: example: 'Acme' maxLength: 80 @@ -50853,7 +50788,7 @@ paths: - 'Private Providers' x-speakeasy-name-override: 'get' patch: - description: 'Update a private provider’s details or declared data policy. The name and slug cannot change. Refuses (409) a data-policy change while OpenRouter pins the declared policy on one of its endpoints. [Management key](/docs/guides/overview/auth/management-api-keys) required.' + description: 'Update a private provider’s display name or base URL. The name and slug cannot change, and the data policy is fixed by OpenRouter, so a body with no editable field is rejected (400). [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'updatePrivateProvider' parameters: - in: 'path' diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 5bd50e02..d20f850e 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -2,8 +2,8 @@ speakeasyVersion: 1.803.2 sources: OpenRouter API: sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:6df88d5e094180489883aa48d0d4302a4345d6c8a5ff857760d1b3ee602d84f4 - sourceBlobDigest: sha256:91a03aa9062657bb0682f562c7397d220e8ee8c2822f3304b4af404f0b15d9ff + sourceRevisionDigest: sha256:4d1dc8f0097d9e25c069edf4f0b1f101f378184b33626960190a3177147a4fef + sourceBlobDigest: sha256:c2759c9540c9f84d712ff78ffa7489bccc79efa30eb376bccc05261b20da7810 tags: - latest - 1.0.0 @@ -11,10 +11,10 @@ targets: open-router: source: OpenRouter API sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:6df88d5e094180489883aa48d0d4302a4345d6c8a5ff857760d1b3ee602d84f4 - sourceBlobDigest: sha256:91a03aa9062657bb0682f562c7397d220e8ee8c2822f3304b4af404f0b15d9ff + sourceRevisionDigest: sha256:4d1dc8f0097d9e25c069edf4f0b1f101f378184b33626960190a3177147a4fef + sourceBlobDigest: sha256:c2759c9540c9f84d712ff78ffa7489bccc79efa30eb376bccc05261b20da7810 codeSamplesNamespace: open-router-python-code-samples - codeSamplesRevisionDigest: sha256:cb4d1dc79bddc7075ad1f64a84b0ba52631f172f63538939354591dde37614a6 + codeSamplesRevisionDigest: sha256:318f787a2bd7b0c0c90fc7e446e5514e982319004b2949c0b5fb82c695aeaa42 workflow: workflowVersion: 1.0.0 speakeasyVersion: 1.803.2 diff --git a/RELEASES.md b/RELEASES.md index 5a55336a..723db70d 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -3819,4 +3819,14 @@ Based on: ### Generated - [python v1.3.105] . ### Releases -- [PyPI v1.3.105] https://pypi.org/project/openrouter/1.3.105 - . \ No newline at end of file +- [PyPI v1.3.105] https://pypi.org/project/openrouter/1.3.105 - . + +## 2026-10-31 04:44:50 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.803.2 (2.950.13) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.3.106] . +### Releases +- [PyPI v1.3.106] https://pypi.org/project/openrouter/1.3.106 - . \ No newline at end of file diff --git a/docs/components/createprivateproviderrequest.mdx b/docs/components/createprivateproviderrequest.mdx index 0fba9adc..b9240ca7 100644 --- a/docs/components/createprivateproviderrequest.mdx +++ b/docs/components/createprivateproviderrequest.mdx @@ -2,12 +2,14 @@ title: "CreatePrivateProviderRequest" --- +A private provider serves only your organization, so its endpoints are recorded as retaining no prompts, training on none and publishing none, and pass every data-policy filter your account or guardrails apply. + + ## Fields | Field | Type | Required | Description | Example | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `base_url` | *Optional[str]* | ➖ | HTTPS base URL of an OpenAI-compatible API, used by private endpoints under this provider that set no URL of their own. Without it, each endpoint must set its own. Private, internal, metadata and OpenRouter hosts are rejected. | https://inference.example.com/v1 | -| `data_policy` | [Optional[components.PrivateProviderDataPolicy]](../components/privateproviderdatapolicy.mdx) | ➖ | Defaults to training on and retaining prompts, the most conservative declaration. Your own declaration; it applies to your own traffic and OpenRouter does not verify it. | \{
"prompt_retention_days": null,
"retains_prompts": false,
"training": false
} | | `display_name` | *Optional[str]* | ➖ | Defaults to `name`. | Acme | | `name` | *str* | ✔️ | Provider name, shown in your activity, logs and Broadcast output. 2-64 letters, numbers, spaces, dots, underscores or hyphens. Cannot be changed later. Neither the name nor its slug may match a public provider name or slug (case-insensitive); other customers may use the same name. | Acme | | `slug` | *Optional[str]* | ➖ | 2-64 lowercase letters and numbers, separated by single hyphens. Cannot be changed later. Defaults to the name lowercased, with every run of other characters replaced by a hyphen (`Acme Inference` becomes `acme-inference`). | acme | \ No newline at end of file diff --git a/docs/components/privateprovider.mdx b/docs/components/privateprovider.mdx index d4a3b603..6c3e7e5d 100644 --- a/docs/components/privateprovider.mdx +++ b/docs/components/privateprovider.mdx @@ -8,7 +8,6 @@ title: "PrivateProvider" | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `base_url` | *Nullable[str]* | ✔️ | HTTPS base URL of an OpenAI-compatible API, used by private endpoints under this provider that set no URL of their own. Without it, each endpoint must set its own. Private, internal, metadata and OpenRouter hosts are rejected. | https://inference.example.com/v1 | | `created_at` | *str* | ✔️ | N/A | | -| `data_policy` | [Nullable[components.PrivateProviderDataPolicy1]](../components/privateproviderdatapolicy1.mdx) | ✔️ | Your declared data policy, or `null` when none was declared. | | | `display_name` | *str* | ✔️ | Human-readable provider name shown in the UI. | Acme | | `name` | *str* | ✔️ | Provider name, shown in your activity, logs and Broadcast output. | Acme | | `slug` | *str* | ✔️ | The slug you chose, unique within your account. Use it as `provider_slug` when creating private endpoints and BYOK keys, and in `provider.order`, `only` and `ignore`. | acme | \ No newline at end of file diff --git a/docs/components/privateproviderdatapolicy.mdx b/docs/components/privateproviderdatapolicy.mdx deleted file mode 100644 index 3e8025b3..00000000 --- a/docs/components/privateproviderdatapolicy.mdx +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "PrivateProviderDataPolicy" ---- - -Defaults to training on and retaining prompts, the most conservative declaration. Your own declaration; it applies to your own traffic and OpenRouter does not verify it. - - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -| `prompt_retention_days` | *Nullable[int]* | ✔️ | Days prompts are retained. Must be `null` unless `retains_prompts` is true. | -| `retains_prompts` | *bool* | ✔️ | Whether the provider retains prompts or completions. | -| `training` | *bool* | ✔️ | Whether the provider trains on prompts. | \ No newline at end of file diff --git a/docs/components/privateproviderdatapolicy1.mdx b/docs/components/privateproviderdatapolicy1.mdx deleted file mode 100644 index b0987792..00000000 --- a/docs/components/privateproviderdatapolicy1.mdx +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "PrivateProviderDataPolicy1" ---- - -Your declared data policy, or `null` when none was declared. - - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -| `prompt_retention_days` | *Nullable[int]* | ✔️ | Days prompts are retained. Must be `null` unless `retains_prompts` is true. | -| `retains_prompts` | *bool* | ✔️ | Whether the provider retains prompts or completions. | -| `training` | *bool* | ✔️ | Whether the provider trains on prompts. | \ No newline at end of file diff --git a/docs/components/updateprivateproviderrequest.mdx b/docs/components/updateprivateproviderrequest.mdx index 27e83938..7663d54e 100644 --- a/docs/components/updateprivateproviderrequest.mdx +++ b/docs/components/updateprivateproviderrequest.mdx @@ -7,5 +7,4 @@ title: "UpdatePrivateProviderRequest" | Field | Type | Required | Description | Example | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `base_url` | *Optional[str]* | ➖ | HTTPS base URL of an OpenAI-compatible API, used by private endpoints under this provider that set no URL of their own. Without it, each endpoint must set its own. Private, internal, metadata and OpenRouter hosts are rejected. | https://inference.example.com/v1 | -| `data_policy` | [Optional[components.UpdatePrivateProviderRequestDataPolicy]](../components/updateprivateproviderrequestdatapolicy.mdx) | ➖ | N/A | | | `display_name` | *Optional[str]* | ➖ | N/A | Acme | \ No newline at end of file diff --git a/docs/components/updateprivateproviderrequestdatapolicy.mdx b/docs/components/updateprivateproviderrequestdatapolicy.mdx deleted file mode 100644 index 15a807bf..00000000 --- a/docs/components/updateprivateproviderrequestdatapolicy.mdx +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "UpdatePrivateProviderRequestDataPolicy" ---- - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -| `prompt_retention_days` | *OptionalNullable[int]* | ➖ | Days prompts are retained. Must be `null` unless `retains_prompts` is true. | -| `retains_prompts` | *Optional[bool]* | ➖ | Whether the provider retains prompts or completions. | -| `training` | *Optional[bool]* | ➖ | Whether the provider trains on prompts. | \ No newline at end of file diff --git a/docs/operations/createprivateproviderrequest.mdx b/docs/operations/createprivateproviderrequest.mdx index 3d14c658..16aab363 100644 --- a/docs/operations/createprivateproviderrequest.mdx +++ b/docs/operations/createprivateproviderrequest.mdx @@ -4,9 +4,9 @@ title: "CreatePrivateProviderRequest" ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -| `http_referer` | *Optional[str]* | ➖ | The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
| -| `x_open_router_title` | *Optional[str]* | ➖ | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| -| `x_open_router_categories` | *Optional[str]* | ➖ | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| -| `create_private_provider_request` | [components.CreatePrivateProviderRequest](../components/createprivateproviderrequest.mdx) | ✔️ | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| `http_referer` | *Optional[str]* | ➖ | The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
| | +| `x_open_router_title` | *Optional[str]* | ➖ | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| | +| `x_open_router_categories` | *Optional[str]* | ➖ | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| | +| `create_private_provider_request` | [components.CreatePrivateProviderRequest](../components/createprivateproviderrequest.mdx) | ✔️ | N/A | \{
"base_url": "https://inference.example.com/v1",
"display_name": "Acme",
"name": "Acme",
"slug": "acme"
} | \ No newline at end of file diff --git a/docs/operations/createprivateproviderresponse.mdx b/docs/operations/createprivateproviderresponse.mdx index 87fe5420..c2c0423e 100644 --- a/docs/operations/createprivateproviderresponse.mdx +++ b/docs/operations/createprivateproviderresponse.mdx @@ -7,6 +7,6 @@ The provider was created ## Fields -| Field | Type | Required | Description | Example | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `data` | [components.PrivateProvider](../components/privateprovider.mdx) | ✔️ | N/A | \{
"base_url": "https://inference.example.com/v1",
"created_at": "2026-10-06T12:00:00.000Z",
"data_policy": \{
"prompt_retention_days": null,
"retains_prompts": false,
"training": false
},
"display_name": "Acme",
"name": "Acme",
"slug": "acme"
} | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `data` | [components.PrivateProvider](../components/privateprovider.mdx) | ✔️ | N/A | \{
"base_url": "https://inference.example.com/v1",
"created_at": "2026-10-06T12:00:00.000Z",
"display_name": "Acme",
"name": "Acme",
"slug": "acme"
} | \ No newline at end of file diff --git a/docs/operations/getprivateproviderresponse.mdx b/docs/operations/getprivateproviderresponse.mdx index 3ff04d8a..8f5d5326 100644 --- a/docs/operations/getprivateproviderresponse.mdx +++ b/docs/operations/getprivateproviderresponse.mdx @@ -7,6 +7,6 @@ The private provider ## Fields -| Field | Type | Required | Description | Example | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `data` | [components.PrivateProvider](../components/privateprovider.mdx) | ✔️ | N/A | \{
"base_url": "https://inference.example.com/v1",
"created_at": "2026-10-06T12:00:00.000Z",
"data_policy": \{
"prompt_retention_days": null,
"retains_prompts": false,
"training": false
},
"display_name": "Acme",
"name": "Acme",
"slug": "acme"
} | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `data` | [components.PrivateProvider](../components/privateprovider.mdx) | ✔️ | N/A | \{
"base_url": "https://inference.example.com/v1",
"created_at": "2026-10-06T12:00:00.000Z",
"display_name": "Acme",
"name": "Acme",
"slug": "acme"
} | \ No newline at end of file diff --git a/docs/operations/updateprivateproviderresponse.mdx b/docs/operations/updateprivateproviderresponse.mdx index cf326015..a03220ef 100644 --- a/docs/operations/updateprivateproviderresponse.mdx +++ b/docs/operations/updateprivateproviderresponse.mdx @@ -7,6 +7,6 @@ The updated provider ## Fields -| Field | Type | Required | Description | Example | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `data` | [components.PrivateProvider](../components/privateprovider.mdx) | ✔️ | N/A | \{
"base_url": "https://inference.example.com/v1",
"created_at": "2026-10-06T12:00:00.000Z",
"data_policy": \{
"prompt_retention_days": null,
"retains_prompts": false,
"training": false
},
"display_name": "Acme",
"name": "Acme",
"slug": "acme"
} | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `data` | [components.PrivateProvider](../components/privateprovider.mdx) | ✔️ | N/A | \{
"base_url": "https://inference.example.com/v1",
"created_at": "2026-10-06T12:00:00.000Z",
"display_name": "Acme",
"name": "Acme",
"slug": "acme"
} | \ No newline at end of file diff --git a/docs/sdks/privateproviders/README.mdx b/docs/sdks/privateproviders/README.mdx index 8840f2ed..98256a26 100644 --- a/docs/sdks/privateproviders/README.mdx +++ b/docs/sdks/privateproviders/README.mdx @@ -96,7 +96,6 @@ with OpenRouter( | `x_open_router_title` | *Optional[str]* | ➖ | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| | | `x_open_router_categories` | *Optional[str]* | ➖ | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| | | `base_url` | *Optional[str]* | ➖ | HTTPS base URL of an OpenAI-compatible API, used by private endpoints under this provider that set no URL of their own. Without it, each endpoint must set its own. Private, internal, metadata and OpenRouter hosts are rejected. | https://inference.example.com/v1 | -| `data_policy` | [Optional[components.PrivateProviderDataPolicy]](../../components/privateproviderdatapolicy.mdx) | ➖ | Defaults to training on and retaining prompts, the most conservative declaration. Your own declaration; it applies to your own traffic and OpenRouter does not verify it. | \{
"prompt_retention_days": null,
"retains_prompts": false,
"training": false
} | | `display_name` | *Optional[str]* | ➖ | Defaults to `name`. | Acme | | `slug` | *Optional[str]* | ➖ | 2-64 lowercase letters and numbers, separated by single hyphens. Cannot be changed later. Defaults to the name lowercased, with every run of other characters replaced by a hyphen (`Acme Inference` becomes `acme-inference`). | acme | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | ➖ | Configuration to override the default retry behavior of the client. | | @@ -227,7 +226,7 @@ with OpenRouter( ## update -Update a private provider’s details or declared data policy. The name and slug cannot change. Refuses (409) a data-policy change while OpenRouter pins the declared policy on one of its endpoints. [Management key](/docs/guides/overview/auth/management-api-keys) required. +Update a private provider’s display name or base URL. The name and slug cannot change, and the data policy is fixed by OpenRouter, so a body with no editable field is rejected (400). [Management key](/docs/guides/overview/auth/management-api-keys) required. ### Example Usage @@ -259,7 +258,6 @@ with OpenRouter( | `x_open_router_title` | *Optional[str]* | ➖ | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| | | `x_open_router_categories` | *Optional[str]* | ➖ | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| | | `base_url` | *Optional[str]* | ➖ | HTTPS base URL of an OpenAI-compatible API, used by private endpoints under this provider that set no URL of their own. Without it, each endpoint must set its own. Private, internal, metadata and OpenRouter hosts are rejected. | https://inference.example.com/v1 | -| `data_policy` | [Optional[components.UpdatePrivateProviderRequestDataPolicy]](../../components/updateprivateproviderrequestdatapolicy.mdx) | ➖ | N/A | | | `display_name` | *Optional[str]* | ➖ | N/A | Acme | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | ➖ | Configuration to override the default retry behavior of the client. | | diff --git a/pyproject.toml b/pyproject.toml index eee4fbe9..68caafbd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "openrouter" -version = "1.3.105" +version = "1.3.106" 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 82fd6be2..121dc3a9 100644 --- a/src/openrouter/_version.py +++ b/src/openrouter/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "openrouter" -__version__: str = "1.3.105" +__version__: str = "1.3.106" __openapi_doc_version__: str = "1.0.0" __gen_version__: str = "2.950.13" -__user_agent__: str = "speakeasy-sdk/python 1.3.105 2.950.13 1.0.0 openrouter" +__user_agent__: str = "speakeasy-sdk/python 1.3.106 2.950.13 1.0.0 openrouter" try: if __package__ is not None: diff --git a/src/openrouter/components/__init__.py b/src/openrouter/components/__init__.py index 47676c45..ff853715 100644 --- a/src/openrouter/components/__init__.py +++ b/src/openrouter/components/__init__.py @@ -3757,16 +3757,7 @@ PrivateEndpointValidationResponse, PrivateEndpointValidationResponseTypedDict, ) - from .privateprovider import ( - PrivateProvider, - PrivateProviderDataPolicy1, - PrivateProviderDataPolicy1TypedDict, - PrivateProviderTypedDict, - ) - from .privateproviderdatapolicy import ( - PrivateProviderDataPolicy, - PrivateProviderDataPolicyTypedDict, - ) + from .privateprovider import PrivateProvider, PrivateProviderTypedDict from .promptcachebreakpoint import ( PromptCacheBreakpoint, PromptCacheBreakpointMode, @@ -4469,8 +4460,6 @@ ) from .updateprivateproviderrequest import ( UpdatePrivateProviderRequest, - UpdatePrivateProviderRequestDataPolicy, - UpdatePrivateProviderRequestDataPolicyTypedDict, UpdatePrivateProviderRequestTypedDict, ) from .updatescimgroupmappingrequest import ( @@ -7343,10 +7332,6 @@ "PrivateEndpointValidationResponseTypedDict", "PrivateEndpointValidationTypedDict", "PrivateProvider", - "PrivateProviderDataPolicy", - "PrivateProviderDataPolicy1", - "PrivateProviderDataPolicy1TypedDict", - "PrivateProviderDataPolicyTypedDict", "PrivateProviderTypedDict", "Profile", "PromptCacheBreakpoint", @@ -8036,8 +8021,6 @@ "UpdatePrivateEndpointSettingsRequestToolChoiceTypedDict", "UpdatePrivateEndpointSettingsRequestTypedDict", "UpdatePrivateProviderRequest", - "UpdatePrivateProviderRequestDataPolicy", - "UpdatePrivateProviderRequestDataPolicyTypedDict", "UpdatePrivateProviderRequestTypedDict", "UpdateScimGroupMappingRequest", "UpdateScimGroupMappingRequestRole", @@ -10961,11 +10944,7 @@ "PrivateEndpointValidationResponse": ".privateendpointvalidationresponse", "PrivateEndpointValidationResponseTypedDict": ".privateendpointvalidationresponse", "PrivateProvider": ".privateprovider", - "PrivateProviderDataPolicy1": ".privateprovider", - "PrivateProviderDataPolicy1TypedDict": ".privateprovider", "PrivateProviderTypedDict": ".privateprovider", - "PrivateProviderDataPolicy": ".privateproviderdatapolicy", - "PrivateProviderDataPolicyTypedDict": ".privateproviderdatapolicy", "PromptCacheBreakpoint": ".promptcachebreakpoint", "PromptCacheBreakpointMode": ".promptcachebreakpoint", "PromptCacheBreakpointTypedDict": ".promptcachebreakpoint", @@ -11477,8 +11456,6 @@ "UpdatePrivateEndpointSettingsRequestToolChoiceTypedDict": ".updateprivateendpointsettingsrequest", "UpdatePrivateEndpointSettingsRequestTypedDict": ".updateprivateendpointsettingsrequest", "UpdatePrivateProviderRequest": ".updateprivateproviderrequest", - "UpdatePrivateProviderRequestDataPolicy": ".updateprivateproviderrequest", - "UpdatePrivateProviderRequestDataPolicyTypedDict": ".updateprivateproviderrequest", "UpdatePrivateProviderRequestTypedDict": ".updateprivateproviderrequest", "UpdateScimGroupMappingRequest": ".updatescimgroupmappingrequest", "UpdateScimGroupMappingRequestRole": ".updatescimgroupmappingrequest", diff --git a/src/openrouter/components/createprivateproviderrequest.py b/src/openrouter/components/createprivateproviderrequest.py index 2feb021c..01322409 100644 --- a/src/openrouter/components/createprivateproviderrequest.py +++ b/src/openrouter/components/createprivateproviderrequest.py @@ -1,10 +1,6 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .privateproviderdatapolicy import ( - PrivateProviderDataPolicy, - PrivateProviderDataPolicyTypedDict, -) from openrouter.types import BaseModel, UNSET_SENTINEL from pydantic import model_serializer from typing import Optional @@ -12,12 +8,12 @@ class CreatePrivateProviderRequestTypedDict(TypedDict): + r"""A private provider serves only your organization, so its endpoints are recorded as retaining no prompts, training on none and publishing none, and pass every data-policy filter your account or guardrails apply.""" + name: str r"""Provider name, shown in your activity, logs and Broadcast output. 2-64 letters, numbers, spaces, dots, underscores or hyphens. Cannot be changed later. Neither the name nor its slug may match a public provider name or slug (case-insensitive); other customers may use the same name.""" base_url: NotRequired[str] r"""HTTPS base URL of an OpenAI-compatible API, used by private endpoints under this provider that set no URL of their own. Without it, each endpoint must set its own. Private, internal, metadata and OpenRouter hosts are rejected.""" - data_policy: NotRequired[PrivateProviderDataPolicyTypedDict] - r"""Defaults to training on and retaining prompts, the most conservative declaration. Your own declaration; it applies to your own traffic and OpenRouter does not verify it.""" display_name: NotRequired[str] r"""Defaults to `name`.""" slug: NotRequired[str] @@ -25,15 +21,14 @@ class CreatePrivateProviderRequestTypedDict(TypedDict): class CreatePrivateProviderRequest(BaseModel): + r"""A private provider serves only your organization, so its endpoints are recorded as retaining no prompts, training on none and publishing none, and pass every data-policy filter your account or guardrails apply.""" + name: str r"""Provider name, shown in your activity, logs and Broadcast output. 2-64 letters, numbers, spaces, dots, underscores or hyphens. Cannot be changed later. Neither the name nor its slug may match a public provider name or slug (case-insensitive); other customers may use the same name.""" base_url: Optional[str] = None r"""HTTPS base URL of an OpenAI-compatible API, used by private endpoints under this provider that set no URL of their own. Without it, each endpoint must set its own. Private, internal, metadata and OpenRouter hosts are rejected.""" - data_policy: Optional[PrivateProviderDataPolicy] = None - r"""Defaults to training on and retaining prompts, the most conservative declaration. Your own declaration; it applies to your own traffic and OpenRouter does not verify it.""" - display_name: Optional[str] = None r"""Defaults to `name`.""" @@ -42,7 +37,7 @@ class CreatePrivateProviderRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["base_url", "data_policy", "display_name", "slug"]) + optional_fields = set(["base_url", "display_name", "slug"]) serialized = handler(self) m = {} diff --git a/src/openrouter/components/privateprovider.py b/src/openrouter/components/privateprovider.py index 2e3df761..08c755ff 100644 --- a/src/openrouter/components/privateprovider.py +++ b/src/openrouter/components/privateprovider.py @@ -6,50 +6,10 @@ from typing_extensions import TypedDict -class PrivateProviderDataPolicy1TypedDict(TypedDict): - r"""Your declared data policy, or `null` when none was declared.""" - - prompt_retention_days: Nullable[int] - r"""Days prompts are retained. Must be `null` unless `retains_prompts` is true.""" - retains_prompts: bool - r"""Whether the provider retains prompts or completions.""" - training: bool - r"""Whether the provider trains on prompts.""" - - -class PrivateProviderDataPolicy1(BaseModel): - r"""Your declared data policy, or `null` when none was declared.""" - - prompt_retention_days: Nullable[int] - r"""Days prompts are retained. Must be `null` unless `retains_prompts` is true.""" - - retains_prompts: bool - r"""Whether the provider retains prompts or completions.""" - - training: bool - r"""Whether the provider trains on prompts.""" - - @model_serializer(mode="wrap") - def serialize_model(self, handler): - serialized = handler(self) - m = {} - - for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) - - if val != UNSET_SENTINEL: - m[k] = val - - return m - - class PrivateProviderTypedDict(TypedDict): base_url: Nullable[str] r"""HTTPS base URL of an OpenAI-compatible API, used by private endpoints under this provider that set no URL of their own. Without it, each endpoint must set its own. Private, internal, metadata and OpenRouter hosts are rejected.""" created_at: str - data_policy: Nullable[PrivateProviderDataPolicy1TypedDict] - r"""Your declared data policy, or `null` when none was declared.""" display_name: str r"""Human-readable provider name shown in the UI.""" name: str @@ -64,9 +24,6 @@ class PrivateProvider(BaseModel): created_at: str - data_policy: Nullable[PrivateProviderDataPolicy1] - r"""Your declared data policy, or `null` when none was declared.""" - display_name: str r"""Human-readable provider name shown in the UI.""" diff --git a/src/openrouter/components/privateproviderdatapolicy.py b/src/openrouter/components/privateproviderdatapolicy.py deleted file mode 100644 index 90e716a2..00000000 --- a/src/openrouter/components/privateproviderdatapolicy.py +++ /dev/null @@ -1,44 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" - -from __future__ import annotations -from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL -from pydantic import model_serializer -from typing_extensions import TypedDict - - -class PrivateProviderDataPolicyTypedDict(TypedDict): - r"""Defaults to training on and retaining prompts, the most conservative declaration. Your own declaration; it applies to your own traffic and OpenRouter does not verify it.""" - - prompt_retention_days: Nullable[int] - r"""Days prompts are retained. Must be `null` unless `retains_prompts` is true.""" - retains_prompts: bool - r"""Whether the provider retains prompts or completions.""" - training: bool - r"""Whether the provider trains on prompts.""" - - -class PrivateProviderDataPolicy(BaseModel): - r"""Defaults to training on and retaining prompts, the most conservative declaration. Your own declaration; it applies to your own traffic and OpenRouter does not verify it.""" - - prompt_retention_days: Nullable[int] - r"""Days prompts are retained. Must be `null` unless `retains_prompts` is true.""" - - retains_prompts: bool - r"""Whether the provider retains prompts or completions.""" - - training: bool - r"""Whether the provider trains on prompts.""" - - @model_serializer(mode="wrap") - def serialize_model(self, handler): - serialized = handler(self) - m = {} - - for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) - - if val != UNSET_SENTINEL: - m[k] = val - - return m diff --git a/src/openrouter/components/updateprivateproviderrequest.py b/src/openrouter/components/updateprivateproviderrequest.py index 5aebd7da..0af4fdd6 100644 --- a/src/openrouter/components/updateprivateproviderrequest.py +++ b/src/openrouter/components/updateprivateproviderrequest.py @@ -1,67 +1,15 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from openrouter.types import ( - BaseModel, - Nullable, - OptionalNullable, - UNSET, - UNSET_SENTINEL, -) +from openrouter.types import BaseModel, UNSET_SENTINEL from pydantic import model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict -class UpdatePrivateProviderRequestDataPolicyTypedDict(TypedDict): - prompt_retention_days: NotRequired[Nullable[int]] - r"""Days prompts are retained. Must be `null` unless `retains_prompts` is true.""" - retains_prompts: NotRequired[bool] - r"""Whether the provider retains prompts or completions.""" - training: NotRequired[bool] - r"""Whether the provider trains on prompts.""" - - -class UpdatePrivateProviderRequestDataPolicy(BaseModel): - prompt_retention_days: OptionalNullable[int] = UNSET - r"""Days prompts are retained. Must be `null` unless `retains_prompts` is true.""" - - retains_prompts: Optional[bool] = None - r"""Whether the provider retains prompts or completions.""" - - training: Optional[bool] = None - r"""Whether the provider trains on prompts.""" - - @model_serializer(mode="wrap") - def serialize_model(self, handler): - optional_fields = set(["prompt_retention_days", "retains_prompts", "training"]) - nullable_fields = set(["prompt_retention_days"]) - serialized = handler(self) - m = {} - - for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) - is_nullable_and_explicitly_set = ( - k in nullable_fields - and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member - ) - - if val != UNSET_SENTINEL: - if ( - val is not None - or k not in optional_fields - or is_nullable_and_explicitly_set - ): - m[k] = val - - return m - - class UpdatePrivateProviderRequestTypedDict(TypedDict): base_url: NotRequired[str] r"""HTTPS base URL of an OpenAI-compatible API, used by private endpoints under this provider that set no URL of their own. Without it, each endpoint must set its own. Private, internal, metadata and OpenRouter hosts are rejected.""" - data_policy: NotRequired[UpdatePrivateProviderRequestDataPolicyTypedDict] display_name: NotRequired[str] @@ -69,13 +17,11 @@ class UpdatePrivateProviderRequest(BaseModel): base_url: Optional[str] = None r"""HTTPS base URL of an OpenAI-compatible API, used by private endpoints under this provider that set no URL of their own. Without it, each endpoint must set its own. Private, internal, metadata and OpenRouter hosts are rejected.""" - data_policy: Optional[UpdatePrivateProviderRequestDataPolicy] = None - display_name: Optional[str] = None @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["base_url", "data_policy", "display_name"]) + optional_fields = set(["base_url", "display_name"]) serialized = handler(self) m = {} diff --git a/src/openrouter/private_providers.py b/src/openrouter/private_providers.py index f65b0d06..e3ac9adc 100644 --- a/src/openrouter/private_providers.py +++ b/src/openrouter/private_providers.py @@ -6,7 +6,7 @@ from openrouter.types import OptionalNullable, UNSET from openrouter.utils import get_security_from_env from openrouter.utils.unmarshal_json_response import unmarshal_json_response -from typing import Any, Mapping, Optional, Union +from typing import Any, Mapping, Optional class PrivateProviders(BaseSDK): @@ -274,12 +274,6 @@ def create( x_open_router_title: Optional[str] = None, x_open_router_categories: Optional[str] = None, base_url: Optional[str] = None, - data_policy: Optional[ - Union[ - components.PrivateProviderDataPolicy, - components.PrivateProviderDataPolicyTypedDict, - ] - ] = None, display_name: Optional[str] = None, slug: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, @@ -300,7 +294,6 @@ def create( :param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings. :param base_url: HTTPS base URL of an OpenAI-compatible API, used by private endpoints under this provider that set no URL of their own. Without it, each endpoint must set its own. Private, internal, metadata and OpenRouter hosts are rejected. - :param data_policy: Defaults to training on and retaining prompts, the most conservative declaration. Your own declaration; it applies to your own traffic and OpenRouter does not verify it. :param display_name: Defaults to `name`. :param slug: 2-64 lowercase letters and numbers, separated by single hyphens. Cannot be changed later. Defaults to the name lowercased, with every run of other characters replaced by a hyphen (`Acme Inference` becomes `acme-inference`). :param retries: Override the default retry configuration for this method @@ -324,9 +317,6 @@ def create( x_open_router_categories=x_open_router_categories, create_private_provider_request=components.CreatePrivateProviderRequest( base_url=base_url, - data_policy=utils.get_pydantic_model( - data_policy, Optional[components.PrivateProviderDataPolicy] - ), display_name=display_name, name=name, slug=slug, @@ -467,12 +457,6 @@ async def create_async( x_open_router_title: Optional[str] = None, x_open_router_categories: Optional[str] = None, base_url: Optional[str] = None, - data_policy: Optional[ - Union[ - components.PrivateProviderDataPolicy, - components.PrivateProviderDataPolicyTypedDict, - ] - ] = None, display_name: Optional[str] = None, slug: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, @@ -493,7 +477,6 @@ async def create_async( :param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings. :param base_url: HTTPS base URL of an OpenAI-compatible API, used by private endpoints under this provider that set no URL of their own. Without it, each endpoint must set its own. Private, internal, metadata and OpenRouter hosts are rejected. - :param data_policy: Defaults to training on and retaining prompts, the most conservative declaration. Your own declaration; it applies to your own traffic and OpenRouter does not verify it. :param display_name: Defaults to `name`. :param slug: 2-64 lowercase letters and numbers, separated by single hyphens. Cannot be changed later. Defaults to the name lowercased, with every run of other characters replaced by a hyphen (`Acme Inference` becomes `acme-inference`). :param retries: Override the default retry configuration for this method @@ -517,9 +500,6 @@ async def create_async( x_open_router_categories=x_open_router_categories, create_private_provider_request=components.CreatePrivateProviderRequest( base_url=base_url, - data_policy=utils.get_pydantic_model( - data_policy, Optional[components.PrivateProviderDataPolicy] - ), display_name=display_name, name=name, slug=slug, @@ -1260,12 +1240,6 @@ def update( x_open_router_title: Optional[str] = None, x_open_router_categories: Optional[str] = None, base_url: Optional[str] = None, - data_policy: Optional[ - Union[ - components.UpdatePrivateProviderRequestDataPolicy, - components.UpdatePrivateProviderRequestDataPolicyTypedDict, - ] - ] = None, display_name: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, @@ -1274,7 +1248,7 @@ def update( ) -> operations.UpdatePrivateProviderResponse: r"""Update a private provider - Update a private provider’s details or declared data policy. The name and slug cannot change. Refuses (409) a data-policy change while OpenRouter pins the declared policy on one of its endpoints. [Management key](/docs/guides/overview/auth/management-api-keys) required. + Update a private provider’s display name or base URL. The name and slug cannot change, and the data policy is fixed by OpenRouter, so a body with no editable field is rejected (400). [Management key](/docs/guides/overview/auth/management-api-keys) required. :param slug: :param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings. @@ -1285,7 +1259,6 @@ def update( :param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings. :param base_url: HTTPS base URL of an OpenAI-compatible API, used by private endpoints under this provider that set no URL of their own. Without it, each endpoint must set its own. Private, internal, metadata and OpenRouter hosts are rejected. - :param data_policy: :param display_name: :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -1309,10 +1282,6 @@ def update( slug=slug, update_private_provider_request=components.UpdatePrivateProviderRequest( base_url=base_url, - data_policy=utils.get_pydantic_model( - data_policy, - Optional[components.UpdatePrivateProviderRequestDataPolicy], - ), display_name=display_name, ), ) @@ -1451,12 +1420,6 @@ async def update_async( x_open_router_title: Optional[str] = None, x_open_router_categories: Optional[str] = None, base_url: Optional[str] = None, - data_policy: Optional[ - Union[ - components.UpdatePrivateProviderRequestDataPolicy, - components.UpdatePrivateProviderRequestDataPolicyTypedDict, - ] - ] = None, display_name: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, @@ -1465,7 +1428,7 @@ async def update_async( ) -> operations.UpdatePrivateProviderResponse: r"""Update a private provider - Update a private provider’s details or declared data policy. The name and slug cannot change. Refuses (409) a data-policy change while OpenRouter pins the declared policy on one of its endpoints. [Management key](/docs/guides/overview/auth/management-api-keys) required. + Update a private provider’s display name or base URL. The name and slug cannot change, and the data policy is fixed by OpenRouter, so a body with no editable field is rejected (400). [Management key](/docs/guides/overview/auth/management-api-keys) required. :param slug: :param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings. @@ -1476,7 +1439,6 @@ async def update_async( :param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings. :param base_url: HTTPS base URL of an OpenAI-compatible API, used by private endpoints under this provider that set no URL of their own. Without it, each endpoint must set its own. Private, internal, metadata and OpenRouter hosts are rejected. - :param data_policy: :param display_name: :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -1500,10 +1462,6 @@ async def update_async( slug=slug, update_private_provider_request=components.UpdatePrivateProviderRequest( base_url=base_url, - data_policy=utils.get_pydantic_model( - data_policy, - Optional[components.UpdatePrivateProviderRequestDataPolicy], - ), display_name=display_name, ), ) diff --git a/uv.lock b/uv.lock index f20764d5..010e4b1b 100644 --- a/uv.lock +++ b/uv.lock @@ -231,7 +231,7 @@ wheels = [ [[package]] name = "openrouter" -version = "1.3.105" +version = "1.3.106" source = { editable = "." } dependencies = [ { name = "httpcore" },