@cherrystudio/ai-core
Version:
Cherry Studio AI Core - Unified AI Provider Interface Based on Vercel AI SDK
78 lines (77 loc) • 3.51 kB
text/typescript
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 };