@qjp88995/provider-client 0.2.0 → 0.4.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/dist/direct-resolver.d.ts.map +1 -1
- package/dist/direct-resolver.js +2 -0
- package/dist/direct-resolver.js.map +1 -1
- package/dist/image/http.d.ts +16 -0
- package/dist/image/http.d.ts.map +1 -0
- package/dist/image/http.js +62 -0
- package/dist/image/http.js.map +1 -0
- package/dist/image/index.d.ts +32 -0
- package/dist/image/index.d.ts.map +1 -0
- package/dist/image/index.js +39 -0
- package/dist/image/index.js.map +1 -0
- package/dist/image/types.d.ts +94 -0
- package/dist/image/types.d.ts.map +1 -0
- package/dist/image/types.js +44 -0
- package/dist/image/types.js.map +1 -0
- package/dist/image/volcengine.adapter.d.ts +8 -0
- package/dist/image/volcengine.adapter.d.ts.map +1 -0
- package/dist/image/volcengine.adapter.js +85 -0
- package/dist/image/volcengine.adapter.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/justone/client.d.ts +101 -0
- package/dist/justone/client.d.ts.map +1 -0
- package/dist/justone/client.js +272 -0
- package/dist/justone/client.js.map +1 -0
- package/dist/justone/endpoint-spec.d.ts +49 -0
- package/dist/justone/endpoint-spec.d.ts.map +1 -0
- package/dist/justone/endpoint-spec.js +2 -0
- package/dist/justone/endpoint-spec.js.map +1 -0
- package/dist/justone/endpoints.generated.d.ts +7927 -0
- package/dist/justone/endpoints.generated.d.ts.map +1 -0
- package/dist/justone/endpoints.generated.js +8508 -0
- package/dist/justone/endpoints.generated.js.map +1 -0
- package/dist/justone/errors.d.ts +52 -0
- package/dist/justone/errors.d.ts.map +1 -0
- package/dist/justone/errors.js +73 -0
- package/dist/justone/errors.js.map +1 -0
- package/dist/justone/index.d.ts +8 -0
- package/dist/justone/index.d.ts.map +1 -0
- package/dist/justone/index.js +7 -0
- package/dist/justone/index.js.map +1 -0
- package/dist/justone/params.d.ts +17 -0
- package/dist/justone/params.d.ts.map +1 -0
- package/dist/justone/params.js +72 -0
- package/dist/justone/params.js.map +1 -0
- package/dist/justone/pricing.d.ts +6 -0
- package/dist/justone/pricing.d.ts.map +1 -0
- package/dist/justone/pricing.generated.d.ts +303 -0
- package/dist/justone/pricing.generated.d.ts.map +1 -0
- package/dist/justone/pricing.generated.js +305 -0
- package/dist/justone/pricing.generated.js.map +1 -0
- package/dist/justone/pricing.js +11 -0
- package/dist/justone/pricing.js.map +1 -0
- package/dist/media/bibigpt.adapter.d.ts +43 -0
- package/dist/media/bibigpt.adapter.d.ts.map +1 -0
- package/dist/media/bibigpt.adapter.js +302 -0
- package/dist/media/bibigpt.adapter.js.map +1 -0
- package/dist/media/http.d.ts +21 -0
- package/dist/media/http.d.ts.map +1 -0
- package/dist/media/http.js +39 -0
- package/dist/media/http.js.map +1 -0
- package/dist/media/index.d.ts +44 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +47 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/types.d.ts +207 -0
- package/dist/media/types.d.ts.map +1 -0
- package/dist/media/types.js +21 -0
- package/dist/media/types.js.map +1 -0
- package/dist/media/zhipu-parser-package.d.ts +37 -0
- package/dist/media/zhipu-parser-package.d.ts.map +1 -0
- package/dist/media/zhipu-parser-package.js +108 -0
- package/dist/media/zhipu-parser-package.js.map +1 -0
- package/dist/media/zhipu.adapter.d.ts +37 -0
- package/dist/media/zhipu.adapter.d.ts.map +1 -0
- package/dist/media/zhipu.adapter.js +361 -0
- package/dist/media/zhipu.adapter.js.map +1 -0
- package/dist/provider-client.d.ts +62 -0
- package/dist/provider-client.d.ts.map +1 -1
- package/dist/provider-client.js +176 -0
- package/dist/provider-client.js.map +1 -1
- package/dist/types.d.ts +23 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +12 -2
- package/dist/types.js.map +1 -1
- package/dist/web-search/deepseek.adapter.d.ts +19 -0
- package/dist/web-search/deepseek.adapter.d.ts.map +1 -0
- package/dist/web-search/deepseek.adapter.js +82 -0
- package/dist/web-search/deepseek.adapter.js.map +1 -0
- package/dist/web-search/http.d.ts +28 -0
- package/dist/web-search/http.d.ts.map +1 -0
- package/dist/web-search/http.js +95 -0
- package/dist/web-search/http.js.map +1 -0
- package/dist/web-search/index.d.ts +27 -0
- package/dist/web-search/index.d.ts.map +1 -0
- package/dist/web-search/index.js +36 -0
- package/dist/web-search/index.js.map +1 -0
- package/dist/web-search/minimax.adapter.d.ts +13 -0
- package/dist/web-search/minimax.adapter.d.ts.map +1 -0
- package/dist/web-search/minimax.adapter.js +82 -0
- package/dist/web-search/minimax.adapter.js.map +1 -0
- package/dist/web-search/moonshotai.adapter.d.ts +19 -0
- package/dist/web-search/moonshotai.adapter.d.ts.map +1 -0
- package/dist/web-search/moonshotai.adapter.js +151 -0
- package/dist/web-search/moonshotai.adapter.js.map +1 -0
- package/dist/web-search/types.d.ts +120 -0
- package/dist/web-search/types.d.ts.map +1 -0
- package/dist/web-search/types.js +60 -0
- package/dist/web-search/types.js.map +1 -0
- package/dist/web-search/zhipu.adapter.d.ts +14 -0
- package/dist/web-search/zhipu.adapter.d.ts.map +1 -0
- package/dist/web-search/zhipu.adapter.js +98 -0
- package/dist/web-search/zhipu.adapter.js.map +1 -0
- package/package.json +4 -3
- package/src/direct-resolver.ts +2 -0
- package/src/image/http.ts +68 -0
- package/src/image/index.ts +87 -0
- package/src/image/types.ts +134 -0
- package/src/image/volcengine.adapter.ts +133 -0
- package/src/index.ts +126 -0
- package/src/justone/client.ts +462 -0
- package/src/justone/endpoint-spec.ts +66 -0
- package/src/justone/endpoints.generated.ts +9258 -0
- package/src/justone/errors.ts +97 -0
- package/src/justone/index.ts +34 -0
- package/src/justone/params.ts +91 -0
- package/src/justone/pricing.generated.ts +308 -0
- package/src/justone/pricing.ts +11 -0
- package/src/media/bibigpt.adapter.ts +372 -0
- package/src/media/http.ts +43 -0
- package/src/media/index.ts +114 -0
- package/src/media/types.ts +233 -0
- package/src/media/zhipu-parser-package.ts +149 -0
- package/src/media/zhipu.adapter.ts +510 -0
- package/src/provider-client.ts +303 -1
- package/src/types.ts +31 -2
- package/src/web-search/deepseek.adapter.ts +149 -0
- package/src/web-search/http.ts +108 -0
- package/src/web-search/index.ts +70 -0
- package/src/web-search/minimax.adapter.ts +148 -0
- package/src/web-search/moonshotai.adapter.ts +228 -0
- package/src/web-search/types.ts +172 -0
- package/src/web-search/zhipu.adapter.ts +184 -0
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
import { bearer, errorMessage, joinUrl, throwIfCenterConfigError, } from './http.js';
|
|
2
|
+
import { MediaUpstreamError, } from './types.js';
|
|
3
|
+
import { parseParserPackage } from './zhipu-parser-package.js';
|
|
4
|
+
const DEFAULT_AUDIO_MODEL = 'glm-asr-2512';
|
|
5
|
+
const DEFAULT_TOOL_TYPE = 'lite';
|
|
6
|
+
const DEFAULT_MAX_WAIT_MS = 60_000;
|
|
7
|
+
function resolved(settings) {
|
|
8
|
+
return {
|
|
9
|
+
audioModel: settings.audio?.model ?? DEFAULT_AUDIO_MODEL,
|
|
10
|
+
toolType: settings.file?.toolType ?? DEFAULT_TOOL_TYPE,
|
|
11
|
+
maxWaitMs: settings.file?.defaultMaxWaitMs ?? DEFAULT_MAX_WAIT_MS,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* MIME → 上传时给厂商的文件扩展名。别处若另有一张「收得下哪些格式」的表,它必须是本表的子集——两张表漂了的表现是
|
|
16
|
+
* 「上游收得下的格式,适配器造不出正确的文件名」,是静默的错误。
|
|
17
|
+
*/
|
|
18
|
+
export const ZHIPU_MIME_TO_EXT = {
|
|
19
|
+
'audio/mpeg': 'mp3',
|
|
20
|
+
'audio/mp3': 'mp3',
|
|
21
|
+
'audio/wav': 'wav',
|
|
22
|
+
'audio/wave': 'wav',
|
|
23
|
+
'audio/x-wav': 'wav',
|
|
24
|
+
'application/pdf': 'pdf',
|
|
25
|
+
'application/msword': 'doc',
|
|
26
|
+
'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'docx',
|
|
27
|
+
'application/vnd.ms-excel': 'xls',
|
|
28
|
+
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'xlsx',
|
|
29
|
+
'application/vnd.ms-powerpoint': 'ppt',
|
|
30
|
+
'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'pptx',
|
|
31
|
+
'text/plain': 'txt',
|
|
32
|
+
'text/markdown': 'md',
|
|
33
|
+
'text/csv': 'csv',
|
|
34
|
+
};
|
|
35
|
+
function extOf(mime) {
|
|
36
|
+
return ZHIPU_MIME_TO_EXT[mime.toLowerCase()];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 厂商文档写的是「MB」且未注明进制,按十进制(1 MB = 1000²)取下界——若厂商实际按 2 的幂算,我们只是保守了 4.8%,
|
|
40
|
+
* 反过来就会把一份超限 4.8% 的文件白传一趟。
|
|
41
|
+
*/
|
|
42
|
+
const MB = 1000 * 1000;
|
|
43
|
+
/**
|
|
44
|
+
* 各上限**逐字来自厂商文档**,改前先核对(数字过时的表现是静默的:要么白传被拒、要么把能解析的文件挡在门外):
|
|
45
|
+
* - 文件解析 https://docs.bigmodel.cn/cn/guide/tools/file-parser.md :Lite ≤50M;Expert ≤100M(仅 PDF);
|
|
46
|
+
* Prime 按格式——PDF/DOC/DOCX/PPT ≤100MB、XLS/XLSX/CSV ≤10MB、图片 ≤20MB(图片不该送到这里:看图归 LLM)。
|
|
47
|
+
* txt/md 等 Prime 支持列表里有、尺寸表里没有的格式,取 Lite 同款 50MB 当下界。
|
|
48
|
+
* - 语音转写 https://docs.bigmodel.cn/api-reference/模型-api/语音转文本.md :单文件 ≤25MB(还有 ≤30 秒时长限制,
|
|
49
|
+
* 字节层看不出时长,超时长交给厂商响亮报错)。
|
|
50
|
+
*/
|
|
51
|
+
export const ZHIPU_AUDIO_MAX_BYTES = 25 * MB;
|
|
52
|
+
const FILE_PRIME_SPREADSHEET_MAX = 10 * MB;
|
|
53
|
+
const FILE_PRIME_DOCUMENT_MAX = 100 * MB;
|
|
54
|
+
const FILE_LITE_MAX = 50 * MB;
|
|
55
|
+
const FILE_EXPERT_MAX = 100 * MB;
|
|
56
|
+
const PRIME_SPREADSHEET_EXTS = new Set(['xls', 'xlsx', 'csv']);
|
|
57
|
+
const PRIME_DOCUMENT_EXTS = new Set(['pdf', 'doc', 'docx', 'ppt', 'pptx']);
|
|
58
|
+
async function loadInput(input, download, signal) {
|
|
59
|
+
if (input.kind === 'bytes') {
|
|
60
|
+
return { bytes: input.bytes, mediaType: input.mediaType };
|
|
61
|
+
}
|
|
62
|
+
const r = await download(input.url, signal ? { signal } : undefined);
|
|
63
|
+
if (!r.ok) {
|
|
64
|
+
throw new MediaUpstreamError(`media URL fetch ${r.status}: ${input.url}`);
|
|
65
|
+
}
|
|
66
|
+
const mediaType = r.headers.get('content-type')?.split(';')[0]?.trim() ||
|
|
67
|
+
'application/octet-stream';
|
|
68
|
+
return { bytes: new Uint8Array(await r.arrayBuffer()), mediaType };
|
|
69
|
+
}
|
|
70
|
+
function blobOf(bytes, mediaType) {
|
|
71
|
+
// 复制一份:调用方给的可能是 Buffer 池里的一段(`byteOffset` 不为 0),直接包会把整块池子都传上去。
|
|
72
|
+
return new Blob([new Uint8Array(bytes)], { type: mediaType });
|
|
73
|
+
}
|
|
74
|
+
export class ZhipuMediaAdapter {
|
|
75
|
+
kind = 'zhipu';
|
|
76
|
+
endpointProtocol = 'media';
|
|
77
|
+
capabilities = ['audio', 'file'];
|
|
78
|
+
/**
|
|
79
|
+
* - `audio`:转写是确定性的,产出由模型与语言提示决定。
|
|
80
|
+
* - `file`:版面解析同样确定,产出只由档位决定;轮询预算等多久都不改变内容,不进键。
|
|
81
|
+
* `images: true` 是 agent-base 2026-09-07 加的**产出版本号**:expert/prime 从此带图片,与之前只取 `/text`
|
|
82
|
+
* 的缓存行不是同一种产出;lite 的产出没变,键也刻意不动。**照抄,别改**——改了 APP 里的存量缓存全部失效。
|
|
83
|
+
*/
|
|
84
|
+
cacheKeyParts(capability, settings, opts) {
|
|
85
|
+
const s = resolved(settings);
|
|
86
|
+
if (capability === 'audio') {
|
|
87
|
+
return { model: s.audioModel, languageHint: opts.languageHint ?? null };
|
|
88
|
+
}
|
|
89
|
+
if (capability === 'file') {
|
|
90
|
+
return s.toolType === 'lite'
|
|
91
|
+
? { toolType: 'lite' }
|
|
92
|
+
: { toolType: s.toolType, images: true };
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
maxUploadBytes(capability, settings, hint) {
|
|
97
|
+
if (capability === 'audio')
|
|
98
|
+
return ZHIPU_AUDIO_MAX_BYTES;
|
|
99
|
+
if (capability !== 'file')
|
|
100
|
+
return null;
|
|
101
|
+
switch (resolved(settings).toolType) {
|
|
102
|
+
case 'lite':
|
|
103
|
+
return FILE_LITE_MAX;
|
|
104
|
+
case 'expert':
|
|
105
|
+
return FILE_EXPERT_MAX;
|
|
106
|
+
case 'prime': {
|
|
107
|
+
const ext = hint.mediaType ? extOf(hint.mediaType) : undefined;
|
|
108
|
+
if (ext && PRIME_SPREADSHEET_EXTS.has(ext)) {
|
|
109
|
+
return FILE_PRIME_SPREADSHEET_MAX;
|
|
110
|
+
}
|
|
111
|
+
if (ext && PRIME_DOCUMENT_EXTS.has(ext))
|
|
112
|
+
return FILE_PRIME_DOCUMENT_MAX;
|
|
113
|
+
// 类型未知或尺寸表没列的格式:取各档最小的文档上限当下界。
|
|
114
|
+
return FILE_LITE_MAX;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async transcribeAudio(conn, settings, req) {
|
|
119
|
+
const s = resolved(settings);
|
|
120
|
+
const download = conn.download ?? globalThis.fetch;
|
|
121
|
+
const { bytes, mediaType } = await loadInput(req.input, download, req.signal);
|
|
122
|
+
const form = new FormData();
|
|
123
|
+
form.append('model', s.audioModel);
|
|
124
|
+
form.append('file', blobOf(bytes, mediaType), `upload.${extOf(mediaType) ?? 'bin'}`);
|
|
125
|
+
if (req.languageHint && req.languageHint !== 'auto') {
|
|
126
|
+
form.append('language', req.languageHint);
|
|
127
|
+
}
|
|
128
|
+
const resp = await sendRetryingNetwork(conn.openTask(), joinUrl(conn.baseUrl, 'audio/transcriptions'), {
|
|
129
|
+
method: 'POST',
|
|
130
|
+
headers: bearer(conn.apiKey),
|
|
131
|
+
body: form,
|
|
132
|
+
}, { signal: req.signal });
|
|
133
|
+
if (!resp.ok) {
|
|
134
|
+
throw new MediaUpstreamError(`bigmodel audio/transcriptions ${resp.status}: ${await resp.text()}`);
|
|
135
|
+
}
|
|
136
|
+
const json = (await resp.json());
|
|
137
|
+
return {
|
|
138
|
+
text: json.text ?? '',
|
|
139
|
+
rawResponse: json,
|
|
140
|
+
...(typeof json.duration === 'number'
|
|
141
|
+
? { audioDurationMs: Math.round(json.duration * 1000) }
|
|
142
|
+
: {}),
|
|
143
|
+
...(json.language !== undefined ? { language: json.language } : {}),
|
|
144
|
+
...(json.segments !== undefined ? { segments: json.segments } : {}),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
async parseFile(conn, settings, req) {
|
|
148
|
+
const s = resolved(settings);
|
|
149
|
+
const download = conn.download ?? globalThis.fetch;
|
|
150
|
+
const { bytes, mediaType } = await loadInput(req.input, download, req.signal);
|
|
151
|
+
// 认不出 mime 就当场停下,别送一个 `file_type=bin` 上去:厂商回的是「文件格式暂不支持:支持类型为 pdf, doc,
|
|
152
|
+
// docx, …」——一句把 docx 列在支持列表里、却正是在拒绝一份 docx 的话,谁看了都会往错的方向查。
|
|
153
|
+
const ext = extOf(mediaType);
|
|
154
|
+
if (!ext) {
|
|
155
|
+
throw new MediaUpstreamError(`bigmodel file parser: 不认识的文件类型 "${mediaType}",无法告诉厂商这是什么格式。` +
|
|
156
|
+
`本适配器能标注的是 ${[...new Set(Object.values(ZHIPU_MIME_TO_EXT))].join(' / ')}。`);
|
|
157
|
+
}
|
|
158
|
+
// 厂商文档:expert 只吃 PDF。送别的格式上去回的是一句泛泛的「格式不支持」,让人去怀疑文件本身。
|
|
159
|
+
if (s.toolType === 'expert' && ext !== 'pdf') {
|
|
160
|
+
throw new MediaUpstreamError(`bigmodel file parser: expert 档只解析 PDF,这是一份 ${ext}。` +
|
|
161
|
+
'改用 prime 档(全格式)或 lite 档(无图片)。');
|
|
162
|
+
}
|
|
163
|
+
// 建任务与轮询必须落在同一把 key 上:任务属于那个账号。
|
|
164
|
+
const send = conn.openTask();
|
|
165
|
+
const createForm = new FormData();
|
|
166
|
+
createForm.append('file', blobOf(bytes, mediaType), `upload.${ext}`);
|
|
167
|
+
createForm.append('tool_type', s.toolType);
|
|
168
|
+
createForm.append('file_type', ext);
|
|
169
|
+
const createResp = await sendRetryingNetwork(send, joinUrl(conn.baseUrl, 'files/parser/create'), {
|
|
170
|
+
method: 'POST',
|
|
171
|
+
headers: bearer(conn.apiKey),
|
|
172
|
+
body: createForm,
|
|
173
|
+
}, { timeoutMs: CREATE_TIMEOUT_MS, signal: req.signal });
|
|
174
|
+
if (!createResp.ok) {
|
|
175
|
+
throw new MediaUpstreamError(`bigmodel files/parser/create ${createResp.status}: ${await createResp.text()}`);
|
|
176
|
+
}
|
|
177
|
+
const createJson = (await createResp.json());
|
|
178
|
+
if (!createJson.task_id) {
|
|
179
|
+
throw new MediaUpstreamError(`bigmodel files/parser/create returned no task_id: ${JSON.stringify(createJson)}`);
|
|
180
|
+
}
|
|
181
|
+
const taskId = createJson.task_id;
|
|
182
|
+
const budgetMs = req.maxWaitMs ?? s.maxWaitMs;
|
|
183
|
+
const vendorExtra = { taskId, toolType: s.toolType };
|
|
184
|
+
const poll = (ms, format) => pollResult(conn, send, taskId, ms, format, req.signal);
|
|
185
|
+
// lite 不产出图片,`/text` 就是全部。
|
|
186
|
+
if (s.toolType === 'lite') {
|
|
187
|
+
const result = await poll(budgetMs, 'text');
|
|
188
|
+
return {
|
|
189
|
+
text: result.content ?? '',
|
|
190
|
+
markdown: result.content ?? '',
|
|
191
|
+
rawResponse: result,
|
|
192
|
+
vendorExtra,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
// expert / prime:图片只在 `download_link` 的结果包里(`/text` 的正文与包里的 md 逐字节相同,但引用的
|
|
196
|
+
// `images/…` 在我们这边打不开)。包拿不到就退回 `/text` 并标 degraded——正文已经花了钱,不该为一次下载失败作废。
|
|
197
|
+
const link = await poll(budgetMs, 'download_link');
|
|
198
|
+
let degraded;
|
|
199
|
+
if (link.parsing_result_url) {
|
|
200
|
+
try {
|
|
201
|
+
const zip = await downloadWithRetry(download, link.parsing_result_url, req.signal);
|
|
202
|
+
const pkg = parseParserPackage(zip);
|
|
203
|
+
return {
|
|
204
|
+
text: pkg.markdown,
|
|
205
|
+
markdown: pkg.markdown,
|
|
206
|
+
rawResponse: link,
|
|
207
|
+
...(pkg.pageCount !== undefined ? { pageCount: pkg.pageCount } : {}),
|
|
208
|
+
images: pkg.images,
|
|
209
|
+
vendorExtra: {
|
|
210
|
+
...vendorExtra,
|
|
211
|
+
parsingResultUrl: link.parsing_result_url,
|
|
212
|
+
...(pkg.missingRefs.length > 0
|
|
213
|
+
? { missingImageRefs: pkg.missingRefs }
|
|
214
|
+
: {}),
|
|
215
|
+
},
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
if (req.signal?.aborted)
|
|
220
|
+
throw err;
|
|
221
|
+
degraded = `结果包没拿到,图片缺失:${errorMessage(err)}`;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
degraded = '厂商没有返回结果包链接(parsing_result_url 为空),图片缺失';
|
|
226
|
+
}
|
|
227
|
+
// 任务已经 succeeded,`/text` 是即时的;预算只是防御厂商侧抽风。
|
|
228
|
+
const result = await poll(30_000, 'text');
|
|
229
|
+
return {
|
|
230
|
+
text: result.content ?? '',
|
|
231
|
+
markdown: result.content ?? '',
|
|
232
|
+
rawResponse: result,
|
|
233
|
+
vendorExtra,
|
|
234
|
+
degraded,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
async function pollResult(conn, send, taskId, budgetMs, format, signal) {
|
|
239
|
+
const start = Date.now();
|
|
240
|
+
let delay = 500;
|
|
241
|
+
let attempts = 0;
|
|
242
|
+
for (;;) {
|
|
243
|
+
attempts++;
|
|
244
|
+
const url = joinUrl(conn.baseUrl, `files/parser/result/${encodeURIComponent(taskId)}/${format}`);
|
|
245
|
+
const resp = await sendRetryingNetwork(send, url, { method: 'GET', headers: bearer(conn.apiKey) }, { timeoutMs: POLL_TIMEOUT_MS, signal });
|
|
246
|
+
if (!resp.ok) {
|
|
247
|
+
throw new MediaUpstreamError(`bigmodel files/parser/result ${resp.status}: ${await resp.text()}`);
|
|
248
|
+
}
|
|
249
|
+
const json = (await resp.json());
|
|
250
|
+
if (json.status === 'succeeded')
|
|
251
|
+
return json;
|
|
252
|
+
if (json.status === 'failed') {
|
|
253
|
+
throw new MediaUpstreamError(`bigmodel file parser failed: ${json.message ?? 'unknown'} (task_id=${taskId})`);
|
|
254
|
+
}
|
|
255
|
+
const elapsed = Date.now() - start;
|
|
256
|
+
if (elapsed + delay > budgetMs) {
|
|
257
|
+
throw new MediaUpstreamError(`bigmodel file parser timeout after ${elapsed}ms attempts=${attempts} task_id=${taskId}`);
|
|
258
|
+
}
|
|
259
|
+
await sleep(delay, signal);
|
|
260
|
+
delay = Math.min(delay * 2, 2000);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/** 连不上厂商(没拿到任何响应)时再试的次数,含第一次。 */
|
|
264
|
+
const NETWORK_ATTEMPTS = 3;
|
|
265
|
+
/**
|
|
266
|
+
* 建解析任务(带文件上传)单次的超时。几 MB 的文件正常几秒内回;2026-09-25 实测一次上传被拖了 298 秒才回,
|
|
267
|
+
* 工具先在 300 秒处超时,任务在厂商侧建了、结果没人取。三次 × 60 秒仍落在工具的等待上限之内。
|
|
268
|
+
*/
|
|
269
|
+
const CREATE_TIMEOUT_MS = 60_000;
|
|
270
|
+
/** 查询解析结果单次的超时(只是一个 GET,正常百毫秒级)。 */
|
|
271
|
+
const POLL_TIMEOUT_MS = 15_000;
|
|
272
|
+
/**
|
|
273
|
+
* 发到厂商 API 的请求:**只在没拿到响应时重试**——网络层失败(`TypeError: fetch failed`)、给了 `timeoutMs`
|
|
274
|
+
* 时的单次超时、中心报 `upstream_error`(中心连不上厂商);拿到了厂商的响应(哪怕 4xx / 5xx)就原样返回、不重试:
|
|
275
|
+
* 那说明请求到了厂商那边。中心自己报的其余错误(没有可用 key……)抛 `ProviderClientError`。调用方的中止原样抛。
|
|
276
|
+
*
|
|
277
|
+
* 超时重试**可能**让建任务在厂商侧重复一次(请求其实到了、只是回应迟迟没来);不设超时的话工具整体超时后模型照样会
|
|
278
|
+
* 重试,而且还要先干等到工具超时。音频转写不给 `timeoutMs`:同步接口,长音频本来就要转一阵。
|
|
279
|
+
*/
|
|
280
|
+
async function sendRetryingNetwork(send, url, init, opts) {
|
|
281
|
+
let lastErr;
|
|
282
|
+
for (let attempt = 1; attempt <= NETWORK_ATTEMPTS; attempt++) {
|
|
283
|
+
const signals = [
|
|
284
|
+
...(opts.signal ? [opts.signal] : []),
|
|
285
|
+
...(opts.timeoutMs !== undefined
|
|
286
|
+
? [AbortSignal.timeout(opts.timeoutMs)]
|
|
287
|
+
: []),
|
|
288
|
+
];
|
|
289
|
+
try {
|
|
290
|
+
const res = await send(url, {
|
|
291
|
+
...init,
|
|
292
|
+
...(signals.length > 0 ? { signal: AbortSignal.any(signals) } : {}),
|
|
293
|
+
});
|
|
294
|
+
const center = await throwIfCenterConfigError(res);
|
|
295
|
+
if (!center)
|
|
296
|
+
return res;
|
|
297
|
+
lastErr = new MediaUpstreamError(`bigmodel ${new URL(url).pathname}: ${center.upstream}`);
|
|
298
|
+
}
|
|
299
|
+
catch (err) {
|
|
300
|
+
if (opts.signal?.aborted)
|
|
301
|
+
throw err;
|
|
302
|
+
const timedOut = err instanceof Error && err.name === 'TimeoutError';
|
|
303
|
+
if (!(err instanceof TypeError) && !timedOut)
|
|
304
|
+
throw err;
|
|
305
|
+
lastErr = err;
|
|
306
|
+
}
|
|
307
|
+
if (attempt < NETWORK_ATTEMPTS)
|
|
308
|
+
await sleep(1000 * attempt, opts.signal);
|
|
309
|
+
}
|
|
310
|
+
throw lastErr;
|
|
311
|
+
}
|
|
312
|
+
/** 单次下载的超时与重试次数;数字出处见下方注释。 */
|
|
313
|
+
const PACKAGE_DOWNLOAD_TIMEOUT_MS = 30_000;
|
|
314
|
+
const PACKAGE_DOWNLOAD_ATTEMPTS = 3;
|
|
315
|
+
/**
|
|
316
|
+
* 下载结果包(不经中心:链接是厂商的对象存储,带签名、不要 key)。链接指向 UCloud 对象存储(明文 http,24h 有效)。
|
|
317
|
+
* **2026-09-07 探针里 Node 原生 fetch 约三分之一的次数在 70s 后 `read ETIMEDOUT`、同一链接换个连接立刻 1s 下完**,
|
|
318
|
+
* 是对端偶发的半开连接。所以每次给 30s、最多三次,而不是等 undici 自己 5 分钟的 body 超时。
|
|
319
|
+
*/
|
|
320
|
+
async function downloadWithRetry(download, url, signal) {
|
|
321
|
+
let lastErr;
|
|
322
|
+
for (let attempt = 1; attempt <= PACKAGE_DOWNLOAD_ATTEMPTS; attempt++) {
|
|
323
|
+
const timeout = AbortSignal.timeout(PACKAGE_DOWNLOAD_TIMEOUT_MS);
|
|
324
|
+
try {
|
|
325
|
+
const r = await download(url, {
|
|
326
|
+
signal: signal ? AbortSignal.any([signal, timeout]) : timeout,
|
|
327
|
+
});
|
|
328
|
+
if (!r.ok)
|
|
329
|
+
throw new Error(`HTTP ${r.status}`);
|
|
330
|
+
return new Uint8Array(await r.arrayBuffer());
|
|
331
|
+
}
|
|
332
|
+
catch (err) {
|
|
333
|
+
if (signal?.aborted)
|
|
334
|
+
throw err;
|
|
335
|
+
lastErr = err;
|
|
336
|
+
if (attempt < PACKAGE_DOWNLOAD_ATTEMPTS) {
|
|
337
|
+
await sleep(1000 * attempt, signal);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
throw new Error(`结果包下载 ${PACKAGE_DOWNLOAD_ATTEMPTS} 次均失败:${errorMessage(lastErr)}`);
|
|
342
|
+
}
|
|
343
|
+
/** 等一会儿;调用方中止时立刻抛出中止原因。 */
|
|
344
|
+
function sleep(ms, signal) {
|
|
345
|
+
return new Promise((resolve, reject) => {
|
|
346
|
+
if (signal?.aborted) {
|
|
347
|
+
reject(signal.reason);
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
const timer = setTimeout(() => {
|
|
351
|
+
signal?.removeEventListener('abort', onAbort);
|
|
352
|
+
resolve();
|
|
353
|
+
}, ms);
|
|
354
|
+
const onAbort = () => {
|
|
355
|
+
clearTimeout(timer);
|
|
356
|
+
reject(signal.reason);
|
|
357
|
+
};
|
|
358
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
//# sourceMappingURL=zhipu.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zhipu.adapter.js","sourceRoot":"","sources":["../../src/media/zhipu.adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,25 @@
|
|
|
1
|
+
import { type ImageGenerator } from './image/index.js';
|
|
2
|
+
import { type JustOne, type JustOneOptions } from './justone/index.js';
|
|
3
|
+
import { type MediaKind, type MediaService, type MediaSettings } from './media/index.js';
|
|
1
4
|
import { type ModelHandle, type ModelRef, type ModelResolver, type ResolveOptions } from './model-handle.js';
|
|
2
5
|
import { type CatalogResponse } from './types.js';
|
|
3
6
|
import type { VendorFetch } from './vendors/index.js';
|
|
7
|
+
import { type WebSearch, type WebSearchKind, type WebSearchSettings } from './web-search/index.js';
|
|
8
|
+
/** `ProviderClient.webSearch` 的选项。 */
|
|
9
|
+
export interface WebSearchOptions<K extends WebSearchKind = WebSearchKind> extends FetchForOptions {
|
|
10
|
+
/** 这家的设置(智谱档位、Kimi 基础 / 专业版);不给用缺省。 */
|
|
11
|
+
settings?: WebSearchSettings<K>;
|
|
12
|
+
}
|
|
13
|
+
/** `ProviderClient.media` 的选项。 */
|
|
14
|
+
export interface MediaOptions<K extends MediaKind = MediaKind> extends FetchForOptions {
|
|
15
|
+
/** 这家的设置(智谱的转写模型、解析档位与轮询预算);不给用缺省。 */
|
|
16
|
+
settings?: MediaSettings<K>;
|
|
17
|
+
/** 下载非厂商地址(`kind: 'url'` 的输入、智谱的结果包)用的 fetch;默认全局 fetch。不经中心。 */
|
|
18
|
+
download?: VendorFetch;
|
|
19
|
+
}
|
|
20
|
+
/** `ProviderClient.justOne` 的选项。 */
|
|
21
|
+
export interface JustOneClientOptions<C = unknown> extends FetchForOptions, Pick<JustOneOptions<C>, 'onAttempt'> {
|
|
22
|
+
}
|
|
4
23
|
/** `ProviderClient.fetchFor` 的选项。 */
|
|
5
24
|
export interface FetchForOptions {
|
|
6
25
|
/** 会话粘性键(`x-pc-affinity`):建异步任务与轮询带同一个,就落在同一把 key 上(只要它还可用)。 */
|
|
@@ -10,6 +29,8 @@ export interface FetchForOptions {
|
|
|
10
29
|
/** 每次响应回来时告诉调用方实际用的是哪把 key(`x-pc-credential`)。 */
|
|
11
30
|
onCredential?: (ref: string) => void;
|
|
12
31
|
}
|
|
32
|
+
/** `ProviderClient.imageModel` 的选项。 */
|
|
33
|
+
export type ImageModelOptions = FetchForOptions;
|
|
13
34
|
export interface ProviderClientOptions {
|
|
14
35
|
/** 中心的根地址,如 `https://provider.example.com`。 */
|
|
15
36
|
centerUrl: string;
|
|
@@ -50,6 +71,47 @@ export declare class ProviderClient implements ModelResolver {
|
|
|
50
71
|
* 目录只在创建时查一次;目录里没有这家(或这个接入方看不到)时报 `unknown_vendor`。
|
|
51
72
|
*/
|
|
52
73
|
fetchFor(slug: string, options?: FetchForOptions): Promise<VendorFetch>;
|
|
74
|
+
/**
|
|
75
|
+
* 某家厂商的联网搜索 / 读网页(适配器在本包,请求经中心透传、中心注入 key)。地址取自目录里这家的
|
|
76
|
+
* `web-search` 端点——它可以与对话端点不同域(MiniMax)。
|
|
77
|
+
* - 目录里没有这家 → `unknown_vendor`;这个版本的 client 没有这家的搜索适配器 → `unsupported_vendor_kind`;
|
|
78
|
+
* 这家没有启用的 `web-search` 端点 → `protocol_unavailable`。
|
|
79
|
+
* - 调用时中心自己报的错(没有可用 key、不许用这家……)是 `ProviderClientError`,厂商的失败是
|
|
80
|
+
* `WebSearchUpstreamError`(带 `retryable`)。
|
|
81
|
+
* 目录只在创建时查一次。
|
|
82
|
+
*/
|
|
83
|
+
webSearch<K extends WebSearchKind>(slug: string, options?: WebSearchOptions<K>): Promise<WebSearch>;
|
|
84
|
+
/**
|
|
85
|
+
* 一个生图模型(适配器在本包,请求经中心透传、中心注入 key)。地址取自这家的对话端点(生图模型没有自己的协议,
|
|
86
|
+
* 用哪个端点由这家的生图适配器定)。**一次 `generate` 出一张**;要几张就并发几次。
|
|
87
|
+
* - 目录里没有这家 → `unknown_vendor`;这家没有这个生图模型(或停用了)→ `unknown_model`;
|
|
88
|
+
* 这个版本的 client 没有这家的生图适配器 → `unsupported_vendor_kind`;这家没有启用的对应端点 → `protocol_unavailable`。
|
|
89
|
+
* - 生成时中心自己报的错是 `ProviderClientError`,厂商的失败是 `ImageUpstreamError`(`retryable`、`contentFiltered`)。
|
|
90
|
+
* - 用量(张数、参考图数)在结果里,单价在目录里(`catalog()` 的 `imageModels[].pricing`),钱由 APP 自己算。
|
|
91
|
+
* 目录只在创建时查一次。
|
|
92
|
+
*/
|
|
93
|
+
imageModel(ref: ModelRef, options?: ImageModelOptions): Promise<ImageGenerator>;
|
|
94
|
+
/**
|
|
95
|
+
* 某家厂商的媒体解析(适配器在本包,请求经中心透传、中心注入 key):智谱的文件解析 / 语音转写(地址取自这家的
|
|
96
|
+
* `media` 端点)、BibiGPT 的视频链接解析(它唯一的 `http` 端点)。
|
|
97
|
+
* - 目录里没有这家 → `unknown_vendor`;这个版本的 client 没有这家的媒体适配器 → `unsupported_vendor_kind`;
|
|
98
|
+
* 这家没有启用的对应端点 → `protocol_unavailable`。
|
|
99
|
+
* - **每次调用是一个任务**:第一条请求带 `affinity`(给了的话)选 key,之后的轮询 / 取结果钉在那把 key 上
|
|
100
|
+
* (`x-pc-pin`)——任务属于那个账号,换 key 就查不到;那把 key 中途不可用会报 `pinned_credential_unavailable`。
|
|
101
|
+
* 给了 `pin` 就从头钉住。
|
|
102
|
+
* - 中心自己报的错是 `ProviderClientError`,厂商的失败是 `MediaUpstreamError`。
|
|
103
|
+
* 目录只在创建时查一次。
|
|
104
|
+
*/
|
|
105
|
+
media<K extends MediaKind>(slug: string, options?: MediaOptions<K>): Promise<MediaService>;
|
|
106
|
+
/**
|
|
107
|
+
* JustOne 数据接口(客户端在本包,请求经中心透传;token 由中心注入 query 或表单字段,本进程不碰)。地址取自这家的
|
|
108
|
+
* `http` 端点。调用审计、花费由 APP 经 `onAttempt` 记。
|
|
109
|
+
* - 目录里没有这家 → `unknown_vendor`;这家不是 `justone` → `unsupported_vendor_kind`;没有启用的 `http` 端点 →
|
|
110
|
+
* `protocol_unavailable`。
|
|
111
|
+
* - 调用时中心自己报的错是 `ProviderClientError`,JustOne 的失败是 `JustOneUpstreamError`,参数不对是 `JustOneParamsError`。
|
|
112
|
+
* 接口是无状态的,`affinity` / `pin` 只影响选哪把 key。目录只在创建时查一次。
|
|
113
|
+
*/
|
|
114
|
+
justOne<C = unknown>(slug: string, options?: JustOneClientOptions<C>): Promise<JustOne<C>>;
|
|
53
115
|
capabilitiesOf(ref: ModelRef): Promise<("vision" | "video" | "reasoning")[]>;
|
|
54
116
|
private fetchCatalog;
|
|
55
117
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-client.d.ts","sourceRoot":"","sources":["../src/provider-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,eAAe,EAAc,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"provider-client.d.ts","sourceRoot":"","sources":["../src/provider-client.ts"],"names":[],"mappings":"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"}
|