@aalis/plugin-asr-whisper-cpp 0.4.0 → 0.5.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/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +57 -79
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAQzD,eAAO,MAAM,IAAI,kCAAkC,CAAC;AACpD,eAAO,MAAM,WAAW,yCAAqB,CAAC;AAC9C,eAAO,MAAM,SAAS,UAAU,CAAC;AACjC,eAAO,MAAM,QAAQ,UAAU,CAAC;AAChC,eAAO,MAAM,MAAM;;CAAuC,CAAC;AAC3D,eAAO,MAAM,QAAQ,OAAO,CAAC;AAE7B,UAAU,GAAG;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,YAAY,EAAE,YAM1B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,GAM3B,CAAC;AAmDF,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAqDtE"}
|
package/dist/index.js
CHANGED
|
@@ -10,11 +10,13 @@
|
|
|
10
10
|
import { Buffer } from 'node:buffer';
|
|
11
11
|
import { createProcessGateway } from '@aalis/plugin-process-api';
|
|
12
12
|
import { createStorageGateway } from '@aalis/plugin-storage-api';
|
|
13
|
+
import { safeFetch } from '@aalis/util-network-guard';
|
|
13
14
|
export const name = '@aalis/plugin-asr-whisper-cpp';
|
|
14
15
|
export const displayName = 'Whisper.cpp 本地转写';
|
|
15
16
|
export const subsystem = 'media';
|
|
16
|
-
export const provides = [];
|
|
17
|
-
export const inject = { required: ['
|
|
17
|
+
export const provides = ['asr'];
|
|
18
|
+
export const inject = { required: ['process', 'storage'] };
|
|
19
|
+
export const reusable = true;
|
|
18
20
|
export const configSchema = {
|
|
19
21
|
binaryPath: { type: 'string', label: 'whisper-cli 路径', default: 'whisper-cli' },
|
|
20
22
|
modelPath: { type: 'string', label: '模型文件路径 (.bin)', default: '' },
|
|
@@ -29,87 +31,76 @@ export const defaultConfig = {
|
|
|
29
31
|
threads: 4,
|
|
30
32
|
priority: 80,
|
|
31
33
|
};
|
|
34
|
+
/**
|
|
35
|
+
* 把附件 data 解析为本地可读路径;返回路径 + 清理函数(仅对下载/解码出的临时文件有意义)。
|
|
36
|
+
* 与 plugin-media 的规范实现 ffmpeg.ts:materializeAttachment 对齐:base64 data URL、file://、
|
|
37
|
+
* http(s)、storage URI(scheme:/)、以及历史裸相对路径 `data/...`(补成 `data:/...`)都支持。
|
|
38
|
+
*/
|
|
32
39
|
async function materializeAudio(proc, storage, data) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
!data.startsWith('data:')) {
|
|
41
|
-
try {
|
|
42
|
-
const local = await storage.resolveLocalPath?.(data, 'read');
|
|
43
|
-
if (local)
|
|
44
|
-
return { path: local, tmp: null, audioBase: null };
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
/* fall through */
|
|
48
|
-
}
|
|
40
|
+
// base64 data URL(必须带 ;base64,,借此与 storage URI `data:/...` 区分)
|
|
41
|
+
const dataUri = data.match(/^data:([^;]+);base64,(.+)$/);
|
|
42
|
+
if (dataUri) {
|
|
43
|
+
const tmp = await proc.makeTempDir('whisper-in');
|
|
44
|
+
const ext = dataUri[1].split('/')[1]?.split(';')[0] ?? 'bin';
|
|
45
|
+
await storage.writeFile(`${tmp.uri}/audio.${ext}`, Buffer.from(dataUri[2], 'base64'));
|
|
46
|
+
return { path: `${tmp.path}/audio.${ext}`, cleanup: tmp.cleanup };
|
|
49
47
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
let ext = 'bin';
|
|
53
|
-
if (data.startsWith('data:')) {
|
|
54
|
-
const m = data.match(/^data:([^;]+);base64,(.+)$/);
|
|
55
|
-
if (!m) {
|
|
56
|
-
await tmp.cleanup();
|
|
57
|
-
throw new Error('无效 data URL');
|
|
58
|
-
}
|
|
59
|
-
buf = Buffer.from(m[2], 'base64');
|
|
60
|
-
ext = m[1].split('/')[1]?.split(';')[0] ?? 'bin';
|
|
48
|
+
if (data.startsWith('file://')) {
|
|
49
|
+
return { path: data.slice('file://'.length), cleanup: async () => { } };
|
|
61
50
|
}
|
|
62
|
-
|
|
63
|
-
const resp = await
|
|
64
|
-
if (!resp.ok)
|
|
65
|
-
await tmp.cleanup();
|
|
51
|
+
if (data.startsWith('http://') || data.startsWith('https://')) {
|
|
52
|
+
const resp = await safeFetch(data);
|
|
53
|
+
if (!resp.ok)
|
|
66
54
|
throw new Error(`下载失败 ${resp.status}`);
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
55
|
+
const tmp = await proc.makeTempDir('whisper-in');
|
|
56
|
+
const ext = data.split('.').pop()?.split('?')[0] ?? 'bin';
|
|
57
|
+
await storage.writeFile(`${tmp.uri}/audio.${ext}`, Buffer.from(await resp.arrayBuffer()));
|
|
58
|
+
return { path: `${tmp.path}/audio.${ext}`, cleanup: tmp.cleanup };
|
|
70
59
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
60
|
+
// storage URI(scheme:/...)或历史裸相对路径(data/... → data:/...),统一解析到本地路径
|
|
61
|
+
let storageUri = null;
|
|
62
|
+
if (/^[a-z][a-z0-9_-]*:\//.test(data))
|
|
63
|
+
storageUri = data;
|
|
64
|
+
else if (/^data\//.test(data))
|
|
65
|
+
storageUri = `data:/${data.slice('data/'.length)}`;
|
|
66
|
+
if (storageUri) {
|
|
67
|
+
const local = await storage.resolveLocalPath?.(storageUri, 'read');
|
|
68
|
+
if (local)
|
|
69
|
+
return { path: local, cleanup: async () => { } };
|
|
74
70
|
}
|
|
75
|
-
|
|
76
|
-
await storage.writeFile(`${tmp.uri}/${audioBase}`, buf);
|
|
77
|
-
const path = await storage.resolveLocalPath(`${tmp.uri}/${audioBase}`, 'read');
|
|
78
|
-
return { path, tmp, audioBase };
|
|
71
|
+
throw new Error(`不支持的附件来源: ${data.slice(0, 32)}`);
|
|
79
72
|
}
|
|
80
|
-
/** 用 ffmpeg 把任意音频转成 whisper 需要的 16kHz mono wav。 */
|
|
81
|
-
async function toWav16k(proc, input) {
|
|
82
|
-
const out = `${input}.16k.wav`;
|
|
73
|
+
/** 用 ffmpeg 把任意音频转成 whisper 需要的 16kHz mono wav,写到 outLocal。 */
|
|
74
|
+
async function toWav16k(proc, input, outLocal) {
|
|
83
75
|
await proc
|
|
84
|
-
.execFile('ffmpeg', ['-y', '-i', input, '-ar', '16000', '-ac', '1', '-c:a', 'pcm_s16le',
|
|
76
|
+
.execFile('ffmpeg', ['-y', '-i', input, '-ar', '16000', '-ac', '1', '-c:a', 'pcm_s16le', outLocal])
|
|
85
77
|
.catch((err) => {
|
|
86
78
|
throw new Error(`ffmpeg 转码失败: ${(err.result?.stderr ?? err.message).slice(-200)}`);
|
|
87
79
|
});
|
|
88
|
-
return out;
|
|
89
80
|
}
|
|
90
81
|
export function apply(ctx, raw) {
|
|
91
82
|
const cfg = { ...defaultConfig, ...raw };
|
|
92
83
|
const logger = ctx.logger.child('asr-whisper-cpp');
|
|
93
84
|
if (!cfg.modelPath) {
|
|
94
|
-
|
|
95
|
-
|
|
85
|
+
// 缺必填配置抛清晰错误(而非静默 return),避免 provides:['asr'] 未注册触发难懂的校验错
|
|
86
|
+
throw new Error('Whisper.cpp 需要配置 modelPath(GGML 模型文件 .bin 路径)');
|
|
96
87
|
}
|
|
97
88
|
const proc = createProcessGateway(ctx);
|
|
98
89
|
const storage = createStorageGateway(ctx);
|
|
99
|
-
const
|
|
100
|
-
name: `asr-whisper-cpp:${cfg.modelPath.split('/').pop() ?? 'model'}`,
|
|
101
|
-
capabilities: ['audio'],
|
|
102
|
-
priority: cfg.priority,
|
|
90
|
+
const asr = {
|
|
103
91
|
async transcribe(input) {
|
|
104
|
-
const
|
|
92
|
+
const src = await materializeAudio(proc, storage, input.attachment.data);
|
|
93
|
+
// ffmpeg 与 whisper-cli 的产物统一落在专用临时目录,避免污染输入所在的数据目录
|
|
94
|
+
const work = await proc.makeTempDir('whisper');
|
|
105
95
|
try {
|
|
106
|
-
const
|
|
96
|
+
const wavLocal = `${work.path}/audio.16k.wav`;
|
|
97
|
+
await toWav16k(proc, src.path, wavLocal);
|
|
107
98
|
const lang = input.language ?? cfg.language;
|
|
108
99
|
const args = [
|
|
109
100
|
'-m',
|
|
110
101
|
cfg.modelPath,
|
|
111
102
|
'-f',
|
|
112
|
-
|
|
103
|
+
wavLocal,
|
|
113
104
|
'-l',
|
|
114
105
|
lang,
|
|
115
106
|
'-t',
|
|
@@ -120,37 +111,24 @@ export function apply(ctx, raw) {
|
|
|
120
111
|
const r = await proc.execFile(cfg.binaryPath, args).catch((err) => {
|
|
121
112
|
throw new Error(`whisper-cli 失败: ${(err.result?.stderr ?? err.message).slice(-200)}`);
|
|
122
113
|
});
|
|
123
|
-
//
|
|
114
|
+
// whisper-cli 在 wav 旁生成 <wav>.txt(即 work 目录内);读不到时回退 stdout
|
|
124
115
|
let text = '';
|
|
125
|
-
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
const raw = await storage.readFile(txtUri, 'utf-8');
|
|
129
|
-
text = String(raw).trim();
|
|
130
|
-
}
|
|
131
|
-
catch {
|
|
132
|
-
text = r.stdout.replace(/\[[^\]]+\]/g, '').trim();
|
|
133
|
-
}
|
|
116
|
+
try {
|
|
117
|
+
const raw = await storage.readFile(`${work.uri}/audio.16k.wav.txt`, 'utf-8');
|
|
118
|
+
text = String(raw).trim();
|
|
134
119
|
}
|
|
135
|
-
|
|
136
|
-
// 输入是外部 file:// 或 storage URI,txt 与 wav 在同目录但不一定在我们的 root 内:回退 stdout
|
|
120
|
+
catch {
|
|
137
121
|
text = r.stdout.replace(/\[[^\]]+\]/g, '').trim();
|
|
138
122
|
}
|
|
139
123
|
return { text };
|
|
140
124
|
}
|
|
141
125
|
finally {
|
|
142
|
-
|
|
143
|
-
|
|
126
|
+
await work.cleanup();
|
|
127
|
+
await src.cleanup();
|
|
144
128
|
}
|
|
145
129
|
},
|
|
146
130
|
};
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
logger.error('media 服务不可用');
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
const dispose = media.registerProcessor(processor);
|
|
153
|
-
ctx.onDispose(() => dispose());
|
|
154
|
-
logger.info(`Whisper.cpp 转写已注册 (model=${cfg.modelPath}, prio=${cfg.priority})`);
|
|
131
|
+
ctx.provide('asr', asr, { priority: cfg.priority });
|
|
132
|
+
logger.info(`Whisper.cpp ASR 已注册 (model=${cfg.modelPath}, prio=${cfg.priority})`);
|
|
155
133
|
}
|
|
156
134
|
//# sourceMappingURL=index.js.map
|
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,sDAAsD;AACtD,EAAE;AACF,yCAAyC;AACzC,+CAA+C;AAC/C,8BAA8B;AAC9B,EAAE;AACF,gDAAgD;AAChD,+DAA+D;AAE/D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,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-whisper-cpp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "语音识别(ASR)—— 本地 whisper.cpp 提供者",
|
|
6
6
|
"type": "module",
|
|
@@ -14,14 +14,15 @@
|
|
|
14
14
|
"dist"
|
|
15
15
|
],
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@aalis/plugin-
|
|
18
|
-
"@aalis/
|
|
17
|
+
"@aalis/plugin-process-api": "^0.5.0",
|
|
18
|
+
"@aalis/util-network-guard": "^0.5.0",
|
|
19
|
+
"@aalis/plugin-storage-api": "^0.5.0"
|
|
19
20
|
},
|
|
20
21
|
"devDependencies": {
|
|
21
22
|
"@types/node": "^22.0.0",
|
|
22
23
|
"typescript": "^5.7.0",
|
|
23
|
-
"@aalis/core": "0.
|
|
24
|
-
"@aalis/plugin-
|
|
24
|
+
"@aalis/core": "0.5.0",
|
|
25
|
+
"@aalis/plugin-asr-api": "0.5.0"
|
|
25
26
|
},
|
|
26
27
|
"peerDependencies": {
|
|
27
28
|
"@aalis/core": ">=0.2.0 <1.0.0"
|
|
@@ -29,7 +30,6 @@
|
|
|
29
30
|
"aalis": {
|
|
30
31
|
"service": {
|
|
31
32
|
"required": [
|
|
32
|
-
"media",
|
|
33
33
|
"process",
|
|
34
34
|
"storage"
|
|
35
35
|
]
|