File size: 1,450 Bytes
fa1140b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
"""上游适配器入口(换目标网站时只改本目录)。

:func:`get_provider` 组合 Auth + Client + Parser,返回 :class:`UpstreamProvider`。
默认实现(``Default*``)是占位:``stream`` 会抛 ``NotImplementedError`` 提示你实现
auth/client/parser;实现后即可工作。详见 references/upstream-adapters.md。
"""
from __future__ import annotations

from typing import Any

from app.account import Account
from app.config import Settings
from app.upstream.auth import DefaultAuthProvider
from app.upstream.client import DefaultUpstreamClient
from app.upstream.models import MODEL_CATALOG, DefaultModelRegistry
from app.upstream.parser import DefaultParser
from app.upstream.provider import UpstreamProvider

__all__ = ["get_provider", "UpstreamProvider", "MODEL_CATALOG", "DefaultModelRegistry"]


def get_provider(account: Account, settings: Settings, http_client: Any) -> UpstreamProvider:
    """为指定账号构造 UpstreamProvider(组合 Auth + Client + Parser)。"""
    from pathlib import Path

    account_file = Path(settings.account_dir) / f"{account.name}.json"
    auth = DefaultAuthProvider(account, settings, http_client, account_file=account_file)
    parser = DefaultParser()
    client = DefaultUpstreamClient(account, settings, http_client, auth, parser,
                                   account_file=account_file)
    return UpstreamProvider(account, settings, http_client, auth, client)