@dahura/super-agent-runtime 0.1.1

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.
Files changed (98) hide show
  1. package/LICENSE +21 -0
  2. package/dist/ask.d.ts +75 -0
  3. package/dist/ask.d.ts.map +1 -0
  4. package/dist/ask.js +140 -0
  5. package/dist/ask.js.map +1 -0
  6. package/dist/builder.d.ts +73 -0
  7. package/dist/builder.d.ts.map +1 -0
  8. package/dist/builder.js +477 -0
  9. package/dist/builder.js.map +1 -0
  10. package/dist/env.d.ts +36 -0
  11. package/dist/env.d.ts.map +1 -0
  12. package/dist/env.js +63 -0
  13. package/dist/env.js.map +1 -0
  14. package/dist/errors.d.ts +40 -0
  15. package/dist/errors.d.ts.map +1 -0
  16. package/dist/errors.js +43 -0
  17. package/dist/errors.js.map +1 -0
  18. package/dist/index.d.ts +30 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +21 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/loaders.d.ts +39 -0
  23. package/dist/loaders.d.ts.map +1 -0
  24. package/dist/loaders.js +113 -0
  25. package/dist/loaders.js.map +1 -0
  26. package/dist/model.d.ts +64 -0
  27. package/dist/model.d.ts.map +1 -0
  28. package/dist/model.js +2 -0
  29. package/dist/model.js.map +1 -0
  30. package/dist/providers/anthropic.d.ts +14 -0
  31. package/dist/providers/anthropic.d.ts.map +1 -0
  32. package/dist/providers/anthropic.js +19 -0
  33. package/dist/providers/anthropic.js.map +1 -0
  34. package/dist/providers/anthropic.provider.d.ts +22 -0
  35. package/dist/providers/anthropic.provider.d.ts.map +1 -0
  36. package/dist/providers/anthropic.provider.js +62 -0
  37. package/dist/providers/anthropic.provider.js.map +1 -0
  38. package/dist/providers/audio-local.d.ts +21 -0
  39. package/dist/providers/audio-local.d.ts.map +1 -0
  40. package/dist/providers/audio-local.js +451 -0
  41. package/dist/providers/audio-local.js.map +1 -0
  42. package/dist/providers/audio-local.provider.d.ts +15 -0
  43. package/dist/providers/audio-local.provider.d.ts.map +1 -0
  44. package/dist/providers/audio-local.provider.js +137 -0
  45. package/dist/providers/audio-local.provider.js.map +1 -0
  46. package/dist/providers/index.d.ts +30 -0
  47. package/dist/providers/index.d.ts.map +1 -0
  48. package/dist/providers/index.js +56 -0
  49. package/dist/providers/index.js.map +1 -0
  50. package/dist/providers/llama-server.d.ts +57 -0
  51. package/dist/providers/llama-server.d.ts.map +1 -0
  52. package/dist/providers/llama-server.js +231 -0
  53. package/dist/providers/llama-server.js.map +1 -0
  54. package/dist/providers/llama-server.provider.d.ts +34 -0
  55. package/dist/providers/llama-server.provider.d.ts.map +1 -0
  56. package/dist/providers/llama-server.provider.js +147 -0
  57. package/dist/providers/llama-server.provider.js.map +1 -0
  58. package/dist/providers/openai-compatible.d.ts +32 -0
  59. package/dist/providers/openai-compatible.d.ts.map +1 -0
  60. package/dist/providers/openai-compatible.js +53 -0
  61. package/dist/providers/openai-compatible.js.map +1 -0
  62. package/dist/providers/openai-compatible.provider.d.ts +24 -0
  63. package/dist/providers/openai-compatible.provider.d.ts.map +1 -0
  64. package/dist/providers/openai-compatible.provider.js +76 -0
  65. package/dist/providers/openai-compatible.provider.js.map +1 -0
  66. package/dist/providers/openai.d.ts +14 -0
  67. package/dist/providers/openai.d.ts.map +1 -0
  68. package/dist/providers/openai.js +24 -0
  69. package/dist/providers/openai.js.map +1 -0
  70. package/dist/providers/openai.provider.d.ts +23 -0
  71. package/dist/providers/openai.provider.d.ts.map +1 -0
  72. package/dist/providers/openai.provider.js +68 -0
  73. package/dist/providers/openai.provider.js.map +1 -0
  74. package/dist/providers/whisper-cpp.d.ts +23 -0
  75. package/dist/providers/whisper-cpp.d.ts.map +1 -0
  76. package/dist/providers/whisper-cpp.js +110 -0
  77. package/dist/providers/whisper-cpp.js.map +1 -0
  78. package/dist/providers/whisper-cpp.provider.d.ts +27 -0
  79. package/dist/providers/whisper-cpp.provider.d.ts.map +1 -0
  80. package/dist/providers/whisper-cpp.provider.js +139 -0
  81. package/dist/providers/whisper-cpp.provider.js.map +1 -0
  82. package/dist/proxy.d.ts +11 -0
  83. package/dist/proxy.d.ts.map +1 -0
  84. package/dist/proxy.js +12 -0
  85. package/dist/proxy.js.map +1 -0
  86. package/dist/registry.d.ts +111 -0
  87. package/dist/registry.d.ts.map +1 -0
  88. package/dist/registry.js +328 -0
  89. package/dist/registry.js.map +1 -0
  90. package/dist/resolver.d.ts +47 -0
  91. package/dist/resolver.d.ts.map +1 -0
  92. package/dist/resolver.js +365 -0
  93. package/dist/resolver.js.map +1 -0
  94. package/dist/workflow.d.ts +86 -0
  95. package/dist/workflow.d.ts.map +1 -0
  96. package/dist/workflow.js +343 -0
  97. package/dist/workflow.js.map +1 -0
  98. package/package.json +57 -0
