UNPKG

@lobehub/chat

Version:

Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.

353 lines (316 loc) 7.49 kB
import { z } from 'zod'; export type ModelPriceCurrency = 'CNY' | 'USD'; export const AiModelSourceEnum = { Builtin: 'builtin', Custom: 'custom', Remote: 'remote', } as const; export type AiModelSourceType = (typeof AiModelSourceEnum)[keyof typeof AiModelSourceEnum]; export type AiModelType = | 'chat' | 'embedding' | 'tts' | 'stt' | 'image' | 'text2video' | 'text2music' | 'realtime'; export interface ModelAbilities { /** * whether model supports file upload */ files?: boolean; /** * whether model supports function call */ functionCall?: boolean; /** * whether model supports image output */ imageOutput?: boolean; /** * whether model supports reasoning */ reasoning?: boolean; /** * whether model supports search web */ search?: boolean; /** * whether model supports vision */ vision?: boolean; } const AiModelAbilitiesSchema = z.object({ // files: z.boolean().optional(), functionCall: z.boolean().optional(), reasoning: z.boolean().optional(), vision: z.boolean().optional(), }); // 语言模型的设置参数 export interface LLMParams { /** * 控制生成文本中的惩罚系数,用于减少重复性 * @default 0 */ frequency_penalty?: number; /** * 生成文本的最大长度 */ max_tokens?: number; /** * 控制生成文本中的惩罚系数,用于减少主题的变化 * @default 0 */ presence_penalty?: number; /** * 生成文本的随机度量,用于控制文本的创造性和多样性 * @default 1 */ temperature?: number; /** * 控制生成文本中最高概率的单个 token * @default 1 */ top_p?: number; } export interface BasicModelPricing { /** * the currency of the pricing * @default USD */ currency?: ModelPriceCurrency; /** * the input pricing, e.g. $1 / 1M tokens */ input?: number; } export interface ChatModelPricing extends BasicModelPricing { audioInput?: number; audioOutput?: number; cachedAudioInput?: number; cachedInput?: number; /** * the output pricing, e.g. $2 / 1M tokens */ output?: number; writeCacheInput?: number; } export interface AIBaseModelCard { /** * the context window (or input + output tokens limit) */ contextWindowTokens?: number; description?: string; /** * the name show for end user */ displayName?: string; enabled?: boolean; id: string; /** * whether model is legacy (deprecated but not removed yet) */ legacy?: boolean; /** * who create this model */ organization?: string; releasedAt?: string; } export interface AiModelConfig { /** * used in azure and volcengine */ deploymentName?: string; /** * qwen series model enabled search */ enabledSearch?: boolean; } export type ModelSearchImplementType = 'tool' | 'params' | 'internal'; export type ExtendParamsType = | 'reasoningBudgetToken' | 'enableReasoning' | 'disableContextCaching' | 'reasoningEffort'; export interface AiModelSettings { extendParams?: ExtendParamsType[]; /** * 模型层实现搜索的方式 */ searchImpl?: ModelSearchImplementType; searchProvider?: string; } export interface AIChatModelCard extends AIBaseModelCard { abilities?: ModelAbilities; config?: AiModelConfig; maxOutput?: number; pricing?: ChatModelPricing; settings?: AiModelSettings; type: 'chat'; } export interface AIEmbeddingModelCard extends AIBaseModelCard { maxDimension: number; pricing?: { /** * the currency of the pricing * @default USD */ currency?: ModelPriceCurrency; /** * the input pricing, e.g. $1 / 1M tokens */ input?: number; }; type: 'embedding'; } export interface AIText2ImageModelCard extends AIBaseModelCard { pricing?: { /** * the currency of the pricing * @default USD */ currency?: ModelPriceCurrency; } & Record<string, number>; // [resolution: string]: number; resolutions: string[]; type: 'image'; } export interface AITTSModelCard extends AIBaseModelCard { pricing?: { /** * the currency of the pricing * @default USD */ currency?: ModelPriceCurrency; /** * the input pricing, e.g. $1 / 1M tokens */ input?: number; }; type: 'tts'; } export interface AISTTModelCard extends AIBaseModelCard { pricing?: { /** * the currency of the pricing * @default USD */ currency?: ModelPriceCurrency; /** * the input pricing, e.g. $1 / 1M tokens */ input?: number; }; type: 'stt'; } export interface AIRealtimeModelCard extends AIBaseModelCard { abilities?: { /** * whether model supports file upload */ files?: boolean; /** * whether model supports function call */ functionCall?: boolean; /** * whether model supports reasoning */ reasoning?: boolean; /** * whether model supports vision */ vision?: boolean; }; /** * used in azure and volcengine */ deploymentName?: string; maxOutput?: number; pricing?: ChatModelPricing; type: 'realtime'; } export interface AiFullModelCard extends AIBaseModelCard { abilities?: ModelAbilities; config?: AiModelConfig; contextWindowTokens?: number; displayName?: string; id: string; maxDimension?: number; pricing?: ChatModelPricing; type: AiModelType; } export interface LobeDefaultAiModelListItem extends AiFullModelCard { abilities: ModelAbilities; providerId: string; } // create export const CreateAiModelSchema = z.object({ abilities: AiModelAbilitiesSchema.optional(), contextWindowTokens: z.number().optional(), displayName: z.string().optional(), id: z.string(), providerId: z.string(), releasedAt: z.string().optional(), // checkModel: z.string().optional(), // homeUrl: z.string().optional(), // modelsUrl: z.string().optional(), }); export type CreateAiModelParams = z.infer<typeof CreateAiModelSchema>; // List Query export interface AiProviderModelListItem { abilities?: ModelAbilities; config?: AiModelConfig; contextWindowTokens?: number; displayName?: string; enabled: boolean; id: string; pricing?: ChatModelPricing; releasedAt?: string; settings?: AiModelSettings; source?: AiModelSourceType; type: AiModelType; } // Update export const UpdateAiModelSchema = z.object({ abilities: AiModelAbilitiesSchema.optional(), config: z .object({ deploymentName: z.string().optional(), }) .optional(), contextWindowTokens: z.number().nullable().optional(), displayName: z.string().nullable().optional(), }); export type UpdateAiModelParams = z.infer<typeof UpdateAiModelSchema>; export interface AiModelSortMap { id: string; sort: number; } export const ToggleAiModelEnableSchema = z.object({ enabled: z.boolean(), id: z.string(), providerId: z.string(), source: z.enum(['builtin', 'custom', 'remote']).optional(), }); export type ToggleAiModelEnableParams = z.infer<typeof ToggleAiModelEnableSchema>; // export interface AiModelForSelect { abilities: ModelAbilities; contextWindowTokens?: number; displayName?: string; id: string; } export interface EnabledAiModel { abilities: ModelAbilities; config?: AiModelConfig; contextWindowTokens?: number; displayName?: string; enabled?: boolean; id: string; providerId: string; settings?: AiModelSettings; sort?: number; type: AiModelType; }