speechflow 2.1.0 → 2.1.2

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 (48) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +14 -11
  3. package/package.json +6 -6
  4. package/speechflow-cli/dst/speechflow-node-a2a-vad.js +1 -1
  5. package/speechflow-cli/dst/speechflow-node-a2a-vad.js.map +1 -1
  6. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js +11 -7
  7. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js.map +1 -1
  8. package/speechflow-cli/dst/speechflow-node-t2t-sentence.d.ts +3 -3
  9. package/speechflow-cli/dst/speechflow-node-t2t-sentence.js +117 -100
  10. package/speechflow-cli/dst/speechflow-node-t2t-sentence.js.map +1 -1
  11. package/speechflow-cli/dst/{speechflow-node-a2t-assemblyai.d.ts → speechflow-node-t2t-simulator.d.ts} +1 -6
  12. package/speechflow-cli/dst/speechflow-node-t2t-simulator.js +128 -0
  13. package/speechflow-cli/dst/speechflow-node-t2t-simulator.js.map +1 -0
  14. package/speechflow-cli/dst/speechflow-node-xio-webrtc.js +2 -2
  15. package/speechflow-cli/dst/speechflow-node-xio-webrtc.js.map +1 -1
  16. package/speechflow-cli/dst/speechflow-util-queue.d.ts +9 -3
  17. package/speechflow-cli/dst/speechflow-util-queue.js +39 -17
  18. package/speechflow-cli/dst/speechflow-util-queue.js.map +1 -1
  19. package/speechflow-cli/dst/speechflow-util-stream.d.ts +1 -1
  20. package/speechflow-cli/dst/speechflow-util-stream.js +15 -15
  21. package/speechflow-cli/dst/speechflow-util-stream.js.map +1 -1
  22. package/speechflow-cli/etc/oxlint.jsonc +5 -3
  23. package/speechflow-cli/package.json +26 -23
  24. package/speechflow-cli/src/speechflow-node-a2a-vad.ts +1 -1
  25. package/speechflow-cli/src/speechflow-node-a2t-deepgram.ts +17 -14
  26. package/speechflow-cli/src/speechflow-node-t2t-sentence.ts +128 -112
  27. package/speechflow-cli/src/speechflow-node-xio-webrtc.ts +4 -4
  28. package/speechflow-cli/src/speechflow-util-queue.ts +44 -19
  29. package/speechflow-cli/src/speechflow-util-stream.ts +15 -15
  30. package/speechflow-ui-db/dst/app-font-fa-brands-400.woff2 +0 -0
  31. package/speechflow-ui-db/dst/app-font-fa-regular-400.woff2 +0 -0
  32. package/speechflow-ui-db/dst/app-font-fa-solid-900.woff2 +0 -0
  33. package/speechflow-ui-db/dst/app-font-fa-v4compatibility.woff2 +0 -0
  34. package/speechflow-ui-db/dst/index.css +1 -1
  35. package/speechflow-ui-db/dst/index.js +47 -46
  36. package/speechflow-ui-db/package.json +16 -14
  37. package/speechflow-ui-db/src/app.vue +2 -2
  38. package/speechflow-ui-st/dst/app-font-fa-brands-400.woff2 +0 -0
  39. package/speechflow-ui-st/dst/app-font-fa-regular-400.woff2 +0 -0
  40. package/speechflow-ui-st/dst/app-font-fa-solid-900.woff2 +0 -0
  41. package/speechflow-ui-st/dst/app-font-fa-v4compatibility.woff2 +0 -0
  42. package/speechflow-ui-st/dst/index.css +1 -1
  43. package/speechflow-ui-st/dst/index.js +65 -64
  44. package/speechflow-ui-st/etc/oxlint.jsonc +2 -1
  45. package/speechflow-ui-st/package.json +17 -15
  46. package/speechflow-cli/dst/speechflow-node-a2t-assemblyai.js +0 -275
  47. package/speechflow-cli/dst/speechflow-node-a2t-assemblyai.js.map +0 -1
  48. /package/speechflow-cli/package.d/{sherpa-onnx+1.12.23.patch → sherpa-onnx+1.12.25.patch} +0 -0
@@ -131,7 +131,8 @@
131
131
  "no-inline-comments": "off",
132
132
  "max-statements": "off",
133
133
  "no-console": "off",
134
- "no-unassigned-import": "off"
134
+ "no-unassigned-import": "off",
135
+ "no-shadow": "off"
135
136
  }
136
137
  }
137
138
 
@@ -14,39 +14,39 @@
14
14
  "url": "http://engelschall.com"
15
15
  },
