# All files / services/llm provider.interface.ts

0% Statements 0/0
0% Branches 1/1
0% Functions 1/1
0% Lines 0/0

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69

     /**
     * LLM Provider 统一接口
     *
     * 所有文本生成供应商必须实现此接口。
     * 当前所有供应商都走 OpenAI 兼容 API（ChatOpenAI），
     * 但通过此接口抽象后，未来可直接接入 Gemini、Anthropic 等原生 API。
     */

    export interface ILlmProvider {
      /** Provider 唯一标识（如 'minimax-llm', 'bailian-llm'） */
      readonly name: string;
      /** 所属供应商 key（与 models.json 中 vendors 的 key 对应） */
      readonly vendor: string;
      /** 供应商显示名称 */
      readonly displayName: string;
      /** API 基础 URL */
      readonly baseUrl: string;
      /** 该供应商下所有文本模型的 ID 列表 */
      readonly textModels: string[];
      /** 该供应商下所有文本模型的配置 */
      readonly modelConfigs: Map<string, LlmModelConfig>;

      /**
       * 创建 LangChain ChatOpenAI 客户端
       * @param modelId   模型 ID
       * @param options   覆盖参数（temperature, maxTokens）
       * @returns         ChatOpenAI 实例
       */
      createClient(modelId: string, options?: {
        temperature?: number;
        maxTokens?: number;
      }): any; // ChatOpenAI

      /**
       * 检查模型是否属于此供应商
       */
      hasModel(modelId: string): boolean;

      /**
       * 获取模型配置
       */
      getModelConfig(modelId: string): LlmModelConfig | undefined;

      /**
       * 健康检查（可选）
       */
      healthCheck?(): Promise<boolean>;
    }

    /** LLM 模型配置 */
    export interface LlmModelConfig {
      /** 模型 ID */
      id: string;
      /** 显示名称 */
      name: string;
      /** 上下文窗口大小 */
      contextWindow: number;
      /** 最大输出 token */
      maxTokens: number;
      /** 默认温度 */
      temperature: number;
      /** 是否支持工具调用 */
      supportsToolCall: boolean;
      /** 是否启用 */
      enabled: boolean;
      /** 标准模型 ID（跨供应商同模型映射，如 volcengine 的 minimax-m2.7 → MiniMax-M2.7） */
      canonicalModel?: string;
    }