Files
MoFin/venv/lib/python3.12/site-packages/openai/_provider.py
T
知微 fa45d8aa5f fix: 小果地址统一node122(兼容LAN+EasyTier)
- health_checklist.json: 192.168.1.122→node122
- ocr_client.py: docstring IP→node122
- docs/market-data-requirements.md: IP→node122
- 所有API调用通过ProxyHandler({})绕过系统代理
  Privoxy对node122:18003返回500,直连正常
2026-06-30 02:56:35 +08:00

66 lines
2.4 KiB
Python

from __future__ import annotations
from typing import Callable, Protocol, Awaitable
from weakref import WeakKeyDictionary
from dataclasses import dataclass
import httpx
from ._models import FinalRequestOptions
from ._exceptions import OpenAIError
class _Provider:
"""Opaque configuration returned by an OpenAI-owned provider factory."""
__slots__ = ("__weakref__",)
@dataclass
class _ProviderRuntime:
name: str
base_url: str | httpx.URL
transform_request: Callable[[FinalRequestOptions], FinalRequestOptions] | None = None
transform_async_request: Callable[[FinalRequestOptions], Awaitable[FinalRequestOptions]] | None = None
prepare_request: Callable[[httpx.Request], None] | None = None
prepare_async_request: Callable[[httpx.Request], Awaitable[None]] | None = None
normalize_response: Callable[[httpx.Response], httpx.Response] | None = None
normalize_async_response: Callable[[httpx.Response], Awaitable[httpx.Response]] | None = None
class _ProviderDefinition(Protocol):
@property
def name(self) -> str: ...
def configure(self) -> _ProviderRuntime: ...
# Provider factories capture configuration in definitions, while every client
# gets fresh runtime state from ``definition.configure()``. Keeping definitions
# outside the opaque provider object prevents arbitrary objects (including a
# directly constructed ``_Provider``) from imitating an OpenAI-owned provider
# and keeps credentials out of the object's representation. The weak mapping
# also avoids retaining provider configuration after the public handle is gone.
_provider_definitions: WeakKeyDictionary[_Provider, _ProviderDefinition] = WeakKeyDictionary()
def _create_provider(definition: _ProviderDefinition) -> _Provider: # pyright: ignore[reportUnusedFunction]
provider = _Provider()
_provider_definitions[provider] = definition
return provider
def _provider_name(provider: _Provider) -> str: # pyright: ignore[reportUnusedFunction]
return _get_provider_definition(provider).name
def _configure_provider(provider: _Provider) -> _ProviderRuntime: # pyright: ignore[reportUnusedFunction]
return _get_provider_definition(provider).configure()
def _get_provider_definition(provider: _Provider) -> _ProviderDefinition:
try:
return _provider_definitions[provider]
except (KeyError, TypeError) as exc:
raise OpenAIError("Invalid provider. Providers must be created by an OpenAI provider factory.") from exc