speechflow 1.3.1 → 1.4.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.
Files changed (156) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/etc/stx.conf +54 -58
  3. package/package.json +25 -106
  4. package/{etc → speechflow-cli/etc}/eslint.mjs +1 -2
  5. package/speechflow-cli/etc/stx.conf +77 -0
  6. package/speechflow-cli/package.json +116 -0
  7. package/{src → speechflow-cli/src}/speechflow-node-a2a-gender.ts +148 -64
  8. package/speechflow-cli/src/speechflow-node-a2a-meter.ts +217 -0
  9. package/{src → speechflow-cli/src}/speechflow-node-a2a-mute.ts +39 -11
  10. package/speechflow-cli/src/speechflow-node-a2a-vad.ts +384 -0
  11. package/{src → speechflow-cli/src}/speechflow-node-a2a-wav.ts +27 -11
  12. package/speechflow-cli/src/speechflow-node-a2t-deepgram.ts +313 -0
  13. package/{src → speechflow-cli/src}/speechflow-node-t2a-elevenlabs.ts +59 -12
  14. package/{src → speechflow-cli/src}/speechflow-node-t2a-kokoro.ts +11 -4
  15. package/{src → speechflow-cli/src}/speechflow-node-t2t-deepl.ts +9 -4
  16. package/{src → speechflow-cli/src}/speechflow-node-t2t-format.ts +2 -2
  17. package/{src → speechflow-cli/src}/speechflow-node-t2t-ollama.ts +1 -1
  18. package/{src → speechflow-cli/src}/speechflow-node-t2t-openai.ts +1 -1
  19. package/{src → speechflow-cli/src}/speechflow-node-t2t-sentence.ts +37 -20
  20. package/speechflow-cli/src/speechflow-node-t2t-subtitle.ts +276 -0
  21. package/{src → speechflow-cli/src}/speechflow-node-t2t-transformers.ts +4 -3
  22. package/{src → speechflow-cli/src}/speechflow-node-x2x-filter.ts +9 -5
  23. package/{src → speechflow-cli/src}/speechflow-node-x2x-trace.ts +16 -8
  24. package/{src → speechflow-cli/src}/speechflow-node-xio-device.ts +12 -8
  25. package/{src → speechflow-cli/src}/speechflow-node-xio-file.ts +9 -3
  26. package/{src → speechflow-cli/src}/speechflow-node-xio-mqtt.ts +5 -2
  27. package/{src → speechflow-cli/src}/speechflow-node-xio-websocket.ts +12 -12
  28. package/{src → speechflow-cli/src}/speechflow-node.ts +7 -0
  29. package/{src → speechflow-cli/src}/speechflow-utils.ts +78 -44
  30. package/{src → speechflow-cli/src}/speechflow.ts +188 -53
  31. package/speechflow-ui-db/etc/eslint.mjs +106 -0
  32. package/speechflow-ui-db/etc/htmllint.json +55 -0
  33. package/speechflow-ui-db/etc/stx.conf +79 -0
  34. package/speechflow-ui-db/etc/stylelint.js +46 -0
  35. package/speechflow-ui-db/etc/stylelint.yaml +33 -0
  36. package/speechflow-ui-db/etc/tsc-client.json +30 -0
  37. package/speechflow-ui-db/etc/tsc.node.json +9 -0
  38. package/speechflow-ui-db/etc/vite-client.mts +63 -0
  39. package/speechflow-ui-db/package.d/htmllint-cli+0.0.7.patch +20 -0
  40. package/speechflow-ui-db/package.json +75 -0
  41. package/speechflow-ui-db/src/app-icon.ai +1989 -4
  42. package/speechflow-ui-db/src/app-icon.svg +26 -0
  43. package/speechflow-ui-db/src/app.styl +64 -0
  44. package/speechflow-ui-db/src/app.vue +221 -0
  45. package/speechflow-ui-db/src/index.html +23 -0
  46. package/speechflow-ui-db/src/index.ts +26 -0
  47. package/{dst/speechflow.d.ts → speechflow-ui-db/src/lib.d.ts} +5 -3
  48. package/speechflow-ui-db/src/tsconfig.json +3 -0
  49. package/speechflow-ui-st/etc/eslint.mjs +106 -0
  50. package/speechflow-ui-st/etc/htmllint.json +55 -0
  51. package/speechflow-ui-st/etc/stx.conf +79 -0
  52. package/speechflow-ui-st/etc/stylelint.js +46 -0
  53. package/speechflow-ui-st/etc/stylelint.yaml +33 -0
  54. package/speechflow-ui-st/etc/tsc-client.json +30 -0
  55. package/speechflow-ui-st/etc/tsc.node.json +9 -0
  56. package/speechflow-ui-st/etc/vite-client.mts +63 -0
  57. package/speechflow-ui-st/package.d/htmllint-cli+0.0.7.patch +20 -0
  58. package/speechflow-ui-st/package.json +79 -0
  59. package/speechflow-ui-st/src/app-icon.ai +1989 -4
  60. package/speechflow-ui-st/src/app-icon.svg +26 -0
  61. package/speechflow-ui-st/src/app.styl +64 -0
  62. package/speechflow-ui-st/src/app.vue +142 -0
  63. package/speechflow-ui-st/src/index.html +23 -0
  64. package/speechflow-ui-st/src/index.ts +26 -0
  65. package/speechflow-ui-st/src/lib.d.ts +9 -0
  66. package/speechflow-ui-st/src/tsconfig.json +3 -0
  67. package/dst/speechflow-node-a2a-ffmpeg.d.ts +0 -13
  68. package/dst/speechflow-node-a2a-ffmpeg.js +0 -153
  69. package/dst/speechflow-node-a2a-ffmpeg.js.map +0 -1
  70. package/dst/speechflow-node-a2a-gender.d.ts +0 -18
  71. package/dst/speechflow-node-a2a-gender.js +0 -271
  72. package/dst/speechflow-node-a2a-gender.js.map +0 -1
  73. package/dst/speechflow-node-a2a-meter.d.ts +0 -12
  74. package/dst/speechflow-node-a2a-meter.js +0 -155
  75. package/dst/speechflow-node-a2a-meter.js.map +0 -1
  76. package/dst/speechflow-node-a2a-mute.d.ts +0 -16
  77. package/dst/speechflow-node-a2a-mute.js +0 -91
  78. package/dst/speechflow-node-a2a-mute.js.map +0 -1
  79. package/dst/speechflow-node-a2a-vad.d.ts +0 -16
  80. package/dst/speechflow-node-a2a-vad.js +0 -285
  81. package/dst/speechflow-node-a2a-vad.js.map +0 -1
  82. package/dst/speechflow-node-a2a-wav.d.ts +0 -11
  83. package/dst/speechflow-node-a2a-wav.js +0 -195
  84. package/dst/speechflow-node-a2a-wav.js.map +0 -1
  85. package/dst/speechflow-node-a2t-deepgram.d.ts +0 -15
  86. package/dst/speechflow-node-a2t-deepgram.js +0 -255
  87. package/dst/speechflow-node-a2t-deepgram.js.map +0 -1
  88. package/dst/speechflow-node-t2a-elevenlabs.d.ts +0 -16
  89. package/dst/speechflow-node-t2a-elevenlabs.js +0 -195
  90. package/dst/speechflow-node-t2a-elevenlabs.js.map +0 -1
  91. package/dst/speechflow-node-t2a-kokoro.d.ts +0 -13
  92. package/dst/speechflow-node-t2a-kokoro.js +0 -149
  93. package/dst/speechflow-node-t2a-kokoro.js.map +0 -1
  94. package/dst/speechflow-node-t2t-deepl.d.ts +0 -15
  95. package/dst/speechflow-node-t2t-deepl.js +0 -142
  96. package/dst/speechflow-node-t2t-deepl.js.map +0 -1
  97. package/dst/speechflow-node-t2t-format.d.ts +0 -11
  98. package/dst/speechflow-node-t2t-format.js +0 -82
  99. package/dst/speechflow-node-t2t-format.js.map +0 -1
  100. package/dst/speechflow-node-t2t-ollama.d.ts +0 -13
  101. package/dst/speechflow-node-t2t-ollama.js +0 -247
  102. package/dst/speechflow-node-t2t-ollama.js.map +0 -1
  103. package/dst/speechflow-node-t2t-openai.d.ts +0 -13
  104. package/dst/speechflow-node-t2t-openai.js +0 -227
  105. package/dst/speechflow-node-t2t-openai.js.map +0 -1
  106. package/dst/speechflow-node-t2t-sentence.d.ts +0 -17
  107. package/dst/speechflow-node-t2t-sentence.js +0 -234
  108. package/dst/speechflow-node-t2t-sentence.js.map +0 -1
  109. package/dst/speechflow-node-t2t-subtitle.d.ts +0 -13
  110. package/dst/speechflow-node-t2t-subtitle.js +0 -278
  111. package/dst/speechflow-node-t2t-subtitle.js.map +0 -1
  112. package/dst/speechflow-node-t2t-transformers.d.ts +0 -14
  113. package/dst/speechflow-node-t2t-transformers.js +0 -265
  114. package/dst/speechflow-node-t2t-transformers.js.map +0 -1
  115. package/dst/speechflow-node-x2x-filter.d.ts +0 -11
  116. package/dst/speechflow-node-x2x-filter.js +0 -117
  117. package/dst/speechflow-node-x2x-filter.js.map +0 -1
  118. package/dst/speechflow-node-x2x-trace.d.ts +0 -11
  119. package/dst/speechflow-node-x2x-trace.js +0 -111
  120. package/dst/speechflow-node-x2x-trace.js.map +0 -1
  121. package/dst/speechflow-node-xio-device.d.ts +0 -13
  122. package/dst/speechflow-node-xio-device.js +0 -226
  123. package/dst/speechflow-node-xio-device.js.map +0 -1
  124. package/dst/speechflow-node-xio-file.d.ts +0 -11
  125. package/dst/speechflow-node-xio-file.js +0 -210
  126. package/dst/speechflow-node-xio-file.js.map +0 -1
  127. package/dst/speechflow-node-xio-mqtt.d.ts +0 -13
  128. package/dst/speechflow-node-xio-mqtt.js +0 -185
  129. package/dst/speechflow-node-xio-mqtt.js.map +0 -1
  130. package/dst/speechflow-node-xio-websocket.d.ts +0 -13
  131. package/dst/speechflow-node-xio-websocket.js +0 -278
  132. package/dst/speechflow-node-xio-websocket.js.map +0 -1
  133. package/dst/speechflow-node.d.ts +0 -65
  134. package/dst/speechflow-node.js +0 -180
  135. package/dst/speechflow-node.js.map +0 -1
  136. package/dst/speechflow-utils.d.ts +0 -69
  137. package/dst/speechflow-utils.js +0 -486
  138. package/dst/speechflow-utils.js.map +0 -1
  139. package/dst/speechflow.js +0 -768
  140. package/dst/speechflow.js.map +0 -1
  141. package/src/speechflow-node-a2a-meter.ts +0 -130
  142. package/src/speechflow-node-a2a-vad.ts +0 -285
  143. package/src/speechflow-node-a2t-deepgram.ts +0 -234
  144. package/src/speechflow-node-t2t-subtitle.ts +0 -149
  145. /package/{etc → speechflow-cli/etc}/biome.jsonc +0 -0
  146. /package/{etc → speechflow-cli/etc}/oxlint.jsonc +0 -0
  147. /package/{etc → speechflow-cli/etc}/speechflow.bat +0 -0
  148. /package/{etc → speechflow-cli/etc}/speechflow.sh +0 -0
  149. /package/{etc → speechflow-cli/etc}/speechflow.yaml +0 -0
  150. /package/{etc → speechflow-cli/etc}/tsconfig.json +0 -0
  151. /package/{package.d → speechflow-cli/package.d}/@ericedouard+vad-node-realtime+0.2.0.patch +0 -0
  152. /package/{src → speechflow-cli/src}/lib.d.ts +0 -0
  153. /package/{src → speechflow-cli/src}/speechflow-logo.ai +0 -0
  154. /package/{src → speechflow-cli/src}/speechflow-logo.svg +0 -0
  155. /package/{src → speechflow-cli/src}/speechflow-node-a2a-ffmpeg.ts +0 -0
  156. /package/{tsconfig.json → speechflow-cli/tsconfig.json} +0 -0
