Files
MoviePilot/app/agent/llm/gateway.py
DDSRem 2de976f6b3 Merge pull request #7050 from DDSRem-Dev/codex-comment-migration
docs: 统一全项目中文注释和结构化契约说明
2026-10-17 19:26:29 +08:00

120 lines
4.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
LLM helper 与 provider 实现之间的运行时端口。
"""
from collections.abc import Callable
from typing import Any, Protocol
class LLMProviderRuntimePort(Protocol):
"""
声明 LLM helper 与管理 API 共用的 provider 运行时能力。
"""
def resolve_cached_model_metadata(self, **kwargs: Any) -> dict[str, Any] | None:
"""
从本地目录缓存解析模型元数据。
:param kwargs: provider_id、model_id 及可选的 base_url、base_url_preset_id,用于定位缓存目录
:return: 已缓存的模型元数据;没有匹配项时为 None,不触发远端刷新
"""
...
async def resolve_runtime(self, **kwargs: Any) -> dict[str, Any]:
"""
解析创建模型客户端所需的统一运行时参数。
:param kwargs: provider_id、model 及可选的 api_key、base_url、base_url_preset_id、user_agent、use_proxy
:return: 等待认证与地址解析完成后的统一客户端参数,包含实际运行时、模型、凭据及网络设置
"""
...
def create_bedrock_client(self, *args: Any, **kwargs: Any) -> Any:
"""
创建带统一认证和网络配置的 Bedrock 客户端。
:param args: 按顺序传入服务名、区域和已解析凭据,可继续传入地址、代理开关及读取超时
:param kwargs: 与位置参数对应的命名参数;read_timeout 以秒计,None 表示默认超时
:return: 按统一认证和网络策略配置的 boto3 客户端
"""
...
async def list_models(self, **kwargs: Any) -> list[dict[str, Any]]:
"""
返回 provider 可用的模型目录。
:param kwargs: provider_id 及可选认证、地址、代理配置;force_refresh 控制是否刷新目录
:return: 等待目录查询完成后的标准化模型信息列表
"""
...
def resolve_model_list_base_url(self, **kwargs: Any) -> str | None:
"""
解析兼容接口用于查询模型列表的基础地址。
:param kwargs: provider_id、base_url 及可选 base_url_preset_id,用于选择模型目录地址
:return: 解析后的目录基础地址;提供商没有可用地址时为 None
"""
...
async def provider_manage(
self,
provider: str,
action: str,
**params: Any,
) -> dict[str, Any]:
"""
执行与具体提供商无关的统一管理动作。
:param provider: 目标提供商的稳定标识
:param action: 统一管理动作,决定查询目录、发起授权或管理连接等操作
:param params: 对应动作的参数,如认证方式、回调地址、会话标识或临时连接配置
:return: 等待动作完成后的 success、message、data 结果,公开内容应按宿主规则脱敏
"""
...
async def handle_chatgpt_callback(
self,
provider_id: str,
code: str | None,
state: str | None,
error: str | None,
error_description: str | None,
) -> tuple[bool, str]:
"""
完成 ChatGPT OAuth 回调并返回公开结果。
:param provider_id: 发起浏览器授权的提供商标识
:param code: 授权服务返回的授权码;失败回调可为 None
:param state: 与临时授权会话关联的状态标识;缺失时无法完成匹配
:param error: 授权服务返回的错误码;成功回调为 None
:param error_description: 授权错误的补充说明;没有说明时为 None
:return: 等待回调处理后的成功标记和面向用户的结果说明;成功时更新授权凭据和临时状态
"""
...
LLMProviderRuntimeFactory = Callable[[], LLMProviderRuntimePort]
_provider_runtime_factory: LLMProviderRuntimeFactory | None = None
def register_llm_provider_runtime(
factory: LLMProviderRuntimeFactory | None,
) -> LLMProviderRuntimeFactory | None:
"""
注册 provider 运行时工厂,并返回先前工厂供隔离测试恢复。
"""
global _provider_runtime_factory
previous = _provider_runtime_factory
_provider_runtime_factory = factory
return previous
def resolve_llm_provider_runtime() -> LLMProviderRuntimePort:
"""
解析已组装的 provider 运行时,未注册时给出明确边界错误。
"""
if _provider_runtime_factory is None:
raise RuntimeError("LLM provider 运行时尚未由启动层完成组装")
return _provider_runtime_factory()