@henjicc/ai-sdk 0.6.1 → 0.7.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.
- package/CHANGELOG.md +41 -27
- package/README.md +59 -46
- package/dist/capabilities/client.js +103 -86
- package/dist/capabilities/speech-recognition/bailian/realtime/module.js +42 -7
- package/dist/capabilities/speech-recognition/bailian/realtime/protocol.js +57 -15
- package/dist/capabilities/speech-recognition/volcengine/realtime/module.js +42 -10
- package/dist/capabilities/translation/bailian/module.js +41 -13
- package/dist/capabilities/translation/bailian/sse.d.ts +1 -1
- package/dist/capabilities/translation/bailian/sse.js +82 -54
- package/dist/capabilities/types.d.ts +4 -0
- package/dist/catalog/audio/tts-common.d.ts +5 -0
- package/dist/catalog/audio/tts-common.js +17 -0
- package/dist/catalog/bailian/cosyvoice-v3.5.model.d.ts +2 -0
- package/dist/catalog/bailian/cosyvoice-v3.5.model.js +40 -0
- package/dist/catalog/bailian/minimax-speech-2.8.model.d.ts +2 -0
- package/dist/catalog/bailian/minimax-speech-2.8.model.js +38 -0
- package/dist/catalog/bailian/qwen-audio-3.1-tts-flash.model.d.ts +2 -0
- package/dist/catalog/bailian/qwen-audio-3.1-tts-flash.model.js +35 -0
- package/dist/catalog/fal/eleven-v3-tts.model.d.ts +2 -0
- package/dist/catalog/fal/eleven-v3-tts.model.js +31 -0
- package/dist/catalog/fal/minimax-speech-2.8.model.d.ts +2 -0
- package/dist/catalog/fal/minimax-speech-2.8.model.js +39 -0
- package/dist/catalog/fal/qwen3-tts-1.7b.model.d.ts +2 -0
- package/dist/catalog/fal/qwen3-tts-1.7b.model.js +33 -0
- package/dist/catalog/index.js +116 -90
- package/dist/catalog/kie/eleven-turbo-2.5-tts.model.d.ts +2 -0
- package/dist/catalog/kie/eleven-turbo-2.5-tts.model.js +29 -0
- package/dist/catalog/kie/eleven-v3-dialogue.model.d.ts +2 -0
- package/dist/catalog/kie/eleven-v3-dialogue.model.js +46 -0
- package/dist/catalog/kie/gemini-3.1-flash-tts.model.d.ts +2 -0
- package/dist/catalog/kie/gemini-3.1-flash-tts.model.js +40 -0
- package/dist/catalog/ppio/minimax-speech.model.js +1 -3
- package/dist/catalog/siliconflow/cosyvoice2-tts.model.d.ts +2 -0
- package/dist/catalog/siliconflow/cosyvoice2-tts.model.js +27 -0
- package/dist/catalog/siliconflow/moss-ttsd-0.5.model.d.ts +2 -0
- package/dist/catalog/siliconflow/moss-ttsd-0.5.model.js +28 -0
- package/dist/catalog/volcengine-speech/seed-icl-2.0.model.d.ts +2 -0
- package/dist/catalog/volcengine-speech/seed-icl-2.0.model.js +26 -0
- package/dist/catalog/volcengine-speech/seed-tts-2.0.model.d.ts +2 -0
- package/dist/catalog/volcengine-speech/seed-tts-2.0.model.js +25 -0
- package/dist/llm/chat.js +6 -1
- package/dist/llm/streaming.js +131 -91
- package/dist/packs/models/bailian/cosyvoice-v3.5.d.ts +6 -0
- package/dist/packs/models/bailian/cosyvoice-v3.5.js +7 -0
- package/dist/packs/models/bailian/minimax-speech-2.8.d.ts +6 -0
- package/dist/packs/models/bailian/minimax-speech-2.8.js +7 -0
- package/dist/packs/models/bailian/qwen-audio-3.1-tts-flash.d.ts +6 -0
- package/dist/packs/models/bailian/qwen-audio-3.1-tts-flash.js +7 -0
- package/dist/packs/models/fal/eleven-v3-tts.d.ts +6 -0
- package/dist/packs/models/fal/eleven-v3-tts.js +7 -0
- package/dist/packs/models/fal/minimax-speech-2.8.d.ts +6 -0
- package/dist/packs/models/fal/minimax-speech-2.8.js +7 -0
- package/dist/packs/models/fal/qwen3-tts-1.7b.d.ts +6 -0
- package/dist/packs/models/fal/qwen3-tts-1.7b.js +7 -0
- package/dist/packs/models/kie/eleven-turbo-2.5-tts.d.ts +6 -0
- package/dist/packs/models/kie/eleven-turbo-2.5-tts.js +7 -0
- package/dist/packs/models/kie/eleven-v3-dialogue.d.ts +6 -0
- package/dist/packs/models/kie/eleven-v3-dialogue.js +7 -0
- package/dist/packs/models/kie/gemini-3.1-flash-tts.d.ts +6 -0
- package/dist/packs/models/kie/gemini-3.1-flash-tts.js +7 -0
- package/dist/packs/models/siliconflow/cosyvoice2-tts.d.ts +6 -0
- package/dist/packs/models/siliconflow/cosyvoice2-tts.js +7 -0
- package/dist/packs/models/siliconflow/moss-ttsd-0.5.d.ts +6 -0
- package/dist/packs/models/siliconflow/moss-ttsd-0.5.js +7 -0
- package/dist/packs/models/volcengine-speech/seed-icl-2.0.d.ts +6 -0
- package/dist/packs/models/volcengine-speech/seed-icl-2.0.js +7 -0
- package/dist/packs/models/volcengine-speech/seed-tts-2.0.d.ts +6 -0
- package/dist/packs/models/volcengine-speech/seed-tts-2.0.js +7 -0
- package/dist/packs/provider-adapters/siliconflow.d.ts +3 -0
- package/dist/packs/provider-adapters/siliconflow.js +5 -0
- package/dist/packs/provider-adapters/volcengine-speech.d.ts +3 -0
- package/dist/packs/provider-adapters/volcengine-speech.js +5 -0
- package/dist/packs/provider-packs/bailian.d.ts +1 -1
- package/dist/packs/provider-packs/bailian.js +6 -3
- package/dist/packs/provider-packs/fal.d.ts +1 -1
- package/dist/packs/provider-packs/fal.js +41 -38
- package/dist/packs/provider-packs/kie.d.ts +1 -1
- package/dist/packs/provider-packs/kie.js +33 -30
- package/dist/packs/provider-packs/siliconflow.d.ts +4 -0
- package/dist/packs/provider-packs/siliconflow.js +7 -0
- package/dist/packs/provider-packs/volcengine-speech.d.ts +4 -0
- package/dist/packs/provider-packs/volcengine-speech.js +7 -0
- package/dist/protocols/sse-events.d.ts +4 -0
- package/dist/protocols/sse-events.js +31 -0
- package/dist/providers/audio-data.d.ts +2 -0
- package/dist/providers/audio-data.js +21 -0
- package/dist/providers/bailian.js +30 -2
- package/dist/providers/index.js +4 -0
- package/dist/providers/metadata.js +8 -0
- package/dist/providers/siliconflow.d.ts +3 -0
- package/dist/providers/siliconflow.js +34 -0
- package/dist/providers/volcengine-speech.d.ts +3 -0
- package/dist/providers/volcengine-speech.js +143 -0
- package/dist/types/model.d.ts +4 -4
- package/dist/types/model.js +3 -1
- package/docs/consumers.md +22 -5
- package/docs/llm-adaptation/README.md +28 -3
- package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/DeepSeek.md +14 -14
- package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/Kimi.md +3 -3
- package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//345/260/217/347/261/263MiMo.md +42 -42
- package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//346/231/272/350/260/261GLM.md +2 -0
- package/docs/model-adaptation/Fun-ASR-Realtime/Fun-ASR-Realtime_/347/231/276/347/202/274.md +22 -2
- package/docs/model-adaptation/GLM-5.3-Flash/GLM-5.3-Flash_/346/231/272/350/260/261.md +6 -6
- package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_APIMart.md +66 -66
- package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_Fal.md +55 -55
- package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_Grsai.md +53 -53
- package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_KIE.md +55 -55
- package/docs/model-adaptation/HappyHorse-1.1/HappyHorse-1.1_KIE.md +27 -27
- package/docs/model-adaptation/IC-Light-v2/IC-Light-v2_Fal.md +14 -14
- package/docs/model-adaptation/Qwen-MT-Flash/Qwen-MT-Flash_/347/231/276/347/202/274.md +22 -1
- package/docs/model-adaptation/Qwen-MT-Lite/Qwen-MT-Lite_/347/231/276/347/202/274.md +2 -1
- package/docs/model-adaptation/Qwen-MT-Plus/Qwen-MT-Plus_/347/231/276/347/202/274.md +2 -1
- package/docs/model-adaptation/Qwen3-ASR-Flash-Realtime/Qwen3-ASR-Flash-Realtime_/347/231/276/347/202/274.md +25 -2
- package/docs/model-adaptation/README.md +14 -10
- package/docs/model-adaptation/SeedASR-2.0-Realtime/SeedASR-2.0-Realtime_/347/201/253/345/261/261/345/274/225/346/223/216.md +6 -2
- package/docs/model-adaptation/Seedream-5.0-Flash/Seedream-5.0-Flash_/347/201/253/345/261/261/345/274/225/346/223/216.md +18 -18
- package/docs/model-adaptation/TTS-/345/244/232/344/276/233/345/272/224/345/225/206-2026-09.md +55 -0
- package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//346/264/276/346/254/247/344/272/221.md +9 -9
- package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//347/201/253/345/261/261/345/274/225/346/223/216.md +11 -11
- package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//347/231/276/347/202/274.md +31 -31
- package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//347/241/205/345/237/272/346/265/201/345/212/250.md +67 -67
- package/docs/model-adaptation//346/226/207/346/241/243/351/207/207/351/233/206/346/211/213/345/206/214.md +8 -8
- package/examples/form-renderer/package.json +1 -1
- package/examples/llm-chat/README.md +8 -8
- package/examples/llm-chat/index.ts +2 -2
- package/examples/llm-chat/package.json +1 -1
- package/examples/minimal-node/package.json +1 -1
- package/package.json +258 -258
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { AiRuntimeError } from '../runtime/AiRuntimeError.js';
|
|
2
|
+
import { volcengineRequestId } from '../capabilities/speech-recognition/volcengine/request-id.js';
|
|
3
|
+
import { createUtf8StreamDecoder } from '../protocols/utf8-stream-decoder.js';
|
|
4
|
+
import { fromBase64 } from '../upload/base64.js';
|
|
5
|
+
import { audioBytesToDataUri } from './audio-data.js';
|
|
6
|
+
import { isJsonObject, normalizeEndpoint } from './helpers.js';
|
|
7
|
+
import { fetchProvider } from './provider-fetch.js';
|
|
8
|
+
const BASE_URL = 'https://openspeech.bytedance.com';
|
|
9
|
+
const ENDPOINT = '/api/v3/tts/unidirectional';
|
|
10
|
+
function decodeChunk(encoded) {
|
|
11
|
+
try {
|
|
12
|
+
return fromBase64(encoded);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
throw new AiRuntimeError('invalid_response', 'Volcengine speech returned invalid base64 audio');
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function parseFrame(payload, audio, usage) {
|
|
19
|
+
if (!payload)
|
|
20
|
+
return;
|
|
21
|
+
let value;
|
|
22
|
+
try {
|
|
23
|
+
value = JSON.parse(payload);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
throw new AiRuntimeError('invalid_response', 'Volcengine speech returned invalid JSON frame');
|
|
27
|
+
}
|
|
28
|
+
if (!isJsonObject(value) || value.code !== 0) {
|
|
29
|
+
throw new AiRuntimeError('provider_task_failed', isJsonObject(value) && typeof value.message === 'string' ? value.message : 'Volcengine speech failed');
|
|
30
|
+
}
|
|
31
|
+
if (typeof value.data === 'string' && value.data.length > 0)
|
|
32
|
+
audio.push(decodeChunk(value.data));
|
|
33
|
+
if (isJsonObject(value.usage) && typeof value.usage.text_words === 'number')
|
|
34
|
+
usage.textWords = value.usage.text_words;
|
|
35
|
+
}
|
|
36
|
+
function consumeFrames(buffer, audio, usage) {
|
|
37
|
+
let start = -1;
|
|
38
|
+
let depth = 0;
|
|
39
|
+
let quoted = false;
|
|
40
|
+
let escaped = false;
|
|
41
|
+
let consumed = 0;
|
|
42
|
+
for (let index = 0; index < buffer.length; index += 1) {
|
|
43
|
+
const character = buffer[index];
|
|
44
|
+
if (start < 0) {
|
|
45
|
+
if (/\s/.test(character)) {
|
|
46
|
+
consumed = index + 1;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (character !== '{')
|
|
50
|
+
throw new AiRuntimeError('invalid_response', 'Volcengine speech returned invalid JSON frame');
|
|
51
|
+
start = index;
|
|
52
|
+
depth = 1;
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (quoted) {
|
|
56
|
+
if (escaped)
|
|
57
|
+
escaped = false;
|
|
58
|
+
else if (character === '\\')
|
|
59
|
+
escaped = true;
|
|
60
|
+
else if (character === '"')
|
|
61
|
+
quoted = false;
|
|
62
|
+
}
|
|
63
|
+
else if (character === '"')
|
|
64
|
+
quoted = true;
|
|
65
|
+
else if (character === '{')
|
|
66
|
+
depth += 1;
|
|
67
|
+
else if (character === '}') {
|
|
68
|
+
depth -= 1;
|
|
69
|
+
if (depth === 0) {
|
|
70
|
+
parseFrame(buffer.slice(start, index + 1), audio, usage);
|
|
71
|
+
start = -1;
|
|
72
|
+
consumed = index + 1;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return buffer.slice(start < 0 ? consumed : start);
|
|
77
|
+
}
|
|
78
|
+
export async function execute(input) {
|
|
79
|
+
if (!isJsonObject(input.body) || !isJsonObject(input.body.req_params)) {
|
|
80
|
+
throw new AiRuntimeError('invalid_request', 'Volcengine speech requires req_params');
|
|
81
|
+
}
|
|
82
|
+
const resourceId = input.body.resource_id;
|
|
83
|
+
if (resourceId !== 'seed-tts-2.0' && resourceId !== 'seed-icl-2.0') {
|
|
84
|
+
throw new AiRuntimeError('invalid_request', 'Volcengine speech resource ID is invalid');
|
|
85
|
+
}
|
|
86
|
+
const response = await fetchProvider('Volcengine Speech', normalizeEndpoint(BASE_URL, ENDPOINT), {
|
|
87
|
+
method: 'POST',
|
|
88
|
+
headers: {
|
|
89
|
+
'X-Api-Key': input.apiKey,
|
|
90
|
+
'X-Api-Resource-Id': resourceId,
|
|
91
|
+
'X-Api-Request-Id': volcengineRequestId(input.requestId, undefined),
|
|
92
|
+
'X-Control-Require-Usage-Tokens-Return': '*',
|
|
93
|
+
'Content-Type': 'application/json',
|
|
94
|
+
},
|
|
95
|
+
body: JSON.stringify({ req_params: input.body.req_params }),
|
|
96
|
+
signal: input.signal,
|
|
97
|
+
}, { transport: input.runtime.transport, retryPreconnectOnce: false });
|
|
98
|
+
if (!response.ok) {
|
|
99
|
+
await response.body?.cancel().catch(() => undefined);
|
|
100
|
+
throw new AiRuntimeError('provider_task_failed', `Volcengine speech request failed (HTTP ${response.status})`);
|
|
101
|
+
}
|
|
102
|
+
if (!response.body)
|
|
103
|
+
throw new AiRuntimeError('empty_result', 'Volcengine speech returned no body');
|
|
104
|
+
const reader = response.body.getReader();
|
|
105
|
+
const decoder = createUtf8StreamDecoder();
|
|
106
|
+
const audio = [];
|
|
107
|
+
const usage = {};
|
|
108
|
+
let pending = '';
|
|
109
|
+
const cancelReader = () => { void reader.cancel(input.signal?.reason).catch(() => undefined); };
|
|
110
|
+
input.signal?.addEventListener('abort', cancelReader, { once: true });
|
|
111
|
+
try {
|
|
112
|
+
while (true) {
|
|
113
|
+
input.signal?.throwIfAborted();
|
|
114
|
+
const { done, value } = await reader.read();
|
|
115
|
+
input.signal?.throwIfAborted();
|
|
116
|
+
pending += done ? decoder.decode() : decoder.decode(value, { stream: true });
|
|
117
|
+
pending = consumeFrames(pending, audio, usage);
|
|
118
|
+
if (done)
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
if (pending.trim())
|
|
122
|
+
throw new AiRuntimeError('invalid_response', 'Volcengine speech returned incomplete JSON frame');
|
|
123
|
+
}
|
|
124
|
+
finally {
|
|
125
|
+
input.signal?.removeEventListener('abort', cancelReader);
|
|
126
|
+
reader.releaseLock();
|
|
127
|
+
}
|
|
128
|
+
const total = audio.reduce((sum, chunk) => sum + chunk.byteLength, 0);
|
|
129
|
+
const joined = new Uint8Array(total);
|
|
130
|
+
let offset = 0;
|
|
131
|
+
for (const chunk of audio) {
|
|
132
|
+
joined.set(chunk, offset);
|
|
133
|
+
offset += chunk.byteLength;
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
status: 'completed',
|
|
137
|
+
url: audioBytesToDataUri(joined, 'mp3'),
|
|
138
|
+
metadata: { byteLength: total, ...(usage.textWords === undefined ? {} : { textWords: usage.textWords }) },
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
export async function continuePolling(_input) {
|
|
142
|
+
throw new AiRuntimeError('unsupported_provider', 'Volcengine speech uses one HTTP stream');
|
|
143
|
+
}
|
package/dist/types/model.d.ts
CHANGED
|
@@ -17,11 +17,11 @@ export type BuiltinModelType = 'image' | 'video' | 'audio';
|
|
|
17
17
|
* 它描述模型目录中的产出能力,不等同于上传预处理层的 `MediaKind`。
|
|
18
18
|
*/
|
|
19
19
|
export type ModelType = BuiltinModelType | (string & {});
|
|
20
|
-
/** SDK
|
|
21
|
-
export declare const BUILTIN_PROVIDER_IDS: readonly ["apimart", "bailian", "volcengine", "ppio", "kie", "modelscope", "fal", "grsai"];
|
|
22
|
-
/** 开放 ProviderId
|
|
20
|
+
/** SDK 随包提供的生成供应商;同时作为初始化与测试的单一清单。 */
|
|
21
|
+
export declare const BUILTIN_PROVIDER_IDS: readonly ["apimart", "bailian", "volcengine", "volcengine-speech", "ppio", "kie", "modelscope", "fal", "grsai", "siliconflow"];
|
|
22
|
+
/** 开放 ProviderId 仍保留内置供应商字面量的编辑器补全。 */
|
|
23
23
|
export type BuiltinProviderId = (typeof BUILTIN_PROVIDER_IDS)[number];
|
|
24
|
-
/** Provider ID
|
|
24
|
+
/** Provider ID:内置供应商 + 第三方扩展字符串。 */
|
|
25
25
|
export type ProviderId = BuiltinProviderId | (string & {});
|
|
26
26
|
/**
|
|
27
27
|
* 模型标签。
|
package/dist/types/model.js
CHANGED
|
@@ -8,14 +8,16 @@
|
|
|
8
8
|
* 这里保留 selector/builder 的真实函数,是 catalog 与所有宿主运行时共同消费的唯一模型
|
|
9
9
|
* 契约;JSON DTO 等跨进程数据类型仍位于 `./runtime.ts`。
|
|
10
10
|
*/
|
|
11
|
-
/** SDK
|
|
11
|
+
/** SDK 随包提供的生成供应商;同时作为初始化与测试的单一清单。 */
|
|
12
12
|
export const BUILTIN_PROVIDER_IDS = [
|
|
13
13
|
'apimart',
|
|
14
14
|
'bailian',
|
|
15
15
|
'volcengine',
|
|
16
|
+
'volcengine-speech',
|
|
16
17
|
'ppio',
|
|
17
18
|
'kie',
|
|
18
19
|
'modelscope',
|
|
19
20
|
'fal',
|
|
20
21
|
'grsai',
|
|
22
|
+
'siliconflow',
|
|
21
23
|
];
|
package/docs/consumers.md
CHANGED
|
@@ -5,6 +5,23 @@
|
|
|
5
5
|
|
|
6
6
|
最后核对日期:2026-09-24
|
|
7
7
|
|
|
8
|
+
`0.6.2` 已发布:聊天/翻译流终态、百炼/火山实时 ASR、共享会话终止与脱敏诊断已完成修复及撤销修复后的失败验证。SDK 83 文件 / 1023 项测试、可移植性、构建、49 个公开入口、严格类型和受限宿主门禁通过;Henji-AI 8 项相关宿主测试、主进程类型检查及 Electron bundle 通过。发布源码 `9e836def` 的必需 CI [35931001436](https://github.com/henjicc/Henji-AI/actions/runs/35931001436) 全部成功。固定候选包在仓外回装后发布,用户完成 npm 网页认证;待公共分发可读后,隔离配置、缓存与令牌的匿名重新安装通过,正式 tarball 和 lockfile integrity 与候选一致。Node ESM、严格 TypeScript、Vite 49 个公开入口、无 TextEncoder/TextDecoder 的受限宿主通过;llm-chat 类型构建、dry-run、bundle 边界及包内合法空事件/提前结束/后台故障与单次释放探针通过。本轮未执行真实付费模型请求。Henji-AI workspace 和 llm-chat 示例使用 `0.6.2`,minimal-node/form-renderer 保持 `0.6.0`。说吧仍为 `0.6.1`,本次未修改外部仓库,需在消费项目另行升级和验证;Photoshop 未在本机验证。
|
|
9
|
+
|
|
10
|
+
- `0.6.2` tarball:[公共 npm 包](https://registry.npmjs.org/@henjicc/ai-sdk/-/ai-sdk-0.6.2.tgz)
|
|
11
|
+
- `0.6.2` shasum:`7cae52442afefa473f44dd6f655e325dc106aa96`
|
|
12
|
+
- `0.6.2` integrity:`sha512-ZeSIUIzCcQRZVap5g8Y9z278hlFybN5Q8Yt4vRmav0AkqzS2LK7h7XDOh7oekOuHgLydwJIWLSyjtCbeFxbNSA==`
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
`0.6.1` 已发布:修复百炼 Fun Duplex 实时识别将无句首标记的空中间帧误判为 `invalid_response`;缺失 text、空 final 和无最终结果仍明确失败。发布源码提交 `6dd90b22` 的必需 CI [35917044506](https://github.com/henjicc/Henji-AI/actions/runs/35917044506) 全部成功;SDK 79 文件 / 933 项测试、可移植性、类型构建、49 个公开入口和受限宿主验证通过。两项事件序列回归撤销修复后失败、恢复后通过;合成语音最小真实请求成功。固定候选包发布后,隔离配置、缓存和令牌的仓外匿名回装及 Vite / 受限宿主验证通过。
|
|
16
|
+
|
|
17
|
+
- `0.6.1` tarball:[公共 npm 包](https://registry.npmjs.org/@henjicc/ai-sdk/-/ai-sdk-0.6.1.tgz)
|
|
18
|
+
- `0.6.1` shasum:`48a48e4692dd30695393b0c7f7432b994ede5ef1`
|
|
19
|
+
- `0.6.1` integrity:`sha512-0gY7crODwieU82r5XOgrmKVQIzLdJqFf8gAjsz8xv0wIpJe4aL8SeBM59qVVVSGpjckaVqzFe9NryhA/hjQw8Q==`
|
|
20
|
+
|
|
21
|
+
外部 `say-it` 已在 `D:/VibeCode/说吧` 完成公共 npm `0.6.1` 精确升级,提交 `18bad6d`;manifest、lock、bundle 版本与完整性校验一致。QuickJS/WS 空中间帧回归、SDK 宿主 35 项本地测试、runtime 类型检查通过;另有听写 48 项、历史 12 项、历史 UI 6 项及前端类型检查/构建通过。开发桌面应用已重启,实际麦克风交互由用户验证。当前宿主已含流式/原生文件上传桥,不再受下方旧版迁移待办限制。三个仓内示例仅消费 generation/LLM,保持已验证的 `0.6.0`;Photoshop 未消费此次 ASR 修复,不机械升级。
|
|
22
|
+
|
|
23
|
+
以下 `0.6.0` 及更早记录用于追溯历史发布。
|
|
24
|
+
|
|
8
25
|
`0.6.0` 已发布:新增 MiMo 2.6、GLM-5.3-FlashX、KIE HappyHorse 1.1、火山 Seedream 5.0 Flash 和百炼 Qwen Audio 3.1 ASR;补齐 MiMo Responses 思考事件与 ASR JSON/说话人解析。SDK 79 个测试文件 / 933 项测试、类型构建、可移植性、49 个公开入口和受限宿主验证通过;痕迹 AI 目录、参数组合、模型发现与旧配置兼容验证通过。MiMo 思考事件、ASR JSON 回退、HappyHorse 图生字段的修复撤销验证均检测到失败,恢复后通过。未执行付费请求。发布提交 `d08ea8fa` 的必需 CI [35904531000](https://github.com/henjicc/Henji-AI/actions/runs/35904531000) 全部通过,npm 网页认证后发布固定候选包;公共索引可读后,隔离配置、缓存与令牌的仓外匿名安装、包校验、新模型请求探针、Vite 49 入口和受限宿主验证全部通过。
|
|
9
26
|
|
|
10
27
|
本轮消费影响:Henji-AI 自动组合新增 generation pack,无需新增助手工具;三个仓内示例精确依赖同步到 `0.6.0`,均在仓外从公共 npm 匿名安装,minimal-node dry-run、llm-chat dry-run / bundle 边界和 form-renderer 构建 / 五类模型表单输出通过。外部 `say-it` 仍需先完成 `0.5.0` 文件上传桥迁移;当前未引入这批模型,不机械升级。`henji-ai-ps` 本机未定位,不声称已完成外部宿主升级。
|
|
@@ -15,7 +32,7 @@
|
|
|
15
32
|
|
|
16
33
|
Henji-AI 安装包的 GPT Image 2.5 高分辨率报错归属:宿主智能比例预处理曾忽略联动过滤,将 `smart` 转成 KIE 仅限 1K 的 `27:16`,SDK 在请求前正确拒绝。修复位于应用公共预处理,按当前分辨率/渠道的合法选项匹配;Flare/Sunburst 的 1K/2K/4K 及 APIMart、Grsai 同类筛选已有定向覆盖。无需放宽 SDK 契约或发布 SDK;安装包需随应用更新才包含修复,现有版本可手动选合法比例规避。
|
|
17
34
|
|
|
18
|
-
当前仓内及公共 npm SDK:`0.6.
|
|
35
|
+
当前仓内及公共 npm SDK:`0.6.2`(2026-09-24 已发布并完成公共匿名回装)。以下为历史发布证据。
|
|
19
36
|
|
|
20
37
|
`0.5.2` 完善轻量 `@henjicc/ai-sdk/llm/streaming`:正式类型支持文本、JSON Object 与 JSON Schema,Chat Completions 的最终请求体写入 `response_format`,OpenAI 输出上限写入 `max_completion_tokens`;结构化输出、思考模式和模型能力的非法组合会在请求前返回结构化错误。流式正文与思考继续分离,保留外部 `AbortSignal`,不设置默认总时限;未显式配置输出上限时不再注入 4096,服务端以 `length` 等原因结束时返回 `truncated: true`。发布前 77 个测试文件 / 909 项测试、可移植性、构建、49 个 Vite 公开入口和受限宿主门禁通过;故意撤销结构化参数、输出上限、OpenAI 字段映射和截断标记后,8 项定向断言失败,恢复后通过。公共索引可读后,已使用隔离 npm 配置和缓存匿名安装精确版本,并从已发布的轻量入口验证最终请求体包含 JSON Schema、思考强度和 24,000 token 上限,SSE 正文/思考事件分离且未截断。
|
|
21
38
|
|
|
@@ -77,19 +94,19 @@ Henji-AI workspace 与三个仓内示例 manifest 均锁定 `0.4.0`;下表原
|
|
|
77
94
|
|
|
78
95
|
| 仓库 / 开发路径 | 宿主类型 | 当前精确版本 | SDK 入口与构建方式 | 凭据 / transport 责任 | 需同步的变更类型 | 验证命令 | 同步证据与边界 | 最后核对 |
|
|
79
96
|
|---|---|---|---|---|---|---|---|---|
|
|
80
|
-
| `Henji-AI`<br>`D:/VibeCode/Henji-AI` | Electron 42 主进程 + React/Vite;SDK 主开发、首发验证宿主 | workspace 源码与公共 npm 均为 `0.6.
|
|
97
|
+
| `Henji-AI`<br>`D:/VibeCode/Henji-AI` | Electron 42 主进程 + React/Vite;SDK 主开发、首发验证宿主 | workspace 源码与公共 npm 均为 `0.6.2` | 包根、`provider-packs/*`、`tool-packs/*`;根构建先执行 `build:sdk`,再构建 Electron | Electron 主进程注入 HTTP transport、凭据、媒体读取、日志、trace、取消与落盘;渲染层不直接持有密钥 | 公共类型/目录、provider preset、凭据坐标、transport、媒体、包导出、LLM/生成执行协议 | SDK 发布门禁、相关宿主 Vitest、渲染层/主进程类型检查与模型 i18n | `9e836def`;必需 CI `35931001436` 成功,SDK 1023 项测试、8 项宿主测试、类型、Electron bundle、固定包及公共匿名回装验证通过;正式包完整性与候选一致 | 2026-09-24 |
|
|
81
98
|
| `henji-ai-ps`<br>`/Users/henji/Documents/VibeCode/henji-ai-ps` | Photoshop UXP 插件 + React/Vite IIFE(pnpm) | manifest/lock 均精确锁定公共 npm `0.2.8`;lock integrity 与上方正式产物一致 | `generation/core`、单模型/供应商 pack、LLM streaming;Vite 构建与 UXP smoke bundle | UXP 宿主注入受限 `fetch`、provider 凭据、媒体编码读取和脱敏日志;SDK 不读取 Node/文件系统 | 生成 pack/exports、受限环境可移植性、RuntimeContext、凭据 scope、媒体与流式 LLM;不因版本同步自动引入 GLM | `pnpm typecheck:uxp-smoke && pnpm check:uxp-sdk && pnpm smoke:uxp:build && pnpm check:uxp-smoke`;完整 `pnpm check` | `e509716`;无用户 npm 凭据的 frozen lock 安装通过;Node 22 下四项门禁通过,正式产品仍仅 39 个 generation/erase packs,网络调用与受限环境风险均为 0 | 2026-08-31 |
|
|
82
|
-
| `say-it`<br
|
|
99
|
+
| `say-it`<br>`D:/VibeCode/说吧` | Tauri 2 + Rust 管理 QuickJS;WebView 不运行 SDK | manifest/lock 精确锁定公共 npm `0.6.1`;bundle 版本、resolved、shasum、integrity 一致 | 按需打包 capability、Bailian/火山实时 ASR、SiliconFlow/Groq 文件 ASR、translation、LLM modules 为相互隔离 IIFE;Rust 加载 bundle | Rust Host API 注入 HTTP 字节流、WS、media-ref、CredentialStore、日志/trace、Abort/timeout/cancel;QuickJS/插件/WebView 不直取密钥 | capability/LLM 协议、按需 exports、descriptor source/坐标、QuickJS 可移植性、bundle 隔离;不因版本同步自动增加未采用模型 | `npm run sdk-runtime:typecheck && npm run sdk-runtime:build`;`npm run test:ui`;Rust 定向/全量测试;`npm run ui:build` | `18bad6d`;QuickJS/WS 空中间帧回归及 35 项 SDK 宿主本地测试通过,runtime 类型检查通过;听写/历史/UI 定向回归与前端类型构建通过,桌面开发应用已重启,实际麦克风交互待用户验证 | 2026-09-24 |
|
|
83
100
|
|
|
84
101
|
## SDK 仓内消费验证面
|
|
85
102
|
|
|
86
103
|
这些目录是可独立安装、构建的真实示例,但与 SDK 同属 `Henji-AI` 仓库,不重复算外部仓库。
|
|
87
|
-
|
|
104
|
+
示例 manifest 使用精确版本,仓内不维护锁文件。llm-chat 使用公共 npm `0.6.2`,已在仓外隔离副本匿名安装,lockfile resolved/integrity、类型构建、dry-run、bundle 边界及包内协议生命周期探针通过;其余两个示例保持已验证的 `0.6.0`。
|
|
88
105
|
|
|
89
106
|
| 路径 | 用途 / 入口 | 当前版本 | 宿主责任 | 验证命令 | 同步证据 | 最后核对 |
|
|
90
107
|
|---|---|---|---|---|---|---|
|
|
91
108
|
| `D:/VibeCode/Henji-AI/packages/ai-sdk/examples/minimal-node` | `generation` + `runtime` 按需入口;完整 generation catalog、KIE dry-run/live 闸门,不带 LLM/BigModel | `0.6.0`(精确 manifest,仓内无 lock) | Node transport、环境凭据、文件媒体读取、日志 | 在目录内 `npm install && npm run dry-run` | 公共 npm 匿名安装、类型构建与 dry-run 通过,模型网络调用为 0 | 2026-09-24 |
|
|
92
|
-
| `D:/VibeCode/Henji-AI/packages/ai-sdk/examples/llm-chat` | `llm/streaming` 按需入口;OpenAI-compatible SSE 对话,不带 generation、BigModel preset/models/pricing、Groq 或 LLM modules(保留通用身份解析所需 profiles) | `0.6.
|
|
109
|
+
| `D:/VibeCode/Henji-AI/packages/ai-sdk/examples/llm-chat` | `llm/streaming` 按需入口;OpenAI-compatible SSE 对话,不带 generation、BigModel preset/models/pricing、Groq 或 LLM modules(保留通用身份解析所需 profiles) | `0.6.2`(精确 manifest,仓内无 lock) | Node transport、环境凭据、流事件与取消 | 在目录内 `npm install && npm run dry-run && npm run check:bundle` | 公共 npm 匿名安装、类型构建、dry-run 和 bundle 边界检查通过 | 2026-09-24 |
|
|
93
110
|
| `D:/VibeCode/Henji-AI/packages/ai-sdk/examples/form-renderer` | `generation` + `catalog` + `runtime` 按需入口;完整 generation catalog/参数契约与最小 renderer,不带 LLM/BigModel | `0.6.0`(精确 manifest,仓内无 lock) | 零网络 RuntimeContext;仅目录与 renderer | 在目录内 `npm install && npm run build && npm start` | 公共 npm 匿名安装、类型构建与五类代表模型表单输出通过 | 2026-09-24 |
|
|
94
111
|
|
|
95
112
|
## 非消费者证据
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# LLM 供应商适配清单(总索引)
|
|
2
|
-
|
|
3
|
-
2026-09-11:新增[硅基流动托管 LLM 与实时模型发现](../model-adaptation/供应商/硅基流动.md),按需入口 `llm/siliconflow`。官方 `GET /v1/models?sub_type=chat` 返回账号可用清单,预设只提供已核查能力的常用模型。
|
|
1
|
+
# LLM 供应商适配清单(总索引)
|
|
2
|
+
|
|
3
|
+
2026-09-11:新增[硅基流动托管 LLM 与实时模型发现](../model-adaptation/供应商/硅基流动.md),按需入口 `llm/siliconflow`。官方 `GET /v1/models?sub_type=chat` 返回账号可用清单,预设只提供已核查能力的常用模型。
|
|
4
4
|
|
|
5
5
|
| 项目 | 内容 |
|
|
6
6
|
|---|---|
|
|
@@ -76,6 +76,31 @@ Responses 请求统一下发 `store: false`:助手自己的会话存储仍是
|
|
|
76
76
|
|
|
77
77
|
所以模型能力目录里的 `input` 记的是"**本项目当前请求路径下真实可用**"的模态,不是模型宣传的模态。DeepSeek 视觉模型已经因 Responses 接通而开放图片;智能助手的视频输入仍会在协议边界明确阻断,不会降级成文本地址造成静默失效。
|
|
78
78
|
|
|
79
|
+
### 2.5 原生 Chat Completions 事件矩阵(2026-09-24 核对)
|
|
80
|
+
|
|
81
|
+
适用 `llm/streaming` 的 `runLlmChatStream`,与 Responses / Vercel model-step 路径分别验证。来源:[OpenAI 字段契约](https://developers.openai.com/api/reference/resources/chat/subresources/completions/streaming-events)、[官方 SDK 错误事件处理](https://raw.githubusercontent.com/openai/openai-node/master/src/core/streaming.ts)、[WHATWG SSE 分帧](https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation)。字段表构造样本及采集日期见 [chat-stream-lifecycle.json](../../tests/fixtures/llm/chat-stream-lifecycle.json),截断、删除字段和改类型的负例在对应 lifecycle 测试中独立标记。
|
|
82
|
+
|
|
83
|
+
| 事件/状态 | 前置状态与字段契约 | 空值/缺字段语义 | 下一状态 / 对外输出 | 终态与资源 |
|
|
84
|
+
|---|---|---|---|---|
|
|
85
|
+
| SSE 注释、无 data 通知 | 等待/生成;SSE 字段可省略 | 不含结果 | 状态不变,无 token | 继续读取 |
|
|
86
|
+
| 角色/内容增量 | choices 数组;选中项 delta 对象;content 可省略/null/字符串 | 空 content、空 delta 合法;有值但错类型拒绝 | 等待或部分结果;仅非空文本发 token | 继续读取 |
|
|
87
|
+
| reasoning / tool_calls | Chat 兼容扩展;按已接入供应商契约 | 无 content 不代表失败 | 累加推理或工具参数 | 仍需完成标记 |
|
|
88
|
+
| finish_reason | null 表示继续;非空字符串表示模型结束(stop/length/tool_calls/content_filter/function_call 等) | 不能拿空结果、任意对象替代完成标记 | 保存结束原因;length 保持 truncated | 等待 usage / DONE / EOF |
|
|
89
|
+
| usage | choices 可为空数组;usage 对象 | 无文本合法;本身不能证明完成 | 更新用量,无 token | 继续读取 |
|
|
90
|
+
| SSE error / JSON error | 任一读取状态;官方 SDK 将两种形状都作为错误 | 即使前面已收到文字仍失败 | provider error;不发 completed | 取消剩余流,释放 reader |
|
|
91
|
+
| 未知命名事件 | 任一读取状态;保留扩展兼容空间 | 不把扩展通知当完成;含 error 仍失败 | 不输出、不改变完成状态 | 等待已知完成证据 |
|
|
92
|
+
| 无名/message 数据缺 choices 或 delta | 已知 Chat 数据路径 | 必要结果结构缺失,不能按空通知处理 | INVALID_STREAM_RESPONSE | 取消并释放 |
|
|
93
|
+
| DONE / EOF | 已收到有效 finish_reason | 未收到则 STREAM_INCOMPLETE;usage、partial 不能替代 | 完成,或明确失败 | 释放 reader;DONE 取消剩余流 |
|
|
94
|
+
| 智谱 network_error / model_context_window_exceeded | 已开始流 | 前者为推理异常,后者为窗口限制 | 不能把异常当正常 stop | 前者 PROVIDER_STREAM_ERROR;后者 truncated=true,保留部分输出和结束原因 | 不自动重试 |
|
|
95
|
+
| 未完成 SSE 块后 EOF | 空行才派发事件;官方 SSE 不派发残留块 | 不补空行伪造 final | 残块不产生结果;依据此前终态判断 | 释放 reader |
|
|
96
|
+
| 取消 / 读取异常 | 任一非终态 | 不能当正常 EOF | 取消或失败,不调用 completed | 移除监听、取消并释放 reader |
|
|
97
|
+
|
|
98
|
+
兼容边界:不新增非空文本要求,工具调用、拒绝或空模型结果可以带合法完成原因。官方未承诺所有兼容供应商都发送 DONE,因此 SDK 保留“已收到 finish_reason 后正常 EOF 可完成”的策略;无 finish_reason 的 DONE 不足以证明生成完成。未知命名事件不会自行成功或失败,但无名 Chat 数据必须具有可识别结构。[智谱契约第 6 节](供应商/智谱GLM.md) 允许缺省/空 choices 的状态块,按 provider family 保留该差异,这些块不改变完成状态;choices 错类型仍拒绝。新增此处校验不要求所有网关补齐无关的 id/created/model 元数据。SSE 连接不复用;SDK 不在断流后重放已可能计费的请求。
|
|
99
|
+
|
|
100
|
+
未知具名扩展通知的 data 可以是普通文本,不强行 JSON 解析;已知 error 事件不论正文格式都失败,合法 Chat 数据仍严格校验 JSON。
|
|
101
|
+
|
|
102
|
+
回调也是取消边界:同一 Chat 帧同时含思考与正文时,思考回调取消后不得继续发正文;对应受控变异回放进入生命周期测试。
|
|
103
|
+
|
|
79
104
|
## 三、本项目的协议接入优先级(产品决策,不是能力强弱排序)
|
|
80
105
|
|
|
81
106
|
新写协议适配器、给某个供应商挑协议时,按下面顺序取舍——这是本项目的既定优先级,**不因某家供应商官方推荐哪个协议就单独提高它的顺序**(MiniMax 官方推荐 Anthropic,但本项目仍按下表顺序执行,见 [MiniMax.md 第 6 节](供应商/MiniMax.md)):
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
# DeepSeek
|
|
2
2
|
|
|
3
|
-
> 核对时间:2026-09-24。以中文官方文档为准,英文页面尚有更新滞后。
|
|
4
|
-
|
|
5
|
-
## 2026-09-24 复核(含 2026-09-11 更新)(覆盖下方历史资料中的旧模型和能力说明)
|
|
6
|
-
|
|
7
|
-
- 官方默认与预设唯一推荐模型改为 `deepseek-flash`(DeepSeek V4.1 Flash),原生文本、图片输入,1M 上下文、384K 最大输出。Chat Completions 和 Responses 均支持图片;项目继续默认 Responses。
|
|
8
|
-
- 旧 `deepseek-v4-flash`、`deepseek-v4-flash-vision-exp` 已由官方转发到新版。2026-09-24 官方价格页重新列出独立的 `deepseek-v4-pro`(V4-Pro-0813,无视觉),不再据旧公告声称其必然转发到 Flash。项目不再推荐这些旧名字,也不把聚合供应商的旧 ID 当作新版别名。
|
|
9
|
-
- Pro-0813 最新人民币/百万 token 闲时 / 高峰:缓存命中 0.15 / 0.30、输入 4.5 / 9、输出 13.5 / 27;高峰不含中国法定节假日。目录保留独立 Pro ID 与无视觉能力,默认推荐仍为 Flash。
|
|
10
|
-
- 新版价格(人民币/百万 token,闲时 / 工作日高峰):缓存命中输入 0.02 / 0.04,未命中输入 1 / 2,输出 4 / 8。高峰为北京时间工作日 09:00–12:00、14:00–18:00。
|
|
11
|
-
- 思考默认开启,默认 high;正式档位 low/high/max,兼容 minimal→low、medium/xhigh→high、ultra→max。Responses 用 reasoning.effort,none 关闭。思考时 temperature 无效,top_p 生效但下限 0.95;非思考 top_p 固定 1。
|
|
12
|
-
- Responses 为无状态 API,必须回传完整历史;text.format 支持 json_schema。当前仅支持 function 工具,内置工具会被忽略,不能再据旧资料宣称 web_search 可用。SDK 本次只更新目录与默认选型,不新增内置工具或协议分支。
|
|
13
|
-
- 图片支持 JPEG/PNG/GIF/WebP;请求体最多 48 MiB,单图内联/URL 32 MiB,file_id 64 MiB,最多 600 张;总大小不含 file_id 64 MiB、包含时 200 MiB。Chat 图片仅 user;Responses 支持 user/developer 和工具结果,system/assistant 图片返回 400。SDK 沿用已实现的 URL/内联图片通道,不新增 Files 上传能力。
|
|
14
|
-
- 官方来源:[模型与价格](https://api-docs.deepseek.com/zh-cn/quick_start/pricing/)、[图片理解](https://api-docs.deepseek.com/zh-cn/guides/vision/)、[思考模式](https://api-docs.deepseek.com/zh-cn/guides/thinking_mode/)、[Responses API](https://api-docs.deepseek.com/zh-cn/api/create-response/)。
|
|
15
|
-
|
|
16
|
-
以下为 2026-08-26 历史采集记录;冲突字段以本节为准。
|
|
3
|
+
> 核对时间:2026-09-24。以中文官方文档为准,英文页面尚有更新滞后。
|
|
4
|
+
|
|
5
|
+
## 2026-09-24 复核(含 2026-09-11 更新)(覆盖下方历史资料中的旧模型和能力说明)
|
|
6
|
+
|
|
7
|
+
- 官方默认与预设唯一推荐模型改为 `deepseek-flash`(DeepSeek V4.1 Flash),原生文本、图片输入,1M 上下文、384K 最大输出。Chat Completions 和 Responses 均支持图片;项目继续默认 Responses。
|
|
8
|
+
- 旧 `deepseek-v4-flash`、`deepseek-v4-flash-vision-exp` 已由官方转发到新版。2026-09-24 官方价格页重新列出独立的 `deepseek-v4-pro`(V4-Pro-0813,无视觉),不再据旧公告声称其必然转发到 Flash。项目不再推荐这些旧名字,也不把聚合供应商的旧 ID 当作新版别名。
|
|
9
|
+
- Pro-0813 最新人民币/百万 token 闲时 / 高峰:缓存命中 0.15 / 0.30、输入 4.5 / 9、输出 13.5 / 27;高峰不含中国法定节假日。目录保留独立 Pro ID 与无视觉能力,默认推荐仍为 Flash。
|
|
10
|
+
- 新版价格(人民币/百万 token,闲时 / 工作日高峰):缓存命中输入 0.02 / 0.04,未命中输入 1 / 2,输出 4 / 8。高峰为北京时间工作日 09:00–12:00、14:00–18:00。
|
|
11
|
+
- 思考默认开启,默认 high;正式档位 low/high/max,兼容 minimal→low、medium/xhigh→high、ultra→max。Responses 用 reasoning.effort,none 关闭。思考时 temperature 无效,top_p 生效但下限 0.95;非思考 top_p 固定 1。
|
|
12
|
+
- Responses 为无状态 API,必须回传完整历史;text.format 支持 json_schema。当前仅支持 function 工具,内置工具会被忽略,不能再据旧资料宣称 web_search 可用。SDK 本次只更新目录与默认选型,不新增内置工具或协议分支。
|
|
13
|
+
- 图片支持 JPEG/PNG/GIF/WebP;请求体最多 48 MiB,单图内联/URL 32 MiB,file_id 64 MiB,最多 600 张;总大小不含 file_id 64 MiB、包含时 200 MiB。Chat 图片仅 user;Responses 支持 user/developer 和工具结果,system/assistant 图片返回 400。SDK 沿用已实现的 URL/内联图片通道,不新增 Files 上传能力。
|
|
14
|
+
- 官方来源:[模型与价格](https://api-docs.deepseek.com/zh-cn/quick_start/pricing/)、[图片理解](https://api-docs.deepseek.com/zh-cn/guides/vision/)、[思考模式](https://api-docs.deepseek.com/zh-cn/guides/thinking_mode/)、[Responses API](https://api-docs.deepseek.com/zh-cn/api/create-response/)。
|
|
15
|
+
|
|
16
|
+
以下为 2026-08-26 历史采集记录;冲突字段以本节为准。
|
|
17
17
|
|
|
18
18
|
## 1. 摘要
|
|
19
19
|
|
|
@@ -23,7 +23,7 @@ Kimi 官方文档全文没有出现过 `responses.create`;`platform.kimi.com/d
|
|
|
23
23
|
|---|---|---|---|---|
|
|
24
24
|
| `kimi-k3` | 当前旗舰,2.8 万亿参数,KDA 混合线性注意力,全球首个开源 3 万亿级模型 | 文本、图片、视频 → 文本 | 1,048,576 tokens(1M) | 默认 131,072,最大可设 1,048,576 |
|
|
25
25
|
|
|
26
|
-
价格(2026-09-24 核对,元/百万 tokens):缓存命中 2、缓存未命中 20、输出 100;另计缓存写入,TTL 5 分钟为 20、TTL 1 小时为 40,默认 5 分钟。命中仅按缓存命中单价计费,不重复收取缓存写入费用,命中后有效期续期。当前 SDK 未提供 Kimi 账单计算器,不从总输入 tokens 猜测缓存写入量。
|
|
26
|
+
价格(2026-09-24 核对,元/百万 tokens):缓存命中 2、缓存未命中 20、输出 100;另计缓存写入,TTL 5 分钟为 20、TTL 1 小时为 40,默认 5 分钟。命中仅按缓存命中单价计费,不重复收取缓存写入费用,命中后有效期续期。当前 SDK 未提供 Kimi 账单计算器,不从总输入 tokens 猜测缓存写入量。
|
|
27
27
|
|
|
28
28
|
K3 是付费解锁模型:**充值后才能调用**,新用户认证赠送的 15 元代金券不能用于 K3。
|
|
29
29
|
|
|
@@ -69,8 +69,8 @@ K3 是付费解锁模型:**充值后才能调用**,新用户认证赠送的
|
|
|
69
69
|
- [推理强度](https://platform.kimi.com/docs/guide/use-reasoning-effort)
|
|
70
70
|
- [使用 Kimi API 的联网搜索功能](https://platform.kimi.com/docs/guide/use-web-search)
|
|
71
71
|
- [如何在 Kimi API 中使用官方工具](https://platform.kimi.com/docs/guide/use-official-tools)
|
|
72
|
-
- [Kimi K3 定价](https://platform.kimi.com/docs/pricing/chat-k3)
|
|
73
|
-
- [当前推理与缓存写入定价(2026-09-24)](https://platform.kimi.com/docs/pricing/chat.md)
|
|
72
|
+
- [Kimi K3 定价](https://platform.kimi.com/docs/pricing/chat-k3)
|
|
73
|
+
- [当前推理与缓存写入定价(2026-09-24)](https://platform.kimi.com/docs/pricing/chat.md)
|
|
74
74
|
- [联网搜索定价](https://platform.kimi.com/docs/pricing/tools)
|
|
75
75
|
- [使用思考模式](https://platform.kimi.com/docs/guide/use-thinking-models)
|
|
76
76
|
- [Kimi 文档全量索引](https://platform.kimi.com/docs/llms.txt)
|
package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//345/260/217/347/261/263MiMo.md
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
1
|
# 小米 MiMo
|
|
2
2
|
|
|
3
|
-
> 核对时间:2026-09-24。下方更新契约优先于历史记录;官方 Markdown 可公开读取,无需登录。
|
|
4
|
-
|
|
5
|
-
## 2026-09-24 模型与协议更新
|
|
6
|
-
|
|
7
|
-
官方模型 ID 为 `mimo-v2.6-pro`、`mimo-v2.6-flash`、`mimo-v2.6-pro-ultraspeed`;均支持文本/图片/音频/视频理解、思考、工具调用、结构化输出,上下文 1M、最大输出 131072 tokens。UltraSpeed 为需联系供应商开通的定制服务,仅登记能力,不加入默认推荐。旧 `mimo-v2.5-pro`、`mimo-v2.5` 于北京时间 2026-10-21 10:00 直接停用,不自动替换;SDK 保留旧 ID 的能力识别但新建预设使用 2.6,不能把旧 ID 作为新模型别名暗中重定向。
|
|
8
|
-
|
|
9
|
-
价格(普通按量、元/百万 tokens):Pro 缓存命中 0.025、未命中输入 3、输出 6;Flash 分别 0.02、1、2;UltraSpeed 分别 0.25、30、60。不把 Batch 半价或活动优惠当作基础价格。
|
|
10
|
-
|
|
11
|
-
当前同时提供 `POST https://api.xiaomimimo.com/v1/chat/completions` 与 `POST https://api.xiaomimimo.com/v1/responses`;鉴权支持 `api-key` 或 Bearer。Chat 用 `thinking.type=enabled|disabled`(默认 enabled),输出限制 `max_completion_tokens`。Responses 用 `reasoning.effort`,none 关闭,其余合法档位均开启且不区分强度;输出限制 `max_output_tokens`。两协议思考开启时不能自定义 temperature/top_p(实际固定 1/0.95);SDK 不下发无效采样值。Responses 不支持 background、previous_response_id、context_management;SDK 使用无服务端存储的完整历史请求。Chat 与 Responses 不混发私有思考字段。
|
|
12
|
-
|
|
13
|
-
### Responses 事件契约
|
|
14
|
-
|
|
15
|
-
官方仅提供字段表,未提供字面事件 JSON;fixture 必须标记为“依据官方字段表构造”。所有事件的 type 为对应事件名,sequence_number 为数字;下表列出的其余字段按官方字段表类型处理,官方未逐字段声明 required/nullable 的部分不补造保证。正常顺序 created → in_progress → 条目/片段 → completed 或 incomplete;重复、乱序、断线恢复和服务器取消接口未明确约定。SDK 不自动重放付费 POST,取消/断开释放流与 AbortSignal;没有有效最终输出不得视为成功。
|
|
16
|
-
|
|
17
|
-
| 事件 | 字段 | 下一状态/对外行为 |
|
|
18
|
-
|---|---|---|
|
|
19
|
-
| response.created | response 对象 | 建立响应;空输出合法,不是 final |
|
|
20
|
-
| response.in_progress | response 对象 | 继续等待,空输出合法 |
|
|
21
|
-
| response.output_item.added | item 对象、output_index 数字 | 建立 message/reasoning/function_call 条目 |
|
|
22
|
-
| response.output_item.done | item 对象、output_index 数字 | 条目完成;不结束整个响应 |
|
|
23
|
-
| response.content_part.added | part 对象、item_id 字符串、output_index/content_index 数字 | 建立内容片段 |
|
|
24
|
-
| response.content_part.done | 同 added | 片段完成;不重复输出已发 delta |
|
|
25
|
-
| response.output_text.delta | delta 字符串、item_id、output_index/content_index | 增量正文 |
|
|
26
|
-
| response.output_text.done | text 字符串、item_id、output_index/content_index | 正文完成 |
|
|
27
|
-
| response.function_call_arguments.delta | delta 字符串、item_id、output_index | 追加工具 JSON 参数 |
|
|
28
|
-
| response.function_call_arguments.done | arguments 字符串、item_id、output_index | 工具参数完成 |
|
|
29
|
-
| response.reasoning_text.delta | delta 字符串、item_id、output_index/content_index | 增量思考,与正文分离 |
|
|
30
|
-
| response.reasoning_text.done | text 字符串、item_id、output_index/content_index | 思考完成 |
|
|
31
|
-
| response.custom_tool_call_input.delta | delta 字符串、item_id、output_index | 自定义工具输入;当前 SDK 公共工具仅支持 function,不声明此能力 |
|
|
32
|
-
| response.custom_tool_call_input.done | input 字符串、item_id、output_index | 同上,不当成正文 |
|
|
33
|
-
| response.completed | response 对象(output/usage/status) | 成功终态;统计用量并释放流 |
|
|
34
|
-
| response.incomplete | response 对象(含 incomplete_details) | 截断终态,不伪报完整成功 |
|
|
35
|
-
|
|
36
|
-
### 本轮原始链接(均公开)
|
|
37
|
-
|
|
38
|
-
- 模型:https://mimo.mi.com/static/docs/quick-start/summary/model.md
|
|
39
|
-
- 下线:https://mimo.mi.com/static/docs/updates/deprecate.md
|
|
40
|
-
- 价格:https://mimo.mi.com/static/docs/price/pay-as-you-go.md
|
|
41
|
-
- Chat 字段:https://mimo.mi.com/static/docs/api/chat/openai-api.md
|
|
42
|
-
- Responses 字段及逐事件:https://mimo.mi.com/static/docs/api/chat/responses.md
|
|
43
|
-
|
|
44
|
-
## 历史资料(2026-08-26,协议与模型以本轮更新为准)
|
|
3
|
+
> 核对时间:2026-09-24。下方更新契约优先于历史记录;官方 Markdown 可公开读取,无需登录。
|
|
4
|
+
|
|
5
|
+
## 2026-09-24 模型与协议更新
|
|
6
|
+
|
|
7
|
+
官方模型 ID 为 `mimo-v2.6-pro`、`mimo-v2.6-flash`、`mimo-v2.6-pro-ultraspeed`;均支持文本/图片/音频/视频理解、思考、工具调用、结构化输出,上下文 1M、最大输出 131072 tokens。UltraSpeed 为需联系供应商开通的定制服务,仅登记能力,不加入默认推荐。旧 `mimo-v2.5-pro`、`mimo-v2.5` 于北京时间 2026-10-21 10:00 直接停用,不自动替换;SDK 保留旧 ID 的能力识别但新建预设使用 2.6,不能把旧 ID 作为新模型别名暗中重定向。
|
|
8
|
+
|
|
9
|
+
价格(普通按量、元/百万 tokens):Pro 缓存命中 0.025、未命中输入 3、输出 6;Flash 分别 0.02、1、2;UltraSpeed 分别 0.25、30、60。不把 Batch 半价或活动优惠当作基础价格。
|
|
10
|
+
|
|
11
|
+
当前同时提供 `POST https://api.xiaomimimo.com/v1/chat/completions` 与 `POST https://api.xiaomimimo.com/v1/responses`;鉴权支持 `api-key` 或 Bearer。Chat 用 `thinking.type=enabled|disabled`(默认 enabled),输出限制 `max_completion_tokens`。Responses 用 `reasoning.effort`,none 关闭,其余合法档位均开启且不区分强度;输出限制 `max_output_tokens`。两协议思考开启时不能自定义 temperature/top_p(实际固定 1/0.95);SDK 不下发无效采样值。Responses 不支持 background、previous_response_id、context_management;SDK 使用无服务端存储的完整历史请求。Chat 与 Responses 不混发私有思考字段。
|
|
12
|
+
|
|
13
|
+
### Responses 事件契约
|
|
14
|
+
|
|
15
|
+
官方仅提供字段表,未提供字面事件 JSON;fixture 必须标记为“依据官方字段表构造”。所有事件的 type 为对应事件名,sequence_number 为数字;下表列出的其余字段按官方字段表类型处理,官方未逐字段声明 required/nullable 的部分不补造保证。正常顺序 created → in_progress → 条目/片段 → completed 或 incomplete;重复、乱序、断线恢复和服务器取消接口未明确约定。SDK 不自动重放付费 POST,取消/断开释放流与 AbortSignal;没有有效最终输出不得视为成功。
|
|
16
|
+
|
|
17
|
+
| 事件 | 字段 | 下一状态/对外行为 |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| response.created | response 对象 | 建立响应;空输出合法,不是 final |
|
|
20
|
+
| response.in_progress | response 对象 | 继续等待,空输出合法 |
|
|
21
|
+
| response.output_item.added | item 对象、output_index 数字 | 建立 message/reasoning/function_call 条目 |
|
|
22
|
+
| response.output_item.done | item 对象、output_index 数字 | 条目完成;不结束整个响应 |
|
|
23
|
+
| response.content_part.added | part 对象、item_id 字符串、output_index/content_index 数字 | 建立内容片段 |
|
|
24
|
+
| response.content_part.done | 同 added | 片段完成;不重复输出已发 delta |
|
|
25
|
+
| response.output_text.delta | delta 字符串、item_id、output_index/content_index | 增量正文 |
|
|
26
|
+
| response.output_text.done | text 字符串、item_id、output_index/content_index | 正文完成 |
|
|
27
|
+
| response.function_call_arguments.delta | delta 字符串、item_id、output_index | 追加工具 JSON 参数 |
|
|
28
|
+
| response.function_call_arguments.done | arguments 字符串、item_id、output_index | 工具参数完成 |
|
|
29
|
+
| response.reasoning_text.delta | delta 字符串、item_id、output_index/content_index | 增量思考,与正文分离 |
|
|
30
|
+
| response.reasoning_text.done | text 字符串、item_id、output_index/content_index | 思考完成 |
|
|
31
|
+
| response.custom_tool_call_input.delta | delta 字符串、item_id、output_index | 自定义工具输入;当前 SDK 公共工具仅支持 function,不声明此能力 |
|
|
32
|
+
| response.custom_tool_call_input.done | input 字符串、item_id、output_index | 同上,不当成正文 |
|
|
33
|
+
| response.completed | response 对象(output/usage/status) | 成功终态;统计用量并释放流 |
|
|
34
|
+
| response.incomplete | response 对象(含 incomplete_details) | 截断终态,不伪报完整成功 |
|
|
35
|
+
|
|
36
|
+
### 本轮原始链接(均公开)
|
|
37
|
+
|
|
38
|
+
- 模型:https://mimo.mi.com/static/docs/quick-start/summary/model.md
|
|
39
|
+
- 下线:https://mimo.mi.com/static/docs/updates/deprecate.md
|
|
40
|
+
- 价格:https://mimo.mi.com/static/docs/price/pay-as-you-go.md
|
|
41
|
+
- Chat 字段:https://mimo.mi.com/static/docs/api/chat/openai-api.md
|
|
42
|
+
- Responses 字段及逐事件:https://mimo.mi.com/static/docs/api/chat/responses.md
|
|
43
|
+
|
|
44
|
+
## 历史资料(2026-08-26,协议与模型以本轮更新为准)
|
|
45
45
|
|
|
46
46
|
## 1. 摘要
|
|
47
47
|
|
package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//346/231/272/350/260/261GLM.md
CHANGED
|
@@ -146,6 +146,8 @@ schema 未暴露 `tool_stream`,通用字段说明列出的支持模型也未
|
|
|
146
146
|
但同页字段说明还提到 `model_context_window_exceeded`。这是官方页面内部不一致;解析器必须接受并保留
|
|
147
147
|
未知字符串,不能用封闭枚举拒绝服务器返回。
|
|
148
148
|
|
|
149
|
+
2026-09-24 复核:开放字符串不代表所有结束原因都成功。官方明确 `network_error` 为模型推理异常,SDK 原生流必须失败并保留该结束原因,不执行自动付费重放;`model_context_window_exceeded` 表示上下文窗口上限,沿用部分输出但标 `truncated=true`。`stop/tool_calls/sensitive` 及未知扩展字符串继续保留原值,供调用方依据语义处理。对应字段表 fixture 与负例位于 `tests/fixtures/llm/chat-stream-lifecycle.json` 和 `tests/llm/streaming-lifecycle.test.ts`;没有将这些构造样本声称为真实模型返回。
|
|
150
|
+
|
|
149
151
|
## 7. 结构化输出与流式能力
|
|
150
152
|
|
|
151
153
|
- 普通文本流式已确认:SSE `data:` JSON 帧、最终 `finish_reason`/usage、`data: [DONE]`。
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
| 项目 | 内容 |
|
|
4
4
|
|---|---|
|
|
5
|
-
| 最后更新 | 2026-
|
|
5
|
+
| 最后更新 | 2026-09-24 |
|
|
6
6
|
| 能力 | 实时语音识别(WebSocket) |
|
|
7
7
|
| 平台模型 ID | `fun-asr-realtime`(稳定别名,官方当前等同 `fun-asr-realtime-2025-11-07`) |
|
|
8
8
|
| 地域 | 华北2(北京)、新加坡 |
|
|
@@ -26,7 +26,27 @@
|
|
|
26
26
|
|
|
27
27
|
Say-It 保留该稳定别名与 2026-02-28 快照供用户选择;SDK 不应自行把稳定别名锁定为某快照。空 `sentence_begin` 事件只推进状态,不产生 partial/final;重复 final 只累计一次。取消时主动关闭 socket,密钥和原始音频不记日志。
|
|
28
28
|
|
|
29
|
-
## 4.
|
|
29
|
+
## 4. 服务端事件矩阵(fun-duplex 家族)
|
|
30
|
+
|
|
31
|
+
2026-09-24 核对官方服务端事件页。此协议也服务于 `qwen-audio-3.1-asr-flash-streaming`,错误诊断必须标实际模型,不能统一叫 Fun-ASR。样本见 `tests/fixtures/bailian/asr-realtime-fun.json`,0.6.1 真实验证的空中间帧保持原语义。
|
|
32
|
+
|
|
33
|
+
共享百炼实时驱动在握手发送失败时也返回已归一化的模型/协议/阶段;关闭连接若再次失败,以 `cleanupFailed=true` 补充首个故障,不覆盖原因为原始宿主异常。该边界由 `bailian-realtime-asr.test.ts` 的双故障 Mock 回归保护,同时用于 `fun-duplex` 与 `qwen-realtime`。
|
|
34
|
+
|
|
35
|
+
| 事件 | 前置阶段与字段语义 | 迁移 / 输出 | 结束与资源 |
|
|
36
|
+
|---|---|---|---|
|
|
37
|
+
| `task-started` | opening,run-task 已发 | active / started | 继续 |
|
|
38
|
+
| `result-generated` 心跳 | sentence.heartbeat=true,官方明确可跳过 | 无文本、无完成迁移 | 继续 |
|
|
39
|
+
| `result-generated` 中间帧 | active/finishing;text 字符串、sentence_end=false;仅首帧可有 sentence_begin | 空 text 等待,有文字 partial | 继续 |
|
|
40
|
+
| `result-generated` 句终帧 | active/finishing;text 字符串、sentence_end=true | 非空 final,保存时间戳与用量;重复相同 final 不重复累计 | 继续等待任务结束 |
|
|
41
|
+
| `task-finished` | finishing;payload 通常空,无须含 text | 使用累计 final;未收到有效 final 则 invalid_response | SDK 关闭;官方允许以新 task_id 复用 |
|
|
42
|
+
| `task-failed` | 任一未终止阶段;header.error_code/error_message | provider_task_failed,保留 code,不默认记录完整 message | 关闭,不复用 |
|
|
43
|
+
| 缺失事件名、text 或布尔 sentence_end | 不用非空文字掩盖缺失状态;心跳除外 | invalid_response | 失败并释放 |
|
|
44
|
+
| 有名未知扩展 | 官方未定义行为 | 脱敏警告,无文本/完成输出 | 等待已知终态 |
|
|
45
|
+
| 提前断开 / 取消 | 无最终完成证据 | 断连错误或取消 | 释放连接,不重放计费请求 |
|
|
46
|
+
|
|
47
|
+
校验不要求中间帧带 sentence_begin,也不要求心跳带文本。合法空中间帧不会被当失败;空 final 和只有 partial 的任务仍不能成功。
|
|
48
|
+
|
|
49
|
+
## 5. 原始链接索引
|
|
30
50
|
|
|
31
51
|
| 信息 | 链接 | 登录 |
|
|
32
52
|
|---|---|---|
|
|
@@ -205,9 +205,9 @@ Coding Plan 3 倍额度扣减是订阅用量规则,不是 token 单价。SDK/
|
|
|
205
205
|
- [国际 Quick Start](https://docs.z.ai/guides/overview/quick-start):国际 Base URL、API Key 页面与 Flash 模型入口。
|
|
206
206
|
- [国际 HTTP API](https://docs.z.ai/guides/develop/http/introduction):国际通用端点与 Bearer 鉴权。
|
|
207
207
|
- [国际价格](https://docs.z.ai/guides/overview/pricing):USD 标准价、促销价和绝对截止时间。
|
|
208
|
-
|
|
209
|
-
## 2026-09-24 官方更新
|
|
210
|
-
|
|
211
|
-
[模型页](https://docs.bigmodel.cn/cn/guide/models/vlm/glm-5.3-flash.md) 现明确 Flash / FlashX 支持 JSON 结构化输出,thinking.type 只能 enabled。SDK 开放 JSON 与思考并用,未扩大到 JSON Schema;工具流仍沿标准 SSE。FlashX 仅加入大陆端点,不推断 Global 支持。上下文 1M、最大输出 128K,多模态与 Flash 相同。
|
|
212
|
-
|
|
213
|
-
[官方价格](https://docs.bigmodel.cn/cn/guide/start/pricing.md):FlashX 输入 ¥2、输出 ¥7、缓存命中 ¥0.57 / 百万 tokens;缓存写入限时免费,不登记为永久零价。公开无需登录,未执行付费调用。旧文中的“结构化输出未核验”由本节取代。
|
|
208
|
+
|
|
209
|
+
## 2026-09-24 官方更新
|
|
210
|
+
|
|
211
|
+
[模型页](https://docs.bigmodel.cn/cn/guide/models/vlm/glm-5.3-flash.md) 现明确 Flash / FlashX 支持 JSON 结构化输出,thinking.type 只能 enabled。SDK 开放 JSON 与思考并用,未扩大到 JSON Schema;工具流仍沿标准 SSE。FlashX 仅加入大陆端点,不推断 Global 支持。上下文 1M、最大输出 128K,多模态与 Flash 相同。
|
|
212
|
+
|
|
213
|
+
[官方价格](https://docs.bigmodel.cn/cn/guide/start/pricing.md):FlashX 输入 ¥2、输出 ¥7、缓存命中 ¥0.57 / 百万 tokens;缓存写入限时免费,不登记为永久零价。公开无需登录,未执行付费调用。旧文中的“结构化输出未核验”由本节取代。
|