@@ -1,278 +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_path_1 = __importDefault(require("node:path"));
46
- const node_stream_1 = __importDefault(require("node:stream"));
47
- /* external dependencies */
48
- const luxon_1 = require("luxon");
49
- const HAPI = __importStar(require("@hapi/hapi"));
50
- const inert_1 = __importDefault(require("@hapi/inert"));
51
- const hapi_plugin_websocket_1 = __importDefault(require("hapi-plugin-websocket"));
52
- /* internal dependencies */
53
- const speechflow_node_1 = __importStar(require("./speechflow-node"));
54
- /* SpeechFlow node for subtitle (text-to-text) "translations" */
55
- class SpeechFlowNodeSubtitle extends speechflow_node_1.default {
56
- /* declare official node name */
57
- static name = "subtitle";
58
- /* internal state */
59
- sequenceNo = 1;
60
- hapi = null;
61
- /* construct node */
62
- constructor(id, cfg, opts, args) {
63
- super(id, cfg, opts, args);
64
- /* declare node configuration parameters */
65
- this.configure({
66
- format: { type: "string", pos: 0, val: "srt", match: /^(?:srt|vtt)$/ },
67
- words: { type: "boolean", val: false },
68
- mode: { type: "string", val: "export", match: /^(?:export|render)$/ },
69
- addr: { type: "string", val: "127.0.0.1" },
70
- port: { type: "number", val: 8585 }
71
- });
72
- /* declare node input/output format */
73
- this.input = "text";
74
- this.output = this.params.mode === "export" ? "text" : "none";
75
- }
76
- /* open node */
77
- async open() {
78
- if (this.params.mode === "export") {
79
- this.sequenceNo = 1;
80
- /* provide text-to-subtitle conversion */
81
- const convert = async (chunk) => {
82
- if (typeof chunk.payload !== "string")
83
- throw new Error("chunk payload type must be string");
84
- const convertSingle = (start, end, text, word, occurence) => {
85
- if (word) {
86
- occurence ??= 1;
87
- let match = 1;
88
- word = word.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
89
- text = text.replaceAll(new RegExp(`\\b${word}\\b`, "g"), (m) => {
90
- if (match++ === occurence)
91
- return `<b>${m}</b>`;
92
- else
93
- return m;
94
- });
95
- }
96
- if (this.params.format === "srt") {
97
- const startFmt = start.toFormat("hh:mm:ss,SSS");
98
- const endFmt = end.toFormat("hh:mm:ss,SSS");
99
- text = `${this.sequenceNo++}\n` +
100
- `${startFmt} --> ${endFmt}\n` +
101
- `${text}\n\n`;
102
- }
103
- else if (this.params.format === "vtt") {
104
- const startFmt = start.toFormat("hh:mm:ss.SSS");
105
- const endFmt = end.toFormat("hh:mm:ss.SSS");
106
- text = `${startFmt} --> ${endFmt}\n` +
107
- `${text}\n\n`;
108
- }
109
- return text;
110
- };
111
- let output = "";
112
- if (this.params.words) {
113
- output += convertSingle(chunk.timestampStart, chunk.timestampEnd, chunk.payload);
114
- const words = (chunk.meta.get("words") ?? []);
115
- const occurences = new Map();
116
- for (const word of words) {
117
- let occurence = occurences.get(word.word) ?? 0;
118
- occurence++;
119
- occurences.set(word.word, occurence);
120
- output += convertSingle(word.start, word.end, chunk.payload, word.word, occurence);
121
- }
122
- }
123
- else
124
- output += convertSingle(chunk.timestampStart, chunk.timestampEnd, chunk.payload);
125
- return output;
126
- };
127
- /* establish a duplex stream */
128
- const self = this;
129
- let firstChunk = true;
130
- this.stream = new node_stream_1.default.Transform({
131
- readableObjectMode: true,
132
- writableObjectMode: true,
133
- decodeStrings: false,
134
- highWaterMark: 1,
135
- transform(chunk, encoding, callback) {
136
- if (firstChunk && self.params.format === "vtt") {
137
- this.push(new speechflow_node_1.SpeechFlowChunk(luxon_1.Duration.fromMillis(0), luxon_1.Duration.fromMillis(0), "final", "text", "WEBVTT\n\n"));
138
- firstChunk = false;
139
- }
140
- if (Buffer.isBuffer(chunk.payload))
141
- callback(new Error("invalid chunk payload type"));
142
- else {
143
- if (chunk.payload === "") {
144
- this.push(chunk);
145
- callback();
146
- }
147
- else {
148
- convert(chunk).then((payload) => {
149
- const chunkNew = chunk.clone();
150
- chunkNew.payload = payload;
151
- this.push(chunkNew);
152
- callback();
153
- }).catch((err) => {
154
- callback(err);
155
- });
156
- }
157
- }
158
- },
159
- final(callback) {
160
- this.push(null);
161
- callback();
162
- }
163
- });
164
- }
165
- else if (this.params.mode === "render") {
166
- /* establish REST/WebSocket API */
167
- const wsPeers = new Map();
168
- this.hapi = new HAPI.Server({
169
- address: this.params.addr,
170
- port: this.params.port
171
- });
172
- await this.hapi.register({ plugin: inert_1.default });
173
- await this.hapi.register({ plugin: hapi_plugin_websocket_1.default });
174
- this.hapi.events.on({ name: "request", channels: ["error"] }, (request, event, tags) => {
175
- if (event.error instanceof Error)
176
- this.log("error", `HAPI: request-error: ${event.error.message}`);
177
- else
178
- this.log("error", `HAPI: request-error: ${event.error}`);
179
- });
180
- this.hapi.events.on("log", (event, tags) => {
181
- if (tags.error) {
182
- const err = event.error;
183
- if (err instanceof Error)
184
- this.log("error", `HAPI: log: ${err.message}`);
185
- else
186
- this.log("error", `HAPI: log: ${err}`);
187
- }
188
- });
189
- this.hapi.route({
190
- method: "GET",
191
- path: "/{param*}",
192
- handler: {
193
- directory: {
194
- path: node_path_1.default.join(__dirname, "../subtitle/dst"),
195
- redirectToSlash: true,
196
- index: true
197
- }
198
- }
199
- });
200
- this.hapi.route({
201
- method: "POST",
202
- path: "/api",
203
- options: {
204
- payload: {
205
- output: "data",
206
- parse: true,
207
- allow: "application/json"
208
- },
209
- plugins: {
210
- websocket: {
211
- autoping: 30 * 1000,
212
- connect: (args) => {
213
- const ctx = args.ctx;
214
- const ws = args.ws;
215
- const req = args.req;
216
- const peer = `${req.socket.remoteAddress}:${req.socket.remotePort}`;
217
- ctx.peer = peer;
218
- wsPeers.set(peer, { ctx, ws, req });
219
- this.log("info", `HAPI: WebSocket: connect: peer ${peer}`);
220
- },
221
- disconnect: (args) => {
222
- const ctx = args.ctx;
223
- const peer = ctx.peer;
224
- wsPeers.delete(peer);
225
- this.log("info", `HAPI: WebSocket: disconnect: peer ${peer}`);
226
- }
227
- }
228
- }
229
- },
230
- handler: (request, h) => {
231
- return h.response({}).code(204);
232
- }
233
- });
234
- await this.hapi.start();
235
- this.log("info", `HAPI: started REST/WebSocket network service: http://${this.params.addr}:${this.params.port}`);
236
- const emit = (chunk) => {
237
- const data = JSON.stringify(chunk);
238
- for (const info of wsPeers.values())
239
- info.ws.send(data);
240
- };
241
- this.stream = new node_stream_1.default.Writable({
242
- objectMode: true,
243
- decodeStrings: false,
244
- highWaterMark: 1,
245
- write(chunk, encoding, callback) {
246
- if (Buffer.isBuffer(chunk.payload))
247
- callback(new Error("invalid chunk payload type"));
248
- else {
249
- if (chunk.payload === "")
250
- callback();
251
- else {
252
- emit(chunk);
253
- callback();
254
- }
255
- }
256
- },
257
- final(callback) {
258
- callback();
259
- }
260
- });
261
- }
262
- }
263
- /* open node */
264
- async close() {
265
- /* close stream */
266
- if (this.stream !== null) {
267
- this.stream.destroy();
268
- this.stream = null;
269
- }
270
- /* shutdown HAPI */
271
- if (this.hapi !== null) {
272
- await this.hapi.stop();
273
- this.hapi = null;
274
- }
275
- }
276
- }
277
- exports.default = SpeechFlowNodeSubtitle;
278
- //# sourceMappingURL=speechflow-node-t2t-subtitle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"speechflow-node-t2t-subtitle.js","sourceRoot":"","sources":["../src/speechflow-node-t2t-subtitle.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import SpeechFlowNode from "./speechflow-node";
2
- export default class SpeechFlowNodeTransformers extends SpeechFlowNode {
3
- static name: string;
4
- private translator;
5
- private generator;
6
- private setup;
7
- constructor(id: string, cfg: {
8
- [id: string]: any;
9
- }, opts: {
10
- [id: string]: any;
11
- }, args: any[]);
12
- open(): Promise<void>;
13
- close(): Promise<void>;
14
- }
@@ -1,265 +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_path_1 = __importDefault(require("node:path"));
46
- const node_stream_1 = __importDefault(require("node:stream"));
47
- /* external dependencies */
48
- const Transformers = __importStar(require("@huggingface/transformers"));
49
- /* internal dependencies */
50
- const speechflow_node_1 = __importDefault(require("./speechflow-node"));
51
- /* SpeechFlow node for Transformers text-to-text translation */
52
- class SpeechFlowNodeTransformers extends speechflow_node_1.default {
53
- /* declare official node name */
54
- static name = "transformers";
55
- /* internal state */
56
- translator = null;
57
- generator = null;
58
- /* internal LLM setup */
59
- setup = {
60
- /* SmolLM3: English (EN) to German (DE) translation */
61
- "SmolLM3:en-de": {
62
- systemPrompt: "/no_think\n" +
63
- "You are a translator.\n" +
64
- "Output only the requested text.\n" +
65
- "Do not use markdown.\n" +
66
- "Do not chat.\n" +
67
- "Do not show any explanations.\n" +
68
- "Do not show any introduction.\n" +
69
- "Do not show any preamble.\n" +
70
- "Do not show any prolog.\n" +
71
- "Do not show any epilog.\n" +
72
- "Get to the point.\n" +
73
- "Preserve the original meaning, tone, and nuance.\n" +
74
- "Directly translate text from English (EN) to fluent and natural German (DE) language.\n",
75
- chat: [
76
- { role: "user", content: "I love my wife." },
77
- { role: "assistant", content: "Ich liebe meine Frau." },
78
- { role: "user", content: "The weather is wonderful." },
79
- { role: "assistant", content: "Das Wetter ist wunderschön." },
80
- { role: "user", content: "The live is awesome." },
81
- { role: "assistant", content: "Das Leben ist einfach großartig." }
82
- ]
83
- },
84
- /* SmolLM3: German (DE) to English (EN) translation */
85
- "SmolLM3:de-en": {
86
- systemPrompt: "/no_think\n" +
87
- "You are a translator.\n" +
88
- "Output only the requested text.\n" +
89
- "Do not use markdown.\n" +
90
- "Do not chat.\n" +
91
- "Do not show any explanations.\n" +
92
- "Do not show any introduction.\n" +
93
- "Do not show any preamble. \n" +
94
- "Do not show any prolog. \n" +
95
- "Do not show any epilog. \n" +
96
- "Get to the point.\n" +
97
- "Preserve the original meaning, tone, and nuance.\n" +
98
- "Directly translate text from German (DE) to fluent and natural English (EN) language.\n",
99
- chat: [
100
- { role: "user", content: "Ich liebe meine Frau." },
101
- { role: "assistant", content: "I love my wife." },
102
- { role: "user", content: "Das Wetter ist wunderschön." },
103
- { role: "assistant", content: "The weather is wonderful." },
104
- { role: "user", content: "Das Leben ist einfach großartig." },
105
- { role: "assistant", content: "The live is awesome." }
106
- ]
107
- }
108
- };
109
- /* construct node */
110
- constructor(id, cfg, opts, args) {
111
- super(id, cfg, opts, args);
112
- /* declare node configuration parameters */
113
- this.configure({
114
- src: { type: "string", pos: 0, val: "de", match: /^(?:de|en)$/ },
115
- dst: { type: "string", pos: 1, val: "en", match: /^(?:de|en)$/ },
116
- model: { type: "string", val: "OPUS", match: /^(?:OPUS|SmolLM3)$/ }
117
- });
118
- /* sanity check parameters */
119
- if (this.params.src === this.params.dst)
120
- throw new Error("source and destination languages cannot be the same");
121
- /* declare node input/output format */
122
- this.input = "text";
123
- this.output = "text";
124
- }
125
- /* open node */
126
- async open() {
127
- let model = "";
128
- /* track download progress when instantiating Transformers engine and model */
129
- const progressState = new Map();
130
- const progressCallback = (progress) => {
131
- let artifact = model;
132
- if (typeof progress.file === "string")
133
- artifact += `:${progress.file}`;
134
- let percent = 0;
135
- if (typeof progress.loaded === "number" && typeof progress.total === "number")
136
- percent = progress.loaded / progress.total * 100;
137
- else if (typeof progress.progress === "number")
138
- percent = progress.progress;
139
- if (percent > 0)
140
- progressState.set(artifact, percent);
141
- };
142
- const interval = setInterval(() => {
143
- for (const [artifact, percent] of progressState) {
144
- this.log("info", `downloaded ${percent.toFixed(2)}% of artifact "${artifact}"`);
145
- if (percent >= 1.0)
146
- progressState.delete(artifact);
147
- }
148
- }, 1000);
149
- /* instantiate Transformers engine and model */
150
- if (this.params.model === "OPUS") {
151
- model = `onnx-community/opus-mt-${this.params.src}-${this.params.dst}`;
152
- const pipeline = Transformers.pipeline("translation", model, {
153
- cache_dir: node_path_1.default.join(this.config.cacheDir, "transformers"),
154
- dtype: "q4",
155
- device: "auto",
156
- progress_callback: progressCallback
157
- });
158
- this.translator = await pipeline;
159
- clearInterval(interval);
160
- if (this.translator === null)
161
- throw new Error("failed to instantiate translator pipeline");
162
- }
163
- else if (this.params.model === "SmolLM3") {
164
- model = "HuggingFaceTB/SmolLM3-3B-ONNX";
165
- const pipeline = Transformers.pipeline("text-generation", model, {
166
- cache_dir: node_path_1.default.join(this.config.cacheDir, "transformers"),
167
- dtype: "q4",
168
- device: "auto",
169
- progress_callback: progressCallback
170
- });
171
- this.generator = await pipeline;
172
- clearInterval(interval);
173
- if (this.generator === null)
174
- throw new Error("failed to instantiate generator pipeline");
175
- }
176
- else
177
- throw new Error("invalid model");
178
- /* provide text-to-text translation */
179
- const translate = async (text) => {
180
- if (this.params.model === "OPUS") {
181
- const result = await this.translator(text);
182
- return Array.isArray(result) ?
183
- result[0].translation_text :
184
- result.translation_text;
185
- }
186
- else if (this.params.model === "SmolLM3") {
187
- const key = `SmolLM3:${this.params.src}-${this.params.dst}`;
188
- const cfg = this.setup[key];
189
- const messages = [
190
- { role: "system", content: cfg.systemPrompt },
191
- ...cfg.chat,
192
- { role: "user", content: text }
193
- ];
194
- const result = await this.generator(messages, {
195
- max_new_tokens: 100,
196
- temperature: 0.6,
197
- top_p: 0.95,
198
- streamer: new Transformers.TextStreamer(this.generator.tokenizer, {
199
- skip_prompt: true,
200
- skip_special_tokens: true
201
- })
202
- });
203
- const generatedText = Array.isArray(result) ?
204
- result[0].generated_text :
205
- result.generated_text;
206
- const response = typeof generatedText === "string" ?
207
- generatedText :
208
- generatedText.at(-1).content;
209
- return response;
210
- }
211
- else
212
- throw new Error("invalid model");
213
- };
214
- /* establish a duplex stream and connect it to Transformers */
215
- this.stream = new node_stream_1.default.Transform({
216
- readableObjectMode: true,
217
- writableObjectMode: true,
218
- decodeStrings: false,
219
- highWaterMark: 1,
220
- transform(chunk, encoding, callback) {
221
- if (Buffer.isBuffer(chunk.payload))
222
- callback(new Error("invalid chunk payload type"));
223
- else {
224
- if (chunk.payload === "") {
225
- this.push(chunk);
226
- callback();
227
- }
228
- else {
229
- translate(chunk.payload).then((payload) => {
230
- chunk = chunk.clone();
231
- chunk.payload = payload;
232
- this.push(chunk);
233
- callback();
234
- }).catch((err) => {
235
- callback(err);
236
- });
237
- }
238
- }
239
- },
240
- final(callback) {
241
- this.push(null);
242
- callback();
243
- }
244
- });
245
- }
246
- /* close node */
247
- async close() {
248
- /* close stream */
249
- if (this.stream !== null) {
250
- this.stream.destroy();
251
- this.stream = null;
252
- }
253
- /* shutdown Transformers */
254
- if (this.translator !== null) {
255
- this.translator.dispose();
256
- this.translator = null;
257
- }
258
- if (this.generator !== null) {
259
- this.generator.dispose();
260
- this.generator = null;
261
- }
262
- }
263
- }
264
- exports.default = SpeechFlowNodeTransformers;
265
- //# sourceMappingURL=speechflow-node-t2t-transformers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"speechflow-node-t2t-transformers.js","sourceRoot":"","sources":["../src/speechflow-node-t2t-transformers.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import SpeechFlowNode from "./speechflow-node";
2
- export default class SpeechFlowNodeFilter extends SpeechFlowNode {
3
- static name: string;
4
- constructor(id: string, cfg: {
5
- [id: string]: any;
6
- }, opts: {
7
- [id: string]: any;
8
- }, args: any[]);
9
- open(): Promise<void>;
10
- close(): Promise<void>;
11
- }