@zhin.js/ai 0.0.1 → 1.0.0

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.
Files changed (46) hide show
  1. package/LICENSE +21 -0
  2. package/lib/agent.d.ts +84 -0
  3. package/lib/agent.d.ts.map +1 -0
  4. package/lib/agent.js +384 -0
  5. package/lib/agent.js.map +1 -0
  6. package/lib/context-manager.d.ts +213 -0
  7. package/lib/context-manager.d.ts.map +1 -0
  8. package/lib/context-manager.js +306 -0
  9. package/lib/context-manager.js.map +1 -0
  10. package/lib/index.d.ts +167 -0
  11. package/lib/index.d.ts.map +1 -0
  12. package/lib/index.js +1126 -0
  13. package/lib/index.js.map +1 -0
  14. package/lib/providers/anthropic.d.ts +23 -0
  15. package/lib/providers/anthropic.d.ts.map +1 -0
  16. package/lib/providers/anthropic.js +322 -0
  17. package/lib/providers/anthropic.js.map +1 -0
  18. package/lib/providers/base.d.ts +43 -0
  19. package/lib/providers/base.d.ts.map +1 -0
  20. package/lib/providers/base.js +135 -0
  21. package/lib/providers/base.js.map +1 -0
  22. package/lib/providers/index.d.ts +12 -0
  23. package/lib/providers/index.d.ts.map +1 -0
  24. package/lib/providers/index.js +9 -0
  25. package/lib/providers/index.js.map +1 -0
  26. package/lib/providers/ollama.d.ts +25 -0
  27. package/lib/providers/ollama.d.ts.map +1 -0
  28. package/lib/providers/ollama.js +236 -0
  29. package/lib/providers/ollama.js.map +1 -0
  30. package/lib/providers/openai.d.ts +46 -0
  31. package/lib/providers/openai.d.ts.map +1 -0
  32. package/lib/providers/openai.js +132 -0
  33. package/lib/providers/openai.js.map +1 -0
  34. package/lib/session.d.ts +186 -0
  35. package/lib/session.d.ts.map +1 -0
  36. package/lib/session.js +436 -0
  37. package/lib/session.js.map +1 -0
  38. package/lib/tools.d.ts +45 -0
  39. package/lib/tools.d.ts.map +1 -0
  40. package/lib/tools.js +194 -0
  41. package/lib/tools.js.map +1 -0
  42. package/lib/types.d.ts +243 -0
  43. package/lib/types.d.ts.map +1 -0
  44. package/lib/types.js +6 -0
  45. package/lib/types.js.map +1 -0
  46. package/package.json +10 -10
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @zhin.js/ai - Providers Index
3
+ * 导出所有 Provider
4
+ */
5
+ export { BaseProvider } from './base.js';
6
+ export { OpenAIProvider, DeepSeekProvider, MoonshotProvider, ZhipuProvider } from './openai.js';
7
+ export { AnthropicProvider } from './anthropic.js';
8
+ export { OllamaProvider } from './ollama.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @zhin.js/ai - Ollama Provider
3
+ * 支持本地 Ollama 模型
4
+ */
5
+ import { BaseProvider } from './base.js';
6
+ import type { ProviderConfig, ChatCompletionRequest, ChatCompletionResponse, ChatCompletionChunk } from '../types.js';
7
+ export interface OllamaConfig extends ProviderConfig {
8
+ host?: string;
9
+ models?: string[];
10
+ }
11
+ export declare class OllamaProvider extends BaseProvider {
12
+ name: string;
13
+ models: string[];
14
+ private host;
15
+ constructor(config?: OllamaConfig);
16
+ chat(request: ChatCompletionRequest): Promise<ChatCompletionResponse>;
17
+ chatStream(request: ChatCompletionRequest): AsyncIterable<ChatCompletionChunk>;
18
+ listModels(): Promise<string[]>;
19
+ /**
20
+ * 拉取模型
21
+ */
22
+ pullModel(model: string): Promise<void>;
23
+ healthCheck(): Promise<boolean>;
24
+ }
25
+ //# sourceMappingURL=ollama.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EAGpB,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AA2DD,qBAAa,cAAe,SAAQ,YAAY;IAC9C,IAAI,SAAY;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,OAAO,CAAC,IAAI,CAAS;gBAET,MAAM,GAAE,YAAiB;IAoB/B,IAAI,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAsEpE,UAAU,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa,CAAC,mBAAmB,CAAC;IA6E/E,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAWrC;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAQtC"}
@@ -0,0 +1,236 @@
1
+ /**
2
+ * @zhin.js/ai - Ollama Provider
3
+ * 支持本地 Ollama 模型
4
+ */
5
+ import { Logger } from '@zhin.js/core';
6
+ import { BaseProvider } from './base.js';
7
+ const logger = new Logger(null, 'Ollama');
8
+ /**
9
+ * 转换消息格式
10
+ */
11
+ function toOllamaMessages(messages) {
12
+ return messages.map(msg => {
13
+ let content;
14
+ const images = [];
15
+ if (typeof msg.content === 'string') {
16
+ content = msg.content;
17
+ }
18
+ else {
19
+ content = msg.content
20
+ .filter(p => p.type === 'text')
21
+ .map(p => p.text)
22
+ .join('');
23
+ for (const part of msg.content) {
24
+ if (part.type === 'image_url') {
25
+ const url = part.image_url.url;
26
+ if (url.startsWith('data:')) {
27
+ // 提取 base64 数据
28
+ const base64 = url.split(',')[1];
29
+ if (base64)
30
+ images.push(base64);
31
+ }
32
+ }
33
+ }
34
+ }
35
+ const result = {
36
+ role: msg.role === 'tool' ? 'user' : msg.role,
37
+ content,
38
+ };
39
+ if (images.length > 0) {
40
+ result.images = images;
41
+ }
42
+ return result;
43
+ });
44
+ }
45
+ /**
46
+ * 转换工具定义
47
+ */
48
+ function toOllamaTools(tools) {
49
+ if (!tools?.length)
50
+ return undefined;
51
+ return tools.map(tool => ({
52
+ type: 'function',
53
+ function: {
54
+ name: tool.function.name,
55
+ description: tool.function.description,
56
+ parameters: tool.function.parameters,
57
+ },
58
+ }));
59
+ }
60
+ export class OllamaProvider extends BaseProvider {
61
+ name = 'ollama';
62
+ models;
63
+ host;
64
+ constructor(config = {}) {
65
+ super(config);
66
+ this.host = config.host || config.baseUrl || 'http://localhost:11434';
67
+ // 使用配置中的模型列表,如果没有则使用默认列表
68
+ this.models = config.models?.length ? config.models : [
69
+ 'llama3.3',
70
+ 'llama3.2',
71
+ 'llama3.1',
72
+ 'qwen2.5',
73
+ 'qwen2.5-coder',
74
+ 'deepseek-r1',
75
+ 'deepseek-v3',
76
+ 'mistral',
77
+ 'mixtral',
78
+ 'phi4',
79
+ 'gemma2',
80
+ ];
81
+ logger.debug(`初始化完成, host: ${this.host}`);
82
+ }
83
+ async chat(request) {
84
+ const messages = toOllamaMessages(request.messages);
85
+ logger.debug(`请求 ${request.model}, 消息: ${messages.length}`);
86
+ const ollamaRequest = {
87
+ model: request.model,
88
+ messages,
89
+ stream: false,
90
+ options: {},
91
+ };
92
+ if (request.temperature !== undefined) {
93
+ ollamaRequest.options.temperature = request.temperature;
94
+ }
95
+ if (request.top_p !== undefined) {
96
+ ollamaRequest.options.top_p = request.top_p;
97
+ }
98
+ if (request.max_tokens !== undefined) {
99
+ ollamaRequest.options.num_predict = request.max_tokens;
100
+ }
101
+ const tools = toOllamaTools(request.tools);
102
+ if (tools) {
103
+ ollamaRequest.tools = tools;
104
+ }
105
+ const startTime = Date.now();
106
+ const response = await this.fetch(`${this.host}/api/chat`, {
107
+ method: 'POST',
108
+ json: ollamaRequest,
109
+ });
110
+ logger.debug(`响应耗时: ${Date.now() - startTime}ms, 工具调用: ${response.message?.tool_calls?.length || 0}`);
111
+ // 转换响应格式
112
+ const toolCalls = response.message?.tool_calls?.map((tc, i) => ({
113
+ id: `call_${i}`,
114
+ type: 'function',
115
+ function: {
116
+ name: tc.function.name,
117
+ arguments: JSON.stringify(tc.function.arguments),
118
+ },
119
+ }));
120
+ return {
121
+ id: `ollama-${Date.now()}`,
122
+ object: 'chat.completion',
123
+ created: Date.now(),
124
+ model: response.model,
125
+ choices: [{
126
+ index: 0,
127
+ message: {
128
+ role: 'assistant',
129
+ content: response.message?.content || '',
130
+ tool_calls: toolCalls?.length ? toolCalls : undefined,
131
+ },
132
+ finish_reason: toolCalls?.length ? 'tool_calls' : 'stop',
133
+ }],
134
+ usage: {
135
+ prompt_tokens: response.prompt_eval_count || 0,
136
+ completion_tokens: response.eval_count || 0,
137
+ total_tokens: (response.prompt_eval_count || 0) + (response.eval_count || 0),
138
+ },
139
+ };
140
+ }
141
+ async *chatStream(request) {
142
+ const messages = toOllamaMessages(request.messages);
143
+ const ollamaRequest = {
144
+ model: request.model,
145
+ messages,
146
+ stream: true,
147
+ options: {},
148
+ };
149
+ if (request.temperature !== undefined) {
150
+ ollamaRequest.options.temperature = request.temperature;
151
+ }
152
+ if (request.top_p !== undefined) {
153
+ ollamaRequest.options.top_p = request.top_p;
154
+ }
155
+ const response = await globalThis.fetch(`${this.host}/api/chat`, {
156
+ method: 'POST',
157
+ headers: { 'Content-Type': 'application/json' },
158
+ body: JSON.stringify(ollamaRequest),
159
+ });
160
+ if (!response.ok) {
161
+ const error = await response.text();
162
+ throw new Error(`Ollama API Error (${response.status}): ${error}`);
163
+ }
164
+ if (!response.body) {
165
+ throw new Error('Response body is empty');
166
+ }
167
+ const reader = response.body.getReader();
168
+ const decoder = new TextDecoder();
169
+ let buffer = '';
170
+ const id = `ollama-${Date.now()}`;
171
+ while (true) {
172
+ const { done, value } = await reader.read();
173
+ if (done)
174
+ break;
175
+ buffer += decoder.decode(value, { stream: true });
176
+ const lines = buffer.split('\n');
177
+ buffer = lines.pop() || '';
178
+ for (const line of lines) {
179
+ if (!line.trim())
180
+ continue;
181
+ try {
182
+ const data = JSON.parse(line);
183
+ yield {
184
+ id,
185
+ object: 'chat.completion.chunk',
186
+ created: Date.now(),
187
+ model: data.model || request.model,
188
+ choices: [{
189
+ index: 0,
190
+ delta: data.done
191
+ ? {}
192
+ : { content: data.message?.content || '' },
193
+ finish_reason: data.done ? 'stop' : null,
194
+ }],
195
+ usage: data.done ? {
196
+ prompt_tokens: data.prompt_eval_count || 0,
197
+ completion_tokens: data.eval_count || 0,
198
+ total_tokens: (data.prompt_eval_count || 0) + (data.eval_count || 0),
199
+ } : undefined,
200
+ };
201
+ }
202
+ catch {
203
+ // 忽略解析错误
204
+ }
205
+ }
206
+ }
207
+ }
208
+ async listModels() {
209
+ try {
210
+ const response = await this.fetch(`${this.host}/api/tags`);
211
+ return response.models.map(m => m.name);
212
+ }
213
+ catch {
214
+ return this.models;
215
+ }
216
+ }
217
+ /**
218
+ * 拉取模型
219
+ */
220
+ async pullModel(model) {
221
+ await this.fetch(`${this.host}/api/pull`, {
222
+ method: 'POST',
223
+ json: { name: model },
224
+ });
225
+ }
226
+ async healthCheck() {
227
+ try {
228
+ await globalThis.fetch(`${this.host}/api/tags`);
229
+ return true;
230
+ }
231
+ catch {
232
+ return false;
233
+ }
234
+ }
235
+ }
236
+ //# sourceMappingURL=ollama.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAUzC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAO1C;;GAEG;AACH,SAAS,gBAAgB,CAAC,QAAuB;IAC/C,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACxB,IAAI,OAAe,CAAC;QACpB,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,GAAG,CAAC,OAAO;iBAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;iBAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAoC,CAAC,IAAI,CAAC;iBACpD,IAAI,CAAC,EAAE,CAAC,CAAC;YAEZ,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;oBAC/B,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC5B,eAAe;wBACf,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjC,IAAI,MAAM;4BAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAQ;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI;YAC7C,OAAO;SACR,CAAC;QAEF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACzB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,KAAwB;IAC7C,IAAI,CAAC,KAAK,EAAE,MAAM;QAAE,OAAO,SAAS,CAAC;IAErC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE;YACR,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;YACxB,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;YACtC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU;SACrC;KACF,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,OAAO,cAAe,SAAQ,YAAY;IAC9C,IAAI,GAAG,QAAQ,CAAC;IAChB,MAAM,CAAW;IAET,IAAI,CAAS;IAErB,YAAY,SAAuB,EAAE;QACnC,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,IAAI,wBAAwB,CAAC;QACtE,yBAAyB;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACpD,UAAU;YACV,UAAU;YACV,UAAU;YACV,SAAS;YACT,eAAe;YACf,aAAa;YACb,aAAa;YACb,SAAS;YACT,SAAS;YACT,MAAM;YACN,QAAQ;SACT,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAA8B;QACvC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEpD,MAAM,CAAC,KAAK,CAAC,MAAM,OAAO,CAAC,KAAK,SAAS,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAE5D,MAAM,aAAa,GAAQ;YACzB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ;YACR,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE;SACZ,CAAC;QAEF,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,aAAa,CAAC,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAC1D,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAChC,aAAa,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9C,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACrC,aAAa,CAAC,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;QACzD,CAAC;QAED,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,KAAK,EAAE,CAAC;YACV,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC;QAC9B,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAM,GAAG,IAAI,CAAC,IAAI,WAAW,EAAE;YAC9D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,aAAa,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QAEtG,SAAS;QACT,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,EAAO,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC;YAC3E,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,IAAI,EAAE,UAAmB;YACzB,QAAQ,EAAE;gBACR,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;gBACtB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;aACjD;SACF,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,EAAE,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,EAAE;YAC1B,MAAM,EAAE,iBAAiB;YACzB,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;YACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,OAAO,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,OAAO,EAAE;wBACP,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE;wBACxC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;qBACtD;oBACD,aAAa,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM;iBACzD,CAAC;YACF,KAAK,EAAE;gBACL,aAAa,EAAE,QAAQ,CAAC,iBAAiB,IAAI,CAAC;gBAC9C,iBAAiB,EAAE,QAAQ,CAAC,UAAU,IAAI,CAAC;gBAC3C,YAAY,EAAE,CAAC,QAAQ,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC;aAC7E;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,CAAC,UAAU,CAAC,OAA8B;QAC9C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEpD,MAAM,aAAa,GAAQ;YACzB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ;YACR,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,EAAE;SACZ,CAAC;QAEF,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,aAAa,CAAC,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAC1D,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAChC,aAAa,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9C,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,WAAW,EAAE;YAC/D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,MAAM,KAAK,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,EAAE,GAAG,UAAU,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAElC,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAEhB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBAAE,SAAS;gBAE3B,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAE9B,MAAM;wBACJ,EAAE;wBACF,MAAM,EAAE,uBAAuB;wBAC/B,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;wBACnB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK;wBAClC,OAAO,EAAE,CAAC;gCACR,KAAK,EAAE,CAAC;gCACR,KAAK,EAAE,IAAI,CAAC,IAAI;oCACd,CAAC,CAAC,EAAE;oCACJ,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE;gCAC5C,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;6BACzC,CAAC;wBACF,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;4BACjB,aAAa,EAAE,IAAI,CAAC,iBAAiB,IAAI,CAAC;4BAC1C,iBAAiB,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC;4BACvC,YAAY,EAAE,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;yBACrE,CAAC,CAAC,CAAC,SAAS;qBACd,CAAC;gBACJ,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAC/B,GAAG,IAAI,CAAC,IAAI,WAAW,CACxB,CAAC;YACF,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,KAAa;QAC3B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,WAAW,EAAE;YACxC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;SACtB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,WAAW,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @zhin.js/ai - OpenAI Provider
3
+ * 支持 OpenAI API 及兼容接口(DeepSeek、Moonshot 等)
4
+ */
5
+ import { BaseProvider } from './base.js';
6
+ import type { ProviderConfig, ChatCompletionRequest, ChatCompletionResponse, ChatCompletionChunk } from '../types.js';
7
+ export interface OpenAIConfig extends ProviderConfig {
8
+ organization?: string;
9
+ }
10
+ export declare class OpenAIProvider extends BaseProvider {
11
+ name: string;
12
+ models: string[];
13
+ private baseUrl;
14
+ constructor(config?: OpenAIConfig);
15
+ chat(request: ChatCompletionRequest): Promise<ChatCompletionResponse>;
16
+ chatStream(request: ChatCompletionRequest): AsyncIterable<ChatCompletionChunk>;
17
+ listModels(): Promise<string[]>;
18
+ }
19
+ /**
20
+ * DeepSeek Provider(基于 OpenAI 兼容接口)
21
+ */
22
+ export declare class DeepSeekProvider extends OpenAIProvider {
23
+ name: string;
24
+ models: string[];
25
+ constructor(config?: ProviderConfig);
26
+ listModels(): Promise<string[]>;
27
+ }
28
+ /**
29
+ * Moonshot Provider(基于 OpenAI 兼容接口)
30
+ */
31
+ export declare class MoonshotProvider extends OpenAIProvider {
32
+ name: string;
33
+ models: string[];
34
+ constructor(config?: ProviderConfig);
35
+ listModels(): Promise<string[]>;
36
+ }
37
+ /**
38
+ * 智谱 AI Provider(基于 OpenAI 兼容接口)
39
+ */
40
+ export declare class ZhipuProvider extends OpenAIProvider {
41
+ name: string;
42
+ models: string[];
43
+ constructor(config?: ProviderConfig);
44
+ listModels(): Promise<string[]>;
45
+ }
46
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,cAAe,SAAQ,YAAY;IAC9C,IAAI,SAAY;IAChB,MAAM,WAUJ;IAEF,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,GAAE,YAAiB;IAY/B,IAAI,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAapE,UAAU,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa,CAAC,mBAAmB,CAAC;IAuB/E,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CActC;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;IAClD,IAAI,SAAc;IAClB,MAAM,WAIJ;gBAEU,MAAM,GAAE,cAAmB;IAOjC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAGtC;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;IAClD,IAAI,SAAc;IAClB,MAAM,WAIJ;gBAEU,MAAM,GAAE,cAAmB;IAOjC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAGtC;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,cAAc;IAC/C,IAAI,SAAW;IACf,MAAM,WAMJ;gBAEU,MAAM,GAAE,cAAmB;IAOjC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAGtC"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * @zhin.js/ai - OpenAI Provider
3
+ * 支持 OpenAI API 及兼容接口(DeepSeek、Moonshot 等)
4
+ */
5
+ import { BaseProvider } from './base.js';
6
+ export class OpenAIProvider extends BaseProvider {
7
+ name = 'openai';
8
+ models = [
9
+ 'gpt-4o',
10
+ 'gpt-4o-mini',
11
+ 'gpt-4-turbo',
12
+ 'gpt-4',
13
+ 'gpt-3.5-turbo',
14
+ 'o1',
15
+ 'o1-mini',
16
+ 'o1-preview',
17
+ 'o3-mini',
18
+ ];
19
+ baseUrl;
20
+ constructor(config = {}) {
21
+ super(config);
22
+ this.baseUrl = config.baseUrl || 'https://api.openai.com/v1';
23
+ if (config.organization) {
24
+ this.config.headers = {
25
+ ...this.config.headers,
26
+ 'OpenAI-Organization': config.organization,
27
+ };
28
+ }
29
+ }
30
+ async chat(request) {
31
+ return this.fetch(`${this.baseUrl}/chat/completions`, {
32
+ method: 'POST',
33
+ json: {
34
+ ...request,
35
+ stream: false,
36
+ },
37
+ });
38
+ }
39
+ async *chatStream(request) {
40
+ const stream = this.fetchStream(`${this.baseUrl}/chat/completions`, {
41
+ method: 'POST',
42
+ json: {
43
+ ...request,
44
+ stream: true,
45
+ stream_options: { include_usage: true },
46
+ },
47
+ });
48
+ for await (const data of stream) {
49
+ try {
50
+ const chunk = JSON.parse(data);
51
+ yield chunk;
52
+ }
53
+ catch {
54
+ // 忽略解析错误的行
55
+ }
56
+ }
57
+ }
58
+ async listModels() {
59
+ try {
60
+ const response = await this.fetch(`${this.baseUrl}/models`);
61
+ return response.data
62
+ .map((m) => m.id)
63
+ .filter((id) => id.includes('gpt') || id.includes('o1') || id.includes('o3'));
64
+ }
65
+ catch {
66
+ return this.models;
67
+ }
68
+ }
69
+ }
70
+ /**
71
+ * DeepSeek Provider(基于 OpenAI 兼容接口)
72
+ */
73
+ export class DeepSeekProvider extends OpenAIProvider {
74
+ name = 'deepseek';
75
+ models = [
76
+ 'deepseek-chat',
77
+ 'deepseek-coder',
78
+ 'deepseek-reasoner',
79
+ ];
80
+ constructor(config = {}) {
81
+ super({
82
+ ...config,
83
+ baseUrl: config.baseUrl || 'https://api.deepseek.com/v1',
84
+ });
85
+ }
86
+ async listModels() {
87
+ return this.models;
88
+ }
89
+ }
90
+ /**
91
+ * Moonshot Provider(基于 OpenAI 兼容接口)
92
+ */
93
+ export class MoonshotProvider extends OpenAIProvider {
94
+ name = 'moonshot';
95
+ models = [
96
+ 'moonshot-v1-8k',
97
+ 'moonshot-v1-32k',
98
+ 'moonshot-v1-128k',
99
+ ];
100
+ constructor(config = {}) {
101
+ super({
102
+ ...config,
103
+ baseUrl: config.baseUrl || 'https://api.moonshot.cn/v1',
104
+ });
105
+ }
106
+ async listModels() {
107
+ return this.models;
108
+ }
109
+ }
110
+ /**
111
+ * 智谱 AI Provider(基于 OpenAI 兼容接口)
112
+ */
113
+ export class ZhipuProvider extends OpenAIProvider {
114
+ name = 'zhipu';
115
+ models = [
116
+ 'glm-4-plus',
117
+ 'glm-4',
118
+ 'glm-4-air',
119
+ 'glm-4-flash',
120
+ 'glm-4v-plus',
121
+ ];
122
+ constructor(config = {}) {
123
+ super({
124
+ ...config,
125
+ baseUrl: config.baseUrl || 'https://open.bigmodel.cn/api/paas/v4',
126
+ });
127
+ }
128
+ async listModels() {
129
+ return this.models;
130
+ }
131
+ }
132
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,186 @@
1
+ /**
2
+ * @zhin.js/ai - Session Manager
3
+ * 会话管理器,支持上下文记忆和数据库持久化
4
+ *
5
+ * 特性:
6
+ * - 数据库持久化存储(使用 Zhin 的数据库服务)
7
+ * - 内存缓存加速读取
8
+ * - 自动过期清理
9
+ * - 更长的上下文记忆能力
10
+ */
11
+ import type { ChatMessage, SessionConfig, Session } from './types.js';
12
+ /**
13
+ * 数据库模型定义
14
+ */
15
+ export declare const AI_SESSION_MODEL: {
16
+ session_id: {
17
+ type: "text";
18
+ nullable: boolean;
19
+ };
20
+ messages: {
21
+ type: "json";
22
+ default: never[];
23
+ };
24
+ config: {
25
+ type: "json";
26
+ default: {};
27
+ };
28
+ created_at: {
29
+ type: "integer";
30
+ default: number;
31
+ };
32
+ updated_at: {
33
+ type: "integer";
34
+ default: number;
35
+ };
36
+ };
37
+ /**
38
+ * 会话管理器接口
39
+ */
40
+ export interface ISessionManager {
41
+ get(sessionId: string, config?: SessionConfig): Session | Promise<Session>;
42
+ has(sessionId: string): boolean | Promise<boolean>;
43
+ addMessage(sessionId: string, message: ChatMessage): void | Promise<void>;
44
+ getMessages(sessionId: string): ChatMessage[] | Promise<ChatMessage[]>;
45
+ setSystemPrompt(sessionId: string, prompt: string): void | Promise<void>;
46
+ clear(sessionId: string): boolean | Promise<boolean>;
47
+ reset(sessionId: string): void | Promise<void>;
48
+ listSessions(): string[] | Promise<string[]>;
49
+ getStats(): {
50
+ total: number;
51
+ active: number;
52
+ expired: number;
53
+ } | Promise<{
54
+ total: number;
55
+ active: number;
56
+ expired: number;
57
+ }>;
58
+ cleanup(): number | Promise<number>;
59
+ dispose(): void | Promise<void>;
60
+ }
61
+ /**
62
+ * 内存会话管理器(回退方案)
63
+ */
64
+ export declare class MemorySessionManager implements ISessionManager {
65
+ private sessions;
66
+ private config;
67
+ private cleanupTimer?;
68
+ constructor(config?: {
69
+ maxHistory?: number;
70
+ expireMs?: number;
71
+ });
72
+ get(sessionId: string, config?: SessionConfig): Session;
73
+ has(sessionId: string): boolean;
74
+ addMessage(sessionId: string, message: ChatMessage): void;
75
+ private trimMessages;
76
+ getMessages(sessionId: string): ChatMessage[];
77
+ setSystemPrompt(sessionId: string, prompt: string): void;
78
+ clear(sessionId: string): boolean;
79
+ reset(sessionId: string): void;
80
+ listSessions(): string[];
81
+ getStats(): {
82
+ total: number;
83
+ active: number;
84
+ expired: number;
85
+ };
86
+ cleanup(): number;
87
+ dispose(): void;
88
+ }
89
+ /**
90
+ * 数据库会话管理器
91
+ * 使用 Zhin 的数据库服务进行持久化存储
92
+ */
93
+ export declare class DatabaseSessionManager implements ISessionManager {
94
+ private cache;
95
+ private config;
96
+ private cleanupTimer?;
97
+ private saveQueue;
98
+ private saveTimer?;
99
+ private model;
100
+ constructor(model: any, config?: {
101
+ maxHistory?: number;
102
+ expireMs?: number;
103
+ });
104
+ /**
105
+ * 从数据库加载会话
106
+ */
107
+ private loadSession;
108
+ /**
109
+ * 保存会话到数据库(防抖)
110
+ */
111
+ private schedulesSave;
112
+ /**
113
+ * 批量保存队列中的会话
114
+ */
115
+ private flushSaveQueue;
116
+ get(sessionId: string, config?: SessionConfig): Promise<Session>;
117
+ has(sessionId: string): Promise<boolean>;
118
+ addMessage(sessionId: string, message: ChatMessage): Promise<void>;
119
+ private trimMessages;
120
+ getMessages(sessionId: string): Promise<ChatMessage[]>;
121
+ setSystemPrompt(sessionId: string, prompt: string): Promise<void>;
122
+ clear(sessionId: string): Promise<boolean>;
123
+ reset(sessionId: string): Promise<void>;
124
+ listSessions(): Promise<string[]>;
125
+ getStats(): Promise<{
126
+ total: number;
127
+ active: number;
128
+ expired: number;
129
+ }>;
130
+ cleanup(): Promise<number>;
131
+ dispose(): Promise<void>;
132
+ }
133
+ /**
134
+ * 会话管理器包装器
135
+ * 支持同步和异步接口的统一使用
136
+ */
137
+ export declare class SessionManager implements ISessionManager {
138
+ private manager;
139
+ constructor(manager: ISessionManager);
140
+ /**
141
+ * 生成会话 ID
142
+ */
143
+ static generateId(platform: string, userId: string, channelId?: string): string;
144
+ get(sessionId: string, config?: SessionConfig): Session | Promise<Session>;
145
+ has(sessionId: string): boolean | Promise<boolean>;
146
+ addMessage(sessionId: string, message: ChatMessage): void | Promise<void>;
147
+ getMessages(sessionId: string): ChatMessage[] | Promise<ChatMessage[]>;
148
+ setSystemPrompt(sessionId: string, prompt: string): void | Promise<void>;
149
+ clear(sessionId: string): boolean | Promise<boolean>;
150
+ reset(sessionId: string): void | Promise<void>;
151
+ listSessions(): string[] | Promise<string[]>;
152
+ getStats(): {
153
+ total: number;
154
+ active: number;
155
+ expired: number;
156
+ } | Promise<{
157
+ total: number;
158
+ active: number;
159
+ expired: number;
160
+ }>;
161
+ cleanup(): number | Promise<number>;
162
+ dispose(): void | Promise<void>;
163
+ }
164
+ /**
165
+ * 创建内存会话管理器(回退方案)
166
+ */
167
+ export declare function createMemorySessionManager(config?: {
168
+ maxHistory?: number;
169
+ expireMs?: number;
170
+ }): SessionManager;
171
+ /**
172
+ * 创建数据库会话管理器
173
+ */
174
+ export declare function createDatabaseSessionManager(model: any, config?: {
175
+ maxHistory?: number;
176
+ expireMs?: number;
177
+ }): SessionManager;
178
+ /**
179
+ * 创建会话管理器(向后兼容)
180
+ * @deprecated 使用 createMemorySessionManager 或 createDatabaseSessionManager
181
+ */
182
+ export declare function createSessionManager(config?: {
183
+ maxHistory?: number;
184
+ expireMs?: number;
185
+ }): SessionManager;
186
+ //# sourceMappingURL=session.d.ts.map