UNPKG

@cherrystudio/ai-core

Version:

Cherry Studio AI Core - Unified AI Provider Interface Based on Vercel AI SDK

78 lines (77 loc) 3.51 kB
import { l as ProviderId, t as AiSdkModel } from "./index-CCQe5Cuy.mjs"; import { ImageModel, LanguageModel, LanguageModelMiddleware, TextStreamPart, ToolSet, generateText, streamText } from "ai"; import { JSONObject, JSONValue } from "@ai-sdk/provider"; //#region src/core/plugins/types.d.ts /** * 常用的 AI SDK 参数类型(完整版,用于插件泛型) */ type StreamTextParams = Parameters<typeof streamText>[0]; type StreamTextResult = ReturnType<typeof streamText>; type GenerateTextParams = Parameters<typeof generateText>[0]; type GenerateTextResult = ReturnType<typeof generateText>; /** * AI 请求元数据 * 定义结构化的元数据字段,避免使用 Record<string, any> */ interface AiRequestMetadata { topicId?: string; callType?: string; enableReasoning?: boolean; enableWebSearch?: boolean; enableGenerateImage?: boolean; isPromptToolUse?: boolean; isSupportedToolUse?: boolean; custom?: JSONObject; } /** * 递归调用函数类型 * 泛型化以保持类型推导 */ type RecursiveCallFn<TParams = unknown, TResult = unknown> = (newParams: Partial<TParams>) => Promise<TResult>; /** * AI 请求上下文 * 使用泛型参数以支持不同类型的请求 */ interface AiRequestContext<TParams = unknown, TResult = unknown> { providerId: ProviderId; model: AiSdkModel; originalParams: TParams; metadata: AiRequestMetadata; startTime: number; requestId: string; recursiveCall: RecursiveCallFn<TParams, TResult>; isRecursiveCall: boolean; recursiveDepth: number; maxRecursiveDepth: number; mcpTools?: ToolSet; extensions: Map<string, JSONValue>; middlewares?: LanguageModelMiddleware[]; [key: string]: any; } /** * 钩子分类 * 使用泛型参数以支持不同类型的请求和响应 */ interface AiPlugin<TParams = unknown, TResult = unknown> { name: string; enforce?: 'pre' | 'post'; resolveModel?: (modelId: string, context: AiRequestContext<TParams, TResult>) => Promise<AiSdkModel | null> | AiSdkModel | null; loadTemplate?: (templateName: string, context: AiRequestContext<TParams, TResult>) => JSONValue | null | Promise<JSONValue | null>; configureContext?: (context: AiRequestContext<TParams, TResult>) => void | Promise<void>; transformParams?: (params: TParams, context: AiRequestContext<TParams, TResult>) => Partial<TParams> | Promise<Partial<TParams>>; transformResult?: (result: TResult, context: AiRequestContext<TParams, TResult>) => TResult | Promise<TResult>; onRequestStart?: (context: AiRequestContext<TParams, TResult>) => void | Promise<void>; onRequestEnd?: (context: AiRequestContext<TParams, TResult>, result: TResult) => void | Promise<void>; onError?: (error: Error, context: AiRequestContext<TParams, TResult>) => void | Promise<void>; transformStream?: (params: TParams, context: AiRequestContext<TParams, TResult>) => <TOOLS extends ToolSet>(options?: { tools: TOOLS; stopStream: () => void; }) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>; } //#endregion //#region src/core/plugins/index.d.ts declare function definePlugin<TParams, TResult>(plugin: AiPlugin<TParams, TResult>): AiPlugin<TParams, TResult>; declare function definePlugin(plugin: AiPlugin): AiPlugin; declare function definePlugin<T extends (...args: any[]) => AiPlugin>(pluginFactory: T): T; //#endregion export { GenerateTextResult as a, GenerateTextParams as i, AiPlugin as n, StreamTextParams as o, AiRequestContext as r, StreamTextResult as s, definePlugin as t };