@aalis/plugin-asr-openai 0.9.3 → 0.9.4
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/index.d.ts.map +1 -1
- package/dist/index.js +42 -8
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,eAAO,MAAM,IAAI,6BAA6B,CAAC;AAC/C,eAAO,MAAM,WAAW,uBAAuB,CAAC;AAChD,eAAO,MAAM,SAAS,UAAU,CAAC;AACjC,eAAO,MAAM,QAAQ,UAAU,CAAC;AAChC,eAAO,MAAM,MAAM;;CAAuC,CAAC;AAC3D,eAAO,MAAM,QAAQ,OAAO,CAAC;AAS7B,eAAO,MAAM,YAAY,EAAE,YAK1B,CAAC;AAqFF,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAyCtE"}
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
// 兼容 OpenAI、Groq、本地 ollama-asr 网关等所有 OpenAI 风格协议。
|
|
6
6
|
// ============================================================
|
|
7
7
|
import { Buffer } from 'node:buffer';
|
|
8
|
+
import { extname } from 'node:path';
|
|
8
9
|
import { createProcessGateway } from '@aalis/api-process';
|
|
9
10
|
import { createStorageGateway, isStorageUri } from '@aalis/api-storage';
|
|
10
11
|
import { safeFetch } from '@aalis/util-network-guard';
|
|
@@ -26,31 +27,65 @@ const defaultConfig = {
|
|
|
26
27
|
model: 'whisper-1',
|
|
27
28
|
priority: 50,
|
|
28
29
|
};
|
|
30
|
+
/**
|
|
31
|
+
* Whisper API 实际接受的后缀集(其余一律被判 400,包括 opus、amr 这类常见语音容器)。
|
|
32
|
+
* 后缀只决定上传文件名,不做转码——不在集内的来源改按 Content-Type 映射到集内后缀。
|
|
33
|
+
*/
|
|
34
|
+
const WHISPER_EXTS = new Set(['flac', 'm4a', 'mp3', 'mp4', 'mpeg', 'mpga', 'oga', 'ogg', 'wav', 'webm']);
|
|
35
|
+
/**
|
|
36
|
+
* 猜音频文件扩展名。`url.split('.').pop()` 在无扩展名的来源上会把整条路径当扩展名
|
|
37
|
+
* (实测 `audio.com/download` → 带斜杠的文件名,被 Whisper API 判 400),故走
|
|
38
|
+
* extname + {@link WHISPER_EXTS} 实际支持集:命中即用;未命中(无后缀、或后缀不被
|
|
39
|
+
* API 接受)再按 Content-Type 映射;没有 Content-Type(file:// 与 storage 两支都不带)
|
|
40
|
+
* 时拿路径后缀过同一张映射表,`.opus` 才能落成 ogg 而非被兜底成 wav;都取不到落 'wav'。
|
|
41
|
+
*/
|
|
42
|
+
function guessAudioExt(source, contentType) {
|
|
43
|
+
const fromPath = extname(source.split('?')[0].split('#')[0]).replace(/^\./, '').toLowerCase();
|
|
44
|
+
if (WHISPER_EXTS.has(fromPath))
|
|
45
|
+
return fromPath;
|
|
46
|
+
const sub = (contentType ?? '').split(';')[0].trim().toLowerCase().split('/')[1] ?? '';
|
|
47
|
+
const byMime = {
|
|
48
|
+
mpeg: 'mp3',
|
|
49
|
+
mp3: 'mp3',
|
|
50
|
+
wav: 'wav',
|
|
51
|
+
'x-wav': 'wav',
|
|
52
|
+
wave: 'wav',
|
|
53
|
+
ogg: 'ogg',
|
|
54
|
+
opus: 'ogg',
|
|
55
|
+
oga: 'ogg',
|
|
56
|
+
mp4: 'm4a',
|
|
57
|
+
'x-m4a': 'm4a',
|
|
58
|
+
m4a: 'm4a',
|
|
59
|
+
webm: 'webm',
|
|
60
|
+
flac: 'flac',
|
|
61
|
+
};
|
|
62
|
+
return byMime[sub] ?? byMime[fromPath] ?? 'wav';
|
|
63
|
+
}
|
|
29
64
|
async function attachmentToBlob(data, proc, storage) {
|
|
30
65
|
// base64 data URL(必须带 ;base64,,借此与 storage URI `data:/...` 区分)
|
|
31
66
|
const dataUri = data.match(/^data:([^;]+);base64,(.+)$/);
|
|
32
67
|
if (dataUri) {
|
|
33
68
|
const mime = dataUri[1];
|
|
34
69
|
const buf = Buffer.from(dataUri[2], 'base64');
|
|
35
|
-
|
|
70
|
+
// 同样过 WHISPER_EXTS 白名单:`audio/opus` 直接取 mime 子类型会上传 audio.opus,被判 400
|
|
71
|
+
const ext = guessAudioExt('', mime);
|
|
36
72
|
return { blob: new Blob([buf], { type: mime }), filename: `audio.${ext}` };
|
|
37
73
|
}
|
|
38
74
|
if (data.startsWith('file://') || data.startsWith('/')) {
|
|
39
75
|
// 走 ProcessService.readExternalFile(治外文件能力),避免直 import node:fs
|
|
40
76
|
const bytes = await proc.readExternalFile(data);
|
|
41
77
|
const path = data.startsWith('file://') ? data.slice(7) : data;
|
|
42
|
-
|
|
43
|
-
return { blob: new Blob([bytes]), filename: `audio.${ext}` };
|
|
78
|
+
return { blob: new Blob([bytes]), filename: `audio.${guessAudioExt(path)}` };
|
|
44
79
|
}
|
|
45
80
|
if (data.startsWith('http://') || data.startsWith('https://')) {
|
|
46
81
|
const resp = await safeFetch(data);
|
|
47
82
|
if (!resp.ok)
|
|
48
83
|
throw new Error(`下载失败 ${resp.status}`);
|
|
49
84
|
const ab = await resp.arrayBuffer();
|
|
50
|
-
const
|
|
85
|
+
const ctype = resp.headers.get('content-type');
|
|
51
86
|
return {
|
|
52
|
-
blob: new Blob([ab], { type:
|
|
53
|
-
filename: `audio.${
|
|
87
|
+
blob: new Blob([ab], { type: ctype ?? 'application/octet-stream' }),
|
|
88
|
+
filename: `audio.${guessAudioExt(data, ctype)}`,
|
|
54
89
|
};
|
|
55
90
|
}
|
|
56
91
|
// storage URI(scheme:/...)或历史裸相对路径(data/... → data:/...)→ 经 storage 读取
|
|
@@ -61,8 +96,7 @@ async function attachmentToBlob(data, proc, storage) {
|
|
|
61
96
|
storageUri = `data:/${data.slice('data/'.length)}`;
|
|
62
97
|
if (storageUri) {
|
|
63
98
|
const bytes = (await storage.readFile(storageUri));
|
|
64
|
-
|
|
65
|
-
return { blob: new Blob([bytes]), filename: `audio.${ext}` };
|
|
99
|
+
return { blob: new Blob([bytes]), filename: `audio.${guessAudioExt(storageUri)}` };
|
|
66
100
|
}
|
|
67
101
|
throw new Error(`不支持的附件来源: ${data.slice(0, 32)}`);
|
|
68
102
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,qDAAqD;AACrD,EAAE;AACF,gEAAgE;AAChE,kDAAkD;AAClD,+DAA+D;AAE/D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aalis/plugin-asr-openai",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.4",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@types/node": "^22.0.0",
|
|
34
34
|
"typescript": "^5.7.0",
|
|
35
|
-
"@aalis/
|
|
36
|
-
"@aalis/
|
|
35
|
+
"@aalis/core": "0.12.1",
|
|
36
|
+
"@aalis/api-webui": "0.9.2",
|
|
37
37
|
"@aalis/api-asr": "0.9.0"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|