@zhin.js/core 1.1.14 → 1.1.16

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.
@@ -1,247 +0,0 @@
1
- /**
2
- * @zhin.js/ai - Ollama Provider
3
- * 支持本地 Ollama 模型
4
- */
5
- import { Logger } from '@zhin.js/logger';
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
- contextWindow;
64
- capabilities = { vision: true, streaming: true, toolCalling: true, thinking: true };
65
- host;
66
- numCtx;
67
- constructor(config = {}) {
68
- super(config);
69
- this.host = config.host || config.baseUrl || 'http://localhost:11434';
70
- this.numCtx = config.contextWindow ?? config.num_ctx ?? 32768;
71
- this.contextWindow = this.numCtx;
72
- this.models = config.models?.length ? config.models : [
73
- 'llama3.3',
74
- 'llama3.2',
75
- 'llama3.1',
76
- 'qwen2.5',
77
- 'qwen2.5-coder',
78
- 'deepseek-r1',
79
- 'deepseek-v3',
80
- 'mistral',
81
- 'mixtral',
82
- 'phi4',
83
- 'gemma2',
84
- ];
85
- logger.debug(`初始化完成, host: ${this.host}`);
86
- }
87
- async chat(request) {
88
- const messages = toOllamaMessages(request.messages);
89
- logger.debug(`请求 ${request.model}, 消息: ${messages.length}`);
90
- const ollamaRequest = {
91
- model: request.model,
92
- messages,
93
- stream: false,
94
- options: {
95
- num_ctx: this.numCtx,
96
- },
97
- };
98
- // think:显式传 true 才开启链式思考;未传时默认 false,避免服务端对部分模型默认开 thinking 导致 content 为空
99
- ollamaRequest.think = request.think === true;
100
- if (request.temperature !== undefined) {
101
- ollamaRequest.options.temperature = request.temperature;
102
- }
103
- if (request.top_p !== undefined) {
104
- ollamaRequest.options.top_p = request.top_p;
105
- }
106
- if (request.max_tokens !== undefined) {
107
- ollamaRequest.options.num_predict = request.max_tokens;
108
- }
109
- const tools = toOllamaTools(request.tools);
110
- if (tools) {
111
- ollamaRequest.tools = tools;
112
- }
113
- const startTime = Date.now();
114
- const response = await this.fetch(`${this.host}/api/chat`, {
115
- method: 'POST',
116
- json: ollamaRequest,
117
- });
118
- logger.debug(`响应耗时: ${Date.now() - startTime}ms, 工具调用: ${response.message?.tool_calls?.length || 0}`);
119
- // 转换响应格式
120
- const toolCalls = response.message?.tool_calls?.map((tc, i) => ({
121
- id: `call_${i}`,
122
- type: 'function',
123
- function: {
124
- name: tc.function.name,
125
- arguments: JSON.stringify(tc.function.arguments),
126
- },
127
- }));
128
- return {
129
- id: `ollama-${Date.now()}`,
130
- object: 'chat.completion',
131
- created: Date.now(),
132
- model: response.model,
133
- choices: [{
134
- index: 0,
135
- message: {
136
- role: 'assistant',
137
- content: response.message?.content || '',
138
- tool_calls: toolCalls?.length ? toolCalls : undefined,
139
- },
140
- finish_reason: toolCalls?.length ? 'tool_calls' : 'stop',
141
- }],
142
- usage: {
143
- prompt_tokens: response.prompt_eval_count || 0,
144
- completion_tokens: response.eval_count || 0,
145
- total_tokens: (response.prompt_eval_count || 0) + (response.eval_count || 0),
146
- },
147
- };
148
- }
149
- async *chatStream(request) {
150
- const messages = toOllamaMessages(request.messages);
151
- const ollamaRequest = {
152
- model: request.model,
153
- messages,
154
- stream: true,
155
- options: {
156
- num_ctx: this.numCtx,
157
- },
158
- };
159
- ollamaRequest.think = request.think === true;
160
- if (request.temperature !== undefined) {
161
- ollamaRequest.options.temperature = request.temperature;
162
- }
163
- if (request.top_p !== undefined) {
164
- ollamaRequest.options.top_p = request.top_p;
165
- }
166
- const response = await globalThis.fetch(`${this.host}/api/chat`, {
167
- method: 'POST',
168
- headers: { 'Content-Type': 'application/json' },
169
- body: JSON.stringify(ollamaRequest),
170
- });
171
- if (!response.ok) {
172
- const error = await response.text();
173
- throw new Error(`Ollama API Error (${response.status}): ${error}`);
174
- }
175
- if (!response.body) {
176
- throw new Error('Response body is empty');
177
- }
178
- const reader = response.body.getReader();
179
- const decoder = new TextDecoder();
180
- let buffer = '';
181
- const id = `ollama-${Date.now()}`;
182
- while (true) {
183
- const { done, value } = await reader.read();
184
- if (done)
185
- break;
186
- buffer += decoder.decode(value, { stream: true });
187
- const lines = buffer.split('\n');
188
- buffer = lines.pop() || '';
189
- for (const line of lines) {
190
- if (!line.trim())
191
- continue;
192
- try {
193
- const data = JSON.parse(line);
194
- yield {
195
- id,
196
- object: 'chat.completion.chunk',
197
- created: Date.now(),
198
- model: data.model || request.model,
199
- choices: [{
200
- index: 0,
201
- delta: data.done
202
- ? {}
203
- : { content: data.message?.content || '' },
204
- finish_reason: data.done ? 'stop' : null,
205
- }],
206
- usage: data.done ? {
207
- prompt_tokens: data.prompt_eval_count || 0,
208
- completion_tokens: data.eval_count || 0,
209
- total_tokens: (data.prompt_eval_count || 0) + (data.eval_count || 0),
210
- } : undefined,
211
- };
212
- }
213
- catch {
214
- // 忽略解析错误
215
- }
216
- }
217
- }
218
- }
219
- async listModels() {
220
- try {
221
- const response = await this.fetch(`${this.host}/api/tags`);
222
- return response.models.map(m => m.name);
223
- }
224
- catch {
225
- return this.models;
226
- }
227
- }
228
- /**
229
- * 拉取模型
230
- */
231
- async pullModel(model) {
232
- await this.fetch(`${this.host}/api/pull`, {
233
- method: 'POST',
234
- json: { name: model },
235
- });
236
- }
237
- async healthCheck() {
238
- try {
239
- await globalThis.fetch(`${this.host}/api/tags`);
240
- return true;
241
- }
242
- catch {
243
- return false;
244
- }
245
- }
246
- }
247
- //# sourceMappingURL=ollama.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../src/ai/providers/ollama.ts"],"names":[],"mappings":"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"}
@@ -1,53 +0,0 @@
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
- contextWindow: number;
14
- capabilities: {
15
- vision: boolean;
16
- streaming: boolean;
17
- toolCalling: boolean;
18
- thinking: boolean;
19
- };
20
- private baseUrl;
21
- constructor(config?: OpenAIConfig);
22
- chat(request: ChatCompletionRequest): Promise<ChatCompletionResponse>;
23
- chatStream(request: ChatCompletionRequest): AsyncIterable<ChatCompletionChunk>;
24
- listModels(): Promise<string[]>;
25
- }
26
- /**
27
- * DeepSeek Provider(基于 OpenAI 兼容接口)
28
- */
29
- export declare class DeepSeekProvider extends OpenAIProvider {
30
- name: string;
31
- models: string[];
32
- constructor(config?: ProviderConfig);
33
- listModels(): Promise<string[]>;
34
- }
35
- /**
36
- * Moonshot Provider(基于 OpenAI 兼容接口)
37
- */
38
- export declare class MoonshotProvider extends OpenAIProvider {
39
- name: string;
40
- models: string[];
41
- constructor(config?: ProviderConfig);
42
- listModels(): Promise<string[]>;
43
- }
44
- /**
45
- * 智谱 AI Provider(基于 OpenAI 兼容接口)
46
- */
47
- export declare class ZhipuProvider extends OpenAIProvider {
48
- name: string;
49
- models: string[];
50
- constructor(config?: ProviderConfig);
51
- listModels(): Promise<string[]>;
52
- }
53
- //# sourceMappingURL=openai.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/ai/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;IACF,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY;;;;;MAAyE;IAErF,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,GAAE,YAAiB;IAc/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;IAQjC,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;IAQjC,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;IAQjC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAGtC"}
@@ -1,143 +0,0 @@
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
- contextWindow;
20
- capabilities = { vision: true, streaming: true, toolCalling: true, thinking: false };
21
- baseUrl;
22
- constructor(config = {}) {
23
- super(config);
24
- this.contextWindow = config.contextWindow ?? 128000;
25
- this.baseUrl = config.baseUrl || 'https://api.openai.com/v1';
26
- if (config.models?.length)
27
- this.models = config.models;
28
- if (config.organization) {
29
- this.config.headers = {
30
- ...this.config.headers,
31
- 'OpenAI-Organization': config.organization,
32
- };
33
- }
34
- }
35
- async chat(request) {
36
- return this.fetch(`${this.baseUrl}/chat/completions`, {
37
- method: 'POST',
38
- json: {
39
- ...request,
40
- stream: false,
41
- },
42
- });
43
- }
44
- async *chatStream(request) {
45
- const stream = this.fetchStream(`${this.baseUrl}/chat/completions`, {
46
- method: 'POST',
47
- json: {
48
- ...request,
49
- stream: true,
50
- stream_options: { include_usage: true },
51
- },
52
- });
53
- for await (const data of stream) {
54
- try {
55
- const chunk = JSON.parse(data);
56
- yield chunk;
57
- }
58
- catch {
59
- // 忽略解析错误的行
60
- }
61
- }
62
- }
63
- async listModels() {
64
- try {
65
- const response = await this.fetch(`${this.baseUrl}/models`);
66
- return response.data
67
- .map((m) => m.id)
68
- .filter((id) => id.includes('gpt') || id.includes('o1') || id.includes('o3'));
69
- }
70
- catch {
71
- return this.models;
72
- }
73
- }
74
- }
75
- /**
76
- * DeepSeek Provider(基于 OpenAI 兼容接口)
77
- */
78
- export class DeepSeekProvider extends OpenAIProvider {
79
- name = 'deepseek';
80
- models = [
81
- 'deepseek-chat',
82
- 'deepseek-coder',
83
- 'deepseek-reasoner',
84
- ];
85
- constructor(config = {}) {
86
- super({
87
- ...config,
88
- baseUrl: config.baseUrl || 'https://api.deepseek.com/v1',
89
- });
90
- if (config.models?.length)
91
- this.models = config.models;
92
- }
93
- async listModels() {
94
- return this.models;
95
- }
96
- }
97
- /**
98
- * Moonshot Provider(基于 OpenAI 兼容接口)
99
- */
100
- export class MoonshotProvider extends OpenAIProvider {
101
- name = 'moonshot';
102
- models = [
103
- 'moonshot-v1-8k',
104
- 'moonshot-v1-32k',
105
- 'moonshot-v1-128k',
106
- ];
107
- constructor(config = {}) {
108
- super({
109
- ...config,
110
- baseUrl: config.baseUrl || 'https://api.moonshot.cn/v1',
111
- });
112
- if (config.models?.length)
113
- this.models = config.models;
114
- }
115
- async listModels() {
116
- return this.models;
117
- }
118
- }
119
- /**
120
- * 智谱 AI Provider(基于 OpenAI 兼容接口)
121
- */
122
- export class ZhipuProvider extends OpenAIProvider {
123
- name = 'zhipu';
124
- models = [
125
- 'glm-4-plus',
126
- 'glm-4',
127
- 'glm-4-air',
128
- 'glm-4-flash',
129
- 'glm-4v-plus',
130
- ];
131
- constructor(config = {}) {
132
- super({
133
- ...config,
134
- baseUrl: config.baseUrl || 'https://open.bigmodel.cn/api/paas/v4',
135
- });
136
- if (config.models?.length)
137
- this.models = config.models;
138
- }
139
- async listModels() {
140
- return this.models;
141
- }
142
- }
143
- //# sourceMappingURL=openai.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/ai/providers/openai.ts"],"names":[],"mappings":"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"}