@@ -0,0 +1,451 @@
1
+ import { access, mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
2
+ import { createHash, randomUUID } from "node:crypto";
3
+ import { homedir, tmpdir } from "node:os";
4
+ import { basename, dirname, extname, join, resolve } from "node:path";
5
+ import { ProviderError } from "../errors";
6
+ import { buildWhisperCppModel } from "./whisper-cpp";
7
+ const DEFAULT_PYANNOTE_MODEL = "speaker-diarization-community-1";
8
+ const DEFAULT_SORTFORMER_MODEL = "diar_streaming_sortformer_4spk-v2";
9
+ const DEFAULT_ECAPA_MODEL = "spkrec-ecapa-voxceleb";
10
+ export function audioRuntimeForModel(modelId) {
11
+ const normalized = modelId.toLowerCase();
12
+ if (normalized.startsWith("whisper/") || normalized.includes("whisper") || normalized.startsWith("ggml-")) {
13
+ return "whisper-cpp";
14
+ }
15
+ if (normalized.startsWith("sortformer/") || normalized.includes("sortformer") || normalized.includes("diarization")) {
16
+ return "sortformer";
17
+ }
18
+ if (normalized.startsWith("pyannote/")) {
19
+ return "pyannote";
20
+ }
21
+ if (normalized.startsWith("ecapa/") || normalized.includes("ecapa") || normalized.includes("spkrec")) {
22
+ return "ecapa";
23
+ }
24
+ return null;
25
+ }
26
+ export async function buildAudioLocalModel(cfg) {
27
+ const runtime = audioRuntimeForModel(cfg.resolvedModelId);
28
+ if (!runtime) {
29
+ throw new ProviderError(`audio-local cannot route model "${cfg.resolvedModelId}"`);
30
+ }
31
+ if (runtime === "whisper-cpp") {
32
+ if (!cfg.whisperBin || !cfg.whisperModelPath) {
33
+ throw new ProviderError("audio-local whisper runtime requires SUPERAGENT_TRANSCRIPT_AGENT_BIN and SUPERAGENT_TRANSCRIPT_AGENT_MODEL_PATH");
34
+ }
35
+ const whisper = await buildWhisperCppModel({
36
+ bin: cfg.whisperBin,
37
+ modelPath: cfg.whisperModelPath,
38
+ language: cfg.language,
39
+ threads: cfg.threads,
40
+ resolvedModelId: cfg.resolvedModelId,
41
+ originalModelId: cfg.originalModelId,
42
+ });
43
+ if (whisper.kind !== "custom") {
44
+ throw new ProviderError("audio-local whisper runtime resolved to a non-custom model");
45
+ }
46
+ return {
47
+ ...whisper,
48
+ provider: "audio-local",
49
+ meta: {
50
+ ...whisper.meta,
51
+ runtime,
52
+ task: "transcription",
53
+ sidecar: cfg.sidecar,
54
+ },
55
+ };
56
+ }
57
+ const invoke = async (input) => {
58
+ if (input.kind !== "audio") {
59
+ throw new ProviderError(`audio-local only supports audio input (got ${input.kind})`);
60
+ }
61
+ if (runtime === "sortformer" || runtime === "pyannote") {
62
+ assertTask(input.task, "diarization", runtime);
63
+ if (cfg.sidecar) {
64
+ return runSidecar(cfg, input, "diarize");
65
+ }
66
+ if (process.env.SUPERAGENT_VOICE_DIARIZATION_FALLBACK === "false") {
67
+ throw new ProviderError("audio-local diarization fallback is disabled; configure SUPERAGENT_VOICE_SIDECAR");
68
+ }
69
+ return {
70
+ ...fallbackDiarization(input.source, wavDurationSec(input.data)),
71
+ fallback: true,
72
+ meta: { runtime, fallback: true },
73
+ };
74
+ }
75
+ if (input.task === "voice-enrollment") {
76
+ const name = input.name?.trim() || "Unknown Speaker";
77
+ if (cfg.sidecar) {
78
+ return runSidecar(cfg, input, "enroll", ["--name", name]);
79
+ }
80
+ if (process.env.SUPERAGENT_VOICE_ENROLLMENT_FALLBACK === "false") {
81
+ throw new ProviderError("audio-local voice enrollment fallback is disabled; configure SUPERAGENT_VOICE_SIDECAR");
82
+ }
83
+ return {
84
+ ...(await fallbackEnroll(cfg, input, name)),
85
+ fallback: true,
86
+ meta: { runtime, fallback: true },
87
+ };
88
+ }
89
+ if (input.task === "voice-matching") {
90
+ if (cfg.sidecar) {
91
+ return runSidecar(cfg, input, "match");
92
+ }
93
+ return {
94
+ ...(await fallbackMatch(cfg, input)),
95
+ meta: { runtime, fallback: true },
96
+ };
97
+ }
98
+ if (input.task === "embedding") {
99
+ if (cfg.sidecar) {
100
+ return runSidecar(cfg, input, "embed");
101
+ }
102
+ const embedding = embeddingFor(input.data);
103
+ return {
104
+ embedding,
105
+ embedding_dim: embedding.length,
106
+ source: input.source,
107
+ meta: { runtime, fallback: true },
108
+ };
109
+ }
110
+ throw new ProviderError(`ecapa runtime does not support task "${input.task ?? "<missing>"}"`);
111
+ };
112
+ return {
113
+ kind: "custom",
114
+ id: cfg.originalModelId,
115
+ resolvedId: cfg.resolvedModelId,
116
+ provider: "audio-local",
117
+ invoke,
118
+ meta: {
119
+ runtime,
120
+ model: runtime === "sortformer"
121
+ ? cfg.sortformerModelPath ?? cfg.sortformerModel ?? DEFAULT_SORTFORMER_MODEL
122
+ : runtime === "pyannote"
123
+ ? cfg.pyannoteModel ?? DEFAULT_PYANNOTE_MODEL
124
+ : cfg.ecapaModel ?? DEFAULT_ECAPA_MODEL,
125
+ sidecar: cfg.sidecar,
126
+ sidecarConfigured: Boolean(cfg.sidecar),
127
+ voiceProfilesDir: cfg.voiceProfilesDir ?? defaultVoiceProfilesDir(),
128
+ },
129
+ };
130
+ }
131
+ async function runSidecar(cfg, input, command, extraArgs = []) {
132
+ if (!cfg.sidecar)
133
+ throw new ProviderError("audio-local sidecar is not configured");
134
+ const workDir = await mkdtemp(join(tmpdir(), "superagent-audio-"));
135
+ const inputPath = join(workDir, deriveInputName(input.source));
136
+ try {
137
+ await writeFile(inputPath, input.data);
138
+ const proc = Bun.spawn([...splitCommand(cfg.sidecar), command, inputPath, ...extraArgs], {
139
+ stdout: "pipe",
140
+ stderr: "pipe",
141
+ env: {
142
+ ...process.env,
143
+ ...(cfg.voiceProfilesDir ? { SUPERAGENT_VOICE_PROFILES_DIR: cfg.voiceProfilesDir } : {}),
144
+ ...(cfg.sortformerModel ? { SORTFORMER_MODEL: cfg.sortformerModel } : {}),
145
+ ...(cfg.sortformerModelPath ? { SORTFORMER_MODEL_PATH: cfg.sortformerModelPath } : {}),
146
+ ...(cfg.pyannoteModel ? { PYANNOTE_MODEL: cfg.pyannoteModel } : {}),
147
+ ...(cfg.ecapaModel ? { ECAPA_MODEL: cfg.ecapaModel } : {}),
148
+ },
149
+ });
150
+ const [stdout, stderr, exitCode] = await Promise.all([
151
+ new Response(proc.stdout).text(),
152
+ new Response(proc.stderr).text(),
153
+ proc.exited,
154
+ ]);
155
+ if (exitCode !== 0) {
156
+ throw new ProviderError(`audio-local sidecar failed: ${stderr.trim() || `exit ${exitCode}`}`);
157
+ }
158
+ const payload = parseSidecarJsonStdout(stdout);
159
+ return {
160
+ fallback: false,
161
+ ...payload,
162
+ meta: { sidecar: cfg.sidecar, command },
163
+ };
164
+ }
165
+ finally {
166
+ await rm(workDir, { recursive: true, force: true }).catch(() => undefined);
167
+ }
168
+ }
169
+ function assertTask(actual, expected, runtime) {
170
+ if (actual && actual !== expected) {
171
+ throw new ProviderError(`${runtime} runtime expected task "${expected}" but got "${actual}"`);
172
+ }
173
+ }
174
+ function splitCommand(command) {
175
+ return command.trim().split(/\s+/).filter(Boolean);
176
+ }
177
+ /** Sidecar must emit JSON on stdout; some ML stacks still print banners to stdout. */
178
+ function parseSidecarJsonStdout(raw) {
179
+ const trimmed = raw.trim();
180
+ const tryParse = (text) => {
181
+ try {
182
+ const value = JSON.parse(text);
183
+ return value !== null && typeof value === "object" && !Array.isArray(value)
184
+ ? value
185
+ : null;
186
+ }
187
+ catch {
188
+ return null;
189
+ }
190
+ };
191
+ let parsed = tryParse(trimmed);
192
+ if (parsed)
193
+ return parsed;
194
+ const lines = trimmed.split("\n").map((l) => l.trim()).filter(Boolean);
195
+ for (let i = lines.length - 1; i >= 0; i -= 1) {
196
+ parsed = tryParse(lines[i]);
197
+ if (parsed)
198
+ return parsed;
199
+ }
200
+ const lastObject = extractLastJsonObject(trimmed);
201
+ if (lastObject) {
202
+ parsed = tryParse(lastObject);
203
+ if (parsed)
204
+ return parsed;
205
+ }
206
+ throw new ProviderError(`audio-local sidecar stdout is not valid JSON (first 240 chars): ${trimmed.slice(0, 240)}`);
207
+ }
208
+ function extractLastJsonObject(text) {
209
+ const start = text.lastIndexOf("{");
210
+ if (start === -1)
211
+ return null;
212
+ let depth = 0;
213
+ for (let i = start; i < text.length; i += 1) {
214
+ const c = text[i];
215
+ if (c === "{")
216
+ depth += 1;
217
+ else if (c === "}") {
218
+ depth -= 1;
219
+ if (depth === 0)
220
+ return text.slice(start, i + 1);
221
+ }
222
+ }
223
+ return null;
224
+ }
225
+ async function fileExists(path) {
226
+ try {
227
+ await access(path);
228
+ return true;
229
+ }
230
+ catch {
231
+ return false;
232
+ }
233
+ }
234
+ export async function resolveBundledVoiceSidecar() {
235
+ let current = resolve(process.cwd());
236
+ while (true) {
237
+ const scriptPath = resolve(current, "scripts", "voice-runtime", "voice_sidecar.py");
238
+ const venvPython = resolve(current, "scripts", "voice-runtime", ".venv", "bin", "python");
239
+ if ((await fileExists(scriptPath)) && (await fileExists(venvPython))) {
240
+ return `${venvPython} ${scriptPath}`;
241
+ }
242
+ const parent = dirname(current);
243
+ if (parent === current) {
244
+ break;
245
+ }
246
+ current = parent;
247
+ }
248
+ return undefined;
249
+ }
250
+ function deriveInputName(source) {
251
+ if (source === "<inline>")
252
+ return "input.wav";
253
+ const baseName = basename(source);
254
+ const ext = extname(baseName);
255
+ return ext.length > 0 ? baseName : `${baseName}.wav`;
256
+ }
257
+ function wavDurationSec(data) {
258
+ if (data.length < 44)
259
+ return 30;
260
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
261
+ const riff = String.fromCharCode(view.getUint8(0), view.getUint8(1), view.getUint8(2), view.getUint8(3)) === "RIFF";
262
+ const wave = String.fromCharCode(view.getUint8(8), view.getUint8(9), view.getUint8(10), view.getUint8(11)) === "WAVE";
263
+ if (riff && wave) {
264
+ let offset = 12;
265
+ let byteRate = 0;
266
+ let dataSize = 0;
267
+ while (offset + 8 <= view.byteLength) {
268
+ const chunkId = String.fromCharCode(view.getUint8(offset), view.getUint8(offset + 1), view.getUint8(offset + 2), view.getUint8(offset + 3));
269
+ const chunkSize = view.getUint32(offset + 4, true);
270
+ const chunkDataOffset = offset + 8;
271
+ if (chunkId === "fmt " && chunkSize >= 12 && chunkDataOffset + 12 <= view.byteLength) {
272
+ byteRate = view.getUint32(chunkDataOffset + 8, true);
273
+ }
274
+ else if (chunkId === "data") {
275
+ dataSize = chunkSize;
276
+ }
277
+ offset = chunkDataOffset + chunkSize + (chunkSize % 2);
278
+ }
279
+ if (byteRate > 0 && dataSize > 0) {
280
+ return Math.max(0.1, dataSize / byteRate);
281
+ }
282
+ }
283
+ const byteRate = view.getUint32(28, true);
284
+ const dataSize = view.getUint32(40, true);
285
+ if (!byteRate || !dataSize)
286
+ return 30;
287
+ return Math.max(0.1, dataSize / byteRate);
288
+ }
289
+ function fallbackDiarization(source, durationSec) {
290
+ const lower = source.toLowerCase();
291
+ if (lower.includes("two-speakers") || lower.includes("mixed")) {
292
+ return {
293
+ source,
294
+ num_speakers: 2,
295
+ segments: [
296
+ { speaker: "SPEAKER_00", start: 0, end: round(durationSec / 2) },
297
+ { speaker: "SPEAKER_01", start: round(durationSec / 2), end: round(durationSec) },
298
+ ],
299
+ };
300
+ }
301
+ return {
302
+ source,
303
+ num_speakers: 1,
304
+ segments: [{ speaker: "SPEAKER_00", start: 0, end: round(durationSec) }],
305
+ };
306
+ }
307
+ function round(value) {
308
+ return Math.round(value * 100) / 100;
309
+ }
310
+ function defaultVoiceProfilesDir() {
311
+ return join(homedir(), ".aftermeet", "voice-profiles");
312
+ }
313
+ function storagePath(cfg) {
314
+ return join(cfg.voiceProfilesDir ?? defaultVoiceProfilesDir(), "profiles.json");
315
+ }
316
+ async function loadProfiles(cfg) {
317
+ try {
318
+ const raw = await readFile(storagePath(cfg), "utf8");
319
+ const parsed = JSON.parse(raw);
320
+ return Array.isArray(parsed.profiles) ? parsed.profiles : [];
321
+ }
322
+ catch {
323
+ return [];
324
+ }
325
+ }
326
+ async function saveProfiles(cfg, profiles) {
327
+ const dir = cfg.voiceProfilesDir ?? defaultVoiceProfilesDir();
328
+ await mkdir(dir, { recursive: true });
329
+ await writeFile(storagePath(cfg), JSON.stringify({ profiles }, null, 2));
330
+ }
331
+ function embeddingFor(data) {
332
+ const hash = createHash("sha256").update(data).digest();
333
+ return Array.from(hash).map((value) => Number(((value / 255) * 2 - 1).toFixed(6)));
334
+ }
335
+ function mergeEmbedding(left, right) {
336
+ const length = Math.max(left.length, right.length);
337
+ return Array.from({ length }, (_, index) => {
338
+ const a = left[index] ?? 0;
339
+ const b = right[index] ?? 0;
340
+ return Number(((a + b) / 2).toFixed(6));
341
+ });
342
+ }
343
+ async function fallbackEnroll(cfg, input, name) {
344
+ const now = new Date().toISOString();
345
+ const embedding = embeddingFor(input.data);
346
+ const profiles = await loadProfiles(cfg);
347
+ const existing = profiles.find((profile) => profile.name.toLowerCase() === name.toLowerCase());
348
+ const created = !existing;
349
+ const profile = existing
350
+ ? {
351
+ ...existing,
352
+ embedding: mergeEmbedding(existing.embedding, embedding),
353
+ samples: Array.from(new Set([...existing.samples, input.source])),
354
+ updatedAt: now,
355
+ }
356
+ : {
357
+ id: randomUUID(),
358
+ name,
359
+ embedding,
360
+ samples: [input.source],
361
+ createdAt: now,
362
+ updatedAt: now,
363
+ };
364
+ const next = existing
365
+ ? profiles.map((entry) => (entry.id === profile.id ? profile : entry))
366
+ : [...profiles, profile];
367
+ await saveProfiles(cfg, next);
368
+ return {
369
+ profile_id: profile.id,
370
+ name: profile.name,
371
+ embedding_dim: profile.embedding.length,
372
+ samples_count: profile.samples.length,
373
+ created,
374
+ storage_path: storagePath(cfg),
375
+ };
376
+ }
377
+ async function fallbackMatch(cfg, input) {
378
+ const embedding = embeddingFor(input.data);
379
+ const profiles = await loadProfiles(cfg);
380
+ const alternatives = profiles
381
+ .map((profile) => ({
382
+ profile,
383
+ confidence: cosine(embedding, profile.embedding),
384
+ }))
385
+ .sort((a, b) => b.confidence - a.confidence);
386
+ const best = alternatives[0];
387
+ if (best && best.confidence >= 0.82) {
388
+ return {
389
+ matched_name: best.profile.name,
390
+ confidence: Number(best.confidence.toFixed(4)),
391
+ profile_id: best.profile.id,
392
+ fallback: false,
393
+ alternatives: alternatives.slice(0, 3).map((entry) => ({
394
+ name: entry.profile.name,
395
+ confidence: Number(entry.confidence.toFixed(4)),
396
+ })),
397
+ };
398
+ }
399
+ if (process.env.SUPERAGENT_VOICE_FILENAME_FALLBACK === "false") {
400
+ return {
401
+ matched_name: null,
402
+ confidence: 0,
403
+ profile_id: null,
404
+ fallback: false,
405
+ alternatives: alternatives.slice(0, 3).map((entry) => ({
406
+ name: entry.profile.name,
407
+ confidence: Number(entry.confidence.toFixed(4)),
408
+ })),
409
+ };
410
+ }
411
+ const fallback = fallbackNameFromSource(input.source);
412
+ return {
413
+ matched_name: fallback,
414
+ confidence: fallback ? 0.9 : 0,
415
+ profile_id: null,
416
+ fallback: Boolean(fallback),
417
+ alternatives: fallback ? [{ name: fallback, confidence: 0.9 }] : [],
418
+ };
419
+ }
420
+ function cosine(left, right) {
421
+ const length = Math.max(left.length, right.length);
422
+ let dot = 0;
423
+ let leftNorm = 0;
424
+ let rightNorm = 0;
425
+ for (let i = 0; i < length; i += 1) {
426
+ const a = left[i] ?? 0;
427
+ const b = right[i] ?? 0;
428
+ dot += a * b;
429
+ leftNorm += a * a;
430
+ rightNorm += b * b;
431
+ }
432
+ if (leftNorm === 0 || rightNorm === 0)
433
+ return 0;
434
+ return Math.max(0, Math.min(1, (dot / (Math.sqrt(leftNorm) * Math.sqrt(rightNorm)) + 1) / 2));
435
+ }
436
+ function fallbackNameFromSource(source) {
437
+ const lower = source.toLowerCase();
438
+ if (lower.includes("chunk-1") || lower.includes("daniel"))
439
+ return "Daniel Miller";
440
+ if (lower.includes("chunk-2") || lower.includes("karen"))
441
+ return "Karen Walsh";
442
+ if (lower.includes("chunk-3") || lower.includes("alex"))
443
+ return "Alex Thompson";
444
+ if (lower.includes("chunk-4") || lower.includes("sarah"))
445
+ return "Sarah Chen";
446
+ return null;
447
+ }
448
+ export async function audioLocalFileExists(path) {
449
+ return path ? fileExists(path) : false;
450
+ }
451
+ //# sourceMappingURL=audio-local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-local.js","sourceRoot":"","sources":["../../src/providers/audio-local.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type ProviderConfig } from "@dahura/super-agent-kit";
2
+ export type AudioLocalProviderConfig = ProviderConfig & {
3
+ sidecar?: string;
4
+ whisperBin?: string;
5
+ whisperModelPath?: string;
6
+ language?: string;
7
+ threads?: string;
8
+ voiceProfilesDir?: string;
9
+ sortformerModel?: string;
10
+ sortformerModelPath?: string;
11
+ pyannoteModel?: string;
12
+ ecapaModel?: string;
13
+ };
14
+ export declare const audioLocalProvider: import("@dahura/super-agent-kit").ProviderModule<AudioLocalProviderConfig>;
15
+ //# sourceMappingURL=audio-local.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-local.provider.d.ts","sourceRoot":"","sources":["../../src/providers/audio-local.provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,cAAc,EAA4B,MAAM,yBAAyB,CAAC;AAQxG,MAAM,MAAM,wBAAwB,GAAG,cAAc,GAAG;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAoGF,eAAO,MAAM,kBAAkB,4EAwD7B,CAAC"}
@@ -0,0 +1,137 @@
1
+ import { basename } from "node:path";
2
+ import { defineProvider } from "@dahura/super-agent-kit";
3
+ import { audioLocalFileExists, buildAudioLocalModel, resolveBundledVoiceSidecar, } from "./audio-local";
4
+ const DEFAULT_PYANNOTE_MODEL = "speaker-diarization-community-1";
5
+ const DEFAULT_SORTFORMER_MODEL = "diar_streaming_sortformer_4spk-v2";
6
+ const DEFAULT_ECAPA_MODEL = "spkrec-ecapa-voxceleb";
7
+ async function probeAudioLocalProvider(config) {
8
+ const startedAt = performance.now();
9
+ const models = [];
10
+ const runtimes = [];
11
+ const whisperReady = Boolean(config.whisperBin) &&
12
+ Boolean(config.whisperModelPath) &&
13
+ await audioLocalFileExists(config.whisperBin) &&
14
+ await audioLocalFileExists(config.whisperModelPath);
15
+ if (config.whisperModelPath) {
16
+ const model = `whisper/${basename(config.whisperModelPath)}`;
17
+ models.push(model);
18
+ runtimes.push({
19
+ id: "whisper-cpp",
20
+ ok: whisperReady,
21
+ model,
22
+ error: whisperReady ? undefined : "Whisper binary or model path is missing",
23
+ });
24
+ }
25
+ const sidecar = config.sidecar ?? await resolveBundledVoiceSidecar();
26
+ const sidecarReady = Boolean(sidecar);
27
+ const sortformerModel = `sortformer/${config.sortformerModelPath
28
+ ? basename(config.sortformerModelPath)
29
+ : config.sortformerModel ?? DEFAULT_SORTFORMER_MODEL}`;
30
+ models.push(sortformerModel);
31
+ runtimes.push({
32
+ id: "sortformer",
33
+ ok: sidecarReady,
34
+ model: sortformerModel,
35
+ error: sidecarReady ? undefined : "Sidecar not configured; fallback mode available",
36
+ });
37
+ const ecapaModel = `ecapa/${config.ecapaModel ?? DEFAULT_ECAPA_MODEL}`;
38
+ models.push(ecapaModel);
39
+ runtimes.push({
40
+ id: "ecapa",
41
+ ok: sidecarReady,
42
+ model: ecapaModel,
43
+ error: sidecarReady ? undefined : "Sidecar not configured; fallback mode available",
44
+ });
45
+ return {
46
+ ok: whisperReady || sidecarReady,
47
+ latencyMs: Math.round(performance.now() - startedAt),
48
+ models,
49
+ error: whisperReady || sidecarReady ? undefined : "No audio runtimes configured",
50
+ meta: {
51
+ runtimes,
52
+ sidecar,
53
+ whisperModelPath: config.whisperModelPath,
54
+ voiceProfilesDir: config.voiceProfilesDir,
55
+ },
56
+ };
57
+ }
58
+ async function buildAudioLocalProviderModel(config) {
59
+ const defaultModel = config.whisperModelPath
60
+ ? `whisper/${basename(config.whisperModelPath)}`
61
+ : `sortformer/${config.sortformerModelPath
62
+ ? basename(config.sortformerModelPath)
63
+ : config.sortformerModel ?? DEFAULT_SORTFORMER_MODEL}`;
64
+ const audioConfig = {
65
+ sidecar: config.sidecar ?? await resolveBundledVoiceSidecar(),
66
+ whisperBin: config.whisperBin,
67
+ whisperModelPath: config.whisperModelPath,
68
+ language: config.language,
69
+ threads: config.threads ? parseInt(config.threads, 10) : undefined,
70
+ voiceProfilesDir: config.voiceProfilesDir,
71
+ sortformerModel: config.sortformerModel,
72
+ sortformerModelPath: config.sortformerModelPath,
73
+ pyannoteModel: config.pyannoteModel,
74
+ ecapaModel: config.ecapaModel,
75
+ resolvedModelId: defaultModel,
76
+ originalModelId: `audio-local/${defaultModel}`,
77
+ };
78
+ return buildAudioLocalModel(audioConfig);
79
+ }
80
+ export const audioLocalProvider = defineProvider({
81
+ meta: {
82
+ id: "audio-local",
83
+ description: "Local speech/audio runtimes for transcription, diarization, and voice identity",
84
+ version: "1.0.0",
85
+ capabilities: ["audio", "embedding"],
86
+ },
87
+ kind: "custom",
88
+ env: {
89
+ sidecar: {
90
+ env: "VOICE_SIDECAR",
91
+ description: "Python sidecar command for Sortformer diarization and ECAPA tasks",
92
+ },
93
+ whisperBin: {
94
+ env: "TRANSCRIPT_AGENT_BIN",
95
+ description: "Path to whisper.cpp binary",
96
+ },
97
+ whisperModelPath: {
98
+ env: "TRANSCRIPT_AGENT_MODEL_PATH",
99
+ description: "Path to ggml whisper model file",
100
+ },
101
+ language: {
102
+ env: "LANGUAGE",
103
+ default: "auto",
104
+ description: "Whisper language hint",
105
+ },
106
+ threads: {
107
+ env: "THREADS",
108
+ description: "Number of CPU threads",
109
+ },
110
+ voiceProfilesDir: {
111
+ env: "VOICE_PROFILES_DIR",
112
+ description: "Local voice profile storage directory",
113
+ },
114
+ sortformerModel: {
115
+ env: "SORTFORMER_MODEL",
116
+ default: DEFAULT_SORTFORMER_MODEL,
117
+ description: "NeMo Sortformer diarization model id",
118
+ },
119
+ sortformerModelPath: {
120
+ env: "SORTFORMER_MODEL_PATH",
121
+ description: "Path to a local .nemo Sortformer diarization model",
122
+ },
123
+ pyannoteModel: {
124
+ env: "PYANNOTE_MODEL",
125
+ default: DEFAULT_PYANNOTE_MODEL,
126
+ description: "Legacy Pyannote diarization model id",
127
+ },
128
+ ecapaModel: {
129
+ env: "ECAPA_MODEL",
130
+ default: DEFAULT_ECAPA_MODEL,
131
+ description: "SpeechBrain ECAPA model id",
132
+ },
133
+ },
134
+ probe: probeAudioLocalProvider,
135
+ build: buildAudioLocalProviderModel,
136
+ });
137
+ //# sourceMappingURL=audio-local.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-local.provider.js","sourceRoot":"","sources":["../../src/providers/audio-local.provider.ts"],"names":[],"mappings":"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"}