diff --git a/.gitignore b/.gitignore index 1efdd93..4ea12b6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.env.local .venv/ venv/ src/*.egg-info/ diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 119e224..3cfd031 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -3,10 +3,10 @@ id: 232c6d4f-b0fd-4172-8f1b-e2421566e9b4 management: docChecksum: f629b0ca18ec064975608b5eea7aebfd docVersion: 1.0.0 - speakeasyVersion: 1.612.0 - generationVersion: 2.695.0 - releaseVersion: 0.6.2 - configChecksum: f369a2bbdc8e34f44647641a40369e29 + speakeasyVersion: 1.617.1 + generationVersion: 2.701.8 + releaseVersion: 0.6.3 + configChecksum: c3dd5d0094a141e47c41e765753d73c6 repoURL: https://github.com/speakeasy-sdks/openrouter-python-sdk.git installationURL: https://github.com/speakeasy-sdks/openrouter-python-sdk.git features: @@ -14,14 +14,14 @@ features: acceptHeaders: 3.0.0 additionalDependencies: 1.0.0 constsAndDefaults: 1.0.5 - core: 5.20.3 + core: 5.20.4 customCodeRegions: 0.1.1 defaultEnabledRetries: 0.2.0 devContainers: 3.0.0 enumUnions: 0.1.0 envVarSecurityUsage: 0.3.2 flatRequests: 1.0.1 - globalSecurity: 3.0.3 + globalSecurity: 3.0.4 globalSecurityCallbacks: 1.0.0 globalSecurityFlattening: 1.0.0 globalServerURLs: 3.1.1 @@ -32,7 +32,7 @@ features: responseFormat: 1.0.1 retries: 3.0.2 sdkHooks: 1.1.0 - serverEvents: 1.0.8 + serverEvents: 1.0.9 serverEventsSentinels: 0.1.0 unions: 3.0.4 generatedFiles: diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 4ab3dff..9969222 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -19,6 +19,7 @@ generation: auth: oAuth2ClientCredentialsEnabled: true oAuth2PasswordEnabled: true + hoistGlobalSecurity: true inferSSEOverload: true sdkHooksConfigAccess: true tests: @@ -26,7 +27,7 @@ generation: generateNewTests: true skipResponseBodyAssertions: false python: - version: 0.6.2 + version: 0.6.3 additionalDependencies: dev: {} main: {} @@ -65,4 +66,5 @@ python: pytestFilterWarnings: [] pytestTimeout: 0 responseFormat: flat + sseFlatResponse: false templateVersion: v2 diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index c876d24..d2285b7 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,19 +1,21 @@ -speakeasyVersion: 1.612.0 +speakeasyVersion: 1.617.1 sources: OpenRouter Chat Completions API: sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:30b19a8759608792fb4d27f6bf28d5982d7e2a8cf5b3faf34ba3507a62f9f106 - sourceBlobDigest: sha256:454f1b880a0882a70f78eacccb2c33e3d9d19134a0738b0e21487984a7bf2e63 + sourceRevisionDigest: sha256:a7746404e672bbb6dcd8354532d0c627d24522844c39d58011d4cd9c7e8ebd20 + sourceBlobDigest: sha256:67c793fef9c039a2c351fc6ba7ed9a6119059023fe3fbd1022645d7494c2c63c tags: - latest - - speakeasy-sdk-regen-1755878373 + - speakeasy-sdk-regen-1757290070 - 1.0.0 targets: open-router: source: OpenRouter Chat Completions API sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:30b19a8759608792fb4d27f6bf28d5982d7e2a8cf5b3faf34ba3507a62f9f106 - sourceBlobDigest: sha256:454f1b880a0882a70f78eacccb2c33e3d9d19134a0738b0e21487984a7bf2e63 + sourceRevisionDigest: sha256:a7746404e672bbb6dcd8354532d0c627d24522844c39d58011d4cd9c7e8ebd20 + sourceBlobDigest: sha256:67c793fef9c039a2c351fc6ba7ed9a6119059023fe3fbd1022645d7494c2c63c + codeSamplesNamespace: open-router-chat-completions-api-python-code-samples + codeSamplesRevisionDigest: sha256:fb054934c4d0de58a48ca8cdfde7b4210f71c425fb9dfad02e8824b8a1848774 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/RELEASES.md b/RELEASES.md index 05a2782..608299a 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -6,4 +6,12 @@ Based on: - OpenAPI Doc - Speakeasy CLI 1.606.2 (2.687.1) https://github.com/speakeasy-api/speakeasy ### Generated -- [python v0.1.3] . \ No newline at end of file +- [python v0.1.3] . + +## 2025-09-17 00:07:51 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.617.1 (2.701.8) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v0.6.3] . \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 8a3d17e..cfd0080 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "openrouter" -version = "0.6.2" +version = "0.6.3" description = "Python Client SDK Generated by Speakeasy." authors = [{ name = "Speakeasy" },] readme = "README-PYPI.md" @@ -30,7 +30,6 @@ build-backend = "setuptools.build_meta" [tool.pytest.ini_options] asyncio_default_fixture_loop_scope = "function" -asyncio_mode = "auto" pythonpath = ["src"] [tool.mypy] diff --git a/src/openrouter/_version.py b/src/openrouter/_version.py index 259ff7a..776c29a 100644 --- a/src/openrouter/_version.py +++ b/src/openrouter/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "openrouter" -__version__: str = "0.6.2" +__version__: str = "0.6.3" __openapi_doc_version__: str = "1.0.0" -__gen_version__: str = "2.695.0" -__user_agent__: str = "speakeasy-sdk/python 0.6.2 2.695.0 1.0.0 openrouter" +__gen_version__: str = "2.701.8" +__user_agent__: str = "speakeasy-sdk/python 0.6.3 2.701.8 1.0.0 openrouter" try: if __package__ is not None: diff --git a/src/openrouter/errors/chatcompletionerror.py b/src/openrouter/errors/chatcompletionerror.py index eafcbec..a88bbdf 100644 --- a/src/openrouter/errors/chatcompletionerror.py +++ b/src/openrouter/errors/chatcompletionerror.py @@ -1,6 +1,7 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from dataclasses import dataclass, field import httpx from openrouter.errors import OpenRouterError from openrouter.models import chatcompletionerror as models_chatcompletionerror @@ -13,10 +14,11 @@ class ChatCompletionErrorData(BaseModel): r"""Error object structure""" +@dataclass(frozen=True) class ChatCompletionError(OpenRouterError): r"""Chat completion error response""" - data: ChatCompletionErrorData + data: ChatCompletionErrorData = field(hash=False) def __init__( self, @@ -27,4 +29,4 @@ class ChatCompletionError(OpenRouterError): fallback = body or raw_response.text message = str(data.error.message) or fallback super().__init__(message, raw_response, body) - self.data = data + object.__setattr__(self, "data", data) diff --git a/src/openrouter/errors/no_response_error.py b/src/openrouter/errors/no_response_error.py index f98beea..b710ea2 100644 --- a/src/openrouter/errors/no_response_error.py +++ b/src/openrouter/errors/no_response_error.py @@ -1,12 +1,16 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" +from dataclasses import dataclass + + +@dataclass(frozen=True) class NoResponseError(Exception): """Error raised when no HTTP response is received from the server.""" message: str def __init__(self, message: str = "No response received"): - self.message = message + object.__setattr__(self, "message", message) super().__init__(message) def __str__(self): diff --git a/src/openrouter/errors/openrouterdefaulterror.py b/src/openrouter/errors/openrouterdefaulterror.py index 0d87bd2..7fec31e 100644 --- a/src/openrouter/errors/openrouterdefaulterror.py +++ b/src/openrouter/errors/openrouterdefaulterror.py @@ -2,12 +2,14 @@ import httpx from typing import Optional +from dataclasses import dataclass from openrouter.errors import OpenRouterError MAX_MESSAGE_LEN = 10_000 +@dataclass(frozen=True) class OpenRouterDefaultError(OpenRouterError): """The fallback error class if no more specific error class is matched.""" diff --git a/src/openrouter/errors/openroutererror.py b/src/openrouter/errors/openroutererror.py index fddb83a..48d53bc 100644 --- a/src/openrouter/errors/openroutererror.py +++ b/src/openrouter/errors/openroutererror.py @@ -2,25 +2,29 @@ import httpx from typing import Optional +from dataclasses import dataclass, field +@dataclass(frozen=True) class OpenRouterError(Exception): """The base class for all HTTP error responses.""" message: str status_code: int body: str - headers: httpx.Headers - raw_response: httpx.Response + headers: httpx.Headers = field(hash=False) + raw_response: httpx.Response = field(hash=False) def __init__( self, message: str, raw_response: httpx.Response, body: Optional[str] = None ): - self.message = message - self.status_code = raw_response.status_code - self.body = body if body is not None else raw_response.text - self.headers = raw_response.headers - self.raw_response = raw_response + object.__setattr__(self, "message", message) + object.__setattr__(self, "status_code", raw_response.status_code) + object.__setattr__( + self, "body", body if body is not None else raw_response.text + ) + object.__setattr__(self, "headers", raw_response.headers) + object.__setattr__(self, "raw_response", raw_response) def __str__(self): return self.message diff --git a/src/openrouter/errors/responsevalidationerror.py b/src/openrouter/errors/responsevalidationerror.py index 9fa5f63..62e6cf3 100644 --- a/src/openrouter/errors/responsevalidationerror.py +++ b/src/openrouter/errors/responsevalidationerror.py @@ -2,10 +2,12 @@ import httpx from typing import Optional +from dataclasses import dataclass from openrouter.errors import OpenRouterError +@dataclass(frozen=True) class ResponseValidationError(OpenRouterError): """Error raised when there is a type mismatch between the response data and the expected Pydantic model.""" diff --git a/uv.lock b/uv.lock index 184716d..42f740a 100644 --- a/uv.lock +++ b/uv.lock @@ -201,7 +201,7 @@ wheels = [ [[package]] name = "openrouter" -version = "0.6.2" +version = "0.6.3" source = { editable = "." } dependencies = [ { name = "httpcore" },