@spacex110/core 0.1.14 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/channel-manager.d.ts +276 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +156 -140
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/models.ts +5 -0
- package/src/providers.ts +11 -0
- package/dist/index.umd.js +0 -16
- package/dist/index.umd.js.map +0 -1
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import { AIConfig, Provider, Model, ModelCapability, StorageAdapter, ApiFormat } from './types';
|
|
2
|
+
|
|
3
|
+
/** 通道配置(扩展 AIConfig,包含更多元数据) */
|
|
4
|
+
export interface ChannelConfig extends AIConfig {
|
|
5
|
+
/** 通道唯一标识 */
|
|
6
|
+
id: string;
|
|
7
|
+
/** 通道名称(用户自定义) */
|
|
8
|
+
name?: string;
|
|
9
|
+
/** Provider 名称 */
|
|
10
|
+
providerName: string;
|
|
11
|
+
/** 模型显示名称 */
|
|
12
|
+
modelName: string;
|
|
13
|
+
/** API 格式 */
|
|
14
|
+
apiFormat: ApiFormat;
|
|
15
|
+
/** 模型能力列表 */
|
|
16
|
+
capabilities?: ModelCapability[];
|
|
17
|
+
/** 上下文窗口大小 */
|
|
18
|
+
contextLength?: number;
|
|
19
|
+
/** 创建时间 */
|
|
20
|
+
createdAt: number;
|
|
21
|
+
/** 最后使用时间 */
|
|
22
|
+
lastUsedAt?: number;
|
|
23
|
+
/** 连接状态 */
|
|
24
|
+
status?: 'untested' | 'connected' | 'error';
|
|
25
|
+
/** 最后错误信息 */
|
|
26
|
+
lastError?: string;
|
|
27
|
+
}
|
|
28
|
+
/** 通道管理器配置选项 */
|
|
29
|
+
export interface ChannelManagerOptions {
|
|
30
|
+
/** 存储适配器(默认使用加密存储) */
|
|
31
|
+
storageAdapter?: StorageAdapter;
|
|
32
|
+
/** 存储键名前缀 */
|
|
33
|
+
storagePrefix?: string;
|
|
34
|
+
/** 当前激活通道的存储键 */
|
|
35
|
+
activeChannelKey?: string;
|
|
36
|
+
/** 能力默认通道的存储键 */
|
|
37
|
+
capabilityDefaultsKey?: string;
|
|
38
|
+
/** 后端代理地址(可选,用于解决 CORS 问题) */
|
|
39
|
+
proxyUrl?: string;
|
|
40
|
+
}
|
|
41
|
+
/** 通道查询过滤条件 */
|
|
42
|
+
export interface ChannelFilter {
|
|
43
|
+
/** 按 Provider ID 过滤 */
|
|
44
|
+
providerId?: string;
|
|
45
|
+
/** 按 API 格式过滤 */
|
|
46
|
+
apiFormat?: ApiFormat;
|
|
47
|
+
/** 按模型能力过滤 */
|
|
48
|
+
capability?: ModelCapability;
|
|
49
|
+
/** 按连接状态过滤 */
|
|
50
|
+
status?: ChannelConfig['status'];
|
|
51
|
+
/** 关键字搜索(匹配名称、模型名、Provider 名) */
|
|
52
|
+
keyword?: string;
|
|
53
|
+
}
|
|
54
|
+
/** 聊天结果 */
|
|
55
|
+
export interface ChatResult {
|
|
56
|
+
success: boolean;
|
|
57
|
+
content?: string;
|
|
58
|
+
message?: string;
|
|
59
|
+
latencyMs?: number;
|
|
60
|
+
channelId?: string;
|
|
61
|
+
model?: string;
|
|
62
|
+
}
|
|
63
|
+
/** 事件类型 */
|
|
64
|
+
export type ChannelEventType = 'add' | 'update' | 'delete' | 'activate' | 'chat' | 'test' | 'clear';
|
|
65
|
+
type ChannelEventListener = (data: any) => void;
|
|
66
|
+
export declare class AIChannelManager {
|
|
67
|
+
private storageAdapter;
|
|
68
|
+
private channels;
|
|
69
|
+
private activeChannelId;
|
|
70
|
+
private storagePrefix;
|
|
71
|
+
private activeChannelKey;
|
|
72
|
+
private capabilityDefaultsKey;
|
|
73
|
+
private capabilityDefaults;
|
|
74
|
+
private proxyUrl?;
|
|
75
|
+
private listeners;
|
|
76
|
+
constructor(options?: ChannelManagerOptions);
|
|
77
|
+
/** 监听事件 */
|
|
78
|
+
on(event: ChannelEventType, listener: ChannelEventListener): () => void;
|
|
79
|
+
/** 取消监听 */
|
|
80
|
+
off(event: ChannelEventType, listener: ChannelEventListener): void;
|
|
81
|
+
private emit;
|
|
82
|
+
private getStorageKey;
|
|
83
|
+
private loadChannels;
|
|
84
|
+
private loadActiveChannel;
|
|
85
|
+
private saveChannel;
|
|
86
|
+
private deleteChannelFromStorage;
|
|
87
|
+
private saveActiveChannel;
|
|
88
|
+
private loadCapabilityDefaults;
|
|
89
|
+
private saveCapabilityDefaults;
|
|
90
|
+
/** 添加通道 */
|
|
91
|
+
addChannel(config: AIConfig, name?: string): Promise<ChannelConfig>;
|
|
92
|
+
/** 删除通道 */
|
|
93
|
+
deleteChannel(id: string): void;
|
|
94
|
+
/** 更新通道 */
|
|
95
|
+
updateChannel(id: string, config: Partial<AIConfig>, name?: string): Promise<ChannelConfig>;
|
|
96
|
+
/** 获取所有通道 */
|
|
97
|
+
getChannels(): ChannelConfig[];
|
|
98
|
+
/** 根据 ID 获取通道 */
|
|
99
|
+
getChannel(id: string): ChannelConfig | undefined;
|
|
100
|
+
/** 按 Provider ID 过滤通道 */
|
|
101
|
+
getChannelsByProvider(providerId: string): ChannelConfig[];
|
|
102
|
+
/** 按模型能力过滤通道(如 vision, reasoning, audio) */
|
|
103
|
+
getChannelsByCapability(capability: ModelCapability): ChannelConfig[];
|
|
104
|
+
/** 按 API 格式过滤通道(如 openai, anthropic, gemini) */
|
|
105
|
+
getChannelsByFormat(format: ApiFormat): ChannelConfig[];
|
|
106
|
+
/** 按连接状态过滤通道 */
|
|
107
|
+
getChannelsByStatus(status: ChannelConfig['status']): ChannelConfig[];
|
|
108
|
+
/** 综合条件查询通道 */
|
|
109
|
+
queryChannels(filter: ChannelFilter): ChannelConfig[];
|
|
110
|
+
/** 获取通道数量 */
|
|
111
|
+
getChannelCount(): number;
|
|
112
|
+
/** 获取当前激活的通道 */
|
|
113
|
+
getActiveChannel(): ChannelConfig | undefined;
|
|
114
|
+
/** 设置当前激活的通道 */
|
|
115
|
+
setActiveChannel(id: string): void;
|
|
116
|
+
/** 清除当前激活的通道 */
|
|
117
|
+
clearActiveChannel(): void;
|
|
118
|
+
/**
|
|
119
|
+
* 为指定能力类型设置默认通道
|
|
120
|
+
* 当调用 getChannelForCapability 时,优先返回此通道
|
|
121
|
+
*/
|
|
122
|
+
setDefaultForCapability(capability: ModelCapability, channelId: string): void;
|
|
123
|
+
/**
|
|
124
|
+
* 获取指定能力类型的默认通道 ID
|
|
125
|
+
* 返回 undefined 表示未设置
|
|
126
|
+
*/
|
|
127
|
+
getDefaultForCapability(capability: ModelCapability): string | undefined;
|
|
128
|
+
/**
|
|
129
|
+
* 清除指定能力类型的默认通道
|
|
130
|
+
*/
|
|
131
|
+
clearDefaultForCapability(capability: ModelCapability): void;
|
|
132
|
+
/**
|
|
133
|
+
* 获取所有能力类型的默认通道映射
|
|
134
|
+
* 返回 { capability: channelId } 的对象
|
|
135
|
+
*/
|
|
136
|
+
getAllCapabilityDefaults(): Record<string, string>;
|
|
137
|
+
/**
|
|
138
|
+
* 根据能力类型获取最适合的通道(带降级链)
|
|
139
|
+
*
|
|
140
|
+
* 降级链:
|
|
141
|
+
* 1. 该能力类型的显式默认通道
|
|
142
|
+
* 2. 具有该能力且最后使用时间最新的通道
|
|
143
|
+
* 3. 全局激活通道
|
|
144
|
+
* 4. 第一个可用通道
|
|
145
|
+
*/
|
|
146
|
+
getChannelForCapability(capability: ModelCapability): ChannelConfig | undefined;
|
|
147
|
+
/**
|
|
148
|
+
* 使用指定能力类型的默认通道发送聊天请求
|
|
149
|
+
* 自动选择合适的通道,无需手动指定 channelId
|
|
150
|
+
*/
|
|
151
|
+
chatForCapability(capability: ModelCapability, message: string, options?: {
|
|
152
|
+
messages?: Array<{
|
|
153
|
+
role: string;
|
|
154
|
+
content: string;
|
|
155
|
+
}>;
|
|
156
|
+
maxTokens?: number;
|
|
157
|
+
}): Promise<ChatResult>;
|
|
158
|
+
/**
|
|
159
|
+
* 使用指定能力类型的默认通道发送流式聊天请求
|
|
160
|
+
*/
|
|
161
|
+
chatStreamForCapability(capability: ModelCapability, message: string, options?: {
|
|
162
|
+
messages?: Array<{
|
|
163
|
+
role: string;
|
|
164
|
+
content: string;
|
|
165
|
+
}>;
|
|
166
|
+
maxTokens?: number;
|
|
167
|
+
signal?: AbortSignal;
|
|
168
|
+
onDelta?: (full: string) => void;
|
|
169
|
+
}): Promise<ChatResult>;
|
|
170
|
+
/** 获取 Provider 的可用模型列表(动态获取 + 静态兜底) */
|
|
171
|
+
getProviderModels(providerId: string, apiKey?: string, baseUrl?: string): Promise<Model[]>;
|
|
172
|
+
/** 获取通道对应的 Provider 的模型列表 */
|
|
173
|
+
getChannelModels(id: string): Promise<Model[]>;
|
|
174
|
+
/** 获取 Provider 的静态模型列表(不发起网络请求) */
|
|
175
|
+
getStaticModelList(providerId: string): Model[];
|
|
176
|
+
/** 按能力过滤模型列表 */
|
|
177
|
+
getModelsByCapability(models: Model[], capability: ModelCapability): Model[];
|
|
178
|
+
/** 获取所有已配置的模型摘要列表 */
|
|
179
|
+
getConfiguredModels(): Array<{
|
|
180
|
+
channelId: string;
|
|
181
|
+
providerId: string;
|
|
182
|
+
providerName: string;
|
|
183
|
+
model: string;
|
|
184
|
+
modelName: string;
|
|
185
|
+
apiFormat: ApiFormat;
|
|
186
|
+
capabilities: ModelCapability[];
|
|
187
|
+
status: ChannelConfig['status'];
|
|
188
|
+
}>;
|
|
189
|
+
/** 更新通道的 API Key */
|
|
190
|
+
updateApiKey(id: string, apiKey: string): Promise<ChannelConfig>;
|
|
191
|
+
/** 验证 API Key 格式(简单校验,非空且长度合理) */
|
|
192
|
+
validateApiKey(providerId: string, apiKey: string): {
|
|
193
|
+
valid: boolean;
|
|
194
|
+
message?: string;
|
|
195
|
+
};
|
|
196
|
+
/** 脱敏显示 API Key(如 sk-••••••••J4xK) */
|
|
197
|
+
maskApiKey(apiKey: string): string;
|
|
198
|
+
/** 获取通道的脱敏 API Key */
|
|
199
|
+
getMaskedApiKey(id: string): string;
|
|
200
|
+
/** 使用当前激活的通道发送聊天请求 */
|
|
201
|
+
chat(message: string, options?: {
|
|
202
|
+
messages?: Array<{
|
|
203
|
+
role: string;
|
|
204
|
+
content: string;
|
|
205
|
+
}>;
|
|
206
|
+
maxTokens?: number;
|
|
207
|
+
}): Promise<ChatResult>;
|
|
208
|
+
/** 使用指定通道发送聊天请求 */
|
|
209
|
+
chatWith(channelId: string, message: string, options?: {
|
|
210
|
+
messages?: Array<{
|
|
211
|
+
role: string;
|
|
212
|
+
content: string;
|
|
213
|
+
}>;
|
|
214
|
+
maxTokens?: number;
|
|
215
|
+
}): Promise<ChatResult>;
|
|
216
|
+
/** 使用当前激活通道发送流式聊天。onDelta 每次收到「累计完整文本」。 */
|
|
217
|
+
chatStream(message: string, options: {
|
|
218
|
+
messages?: Array<{
|
|
219
|
+
role: string;
|
|
220
|
+
content: string;
|
|
221
|
+
}>;
|
|
222
|
+
maxTokens?: number;
|
|
223
|
+
onDelta: (full: string) => void;
|
|
224
|
+
signal?: AbortSignal;
|
|
225
|
+
}): Promise<ChatResult>;
|
|
226
|
+
/** 使用指定通道发送流式聊天。onDelta 每次收到「累计完整文本」。 */
|
|
227
|
+
chatWithStream(channelId: string, message: string, options: {
|
|
228
|
+
messages?: Array<{
|
|
229
|
+
role: string;
|
|
230
|
+
content: string;
|
|
231
|
+
}>;
|
|
232
|
+
maxTokens?: number;
|
|
233
|
+
onDelta: (full: string) => void;
|
|
234
|
+
signal?: AbortSignal;
|
|
235
|
+
}): Promise<ChatResult>;
|
|
236
|
+
/** 测试指定通道的连接 */
|
|
237
|
+
testChannel(id: string): Promise<{
|
|
238
|
+
success: boolean;
|
|
239
|
+
latencyMs?: number;
|
|
240
|
+
message?: string;
|
|
241
|
+
}>;
|
|
242
|
+
/** 测试所有通道连接 */
|
|
243
|
+
testAllChannels(): Promise<Array<{
|
|
244
|
+
id: string;
|
|
245
|
+
channel: ChannelConfig;
|
|
246
|
+
result: {
|
|
247
|
+
success: boolean;
|
|
248
|
+
latencyMs?: number;
|
|
249
|
+
message?: string;
|
|
250
|
+
};
|
|
251
|
+
}>>;
|
|
252
|
+
/** 获取所有可用的 Provider */
|
|
253
|
+
getAvailableProviders(): Provider[];
|
|
254
|
+
/** 获取单个 Provider 信息 */
|
|
255
|
+
getProvider(providerId: string): Provider | undefined;
|
|
256
|
+
/** 按 API 格式获取 Provider 列表 */
|
|
257
|
+
getProvidersByFormat(format: ApiFormat): Provider[];
|
|
258
|
+
/** 导出所有通道配置(不包含 API Key 明文) */
|
|
259
|
+
exportChannels(includeApiKeys?: boolean): string;
|
|
260
|
+
/** 导入通道配置 */
|
|
261
|
+
importChannels(json: string, merge?: boolean): Promise<ChannelConfig[]>;
|
|
262
|
+
/** 清空所有通道 */
|
|
263
|
+
clearAllChannels(): void;
|
|
264
|
+
/** 批量删除通道 */
|
|
265
|
+
deleteChannels(ids: string[]): void;
|
|
266
|
+
/** 获取统计信息 */
|
|
267
|
+
getStats(): {
|
|
268
|
+
total: number;
|
|
269
|
+
byStatus: Record<string, number>;
|
|
270
|
+
byFormat: Record<string, number>;
|
|
271
|
+
byProvider: Record<string, number>;
|
|
272
|
+
byCapability: Record<string, number>;
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
export {};
|
|
276
|
+
//# sourceMappingURL=channel-manager.d.ts.map
|