@aalis/plugin-asr-whisper-cpp 0.1.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.
@@ -0,0 +1,20 @@
1
+ import type { ConfigSchema, Context } from '@aalis/core';
2
+ export declare const name = "@aalis/plugin-asr-whisper-cpp";
3
+ export declare const displayName = "Whisper.cpp \u672C\u5730\u8F6C\u5199";
4
+ export declare const subsystem = "media";
5
+ export declare const provides: string[];
6
+ export declare const inject: {
7
+ required: string[];
8
+ };
9
+ interface Cfg {
10
+ binaryPath: string;
11
+ modelPath: string;
12
+ language: string;
13
+ threads: number;
14
+ priority: number;
15
+ }
16
+ export declare const configSchema: ConfigSchema;
17
+ export declare const defaultConfig: Cfg;
18
+ export declare function apply(ctx: Context, raw: Record<string, unknown>): void;
19
+ export {};
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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;AAOzD,eAAO,MAAM,IAAI,kCAAkC,CAAC;AACpD,eAAO,MAAM,WAAW,yCAAqB,CAAC;AAC9C,eAAO,MAAM,SAAS,UAAU,CAAC;AACjC,eAAO,MAAM,QAAQ,EAAE,MAAM,EAAO,CAAC;AACrC,eAAO,MAAM,MAAM;;CAAgD,CAAC;AAEpE,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;AAqEF,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAgEtE"}
package/dist/index.js ADDED
@@ -0,0 +1,156 @@
1
+ // ============================================================
2
+ // @aalis/plugin-asr-whisper-cpp — 本地 whisper.cpp 转写后端
3
+ //
4
+ // 调用 whisper-cli 二进制(whisper.cpp 提供)。需要:
5
+ // - 安装 whisper.cpp(brew install whisper-cpp)
6
+ // - 下载模型文件(如 ggml-base.bin)
7
+ //
8
+ // 输入音频经 ffmpeg 转 16kHz 单声道 WAV 后喂给 whisper-cli。
9
+ // ============================================================
10
+ import { Buffer } from 'node:buffer';
11
+ import { createProcessGateway } from '@aalis/plugin-process-api';
12
+ import { createStorageGateway } from '@aalis/plugin-storage-api';
13
+ export const name = '@aalis/plugin-asr-whisper-cpp';
14
+ export const displayName = 'Whisper.cpp 本地转写';
15
+ export const subsystem = 'media';
16
+ export const provides = [];
17
+ export const inject = { required: ['media', 'process', 'storage'] };
18
+ export const configSchema = {
19
+ binaryPath: { type: 'string', label: 'whisper-cli 路径', default: 'whisper-cli' },
20
+ modelPath: { type: 'string', label: '模型文件路径 (.bin)', default: '' },
21
+ language: { type: 'string', label: '默认语种', default: 'auto' },
22
+ threads: { type: 'number', label: '线程数', default: 4 },
23
+ priority: { type: 'number', label: '优先级 (越大越优先)', default: 80 },
24
+ };
25
+ export const defaultConfig = {
26
+ binaryPath: 'whisper-cli',
27
+ modelPath: '',
28
+ language: 'auto',
29
+ threads: 4,
30
+ priority: 80,
31
+ };
32
+ async function materializeAudio(proc, storage, data) {
33
+ if (data.startsWith('file://')) {
34
+ return { path: data.slice(7), tmp: null, audioBase: null };
35
+ }
36
+ // storage URI(如 data:/audios/...)
37
+ if (/^[a-z][a-z0-9_-]*:\//.test(data) &&
38
+ !data.startsWith('http://') &&
39
+ !data.startsWith('https://') &&
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
+ }
49
+ }
50
+ const tmp = await proc.makeTempDir('whisper');
51
+ let buf;
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';
61
+ }
62
+ else if (data.startsWith('http://') || data.startsWith('https://')) {
63
+ const resp = await fetch(data);
64
+ if (!resp.ok) {
65
+ await tmp.cleanup();
66
+ throw new Error(`下载失败 ${resp.status}`);
67
+ }
68
+ buf = Buffer.from(await resp.arrayBuffer());
69
+ ext = data.split('.').pop()?.split('?')[0] ?? 'bin';
70
+ }
71
+ else {
72
+ await tmp.cleanup();
73
+ throw new Error(`不支持的附件来源: ${data.slice(0, 32)}`);
74
+ }
75
+ const audioBase = `audio.${ext}`;
76
+ await storage.writeFile(`${tmp.uri}/${audioBase}`, buf);
77
+ const path = await storage.resolveLocalPath(`${tmp.uri}/${audioBase}`, 'read');
78
+ return { path, tmp, audioBase };
79
+ }
80
+ /** 用 ffmpeg 把任意音频转成 whisper 需要的 16kHz mono wav。 */
81
+ async function toWav16k(proc, input) {
82
+ const out = `${input}.16k.wav`;
83
+ await proc
84
+ .execFile('ffmpeg', ['-y', '-i', input, '-ar', '16000', '-ac', '1', '-c:a', 'pcm_s16le', out])
85
+ .catch((err) => {
86
+ throw new Error(`ffmpeg 转码失败: ${(err.result?.stderr ?? err.message).slice(-200)}`);
87
+ });
88
+ return out;
89
+ }
90
+ export function apply(ctx, raw) {
91
+ const cfg = { ...defaultConfig, ...raw };
92
+ const logger = ctx.logger.child('asr-whisper-cpp');
93
+ if (!cfg.modelPath) {
94
+ logger.warn('未配置 modelPath,插件不会注册 processor');
95
+ return;
96
+ }
97
+ const proc = createProcessGateway(ctx);
98
+ const storage = createStorageGateway(ctx);
99
+ const processor = {
100
+ name: `asr-whisper-cpp:${cfg.modelPath.split('/').pop() ?? 'model'}`,
101
+ capabilities: ['audio'],
102
+ priority: cfg.priority,
103
+ async transcribe(input) {
104
+ const local = await materializeAudio(proc, storage, input.attachment.data);
105
+ try {
106
+ const wav = await toWav16k(proc, local.path);
107
+ const lang = input.language ?? cfg.language;
108
+ const args = [
109
+ '-m',
110
+ cfg.modelPath,
111
+ '-f',
112
+ wav,
113
+ '-l',
114
+ lang,
115
+ '-t',
116
+ String(cfg.threads),
117
+ '-nt', // no timestamps in stdout
118
+ '--output-txt',
119
+ ];
120
+ const r = await proc.execFile(cfg.binaryPath, args).catch((err) => {
121
+ throw new Error(`whisper-cli 失败: ${(err.result?.stderr ?? err.message).slice(-200)}`);
122
+ });
123
+ // 读取生成的 .txt(whisper-cli 默认在输入路径旁生成 <wav>.txt)
124
+ let text = '';
125
+ if (local.tmp && local.audioBase) {
126
+ const txtUri = `${local.tmp.uri}/${local.audioBase}.16k.wav.txt`;
127
+ try {
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
+ }
134
+ }
135
+ else {
136
+ // 输入是外部 file:// 或 storage URI,txt 与 wav 在同目录但不一定在我们的 root 内:回退 stdout
137
+ text = r.stdout.replace(/\[[^\]]+\]/g, '').trim();
138
+ }
139
+ return { text };
140
+ }
141
+ finally {
142
+ if (local.tmp)
143
+ await local.tmp.cleanup();
144
+ }
145
+ },
146
+ };
147
+ const media = ctx.getService('media');
148
+ if (!media) {
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})`);
155
+ }
156
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@aalis/plugin-asr-whisper-cpp",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "keywords": [
6
+ "aalis-plugin"
7
+ ],
8
+ "main": "dist/index.js",
9
+ "types": "dist/index.d.ts",
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "dependencies": {
14
+ "@aalis/plugin-process-api": "^0.1.0",
15
+ "@aalis/plugin-storage-api": "^0.1.0"
16
+ },
17
+ "devDependencies": {
18
+ "@types/node": "^22.0.0",
19
+ "typescript": "^5.7.0",
20
+ "@aalis/plugin-media-api": "0.1.0",
21
+ "@aalis/core": "0.1.0"
22
+ },
23
+ "peerDependencies": {
24
+ "@aalis/core": "^0.1.0"
25
+ },
26
+ "aalis": {
27
+ "service": {
28
+ "required": [
29
+ "media",
30
+ "process",
31
+ "storage"
32
+ ]
33
+ }
34
+ },
35
+ "scripts": {
36
+ "build": "tsc",
37
+ "dev": "tsc --watch"
38
+ }
39
+ }