16
16
  "dependencies": {
17
- "vue": "3.5.27",
17
+ "vue": "3.5.28",
18
18
  "vue3-spinners": "1.3.3",
19
19
  "luxon": "3.7.2",
20
20
  "@opensumi/reconnecting-websocket": "4.4.0",
21
- "axios": "1.13.3",
21
+ "axios": "1.13.5",
22
22
  "typopro-web": "4.2.8",
23
- "@fortawesome/fontawesome-free": "7.1.0",
23
+ "@fortawesome/fontawesome-free": "7.2.0",
24
24
  "patch-package": "8.0.1",
25
25
  "@rse/stx": "1.1.4",
26
- "animejs": "4.3.5"
26
+ "animejs": "4.3.6"
27
27
  },
28
28
  "devDependencies": {
29
29
  "vite": "7.3.1",
30
- "typescript-eslint": "8.54.0",
31
- "@typescript-eslint/eslint-plugin": "8.54.0",
32
- "@typescript-eslint/parser": "8.54.0",
33
- "@vitejs/plugin-vue": "6.0.3",
30
+ "typescript-eslint": "8.56.0",
31
+ "@typescript-eslint/eslint-plugin": "8.56.0",
32
+ "@typescript-eslint/parser": "8.56.0",
33
+ "@vitejs/plugin-vue": "6.0.4",
34
34
  "@rollup/plugin-yaml": "4.1.2",
35
35
  "vite-plugin-node-polyfills": "0.25.0",
36
36
  "vite-svg-loader": "5.1.0",
37
37
  "@liuli-util/vite-plugin-node": "0.10.0",
38
38
  "mkdirp": "3.0.1",
39
39
 
40
- "@vue/eslint-config-typescript": "14.6.0",
41
- "vue-eslint-parser": "10.2.0",
40
+ "@vue/eslint-config-typescript": "14.7.0",
41
+ "vue-eslint-parser": "10.4.0",
42
42
  "eslint": "9.39.2",
43
43
  "@eslint/js": "9.39.2",
44
44
  "neostandard": "0.12.2",
45
45
  "eslint-plugin-import": "2.32.0",
46
- "eslint-plugin-vue": "10.7.0",
46
+ "eslint-plugin-vue": "10.8.0",
47
47
 
48
- "oxlint": "1.42.0",
49
- "eslint-plugin-oxlint": "1.42.0",
48
+ "oxlint": "1.48.0",
49
+ "eslint-plugin-oxlint": "1.48.0",
50
50
 
51
51
  "htmllint": "0.8.0",
52
52
  "htmllint-cli": "0.0.7",
@@ -54,7 +54,7 @@
54
54
  "check-dependencies": "2.0.0",
55
55
  "nodemon": "3.1.11",
56
56
  "shx": "0.4.0",
57
- "stylelint": "17.0.0",
57
+ "stylelint": "17.3.0",
58
58
  "stylelint-config-html": "1.1.0",
59
59
  "stylelint-config-recommended-vue": "1.6.1",
60
60
  "stylelint-config-standard": "40.0.0",
@@ -73,7 +73,9 @@
73
73
  },
74
74
  "overrides": {
75
75
  "@liuli-util/vite-plugin-node": { "vite": ">=6.0.0" },
76
- "stylelint-stylus": { "stylelint": "^17.0.0" }
76
+ "stylelint-stylus": { "stylelint": "^17.0.0" },
77
+ "eslint-plugin-import": { "eslint": ">=9.0.0" },
78
+ "neostandard": { "eslint": ">=9.0.0" }
77
79
  },
