import { type ChannelsConfig } from '../../core/config/desktop-config.js'; import { AgentConfigService } from '../agent-config/agent-config.service.js'; /** 模型 cost 配置,写入 models.json;缺省均为 0 */ export interface ModelCost { input?: number; output?: number; cacheRead?: number; cacheWrite?: number; } /** 已配置的模型项(备用模型列表中的一条),新增时需选类型 */ export interface ConfiguredModelItem { provider: string; modelId: string; /** 模型类型:llm / embedding / image 等,用于在不同场景筛选 */ type: 'llm' | 'embedding' | 'image'; /** 显示用别名,缺省用模型名;重名时自动加后缀区分 */ alias?: string; /** 唯一编码,供界面与 agent.modelItemCode 匹配已设好的模型 */ modelItemCode?: string; /** 是否推理模型,缺省 false;写入 models.json */ reasoning?: boolean; /** 成本配置,缺省均为 0;写入 models.json */ cost?: ModelCost; /** 上下文窗口,缺省 64000;写入 models.json */ contextWindow?: number; /** 最大 token,缺省 8192;写入 models.json */ maxTokens?: number; } export interface AppConfig { gatewayUrl: string; defaultProvider: string; defaultModel: string; /** 缺省模型在 configuredModels 中的唯一标识(defaultModelItemCode),与 defaultProvider/defaultModel 一起确定缺省模型 */ defaultModelItemCode?: string; /** 缺省智能体 id */ defaultAgentId?: string; theme: 'light' | 'dark'; /** 同时存在的聊天 AgentSession 上限,超过时淘汰最久未用的 */ maxAgentSessions?: number; /** 登录用户名,未配置时使用缺省(与缺省密码 123456 搭配) */ loginUsername?: string; /** 登录密码,未配置时使用缺省 123456 */ loginPassword?: string; providers: { [key: string]: { apiKey?: string; baseUrl?: string; /** 显示用别名,缺省用 provider 名;重名时自动加后缀区分 */ alias?: string; }; }; /** 已配置的模型列表(备用),从该列表中选一个为缺省模型 */ configuredModels?: ConfiguredModelItem[]; /** RAG 知识库:向量模型(本地/在线)+ 向量库(本地/远程 Qdrant) */ rag?: { embeddingSource?: 'local' | 'online'; embeddingModelItemCode?: string; localModelPath?: string; embeddingProvider?: string; embeddingModel?: string; vectorStore?: 'local' | 'qdrant'; qdrant?: { url: string; apiKey?: string; collection?: string; }; }; /** Memory 记忆库:为 Agent 提供默认嵌入模型 */ memory?: { embeddingModelItemCode?: string; }; /** 通道配置:飞书、Telegram 等 token/key */ channels?: ChannelsConfig; /** 工具相关:在线搜索等,Brave API Key 存于 providers.brave.apiKey */ tools?: { webSearch?: { defaultProvider?: 'brave' | 'duck-duck-scrape'; providers?: { brave?: { apiKey?: string; }; }; timeoutSeconds?: number; cacheTtlMinutes?: number; maxResults?: number; }; }; } export declare class ConfigService { private readonly agentConfigService; private configPath; private config; constructor(agentConfigService: AgentConfigService); /** 预装本地推理缺省:与 desktop-config 的 DEFAULT_LOCAL_LLM_MODEL_ID / DEFAULT_LOCAL_MODEL_ITEM_CODE 一致 */ private static readonly DEFAULT_LOCAL_MODEL_ID; private static readonly DEFAULT_LOCAL_MODEL_ITEM_CODE; private getDefaultConfig; /** 当前缺省智能体 id */ getDefaultAgentId(config?: AppConfig): string; private loadConfig; /** 每次获取前从磁盘重新读取,保证打开配置界面时显示最新(含 CLI 写入的配置)。本地 LLM 可用时注入 local 与缺省模型项;OLLAMA_BASE_URL 时注入 ollama baseUrl(如与 Ollama 同栈)。 */ getConfig(): Promise; updateConfig(updates: Partial): Promise; private saveConfig; /** 支持的 provider 列表(来自 provider-support.json,供配置时下拉) */ getProviders(): Promise; /** 某 provider 下的可用模型(来自 provider-support);可按 type 筛选(llm/embedding/image/audio/video) */ getModels(provider: string, type?: string): Promise<{ id: string; name: string; types?: string[]; }[]>; /** 完整 provider 目录(支持列表 + 各 provider 的模型),供前端一次拉取 */ getProviderSupport(): Promise; }