import { Awaitable, Context, Logger, Service } from "koishi"; import { Config } from "../../config"; import { Services } from "../../shared/constants"; import { GenerateTextResult } from "@xsai/generate-text"; import { BaseModel } from "./base-model"; import { ChatRequestOptions, IChatModel } from "./chat-model"; import { CircuitBreakerPolicy, ModelDescriptor } from "./config"; import { IEmbedModel } from "./embed-model"; declare class CircuitBreaker { private readonly policy; private readonly modelId; private state; private failureCount; private lastFailureTime; private readonly logger; constructor(policy: CircuitBreakerPolicy, parentLogger: Logger, modelId: string); /** 检查断路器是否处于“打开”状态(即阻止请求) */ isOpen(): boolean; /** 记录一次成功调用 */ recordSuccess(): void; /** 记录一次失败调用 */ recordFailure(): void; } declare module "koishi" { interface Context { [Services.Model]: ModelService; } } export declare class ModelService extends Service { static readonly inject: Services[]; private readonly providerInstances; constructor(ctx: Context, config: Config); private initializeProviders; getChatModel(providerName: string, modelId: string): IChatModel | null; getEmbedModel(providerName: string, modelId: string): IEmbedModel | null; useChatGroup(name: string): ChatModelSwitcher | undefined; /** * 验证是否有无效配置 * 1. 至少有一个 Provider * 2. 每个 Provider 至少有一个模型 * 3. 每个模型组至少有一个模型,且模型存在于已启用的 Provider 中 * 4. 为核心任务分配的模型组存在 */ private validateConfig; private registerSchemas; protected start(): Awaitable; useEmbeddingGroup(name: string): ModelSwitcher | undefined; private resolveGroupName; } export declare class ModelSwitcher { protected readonly ctx: Context; protected readonly groupConfig: { name: string; models: ModelDescriptor[]; }; protected readonly logger: Logger; protected readonly _models: T[]; private readonly circuitBreakers; constructor(ctx: Context, groupConfig: { name: string; models: ModelDescriptor[]; }, modelGetter: (providerName: string, modelId: string) => T | null); getModels(): readonly T[]; protected getCircuitBreakers(): Map; } export declare class ChatModelSwitcher extends ModelSwitcher { private readonly visionModels; private readonly nonVisionModels; constructor(ctx: Context, groupConfig: { name: string; models: ModelDescriptor[]; }, modelGetter: (providerName: string, modelId: string) => IChatModel | null); hasVisionCapability(): boolean; chat(options: ChatRequestOptions): Promise; } export {};