78
80
  "engines" : {
79
81
  "npm": ">=10.0.0",
@@ -1,275 +0,0 @@
1
- "use strict";
2
- /*
3
- ** SpeechFlow - Speech Processing Flow Graph
4
- ** Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
5
- ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
6
- */
7
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
- if (k2 === undefined) k2 = k;
9
- var desc = Object.getOwnPropertyDescriptor(m, k);
10
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
- desc = { enumerable: true, get: function() { return m[k]; } };
12
- }
13
- Object.defineProperty(o, k2, desc);
14
- }) : (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- o[k2] = m[k];
17
- }));
18
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
- Object.defineProperty(o, "default", { enumerable: true, value: v });
20
- }) : function(o, v) {
21
- o["default"] = v;
22
- });
23
- var __importStar = (this && this.__importStar) || (function () {
24
- var ownKeys = function(o) {
25
- ownKeys = Object.getOwnPropertyNames || function (o) {
26
- var ar = [];
27
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
- return ar;
29
- };
30
- return ownKeys(o);
31
- };
32
- return function (mod) {
33
- if (mod && mod.__esModule) return mod;
34
- var result = {};
35
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
- __setModuleDefault(result, mod);
37
- return result;
38
- };
39
- })();
40
- var __importDefault = (this && this.__importDefault) || function (mod) {
41
- return (mod && mod.__esModule) ? mod : { "default": mod };
42
- };
43
- Object.defineProperty(exports, "__esModule", { value: true });
44
- /* standard dependencies */
45
- const node_stream_1 = __importDefault(require("node:stream"));
46
- /* external dependencies */
47
- const assemblyai_1 = require("assemblyai");
48
- const luxon_1 = require("luxon");
49
- /* internal dependencies */
50
- const speechflow_node_1 = __importStar(require("./speechflow-node"));
51
- const utils = __importStar(require("./speechflow-util"));
52
- /* SpeechFlow node for AssemblyAI speech-to-text conversion */
53
- class SpeechFlowNodeAssemblyAI extends speechflow_node_1.default {
54
- /* declare official node name */
55
- static name = "assemblyai";
56
- /* internal state */
57
- client = null;
58
- transcriber = null;
59
- destroyed = false;
60
- connectionTimeout = null;
61
- queue = null;
62
- /* construct node */
63
- constructor(id, cfg, opts, args) {
64
- super(id, cfg, opts, args);
65
- /* declare node configuration parameters */
66
- this.configure({
67
- key: { type: "string", val: process.env.SPEECHFLOW_ASSEMBLYAI_KEY },
68
- model: { type: "string", val: "universal-stream", pos: 0, match: /^(?:universal-stream|slam-1)$/ },
69
- language: { type: "string", val: "en", pos: 1 },
70
- interim: { type: "boolean", val: false, pos: 2 }
71
- });
72
- /* sanity check parameters */
73
- if (!this.params.key)
74
- throw new Error("AssemblyAI API key not configured");
75
- /* declare node input/output format */
76
- this.input = "audio";
77
- this.output = "text";
78
- }
79
- /* open node */
80
- async open() {
81
- /* sanity check situation */
82
- if (this.config.audioBitDepth !== 16 || !this.config.audioLittleEndian)
83
- throw new Error("AssemblyAI node currently supports PCM-S16LE audio only");
84
- /* clear destruction flag */
85
- this.destroyed = false;
86
- /* create queue for results */
87
- this.queue = new utils.SingleQueue();
88
- /* create a store for the meta information */
89
- const metastore = new utils.TimeStore();
90
- /* establish AssemblyAI API connection */
91
- this.client = new assemblyai_1.AssemblyAI({
92
- apiKey: this.params.key
93
- });
94
- /* create realtime transcriber */
95
- let model = this.params.model;
96
- if (model === "universal-stream" && this.params.language === "en")
97
- model = "universal-stream-english";
98
- else if (model === "universal-stream" && this.params.language !== "en")
99
- model = "universal-stream-multilingual";
100
- this.transcriber = this.client.realtime.transcriber({
101
- sampleRate: this.config.audioSampleRate,
102
- encoding: "pcm_s16le",
103
- wordBoost: [],
104
- disablePartialTranscripts: !this.params.interim
105
- });
106
- /* hook onto AssemblyAI events */
107
- this.transcriber.on("transcript", (transcript) => {
108
- if (this.destroyed || this.queue === null)
109
- return;
110
- const text = transcript.text ?? "";
111
- const confidence = transcript.confidence ?? 0;
112
- const isFinal = transcript.message_type === "FinalTranscript";
113
- if (text === "") {
114
- this.log("info", "empty/dummy text received");
115
- }
116
- else {
117
- this.log("info", `text received (confidence: ${(confidence * 100).toFixed(2)}%): "${text}"`);
118
- const now = luxon_1.DateTime.now();
119
- const start = now.minus({ seconds: 1 });
120
- const end = now;
121
- const metas = metastore.fetch(start, end);
122
- const meta = metas.reduce((prev, curr) => {
123
- curr.forEach((val, key) => { prev.set(key, val); });
124
- return prev;
125
- }, new Map());
126
- metastore.prune(start);
127
- meta.set("confidence", confidence);
128
- if (transcript.words) {
129
- meta.set("words", transcript.words.map((word) => ({
130
- word: word.text,
131
- confidence: word.confidence,
132
- start: start,
133
- end: end
134
- })));
135
- }
136
- const chunk = new speechflow_node_1.SpeechFlowChunk(start, end, isFinal ? "final" : "intermediate", "text", text, meta);
137
- this.queue.write(chunk);
138
- }
139
- });
140
- this.transcriber.on("error", (error) => {
141
- this.log("error", `error: ${error.message}`);
142
- if (!this.destroyed && this.queue !== null)
143
- this.queue.write(null);
144
- this.emit("error");
145
- });
146
- this.transcriber.on("close", () => {
147
- this.log("info", "connection close");
148
- if (!this.destroyed && this.queue !== null)
149
- this.queue.write(null);
150
- });
151
- /* connect to AssemblyAI */
152
- await new Promise((resolve, reject) => {
153
- this.connectionTimeout = setTimeout(() => {
154
- if (this.connectionTimeout !== null) {
155
- this.connectionTimeout = null;
156
- reject(new Error("AssemblyAI: timeout waiting for connection open"));
157
- }
158
- }, 8000);
159
- this.transcriber.on("open", () => {
160
- this.log("info", "connection open");
161
- if (this.connectionTimeout !== null) {
162
- clearTimeout(this.connectionTimeout);
163
- this.connectionTimeout = null;
164
- }
165
- resolve();
166
- });
167
- this.transcriber.connect();
168
- });
169
- /* remember opening time to receive time zero offset */
170
- this.timeOpen = luxon_1.DateTime.now();
171
- /* provide Duplex stream and internally attach to AssemblyAI API */
172
- const self = this;
173
- this.stream = new node_stream_1.default.Duplex({
174
- writableObjectMode: true,
175
- readableObjectMode: true,
176
- decodeStrings: false,
177
- highWaterMark: 1,
178
- write(chunk, encoding, callback) {
179
- if (self.destroyed || self.transcriber === null) {
180
- callback(new Error("stream already destroyed"));
181
- return;
182
- }
183
- if (chunk.type !== "audio")
184
- callback(new Error("expected audio input chunk"));
185
- else if (!Buffer.isBuffer(chunk.payload))
186
- callback(new Error("expected Buffer input chunk"));
187
- else {
188
- if (chunk.payload.byteLength > 0) {
189
- self.log("debug", `send data (${chunk.payload.byteLength} bytes)`);
190
- if (chunk.meta.size > 0)
191
- metastore.store(chunk.timestampStart, chunk.timestampEnd, chunk.meta);
192
- try {
193
- self.transcriber.sendAudio(chunk.payload);
194
- }
195
- catch (error) {
196
- callback(error instanceof Error ? error : new Error("failed to send to AssemblyAI"));
197
- return;
198
- }
199
- }
200
- callback();
201
- }
202
- },
203
- read(size) {
204
- if (self.destroyed || self.queue === null) {
205
- this.push(null);
206
- return;
207
- }
208
- self.queue.read().then((chunk) => {
209
- if (self.destroyed) {
210
- this.push(null);
211
- return;
212
- }
213
- if (chunk === null) {
214
- self.log("info", "received EOF signal");
215
- this.push(null);
216
- }
217
- else {
218
- self.log("debug", `received data (${chunk.payload.length} bytes)`);
219
- this.push(chunk);
220
- }
221
- }).catch((error) => {
222
- if (!self.destroyed)
223
- self.log("error", `queue read error: ${error.message}`);
224
- });
225
- },
226
- final(callback) {
227
- if (self.destroyed || self.transcriber === null) {
228
- callback();
229
- return;
230
- }
231
- try {
232
- self.transcriber.close();
233
- }
234
- catch (error) {
235
- self.log("warning", `error closing AssemblyAI connection: ${error}`);
236
- }
237
- callback();
238
- }
239
- });
240
- }
241
- /* close node */
242
- async close() {
243
- /* indicate destruction first to stop all async operations */
244
- this.destroyed = true;
245
- /* cleanup all timers */
246
- if (this.connectionTimeout !== null) {
247
- clearTimeout(this.connectionTimeout);
248
- this.connectionTimeout = null;
249
- }
250
- /* close stream */
251
- if (this.stream !== null) {
252
- this.stream.destroy();
253
- this.stream = null;
254
- }
255
- /* close AssemblyAI connection */
256
- if (this.transcriber !== null) {
257
- try {
258
- this.transcriber.close();
259
- }
260
- catch (error) {
261
- this.log("warning", `error during AssemblyAI cleanup: ${error}`);
262
- }
263
- this.transcriber = null;
264
- }
265
- /* cleanup client */
266
- this.client = null;
267
- /* signal EOF to any pending read operations */
268
- if (this.queue !== null) {
269
- this.queue.write(null);
270
- this.queue = null;
271
- }
272
- }
273
- }
274
- exports.default = SpeechFlowNodeAssemblyAI;
275
- //# sourceMappingURL=speechflow-node-a2t-assemblyai.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"speechflow-node-a2t-assemblyai.js","sourceRoot":"","sources":["../src/speechflow-node-a2t-assemblyai.ts"],"names":[],"mappings":"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"}