2026-03-09 18:26:53 +08:00
|
|
|
|
"""Provider behavior 薄封装。
|
2026-02-05 15:57:52 +08:00
|
|
|
|
|
2026-03-09 18:26:53 +08:00
|
|
|
|
对外保持既有调用接口,内部统一委托给 core.api_format.capabilities 中的 provider registry。
|
2026-02-05 15:57:52 +08:00
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
|
|
from dataclasses import dataclass
|
|
|
|
|
|
|
2026-03-09 18:26:53 +08:00
|
|
|
|
from src.core.api_format.capabilities import (
|
|
|
|
|
|
get_provider_behavior_variants,
|
|
|
|
|
|
register_provider_behavior_variant,
|
|
|
|
|
|
)
|
2026-02-06 16:37:06 +08:00
|
|
|
|
from src.core.provider_types import normalize_provider_type
|
2026-02-05 15:57:52 +08:00
|
|
|
|
from src.services.provider.envelope import ProviderEnvelope, get_provider_envelope
|
|
|
|
|
|
|
2026-03-09 18:26:53 +08:00
|
|
|
|
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
|
|
|
|
class ProviderBehavior:
|
|
|
|
|
|
provider_type: str
|
|
|
|
|
|
envelope: ProviderEnvelope | None
|
|
|
|
|
|
same_format_variant: str | None
|
|
|
|
|
|
cross_format_variant: str | None
|
2026-02-06 16:37:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def register_behavior_variant(
|
|
|
|
|
|
provider_type: str,
|
|
|
|
|
|
*,
|
|
|
|
|
|
same_format: bool = False,
|
|
|
|
|
|
cross_format: bool = False,
|
|
|
|
|
|
) -> None:
|
2026-03-09 18:26:53 +08:00
|
|
|
|
"""兼容入口:注册 provider 的格式变体标志,真实存储位于 core registry。"""
|
|
|
|
|
|
register_provider_behavior_variant(
|
|
|
|
|
|
provider_type,
|
|
|
|
|
|
same_format=same_format,
|
|
|
|
|
|
cross_format=cross_format,
|
|
|
|
|
|
)
|
2026-02-05 15:57:52 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_provider_behavior(
|
|
|
|
|
|
*,
|
|
|
|
|
|
provider_type: str | None,
|
|
|
|
|
|
endpoint_sig: str | None,
|
|
|
|
|
|
) -> ProviderBehavior:
|
2026-02-06 16:37:06 +08:00
|
|
|
|
pt = normalize_provider_type(provider_type)
|
2026-02-05 15:57:52 +08:00
|
|
|
|
envelope = get_provider_envelope(provider_type=pt, endpoint_sig=endpoint_sig)
|
2026-03-09 18:26:53 +08:00
|
|
|
|
same_format_variant, cross_format_variant = get_provider_behavior_variants(
|
|
|
|
|
|
provider_type=pt,
|
|
|
|
|
|
endpoint_sig=endpoint_sig or "",
|
|
|
|
|
|
)
|
2026-02-05 15:57:52 +08:00
|
|
|
|
|
|
|
|
|
|
return ProviderBehavior(
|
|
|
|
|
|
provider_type=pt,
|
|
|
|
|
|
envelope=envelope,
|
|
|
|
|
|
same_format_variant=same_format_variant,
|
|
|
|
|
|
cross_format_variant=cross_format_variant,
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-02-06 16:37:06 +08:00
|
|
|
|
__all__ = ["ProviderBehavior", "get_provider_behavior", "register_behavior_variant"]
|