speechflow 2.2.0 → 2.3.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/{etc/claude.md → AGENTS.md} +8 -3
- package/CHANGELOG.md +78 -1
- package/README.md +28 -4
- package/etc/speechflow.yaml +3 -1
- package/etc/stx.conf +1 -1
- package/package.json +6 -6
- package/speechflow-cli/dst/speechflow-main-api.d.ts +2 -1
- package/speechflow-cli/dst/speechflow-main-api.js +57 -16
- package/speechflow-cli/dst/speechflow-main-api.js.map +1 -1
- package/speechflow-cli/dst/speechflow-main-cli.js +2 -2
- package/speechflow-cli/dst/speechflow-main-config.js +1 -1
- package/speechflow-cli/dst/speechflow-main-graph.js +55 -21
- package/speechflow-cli/dst/speechflow-main-graph.js.map +1 -1
- package/speechflow-cli/dst/speechflow-main-nodes.js +1 -1
- package/speechflow-cli/dst/speechflow-main-status.js +6 -3
- package/speechflow-cli/dst/speechflow-main-status.js.map +1 -1
- package/speechflow-cli/dst/speechflow-main.js +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-compressor-wt.js +7 -10
- package/speechflow-cli/dst/speechflow-node-a2a-compressor-wt.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-compressor.js +8 -6
- package/speechflow-cli/dst/speechflow-node-a2a-compressor.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-expander-wt.js +9 -5
- package/speechflow-cli/dst/speechflow-node-a2a-expander-wt.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-expander.js +6 -5
- package/speechflow-cli/dst/speechflow-node-a2a-expander.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js +2 -2
- package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-filler.js +2 -4
- package/speechflow-cli/dst/speechflow-node-a2a-filler.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-gain.js +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-gender.js +20 -12
- package/speechflow-cli/dst/speechflow-node-a2a-gender.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-gtcrn-wt.js +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-gtcrn.js +33 -11
- package/speechflow-cli/dst/speechflow-node-a2a-gtcrn.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-meter.js +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-mute.js +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-pitch.js +4 -3
- package/speechflow-cli/dst/speechflow-node-a2a-pitch.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-rnnoise-wt.js +2 -2
- package/speechflow-cli/dst/speechflow-node-a2a-rnnoise-wt.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.js +19 -11
- package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-speex.js +8 -8
- package/speechflow-cli/dst/speechflow-node-a2a-speex.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-vad.js +33 -29
- package/speechflow-cli/dst/speechflow-node-a2a-vad.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2a-wav.js +6 -5
- package/speechflow-cli/dst/speechflow-node-a2a-wav.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2t-amazon.d.ts +2 -1
- package/speechflow-cli/dst/speechflow-node-a2t-amazon.js +34 -20
- package/speechflow-cli/dst/speechflow-node-a2t-amazon.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js +13 -5
- package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2t-google.js +3 -2
- package/speechflow-cli/dst/speechflow-node-a2t-google.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-a2t-openai.js +33 -27
- package/speechflow-cli/dst/speechflow-node-a2t-openai.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2a-amazon.js +16 -5
- package/speechflow-cli/dst/speechflow-node-t2a-amazon.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2a-elevenlabs.js +17 -5
- package/speechflow-cli/dst/speechflow-node-t2a-elevenlabs.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2a-google.js +17 -5
- package/speechflow-cli/dst/speechflow-node-t2a-google.js.map +1 -1
- package/speechflow-cli/dst/{speechflow-node-t2t-simulator.d.ts → speechflow-node-t2a-kitten.d.ts} +5 -1
- package/speechflow-cli/dst/speechflow-node-t2a-kitten.js +194 -0
- package/speechflow-cli/dst/speechflow-node-t2a-kitten.js.map +1 -0
- package/speechflow-cli/dst/speechflow-node-t2a-kokoro.js +21 -9
- package/speechflow-cli/dst/speechflow-node-t2a-kokoro.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2a-openai.js +17 -5
- package/speechflow-cli/dst/speechflow-node-t2a-openai.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2a-supertonic.js +21 -7
- package/speechflow-cli/dst/speechflow-node-t2a-supertonic.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-amazon.js +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-deepl.js +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-format.js +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-google.js +4 -2
- package/speechflow-cli/dst/speechflow-node-t2t-google.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-modify.js +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-opus.js +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-profanity.js +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-punctuation.js +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-sentence.js +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-spellcheck.js +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-subtitle.js +34 -14
- package/speechflow-cli/dst/speechflow-node-t2t-subtitle.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-summary.js +3 -3
- package/speechflow-cli/dst/speechflow-node-t2t-summary.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-translate.js +1 -1
- package/speechflow-cli/dst/speechflow-node-x2x-filter.js +3 -2
- package/speechflow-cli/dst/speechflow-node-x2x-filter.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-x2x-trace.js +1 -1
- package/speechflow-cli/dst/speechflow-node-xio-device.js +18 -7
- package/speechflow-cli/dst/speechflow-node-xio-device.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-xio-exec.js +23 -11
- package/speechflow-cli/dst/speechflow-node-xio-exec.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-xio-file.js +13 -7
- package/speechflow-cli/dst/speechflow-node-xio-file.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-xio-mqtt.js +25 -12
- package/speechflow-cli/dst/speechflow-node-xio-mqtt.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-xio-vban.js +32 -20
- package/speechflow-cli/dst/speechflow-node-xio-vban.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-xio-webrtc.js +78 -62
- package/speechflow-cli/dst/speechflow-node-xio-webrtc.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node-xio-websocket.d.ts +1 -0
- package/speechflow-cli/dst/speechflow-node-xio-websocket.js +63 -18
- package/speechflow-cli/dst/speechflow-node-xio-websocket.js.map +1 -1
- package/speechflow-cli/dst/speechflow-node.js +5 -7
- package/speechflow-cli/dst/speechflow-node.js.map +1 -1
- package/speechflow-cli/dst/speechflow-util-audio-wt.js +31 -5
- package/speechflow-cli/dst/speechflow-util-audio-wt.js.map +1 -1
- package/speechflow-cli/dst/speechflow-util-audio.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-util-audio.js +25 -14
- package/speechflow-cli/dst/speechflow-util-audio.js.map +1 -1
- package/speechflow-cli/dst/speechflow-util-error.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-util-error.js +2 -2
- package/speechflow-cli/dst/speechflow-util-error.js.map +1 -1
- package/speechflow-cli/dst/speechflow-util-llm.js +1 -1
- package/speechflow-cli/dst/speechflow-util-misc.d.ts +3 -2
- package/speechflow-cli/dst/speechflow-util-misc.js +63 -6
- package/speechflow-cli/dst/speechflow-util-misc.js.map +1 -1
- package/speechflow-cli/dst/speechflow-util-queue.d.ts +5 -17
- package/speechflow-cli/dst/speechflow-util-queue.js +57 -78
- package/speechflow-cli/dst/speechflow-util-queue.js.map +1 -1
- package/speechflow-cli/dst/speechflow-util-stream.d.ts +1 -1
- package/speechflow-cli/dst/speechflow-util-stream.js +35 -8
- package/speechflow-cli/dst/speechflow-util-stream.js.map +1 -1
- package/speechflow-cli/dst/speechflow-util.js +1 -1
- package/speechflow-cli/dst/speechflow.d.ts +1 -1
- package/speechflow-cli/dst/speechflow.js +1 -1
- package/speechflow-cli/etc/eslint.mjs +1 -1
- package/speechflow-cli/etc/oxlint.jsonc +2 -1
- package/speechflow-cli/etc/stx.conf +8 -2
- package/speechflow-cli/package.d/@ericedouard+vad-node-realtime+0.2.0.patch +2 -1
- package/speechflow-cli/package.d/@typescript-eslint+typescript-estree+8.57.2.patch +12 -0
- package/speechflow-cli/package.d/kitten-tts-js+0.1.2.patch +24 -0
- package/speechflow-cli/package.d/speex-resampler+3.0.1.patch +56 -0
- package/speechflow-cli/package.json +40 -30
- package/speechflow-cli/src/lib.d.ts +19 -1
- package/speechflow-cli/src/speechflow-main-api.ts +64 -19
- package/speechflow-cli/src/speechflow-main-cli.ts +2 -2
- package/speechflow-cli/src/speechflow-main-config.ts +1 -1
- package/speechflow-cli/src/speechflow-main-graph.ts +56 -22
- package/speechflow-cli/src/speechflow-main-nodes.ts +1 -1
- package/speechflow-cli/src/speechflow-main-status.ts +6 -3
- package/speechflow-cli/src/speechflow-main.ts +1 -1
- package/speechflow-cli/src/speechflow-node-a2a-compressor-wt.ts +7 -11
- package/speechflow-cli/src/speechflow-node-a2a-compressor.ts +8 -6
- package/speechflow-cli/src/speechflow-node-a2a-expander-wt.ts +10 -5
- package/speechflow-cli/src/speechflow-node-a2a-expander.ts +6 -5
- package/speechflow-cli/src/speechflow-node-a2a-ffmpeg.ts +3 -2
- package/speechflow-cli/src/speechflow-node-a2a-filler.ts +2 -4
- package/speechflow-cli/src/speechflow-node-a2a-gain.ts +1 -1
- package/speechflow-cli/src/speechflow-node-a2a-gender.ts +20 -13
- package/speechflow-cli/src/speechflow-node-a2a-gtcrn-wt.ts +1 -1
- package/speechflow-cli/src/speechflow-node-a2a-gtcrn.ts +43 -16
- package/speechflow-cli/src/speechflow-node-a2a-meter.ts +1 -1
- package/speechflow-cli/src/speechflow-node-a2a-mute.ts +1 -1
- package/speechflow-cli/src/speechflow-node-a2a-pitch.ts +4 -3
- package/speechflow-cli/src/speechflow-node-a2a-rnnoise-wt.ts +2 -2
- package/speechflow-cli/src/speechflow-node-a2a-rnnoise.ts +24 -12
- package/speechflow-cli/src/speechflow-node-a2a-speex.ts +10 -9
- package/speechflow-cli/src/speechflow-node-a2a-vad.ts +38 -31
- package/speechflow-cli/src/speechflow-node-a2a-wav.ts +6 -5
- package/speechflow-cli/src/speechflow-node-a2t-amazon.ts +35 -22
- package/speechflow-cli/src/speechflow-node-a2t-deepgram.ts +17 -6
- package/speechflow-cli/src/speechflow-node-a2t-google.ts +5 -4
- package/speechflow-cli/src/speechflow-node-a2t-openai.ts +39 -31
- package/speechflow-cli/src/speechflow-node-t2a-amazon.ts +16 -5
- package/speechflow-cli/src/speechflow-node-t2a-elevenlabs.ts +17 -5
- package/speechflow-cli/src/speechflow-node-t2a-google.ts +17 -5
- package/speechflow-cli/src/speechflow-node-t2a-kitten.ts +178 -0
- package/speechflow-cli/src/speechflow-node-t2a-kokoro.ts +21 -9
- package/speechflow-cli/src/speechflow-node-t2a-openai.ts +17 -5
- package/speechflow-cli/src/speechflow-node-t2a-supertonic.ts +21 -7
- package/speechflow-cli/src/speechflow-node-t2t-amazon.ts +1 -1
- package/speechflow-cli/src/speechflow-node-t2t-deepl.ts +1 -1
- package/speechflow-cli/src/speechflow-node-t2t-format.ts +1 -1
- package/speechflow-cli/src/speechflow-node-t2t-google.ts +4 -2
- package/speechflow-cli/src/speechflow-node-t2t-modify.ts +1 -1
- package/speechflow-cli/src/speechflow-node-t2t-opus.ts +1 -1
- package/speechflow-cli/src/speechflow-node-t2t-profanity.ts +1 -1
- package/speechflow-cli/src/speechflow-node-t2t-punctuation.ts +1 -1
- package/speechflow-cli/src/speechflow-node-t2t-sentence.ts +1 -1
- package/speechflow-cli/src/speechflow-node-t2t-spellcheck.ts +1 -1
- package/speechflow-cli/src/speechflow-node-t2t-subtitle.ts +39 -15
- package/speechflow-cli/src/speechflow-node-t2t-summary.ts +3 -3
- package/speechflow-cli/src/speechflow-node-t2t-translate.ts +1 -1
- package/speechflow-cli/src/speechflow-node-x2x-filter.ts +4 -3
- package/speechflow-cli/src/speechflow-node-x2x-trace.ts +1 -1
- package/speechflow-cli/src/speechflow-node-xio-device.ts +21 -7
- package/speechflow-cli/src/speechflow-node-xio-exec.ts +25 -11
- package/speechflow-cli/src/speechflow-node-xio-file.ts +15 -7
- package/speechflow-cli/src/speechflow-node-xio-mqtt.ts +28 -15
- package/speechflow-cli/src/speechflow-node-xio-vban.ts +35 -22
- package/speechflow-cli/src/speechflow-node-xio-webrtc.ts +85 -69
- package/speechflow-cli/src/speechflow-node-xio-websocket.ts +67 -20
- package/speechflow-cli/src/speechflow-node.ts +7 -8
- package/speechflow-cli/src/speechflow-util-audio-wt.ts +46 -7
- package/speechflow-cli/src/speechflow-util-audio.ts +27 -15
- package/speechflow-cli/src/speechflow-util-error.ts +3 -3
- package/speechflow-cli/src/speechflow-util-llm.ts +1 -1
- package/speechflow-cli/src/speechflow-util-misc.ts +63 -6
- package/speechflow-cli/src/speechflow-util-queue.ts +60 -81
- package/speechflow-cli/src/speechflow-util-stream.ts +40 -8
- package/speechflow-cli/src/speechflow-util.ts +1 -1
- package/speechflow-cli/src/speechflow.ts +1 -1
- package/speechflow-ui-db/dst/index.css +1 -1
- package/speechflow-ui-db/dst/index.html +1 -1
- package/speechflow-ui-db/dst/index.js +15 -15
- package/speechflow-ui-db/etc/eslint.mjs +1 -1
- package/speechflow-ui-db/etc/oxlint.jsonc +1 -1
- package/speechflow-ui-db/etc/stx.conf +1 -1
- package/speechflow-ui-db/etc/stylelint.js +1 -1
- package/speechflow-ui-db/etc/stylelint.yaml +1 -1
- package/speechflow-ui-db/etc/vite-client.mts +1 -1
- package/speechflow-ui-db/package.d/@typescript-eslint+typescript-estree+8.57.2.patch +12 -0
- package/speechflow-ui-db/package.json +22 -16
- package/speechflow-ui-db/src/app.styl +1 -1
- package/speechflow-ui-db/src/app.vue +4 -4
- package/speechflow-ui-db/src/index.html +1 -1
- package/speechflow-ui-db/src/index.ts +1 -1
- package/speechflow-ui-st/dst/index.html +1 -1
- package/speechflow-ui-st/dst/index.js +31 -31
- package/speechflow-ui-st/etc/eslint.mjs +1 -1
- package/speechflow-ui-st/etc/oxlint.jsonc +1 -1
- package/speechflow-ui-st/etc/stx.conf +1 -1
- package/speechflow-ui-st/etc/stylelint.js +1 -1
- package/speechflow-ui-st/etc/stylelint.yaml +1 -1
- package/speechflow-ui-st/etc/vite-client.mts +1 -1
- package/speechflow-ui-st/package.d/@typescript-eslint+typescript-estree+8.57.2.patch +12 -0
- package/speechflow-ui-st/package.json +23 -17
- package/speechflow-ui-st/src/app.styl +1 -1
- package/speechflow-ui-st/src/app.vue +9 -8
- package/speechflow-ui-st/src/index.html +1 -1
- package/speechflow-ui-st/src/index.ts +1 -1
- package/speechflow-cli/dst/speechflow-node-t2t-simulator.js +0 -128
- package/speechflow-cli/dst/speechflow-node-t2t-simulator.js.map +0 -1
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
# CLAUDE.md
|
|
2
1
|
|
|
3
|
-
|
|
2
|
+
AGENTS
|
|
3
|
+
======
|
|
4
|
+
|
|
5
|
+
This file provides guidance to AI agents, when working with code in this repository.
|
|
4
6
|
|
|
5
7
|
## Project Overview
|
|
6
8
|
|
|
7
|
-
SpeechFlow is a command-line interface tool for establishing directed
|
|
9
|
+
SpeechFlow is a command-line interface tool for establishing directed
|
|
10
|
+
data flow graphs of audio and text processing nodes. It enables flexible
|
|
11
|
+
speech processing tasks including capturing audio, text-to-speech,
|
|
12
|
+
speech-to-text, and speech-to-speech translation.
|
|
8
13
|
|
|
9
14
|
## Architecture
|
|
10
15
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,7 +1,84 @@
|
|
|
1
1
|
|
|
2
|
-
|
|
2
|
+
hangeLog
|
|
3
3
|
=========
|
|
4
4
|
|
|
5
|
+
2.3.0 (2026-03-27)
|
|
6
|
+
------------------
|
|
7
|
+
|
|
8
|
+
- FEATURE: add a new "t2a-kitten" node which uses Kitten-TTS for text-to-speech
|
|
9
|
+
- REFACTOR: merge SingleQueue into AsyncQueue and use AsyncQueue in all nodes
|
|
10
|
+
- BUGFIX: avoid calling the transform callback twice in "t2a" nodes
|
|
11
|
+
- BUGFIX: avoid applying makeup gain twice in "a2a-compressor" node
|
|
12
|
+
- BUGFIX: fix hard-knee arithmetic in "a2a-expander" node
|
|
13
|
+
- BUGFIX: fix resource handling by tracking pending promises in "a2a" nodes
|
|
14
|
+
- BUGFIX: fix race condition between chunkQueue nulling and stream destruction in MQTT and VBAN nodes
|
|
15
|
+
- BUGFIX: fix start timestamp calculation in "a2t-google" node
|
|
16
|
+
- BUGFIX: fix error message in case a positional parameter does not match
|
|
17
|
+
- BUGFIX: fix shutdown procedure by avoiding double node deactivation
|
|
18
|
+
- BUGFIX: fix I16/F32 conversions in WebAudio and VBAN code
|
|
19
|
+
- BUGFIX: fix envelope double-writes in Compressor/Expander worklets
|
|
20
|
+
- BUGFIX: fix "a2t-openai" node handler by replacing a 50ms sleep with a close-event wait
|
|
21
|
+
- BUGFIX: fix "a2t-openai" node by improving close procedure to not loose results
|
|
22
|
+
- BUGFIX: fix "t2a-openai" node by allowing overlapping speech items to be received
|
|
23
|
+
- BUGFIX: fix "a2t-deepgram" where "open" promise had no error rejection handler
|
|
24
|
+
- BUGFIX: fix "t2a-kokoro" node for a timer leak on model load failure
|
|
25
|
+
- BUGFIX: fix "t2a-supertonic" node for automatically adapting to changing sampling rates
|
|
26
|
+
- BUGFIX: fix "t2t-subtitle" buffer handling for "import" mode
|
|
27
|
+
- BUGFIX: fix "t2t-subtitle" node by parsing VTT lines more correctly
|
|
28
|
+
- BUGFIX: fix "t2t-subtitle" node by checking the WebSocket ready state before sending
|
|
29
|
+
- BUGFIX: fix "t2t-subtitle" node by allowing large hours in parsing SRT format
|
|
30
|
+
- BUGFIX: fix "x2x-filter" node by not stumbling over undefined values
|
|
31
|
+
- BUGFIX: fix "x2x-filter" node by matching integer and float numbers more precisely
|
|
32
|
+
- BUGFIX: fix "xio-websocket" node by closing all client connections on destruction
|
|
33
|
+
- BUGFIX: fix "xio-websocket" node by correctly shutting down internal queue
|
|
34
|
+
- BUGFIX: fix "xio-webrtc" node by catching errors on listening
|
|
35
|
+
- BUGFIX: fix "xio-webrtc" node by catching errors on processing
|
|
36
|
+
- BUGFIX: fix "xio-device" node by shutdown the stream on destruction
|
|
37
|
+
- BUGFIX: fix "a2t-deepgram" chunk kind classification logic
|
|
38
|
+
- BUGFIX: fix StreamWrapper utility class to correctly flush data
|
|
39
|
+
- BUGFIX: fix "a2a-gtcrn" node by short-circuiting procedures in case of shutdown
|
|
40
|
+
- BUGFIX: fix "a2a-expander" node by guarding against IEEE 754 edge case
|
|
41
|
+
- BUGFIX: fix "a2t-amazon" race condition in ensureAudioStreamActive
|
|
42
|
+
- BUGFIX: fix "t2t-summary" node for accumulated results without sentence-ending punctuation
|
|
43
|
+
- BUGFIX: fix "t2t-summary" node for more correct counting of sentences
|
|
44
|
+
- BUGFIX: fix "t2t-google" node by awaiting the close method on shutdown
|
|
45
|
+
- BUGFIX: fix "a2a-filler" node by not terminating stream if a single chunk is invalid
|
|
46
|
+
- BUGFIX: fix "xio-vban" node by awaiting all VBANServer operations
|
|
47
|
+
- BUGFIX: fix "xio-file" node avoid double fs.close() on file descriptor in seekable write mode
|
|
48
|
+
- BUGFIX: fix "xio-file" node by avoiding unhandled promise rejection
|
|
49
|
+
- BUGFIX: fix "a2a-vad" node by avoiding the busy-polling event loop in unplugged mode for consecutive non-speech chunks
|
|
50
|
+
- BUGFIX: fix "a2a-rnnoise" by correctly clamping Int16 values
|
|
51
|
+
- BUGFIX: fix "a2a-gender" by not wasting buffers and fully filling them
|
|
52
|
+
- BUGFIX: fix "a2a-gender" by correctly calculating the duration of audio samples
|
|
53
|
+
- BUGFIX: avoid unbounded active captures memory growth in Audio Worklet
|
|
54
|
+
- BUGFIX: do not throw an exception from Stream::read() operations
|
|
55
|
+
- BUGFIX: signal handlers in main graph code discarded returned Promise and this way caused unhandled rejections
|
|
56
|
+
- BUGFIX: in node graph code avoid mutating a Set during iteration
|
|
57
|
+
- BUGFIX: in node graph code correctly deactivate nodes on shutdown
|
|
58
|
+
- BUGFIX: avoid dangling timers on shutdown by unreferencing sleep/timeout() timers
|
|
59
|
+
- BUGFIX: for SingleQueue.read() avoid conflating "queue empty" with "queue contains undefined"
|
|
60
|
+
- BUGFIX: correctly deep-clone the meta Map of nodes
|
|
61
|
+
- BUGFIX: in many audio transform nodes, clone chunks before mutating the payload to support chunk fan-out to multiple nodes
|
|
62
|
+
- BUGFIX: PromiseSet.awaitAll() can miss concurrently-added promises
|
|
63
|
+
- BUGFIX: In "a2a-speex" and "a2t-deepgram" ensure that Buffer extractions use correct slicing
|
|
64
|
+
- BUGFIX: fix Queue's walkBackwardUntil and searchBackward methods by correctly handling the element at position 0
|
|
65
|
+
- BUGFIX: remove event listeners from graph nodes on stop
|
|
66
|
+
- BUGFIX: honor little endian information in data conversions
|
|
67
|
+
- BUGFIX: in WebAudio code use a ready message instead of a time delay to ensure Worker is ready
|
|
68
|
+
- UPDATE: upgrade NPM dependencies and patches
|
|
69
|
+
- CLEANUP: remove second/dead "open" WebSocket handler in "t2a-openai" node
|
|
70
|
+
- CLEANUP: add missing type definitions for Kitten-TTS
|
|
71
|
+
- CLEANUP: update year in all copyright messages
|
|
72
|
+
- CLEANUP: fix version number and rename file
|
|
73
|
+
|
|
74
|
+
2.2.1 (2026-02-23)
|
|
75
|
+
------------------
|
|
76
|
+
|
|
77
|
+
- BUGFIX: fix type of "text" field
|
|
78
|
+
- BUGFIX: fix indexing for Vue loops
|
|
79
|
+
- BUGFIX: fix CSS values in Dashboard UI
|
|
80
|
+
- CLEANUP: remove unnecessary comma operator and index, and downgrade to ESLint 9
|
|
81
|
+
|
|
5
82
|
2.2.0 (2026-02-23)
|
|
6
83
|
------------------
|
|
7
84
|
|
package/README.md
CHANGED
|
@@ -58,8 +58,9 @@ speech-to-speech).
|
|
|
58
58
|
[Amazon Polly](https://aws.amazon.com/polly/), or
|
|
59
59
|
[Google Cloud Text-to-Speech](https://cloud.google.com/text-to-speech).
|
|
60
60
|
- local text-to-speech conversion with
|
|
61
|
-
[Kokoro](https://github.com/nazdridoy/kokoro-tts)
|
|
62
|
-
[Supertonic](https://huggingface.co/Supertone/supertonic)
|
|
61
|
+
[Kokoro](https://github.com/nazdridoy/kokoro-tts),
|
|
62
|
+
[Supertonic](https://huggingface.co/Supertone/supertonic), or
|
|
63
|
+
[Kitten-TTS](https://huggingface.co/KittenML/kitten-tts-nano-0.8).
|
|
63
64
|
- local [FFmpeg](https://ffmpeg.org/)-based speech-to-speech conversion,
|
|
64
65
|
- local WAV speech-to-speech decoding/encoding,
|
|
65
66
|
- local text-to-text formatting, regex-based modification,
|
|
@@ -387,7 +388,8 @@ First a short overview of the available processing nodes:
|
|
|
387
388
|
**t2a-elevenlabs**,
|
|
388
389
|
**t2a-google**,
|
|
389
390
|
**t2a-kokoro**,
|
|
390
|
-
**t2a-supertonic
|
|
391
|
+
**t2a-supertonic**,
|
|
392
|
+
**t2a-kitten**.
|
|
391
393
|
- Any-to-Any nodes:
|
|
392
394
|
**x2x-filter**,
|
|
393
395
|
**x2x-trace**.
|
|
@@ -1353,6 +1355,28 @@ The following nodes convert text chunks to audio chunks.
|
|
|
1353
1355
|
| **speed** | 1 | 1.40 | `0.5 <= n <= 2.0` |
|
|
1354
1356
|
| **steps** | 2 | 20 | `1 <= n <= 20` |
|
|
1355
1357
|
|
|
1358
|
+
- Node: **t2a-kitten**<br/>
|
|
1359
|
+
Purpose: **Kitten-TTS Text-to-Speech conversion**<br/>
|
|
1360
|
+
Example: `t2a-kitten(voice: "Bruno", speed: 1.25)`<br/>
|
|
1361
|
+
|
|
1362
|
+
> This node uses Kitten-TTS to perform Text-to-Speech (T2S) conversion,
|
|
1363
|
+
> i.e., it converts the input text stream into an output audio stream.
|
|
1364
|
+
> It is intended to generate speech. The ONNX models are automatically
|
|
1365
|
+
> downloaded from HuggingFace on first use. The node internally operates
|
|
1366
|
+
> at 24KHz sample rate and automatically resamples to SpeechFlow's
|
|
1367
|
+
> internal 48KHz for output. It supports English language only.
|
|
1368
|
+
|
|
1369
|
+
| Port | Payload |
|
|
1370
|
+
| ------- | ----------- |
|
|
1371
|
+
| input | text |
|
|
1372
|
+
| output | audio |
|
|
1373
|
+
|
|
1374
|
+
| Parameter | Position | Default | Requirement |
|
|
1375
|
+
| ------------ | --------- | ----------------------------- | ---------------------- |
|
|
1376
|
+
| **model** | 0 | "KittenML/kitten-tts-nano-0.8"| *none* |
|
|
1377
|
+
| **voice** | 1 | "Bruno" | `/^(?:Bella\|Jasper\|Luna\|Bruno\|Rosie\|Hugo\|Kiki\|Leo)$/` |
|
|
1378
|
+
| **speed** | 2 | 1.25 | `0.5 <= n <= 2.0` |
|
|
1379
|
+
|
|
1356
1380
|
### Any-to-Any Nodes
|
|
1357
1381
|
|
|
1358
1382
|
The following nodes process any type of chunk, i.e., both audio and text chunks.
|
|
@@ -1449,6 +1473,6 @@ time used in production in the msg Filmstudio.
|
|
|
1449
1473
|
Copyright & License
|
|
1450
1474
|
-------------------
|
|
1451
1475
|
|
|
1452
|
-
Copyright © 2024-
|
|
1476
|
+
Copyright © 2024-2026 [Dr. Ralf S. Engelschall](mailto:rse@engelschall.com)<br/>
|
|
1453
1477
|
Licensed under [GPL 3.0](https://spdx.org/licenses/GPL-3.0-only)
|
|
1454
1478
|
|
package/etc/speechflow.yaml
CHANGED
|
@@ -88,7 +88,8 @@ studio-transcription: |
|
|
|
88
88
|
# Real-time studio translation from German to English,
|
|
89
89
|
# including the capturing of all involved inputs and outputs:
|
|
90
90
|
studio-translation: |
|
|
91
|
-
xio-device(device: env.SPEECHFLOW_DEVICE_MIC, mode: "r", chunk: 200) |
|
|
91
|
+
xio-device(device: env.SPEECHFLOW_DEVICE_MIC, mode: "r", chunk: 200) |
|
|
92
|
+
a2a-mute() | {
|
|
92
93
|
a2a-meter(interval: 50, dashboard: "audio-de", mode: "sink"),
|
|
93
94
|
a2t-deepgram(language: "de", model: "nova-3", interim: true, keywords: env.SPEECHFLOW_KEYWORDS) | {
|
|
94
95
|
t2t-profanity(lang: "de") | {
|
|
@@ -121,3 +122,4 @@ studio-translation: |
|
|
|
121
122
|
}
|
|
122
123
|
}
|
|
123
124
|
}
|
|
125
|
+
|
package/etc/stx.conf
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
##
|
|
2
2
|
## SpeechFlow - Speech Processing Flow Graph
|
|
3
|
-
## Copyright (c) 2024-
|
|
3
|
+
## Copyright (c) 2024-2026 Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
4
4
|
## Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
|
|
5
5
|
##
|
|
6
6
|
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "speechflow",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"x-stdver": "2.
|
|
5
|
-
"x-release": "2026-
|
|
3
|
+
"version": "2.3.0",
|
|
4
|
+
"x-stdver": "2.3.0-GA",
|
|
5
|
+
"x-release": "2026-03-27",
|
|
6
6
|
"homepage": "https://github.com/rse/speechflow",
|
|
7
7
|
"description": "Speech Processing Flow Graph",
|
|
8
8
|
"keywords": [ "speech", "audio", "flow", "graph" ],
|
|
@@ -20,14 +20,14 @@
|
|
|
20
20
|
"@rse/stx": "1.1.4"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"nodemon": "3.1.
|
|
23
|
+
"nodemon": "3.1.14",
|
|
24
24
|
"watch": "1.0.2",
|
|
25
25
|
"concurrently": "9.2.1",
|
|
26
26
|
"wait-on": "9.0.4",
|
|
27
27
|
"cross-env": "10.1.0",
|
|
28
28
|
"shx": "0.4.0",
|
|
29
|
-
"secretlint": "11.
|
|
30
|
-
"@secretlint/secretlint-rule-preset-recommend": "11.
|
|
29
|
+
"secretlint": "11.4.0",
|
|
30
|
+
"@secretlint/secretlint-rule-preset-recommend": "11.4.0"
|
|
31
31
|
},
|
|
32
32
|
"engines": {
|
|
33
33
|
"npm": ">=10.0.0",
|
|
@@ -6,8 +6,9 @@ export declare class APIServer {
|
|
|
6
6
|
private wsPeers;
|
|
7
7
|
private hapi;
|
|
8
8
|
private sendOSC;
|
|
9
|
+
private graph;
|
|
9
10
|
constructor(cli: CLIio);
|
|
10
11
|
start(args: CLIOptions, graph: NodeGraph): Promise<void>;
|
|
11
12
|
stop(args: CLIOptions): Promise<void>;
|
|
12
|
-
sendErrorToDashboard(time: number, node: string, level: string, message: string):
|
|
13
|
+
sendErrorToDashboard(time: number, node: string, level: string, message: string): void;
|
|
13
14
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
3
|
** SpeechFlow - Speech Processing Flow Graph
|
|
4
|
-
** Copyright (c) 2024-
|
|
4
|
+
** Copyright (c) 2024-2026 Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
5
5
|
** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
|
|
6
6
|
*/
|
|
7
7
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
@@ -62,12 +62,15 @@ class APIServer {
|
|
|
62
62
|
wsPeers = new Map();
|
|
63
63
|
hapi = null;
|
|
64
64
|
sendOSC = null;
|
|
65
|
+
graph = null;
|
|
65
66
|
/* creation */
|
|
66
67
|
constructor(cli) {
|
|
67
68
|
this.cli = cli;
|
|
68
69
|
}
|
|
69
70
|
/* start API server service */
|
|
70
71
|
async start(args, graph) {
|
|
72
|
+
/* remember graph for later cleanup */
|
|
73
|
+
this.graph = graph;
|
|
71
74
|
/* define external request/response structure */
|
|
72
75
|
const requestValidator = arktype.type({
|
|
73
76
|
request: "string",
|
|
@@ -89,10 +92,13 @@ class APIServer {
|
|
|
89
92
|
throw new Error(`external request failed: no such node <${name}>`);
|
|
90
93
|
}
|
|
91
94
|
else {
|
|
95
|
+
const ac = new AbortController();
|
|
92
96
|
await Promise.race([
|
|
93
97
|
foundNode.receiveRequest(argList),
|
|
94
|
-
util.timeout(10 * 1000)
|
|
95
|
-
]).
|
|
98
|
+
util.timeout(10 * 1000, "timeout", ac.signal)
|
|
99
|
+
]).finally(() => {
|
|
100
|
+
ac.abort();
|
|
101
|
+
}).catch((err) => {
|
|
96
102
|
this.cli.log("warning", `external request to node <${name}> failed: ${err.message}`);
|
|
97
103
|
throw err;
|
|
98
104
|
});
|
|
@@ -153,8 +159,13 @@ class APIServer {
|
|
|
153
159
|
path: "/api/dashboard",
|
|
154
160
|
handler: (request, h) => {
|
|
155
161
|
const config = [];
|
|
162
|
+
if (args.d === "")
|
|
163
|
+
return h.response(config).code(200);
|
|
156
164
|
for (const block of args.d.split(",")) {
|
|
157
|
-
const
|
|
165
|
+
const parts = block.split(":");
|
|
166
|
+
if (parts.length !== 3)
|
|
167
|
+
continue;
|
|
168
|
+
const [type, id, name] = parts;
|
|
158
169
|
config.push({ type, id, name });
|
|
159
170
|
}
|
|
160
171
|
return h.response(config).code(200);
|
|
@@ -232,7 +243,10 @@ class APIServer {
|
|
|
232
243
|
for (const [peer, info] of this.wsPeers.entries()) {
|
|
233
244
|
this.cli.log("debug", `HAPI: remote peer ${peer}: sending ${data}`);
|
|
234
245
|
if (info.ws.readyState === ws_1.default.OPEN)
|
|
235
|
-
info.ws.send(data)
|
|
246
|
+
info.ws.send(data, (err) => {
|
|
247
|
+
if (err)
|
|
248
|
+
this.cli.log("warning", `HAPI: peer ${peer}: send failed: ${err.message}`);
|
|
249
|
+
});
|
|
236
250
|
}
|
|
237
251
|
});
|
|
238
252
|
}
|
|
@@ -246,12 +260,17 @@ class APIServer {
|
|
|
246
260
|
const port = Number.parseInt(m[2], 10);
|
|
247
261
|
this.sendOSC = (url, ...argList) => {
|
|
248
262
|
const msg = new osc_js_1.default.Message(url, ...argList);
|
|
249
|
-
|
|
263
|
+
try {
|
|
264
|
+
osc.send(msg, { host, port });
|
|
265
|
+
}
|
|
266
|
+
catch (err) {
|
|
267
|
+
this.cli.log("warning", `OSC/UDP send to ${host}:${port} failed: ${err.message}`);
|
|
268
|
+
}
|
|
250
269
|
};
|
|
251
270
|
}
|
|
252
271
|
/* hook for send-dashboard method of nodes */
|
|
253
272
|
for (const node of graph.getGraphNodes()) {
|
|
254
|
-
node.on("send-dashboard", (info) => {
|
|
273
|
+
node.on("send-dashboard", async (info) => {
|
|
255
274
|
const data = JSON.stringify({
|
|
256
275
|
response: "DASHBOARD",
|
|
257
276
|
node: "",
|
|
@@ -260,16 +279,24 @@ class APIServer {
|
|
|
260
279
|
for (const [peer, peerInfo] of this.wsPeers.entries()) {
|
|
261
280
|
this.cli.log("debug", `HAPI: dashboard peer ${peer}: send ${data}`);
|
|
262
281
|
if (peerInfo.ws.readyState === ws_1.default.OPEN)
|
|
263
|
-
peerInfo.ws.send(data)
|
|
282
|
+
peerInfo.ws.send(data, (err) => {
|
|
283
|
+
if (err)
|
|
284
|
+
this.cli.log("warning", `HAPI: dashboard peer ${peer}: send failed: ${err.message}`);
|
|
285
|
+
});
|
|
264
286
|
}
|
|
287
|
+
const promises = [];
|
|
265
288
|
for (const n of graph.getGraphNodes()) {
|
|
266
|
-
|
|
289
|
+
const ac = new AbortController();
|
|
290
|
+
promises.push(Promise.race([
|
|
267
291
|
n.receiveDashboard(info.type, info.id, info.kind, info.value),
|
|
268
|
-
util.timeout(10 * 1000)
|
|
269
|
-
]).
|
|
292
|
+
util.timeout(10 * 1000, "timeout", ac.signal)
|
|
293
|
+
]).finally(() => {
|
|
294
|
+
ac.abort();
|
|
295
|
+
}).catch((err) => {
|
|
270
296
|
this.cli.log("warning", `sending dashboard info to node <${n.id}> failed: ${err.message}`);
|
|
271
|
-
});
|
|
297
|
+
}));
|
|
272
298
|
}
|
|
299
|
+
await Promise.allSettled(promises);
|
|
273
300
|
if (args.o !== "" && this.sendOSC)
|
|
274
301
|
this.sendOSC("/speechflow/dashboard", info.type, info.id, info.kind, info.value);
|
|
275
302
|
});
|
|
@@ -277,6 +304,14 @@ class APIServer {
|
|
|
277
304
|
}
|
|
278
305
|
/* stop API server service */
|
|
279
306
|
async stop(args) {
|
|
307
|
+
/* remove event listeners from graph nodes */
|
|
308
|
+
if (this.graph) {
|
|
309
|
+
for (const node of this.graph.getGraphNodes()) {
|
|
310
|
+
node.removeAllListeners("send-response");
|
|
311
|
+
node.removeAllListeners("send-dashboard");
|
|
312
|
+
}
|
|
313
|
+
this.graph = null;
|
|
314
|
+
}
|
|
280
315
|
/* shutdown HAPI service */
|
|
281
316
|
if (this.hapi) {
|
|
282
317
|
this.cli.log("info", `HAPI: stopping REST/WebSocket network service: http://${args.a}:${args.p}`);
|
|
@@ -302,17 +337,20 @@ class APIServer {
|
|
|
302
337
|
}
|
|
303
338
|
}));
|
|
304
339
|
}
|
|
340
|
+
const ac = new AbortController();
|
|
305
341
|
await Promise.race([
|
|
306
342
|
Promise.all(closePromises),
|
|
307
|
-
util.timeout(5 * 1000)
|
|
308
|
-
]).
|
|
343
|
+
util.timeout(5 * 1000, "timeout", ac.signal)
|
|
344
|
+
]).finally(() => {
|
|
345
|
+
ac.abort();
|
|
346
|
+
}).catch((error) => {
|
|
309
347
|
this.cli.log("warning", `HAPI: WebSockets failed to close: ${util.ensureError(error).message}`);
|
|
310
348
|
});
|
|
311
349
|
this.wsPeers.clear();
|
|
312
350
|
}
|
|
313
351
|
}
|
|
314
352
|
/* send information to dashboard on error */
|
|
315
|
-
|
|
353
|
+
sendErrorToDashboard(time, node, level, message) {
|
|
316
354
|
const data = JSON.stringify({
|
|
317
355
|
response: "HINT",
|
|
318
356
|
node,
|
|
@@ -321,7 +359,10 @@ class APIServer {
|
|
|
321
359
|
for (const [peer, peerInfo] of this.wsPeers.entries()) {
|
|
322
360
|
this.cli.log("debug", `HAPI: dashboard peer ${peer}: send ${data}`);
|
|
323
361
|
if (peerInfo.ws.readyState === ws_1.default.OPEN)
|
|
324
|
-
peerInfo.ws.send(data)
|
|
362
|
+
peerInfo.ws.send(data, (err) => {
|
|
363
|
+
if (err)
|
|
364
|
+
this.cli.log("warning", `HAPI: dashboard peer ${peer}: send failed: ${err.message}`);
|
|
365
|
+
});
|
|
325
366
|
}
|
|
326
367
|
}
|
|
327
368
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speechflow-main-api.js","sourceRoot":"","sources":["../src/speechflow-main-api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"speechflow-main-api.js","sourceRoot":"","sources":["../src/speechflow-main-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
3
|
** SpeechFlow - Speech Processing Flow Graph
|
|
4
|
-
** Copyright (c) 2024-
|
|
4
|
+
** Copyright (c) 2024-2026 Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
5
5
|
** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
|
|
6
6
|
*/
|
|
7
7
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
@@ -198,7 +198,7 @@ class CLIContext {
|
|
|
198
198
|
if (this.args.V) {
|
|
199
199
|
process.stderr.write(`SpeechFlow ${package_json_1.default["x-stdver"]} (${package_json_1.default["x-release"]}) <${package_json_1.default.homepage}>\n`);
|
|
200
200
|
process.stderr.write(`${package_json_1.default.description}\n`);
|
|
201
|
-
process.stderr.write(`Copyright (c) 2024-
|
|
201
|
+
process.stderr.write(`Copyright (c) 2024-2026 ${package_json_1.default.author.name} <${package_json_1.default.author.url}>\n`);
|
|
202
202
|
process.stderr.write(`Licensed under ${package_json_1.default.license} <http://spdx.org/licenses/${package_json_1.default.license}.html>\n`);
|
|
203
203
|
process.exit(0);
|
|
204
204
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
3
|
** SpeechFlow - Speech Processing Flow Graph
|
|
4
|
-
** Copyright (c) 2024-
|
|
4
|
+
** Copyright (c) 2024-2026 Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
5
5
|
** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
3
|
** SpeechFlow - Speech Processing Flow Graph
|
|
4
|
-
** Copyright (c) 2024-
|
|
4
|
+
** Copyright (c) 2024-2026 Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
5
5
|
** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
|
|
6
6
|
*/
|
|
7
7
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
@@ -182,10 +182,13 @@ class NodeGraph {
|
|
|
182
182
|
/* open node */
|
|
183
183
|
this.cli.log("info", `open node <${node.id}>`);
|
|
184
184
|
node.setTimeZero(this.timeZero);
|
|
185
|
+
const ac = new AbortController();
|
|
185
186
|
await Promise.race([
|
|
186
187
|
node.open(),
|
|
187
|
-
util.timeout(30 * 1000)
|
|
188
|
-
]).
|
|
188
|
+
util.timeout(30 * 1000, "timeout", ac.signal)
|
|
189
|
+
]).finally(() => {
|
|
190
|
+
ac.abort();
|
|
191
|
+
}).catch((err) => {
|
|
189
192
|
this.cli.log("error", `<${node.id}>: failed to open node <${node.id}>: ${err.message}`);
|
|
190
193
|
throw new Error(`failed to open node <${node.id}>: ${err.message}`);
|
|
191
194
|
});
|
|
@@ -220,8 +223,9 @@ class NodeGraph {
|
|
|
220
223
|
this.cli.log("info", `observe stream of node <${node.id}> for finish event`);
|
|
221
224
|
this.activeNodes.add(node);
|
|
222
225
|
const deactivateNode = (node, msg) => {
|
|
223
|
-
if (this.activeNodes.has(node))
|
|
224
|
-
|
|
226
|
+
if (!this.activeNodes.has(node))
|
|
227
|
+
return;
|
|
228
|
+
this.activeNodes.delete(node);
|
|
225
229
|
this.cli.log("info", `${msg} (${this.activeNodes.size} active nodes remaining)`);
|
|
226
230
|
if (this.activeNodes.size === 0) {
|
|
227
231
|
const timeFinished = luxon_1.DateTime.now();
|
|
@@ -229,7 +233,9 @@ class NodeGraph {
|
|
|
229
233
|
this.cli.log("info", "**** everything finished -- stream processing in SpeechFlow graph stops " +
|
|
230
234
|
`(total duration: ${duration?.toFormat("hh:mm:ss.SSS") ?? "unknown"}) ****`);
|
|
231
235
|
this.finishEvents.emit("finished");
|
|
232
|
-
this.shutdown("finished", args, api)
|
|
236
|
+
this.shutdown("finished", args, api).catch((err) => {
|
|
237
|
+
this.cli.log("error", `failed to shutdown: ${err.message}`);
|
|
238
|
+
});
|
|
233
239
|
}
|
|
234
240
|
};
|
|
235
241
|
node.stream.on("error", (err) => {
|
|
@@ -237,12 +243,25 @@ class NodeGraph {
|
|
|
237
243
|
this.cli.log("warning", `stream of node <${node.id}> raised "error" event: ${error.message}`);
|
|
238
244
|
api.sendErrorToDashboard(Date.now(), node.id, "warning", error.message);
|
|
239
245
|
});
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
+
/* listen for the semantically correct completion event per stream type:
|
|
247
|
+
- for Duplex/Transform listen only for "end"
|
|
248
|
+
(readable-side, fires last, guarantees all output is drained),
|
|
249
|
+
- for pure Readable listen only for "end"
|
|
250
|
+
- for pure Writable listen only for "finish" */
|
|
251
|
+
if (node.stream instanceof node_stream_1.default.Duplex)
|
|
252
|
+
node.stream.on("end", () => {
|
|
253
|
+
deactivateNode(node, `readable stream side (output) of node <${node.id}> raised "end" event`);
|
|
254
|
+
});
|
|
255
|
+
else if (node.stream instanceof node_stream_1.default.Readable)
|
|
256
|
+
node.stream.on("end", () => {
|
|
257
|
+
deactivateNode(node, `readable stream side (output) of node <${node.id}> raised "end" event`);
|
|
258
|
+
});
|
|
259
|
+
else if (node.stream instanceof node_stream_1.default.Writable)
|
|
260
|
+
node.stream.on("finish", () => {
|
|
261
|
+
deactivateNode(node, `writable stream side (input) of node <${node.id}> raised "finish" event`);
|
|
262
|
+
});
|
|
263
|
+
else
|
|
264
|
+
throw new Error(`stream of node <${node.id}> is neither of Duplex, Writable, nor Readable type`);
|
|
246
265
|
}
|
|
247
266
|
/* start of internal stream processing */
|
|
248
267
|
this.cli.log("info", "**** everything established -- stream processing in SpeechFlow graph starts ****");
|
|
@@ -257,12 +276,15 @@ class NodeGraph {
|
|
|
257
276
|
const stream = node.stream;
|
|
258
277
|
if ((stream instanceof node_stream_1.default.Writable || stream instanceof node_stream_1.default.Duplex)
|
|
259
278
|
&& (!stream.writableEnded && !stream.destroyed)) {
|
|
279
|
+
const ac = new AbortController();
|
|
260
280
|
drainPromises.push(Promise.race([
|
|
261
281
|
new Promise((resolve) => {
|
|
262
282
|
stream.end(() => { resolve(); });
|
|
263
283
|
}),
|
|
264
|
-
util.timeout(5000)
|
|
265
|
-
]).
|
|
284
|
+
util.timeout(5000, "timeout", ac.signal)
|
|
285
|
+
]).finally(() => {
|
|
286
|
+
ac.abort();
|
|
287
|
+
}).catch(() => {
|
|
266
288
|
/* ignore timeout -- stream will be destroyed later */
|
|
267
289
|
}));
|
|
268
290
|
}
|
|
@@ -300,10 +322,13 @@ class NodeGraph {
|
|
|
300
322
|
async closeNodes() {
|
|
301
323
|
for (const node of this.graphNodes) {
|
|
302
324
|
this.cli.log("info", `close node <${node.id}>`);
|
|
325
|
+
const ac = new AbortController();
|
|
303
326
|
await Promise.race([
|
|
304
327
|
node.close(),
|
|
305
|
-
util.timeout(10 * 1000)
|
|
306
|
-
]).
|
|
328
|
+
util.timeout(10 * 1000, "timeout", ac.signal)
|
|
329
|
+
]).finally(() => {
|
|
330
|
+
ac.abort();
|
|
331
|
+
}).catch((err) => {
|
|
307
332
|
this.cli.log("warning", `node <${node.id}> failed to close: ${err.message}`);
|
|
308
333
|
});
|
|
309
334
|
}
|
|
@@ -320,22 +345,31 @@ class NodeGraph {
|
|
|
320
345
|
}
|
|
321
346
|
/* graph destruction: PASS 5: destroy nodes */
|
|
322
347
|
destroyNodes() {
|
|
323
|
-
for (const node of this.graphNodes)
|
|
348
|
+
for (const node of this.graphNodes)
|
|
324
349
|
this.cli.log("info", `destroy node <${node.id}>`);
|
|
325
|
-
|
|
326
|
-
}
|
|
350
|
+
this.graphNodes.clear();
|
|
327
351
|
}
|
|
328
352
|
/* setup signal handling for shutdown */
|
|
329
353
|
setupSignalHandlers(args, api) {
|
|
330
354
|
/* internal helper functions */
|
|
331
|
-
const shutdownHandler = (signal) => this.shutdown(signal, args, api);
|
|
332
355
|
const logError = (error) => {
|
|
333
356
|
if (this.debug)
|
|
334
357
|
this.cli.log("error", `${error.message}\n${error.stack}`);
|
|
335
358
|
else
|
|
336
359
|
this.cli.log("error", error.message);
|
|
337
360
|
};
|
|
338
|
-
|
|
361
|
+
const shutdownHandler = (signal) => {
|
|
362
|
+
this.shutdown(signal, args, api).catch((err) => {
|
|
363
|
+
const error = util.ensureError(err, "shutdown error");
|
|
364
|
+
logError(error);
|
|
365
|
+
process.exit(1);
|
|
366
|
+
});
|
|
367
|
+
};
|
|
368
|
+
/* re-hook into process signals */
|
|
369
|
+
process.removeAllListeners("SIGINT");
|
|
370
|
+
process.removeAllListeners("SIGUSR1");
|
|
371
|
+
process.removeAllListeners("SIGUSR2");
|
|
372
|
+
process.removeAllListeners("SIGTERM");
|
|
339
373
|
process.on("SIGINT", () => { shutdownHandler("SIGINT"); });
|
|
340
374
|
process.on("SIGUSR1", () => { shutdownHandler("SIGUSR1"); });
|
|
341
375
|
process.on("SIGUSR2", () => { shutdownHandler("SIGUSR2"); });
|