mirror of
https://github.com/wassname/openrouter-python-sdk-retry-errors.git
synced 2026-08-02 12:50:48 +08:00
add open enums, server selection, update description
This commit is contained in:
@@ -5,8 +5,8 @@ import importlib.metadata
|
||||
__title__: str = "openrouter"
|
||||
__version__: str = "0.1.0"
|
||||
__openapi_doc_version__: str = "1.0.0"
|
||||
__gen_version__: str = "2.701.8"
|
||||
__user_agent__: str = "speakeasy-sdk/python 0.1.0 2.701.8 1.0.0 openrouter"
|
||||
__gen_version__: str = "2.702.0"
|
||||
__user_agent__: str = "speakeasy-sdk/python 0.1.0 2.702.0 1.0.0 openrouter"
|
||||
|
||||
try:
|
||||
if __package__ is not None:
|
||||
|
||||
@@ -12,14 +12,17 @@ from openrouter.types import (
|
||||
OptionalNullable,
|
||||
UNSET,
|
||||
UNSET_SENTINEL,
|
||||
UnrecognizedStr,
|
||||
)
|
||||
from openrouter.utils import validate_open_enum
|
||||
from pydantic import model_serializer
|
||||
from typing import Literal
|
||||
from typing_extensions import NotRequired, TypedDict
|
||||
from pydantic.functional_validators import PlainValidator
|
||||
from typing import Literal, Union
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
|
||||
ChatCompletionChoiceFinishReason = Literal[
|
||||
"tool_calls", "stop", "length", "content_filter", "error"
|
||||
ChatCompletionChoiceFinishReason = Union[
|
||||
Literal["tool_calls", "stop", "length", "content_filter", "error"], UnrecognizedStr
|
||||
]
|
||||
r"""Reason the completion finished"""
|
||||
|
||||
@@ -40,7 +43,10 @@ class ChatCompletionChoiceTypedDict(TypedDict):
|
||||
class ChatCompletionChoice(BaseModel):
|
||||
r"""Chat completion choice"""
|
||||
|
||||
finish_reason: Nullable[ChatCompletionChoiceFinishReason]
|
||||
finish_reason: Annotated[
|
||||
Nullable[ChatCompletionChoiceFinishReason],
|
||||
PlainValidator(validate_open_enum(False)),
|
||||
]
|
||||
r"""Reason the completion finished"""
|
||||
|
||||
index: float
|
||||
|
||||
@@ -15,14 +15,17 @@ from openrouter.types import (
|
||||
OptionalNullable,
|
||||
UNSET,
|
||||
UNSET_SENTINEL,
|
||||
UnrecognizedStr,
|
||||
)
|
||||
from openrouter.utils import validate_open_enum
|
||||
from pydantic import model_serializer
|
||||
from typing import Literal
|
||||
from typing_extensions import NotRequired, TypedDict
|
||||
from pydantic.functional_validators import PlainValidator
|
||||
from typing import Literal, Union
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
|
||||
ChatCompletionChunkChoiceFinishReason = Literal[
|
||||
"tool_calls", "stop", "length", "content_filter", "error"
|
||||
ChatCompletionChunkChoiceFinishReason = Union[
|
||||
Literal["tool_calls", "stop", "length", "content_filter", "error"], UnrecognizedStr
|
||||
]
|
||||
|
||||
|
||||
@@ -43,7 +46,10 @@ class ChatCompletionChunkChoice(BaseModel):
|
||||
delta: ChatCompletionChunkChoiceDelta
|
||||
r"""Delta changes in streaming response"""
|
||||
|
||||
finish_reason: Nullable[ChatCompletionChunkChoiceFinishReason]
|
||||
finish_reason: Annotated[
|
||||
Nullable[ChatCompletionChunkChoiceFinishReason],
|
||||
PlainValidator(validate_open_enum(False)),
|
||||
]
|
||||
|
||||
index: float
|
||||
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
||||
|
||||
from __future__ import annotations
|
||||
from openrouter.types import BaseModel
|
||||
from openrouter.types import BaseModel, UnrecognizedStr
|
||||
from openrouter.utils import validate_open_enum
|
||||
import pydantic
|
||||
from typing import Literal
|
||||
from pydantic.functional_validators import PlainValidator
|
||||
from typing import Literal, Union
|
||||
from typing_extensions import Annotated, TypedDict
|
||||
|
||||
|
||||
ChatCompletionContentPartAudioType = Literal["input_audio"]
|
||||
|
||||
ChatCompletionContentPartAudioFormat = Literal[
|
||||
"wav", "mp3", "flac", "m4a", "ogg", "pcm16", "pcm24"
|
||||
ChatCompletionContentPartAudioFormat = Union[
|
||||
Literal["wav", "mp3", "flac", "m4a", "ogg", "pcm16", "pcm24"], UnrecognizedStr
|
||||
]
|
||||
r"""Audio format"""
|
||||
|
||||
@@ -27,7 +29,11 @@ class InputAudio(BaseModel):
|
||||
r"""Base64 encoded audio data"""
|
||||
|
||||
format_: Annotated[
|
||||
ChatCompletionContentPartAudioFormat, pydantic.Field(alias="format")
|
||||
Annotated[
|
||||
ChatCompletionContentPartAudioFormat,
|
||||
PlainValidator(validate_open_enum(False)),
|
||||
],
|
||||
pydantic.Field(alias="format"),
|
||||
]
|
||||
r"""Audio format"""
|
||||
|
||||
|
||||
@@ -7,17 +7,20 @@ from openrouter.types import (
|
||||
OptionalNullable,
|
||||
UNSET,
|
||||
UNSET_SENTINEL,
|
||||
UnrecognizedStr,
|
||||
)
|
||||
from openrouter.utils import validate_open_enum
|
||||
import pydantic
|
||||
from pydantic import model_serializer
|
||||
from typing import Literal, Optional
|
||||
from pydantic.functional_validators import PlainValidator
|
||||
from typing import Literal, Optional, Union
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
|
||||
ReasoningDetailEncryptedType = Literal["reasoning.encrypted"]
|
||||
|
||||
ReasoningDetailEncryptedFormat = Literal[
|
||||
"unknown", "openai-responses-v1", "anthropic-claude-v1"
|
||||
ReasoningDetailEncryptedFormat = Union[
|
||||
Literal["unknown", "openai-responses-v1", "anthropic-claude-v1"], UnrecognizedStr
|
||||
]
|
||||
|
||||
|
||||
@@ -41,7 +44,11 @@ class ReasoningDetailEncrypted(BaseModel):
|
||||
id: OptionalNullable[str] = UNSET
|
||||
|
||||
format_: Annotated[
|
||||
OptionalNullable[ReasoningDetailEncryptedFormat], pydantic.Field(alias="format")
|
||||
Annotated[
|
||||
OptionalNullable[ReasoningDetailEncryptedFormat],
|
||||
PlainValidator(validate_open_enum(False)),
|
||||
],
|
||||
pydantic.Field(alias="format"),
|
||||
] = "anthropic-claude-v1"
|
||||
|
||||
index: Optional[float] = None
|
||||
|
||||
@@ -7,17 +7,20 @@ from openrouter.types import (
|
||||
OptionalNullable,
|
||||
UNSET,
|
||||
UNSET_SENTINEL,
|
||||
UnrecognizedStr,
|
||||
)
|
||||
from openrouter.utils import validate_open_enum
|
||||
import pydantic
|
||||
from pydantic import model_serializer
|
||||
from typing import Literal, Optional
|
||||
from pydantic.functional_validators import PlainValidator
|
||||
from typing import Literal, Optional, Union
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
|
||||
ReasoningDetailSummaryType = Literal["reasoning.summary"]
|
||||
|
||||
ReasoningDetailSummaryFormat = Literal[
|
||||
"unknown", "openai-responses-v1", "anthropic-claude-v1"
|
||||
ReasoningDetailSummaryFormat = Union[
|
||||
Literal["unknown", "openai-responses-v1", "anthropic-claude-v1"], UnrecognizedStr
|
||||
]
|
||||
|
||||
|
||||
@@ -41,7 +44,11 @@ class ReasoningDetailSummary(BaseModel):
|
||||
id: OptionalNullable[str] = UNSET
|
||||
|
||||
format_: Annotated[
|
||||
OptionalNullable[ReasoningDetailSummaryFormat], pydantic.Field(alias="format")
|
||||
Annotated[
|
||||
OptionalNullable[ReasoningDetailSummaryFormat],
|
||||
PlainValidator(validate_open_enum(False)),
|
||||
],
|
||||
pydantic.Field(alias="format"),
|
||||
] = "anthropic-claude-v1"
|
||||
|
||||
index: Optional[float] = None
|
||||
|
||||
@@ -7,17 +7,20 @@ from openrouter.types import (
|
||||
OptionalNullable,
|
||||
UNSET,
|
||||
UNSET_SENTINEL,
|
||||
UnrecognizedStr,
|
||||
)
|
||||
from openrouter.utils import validate_open_enum
|
||||
import pydantic
|
||||
from pydantic import model_serializer
|
||||
from typing import Literal, Optional
|
||||
from pydantic.functional_validators import PlainValidator
|
||||
from typing import Literal, Optional, Union
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
|
||||
|
||||
ReasoningDetailTextType = Literal["reasoning.text"]
|
||||
|
||||
ReasoningDetailTextFormat = Literal[
|
||||
"unknown", "openai-responses-v1", "anthropic-claude-v1"
|
||||
ReasoningDetailTextFormat = Union[
|
||||
Literal["unknown", "openai-responses-v1", "anthropic-claude-v1"], UnrecognizedStr
|
||||
]
|
||||
|
||||
|
||||
@@ -44,7 +47,11 @@ class ReasoningDetailText(BaseModel):
|
||||
id: OptionalNullable[str] = UNSET
|
||||
|
||||
format_: Annotated[
|
||||
OptionalNullable[ReasoningDetailTextFormat], pydantic.Field(alias="format")
|
||||
Annotated[
|
||||
OptionalNullable[ReasoningDetailTextFormat],
|
||||
PlainValidator(validate_open_enum(False)),
|
||||
],
|
||||
pydantic.Field(alias="format"),
|
||||
] = "anthropic-claude-v1"
|
||||
|
||||
index: Optional[float] = None
|
||||
|
||||
@@ -11,7 +11,7 @@ from openrouter import models, utils
|
||||
from openrouter._hooks import SDKHooks
|
||||
from openrouter.types import OptionalNullable, UNSET
|
||||
import sys
|
||||
from typing import Any, Callable, Dict, List, Optional, TYPE_CHECKING, Union, cast
|
||||
from typing import Any, Callable, Dict, Optional, TYPE_CHECKING, Union, cast
|
||||
import weakref
|
||||
|
||||
if TYPE_CHECKING:
|
||||
@@ -32,7 +32,7 @@ class OpenRouter(BaseSDK):
|
||||
self,
|
||||
api_key: Optional[Union[Optional[str], Callable[[], Optional[str]]]] = None,
|
||||
provider_url: Optional[str] = None,
|
||||
server_idx: Optional[int] = None,
|
||||
server: Optional[str] = None,
|
||||
server_url: Optional[str] = None,
|
||||
url_params: Optional[Dict[str, str]] = None,
|
||||
client: Optional[HttpClient] = None,
|
||||
@@ -45,7 +45,7 @@ class OpenRouter(BaseSDK):
|
||||
|
||||
:param api_key: The api_key required for authentication
|
||||
:param provider_url: Allows setting the provider_url variable for url substitution
|
||||
:param server_idx: The index of the server to use for all methods
|
||||
:param server: The server by name to use for all methods
|
||||
:param server_url: The server URL to use for all methods
|
||||
:param url_params: Parameters to optionally template the server URL with
|
||||
:param client: The HTTP client to use for all synchronous methods
|
||||
@@ -84,11 +84,12 @@ class OpenRouter(BaseSDK):
|
||||
if server_url is not None:
|
||||
if url_params is not None:
|
||||
server_url = utils.template_url(server_url, url_params)
|
||||
server_defaults: List[Dict[str, str]] = [
|
||||
{
|
||||
|
||||
server_defaults: Dict[str, Dict[str, str]] = {
|
||||
"production": {
|
||||
"provider_url": provider_url or "openrouter.ai",
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
BaseSDK.__init__(
|
||||
self,
|
||||
@@ -99,7 +100,7 @@ class OpenRouter(BaseSDK):
|
||||
async_client_supplied=async_client_supplied,
|
||||
security=security,
|
||||
server_url=server_url,
|
||||
server_idx=server_idx,
|
||||
server=server,
|
||||
server_defaults=server_defaults,
|
||||
retry_config=retry_config,
|
||||
timeout_ms=timeout_ms,
|
||||
|
||||
@@ -12,13 +12,14 @@ from dataclasses import dataclass, field
|
||||
from openrouter import models
|
||||
from openrouter.types import OptionalNullable, UNSET
|
||||
from pydantic import Field
|
||||
from typing import Callable, Dict, List, Optional, Tuple, Union
|
||||
from typing import Callable, Dict, Optional, Tuple, Union
|
||||
|
||||
|
||||
SERVERS = [
|
||||
"https://{provider_url}/api/v1",
|
||||
# Production server
|
||||
]
|
||||
SERVER_PRODUCTION = "production"
|
||||
r"""Production server"""
|
||||
SERVERS = {
|
||||
SERVER_PRODUCTION: "https://{provider_url}/api/v1",
|
||||
}
|
||||
"""Contains the list of servers available to the SDK"""
|
||||
|
||||
|
||||
@@ -31,8 +32,8 @@ class SDKConfiguration:
|
||||
debug_logger: Logger
|
||||
security: Optional[Union[models.Security, Callable[[], models.Security]]] = None
|
||||
server_url: Optional[str] = ""
|
||||
server_idx: Optional[int] = 0
|
||||
server_defaults: List[Dict[str, str]] = field(default_factory=List)
|
||||
server: Optional[str] = ""
|
||||
server_defaults: Dict[str, Dict[str, str]] = field(default_factory=Dict)
|
||||
language: str = "python"
|
||||
openapi_doc_version: str = __openapi_doc_version__
|
||||
sdk_version: str = __version__
|
||||
@@ -44,7 +45,10 @@ class SDKConfiguration:
|
||||
def get_server_details(self) -> Tuple[str, Dict[str, str]]:
|
||||
if self.server_url is not None and self.server_url:
|
||||
return remove_suffix(self.server_url, "/"), {}
|
||||
if self.server_idx is None:
|
||||
self.server_idx = 0
|
||||
if not self.server:
|
||||
self.server = SERVER_PRODUCTION
|
||||
|
||||
return SERVERS[self.server_idx], self.server_defaults[self.server_idx]
|
||||
if self.server not in SERVERS:
|
||||
raise ValueError(f'Invalid server "{self.server}"')
|
||||
|
||||
return SERVERS[self.server], self.server_defaults.get(self.server, {})
|
||||
|
||||
Reference in New Issue
Block a user