import type { ChatProvider } from "@xsai-ext/shared-providers"; import type { GenerateTextResult } from "@xsai/generate-text"; import type { Message } from "@xsai/shared-chat"; import { Context } from "koishi"; import { BaseModel } from "./base-model"; import { ModelConfig } from "./config"; /** * 验证器函数的返回值 */ export interface ValidationResult { /** 内容是否有效 */ valid: boolean; /** 是否可以提前结束流并返回 */ earlyExit: boolean; /** 解析后的数据 (可选) */ parsedData?: any; /** 错误信息 (可选) */ error?: string; } /** * 自定义验证函数 * @param chunk - 当前收到的所有文本内容 * @returns ValidationResult */ export type ContentValidator = (chunk: string, final?: boolean) => ValidationResult; /** * 传递给 chat 方法的验证选项 */ export interface ValidationOptions { /** 预期的响应格式,用于选择内置验证器 */ format?: "json"; /** 自定义验证函数,优先级高于 format */ validator?: ContentValidator; } export interface ChatRequestOptions { abortSignal?: AbortSignal; onStreamStart?: () => void; validation?: ValidationOptions; messages: Message[]; stream?: boolean; temperature?: number; topP?: number; [key: string]: any; } export interface IChatModel extends BaseModel { chat(options: ChatRequestOptions): Promise; isVisionModel(): boolean; } /** * ChatModel 类提供了与大语言模型进行聊天交互的核心功能 * 它封装了流式与非流式请求、参数合并、内容验证以及统一的错误处理逻辑 */ export declare class ChatModel extends BaseModel implements IChatModel { private readonly chatProvider; private readonly fetch; private readonly customParameters; constructor(ctx: Context, chatProvider: ChatProvider["chat"], modelConfig: ModelConfig, fetch: typeof globalThis.fetch); isVisionModel(): boolean; /** * 解析并加载模型配置文件中的自定义参数 */ private parseCustomParameters; /** * 发起聊天请求的核心方法 * 根据配置和运行时参数,自动选择流式或非流式处理 */ chat(options: ChatRequestOptions): Promise; /** * 构建最终传递给 @xsai/shared-chat 的选项对象。 * 该方法实现了参数的优先级合并。 */ private buildChatOptions; /** * 执行非流式请求 */ private _executeNonStream; /** * 执行流式请求,并处理实时内容验证。 */ private _executeStream; private _getValidator; private _wrapAndThrow; }