speechflow 1.1.0 → 1.2.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/CHANGELOG.md +11 -0
- package/README.md +37 -3
- package/dst/speechflow-node-a2a-gender.d.ts +17 -0
- package/dst/speechflow-node-a2a-gender.js +272 -0
- package/dst/speechflow-node-a2a-gender.js.map +1 -0
- package/dst/speechflow-node-a2a-meter.js +2 -2
- package/dst/speechflow-node-a2a-meter.js.map +1 -1
- package/dst/speechflow-node-a2a-mute.js +1 -0
- package/dst/speechflow-node-a2a-mute.js.map +1 -1
- package/dst/speechflow-node-a2a-vad.js +47 -63
- package/dst/speechflow-node-a2a-vad.js.map +1 -1
- package/dst/speechflow-node-a2a-wav.js +145 -122
- package/dst/speechflow-node-a2a-wav.js.map +1 -1
- package/dst/speechflow-node-a2t-deepgram.js +13 -3
- package/dst/speechflow-node-a2t-deepgram.js.map +1 -1
- package/dst/speechflow-node-t2a-elevenlabs.js +10 -5
- package/dst/speechflow-node-t2a-elevenlabs.js.map +1 -1
- package/dst/speechflow-node-t2a-kokoro.js.map +1 -1
- package/dst/speechflow-node-t2t-deepl.js.map +1 -1
- package/dst/speechflow-node-t2t-format.js.map +1 -1
- package/dst/speechflow-node-t2t-ollama.js.map +1 -1
- package/dst/speechflow-node-t2t-openai.js.map +1 -1
- package/dst/speechflow-node-t2t-subtitle.js.map +1 -1
- package/dst/speechflow-node-t2t-transformers.js.map +1 -1
- package/dst/speechflow-node-x2x-filter.d.ts +11 -0
- package/dst/speechflow-node-x2x-filter.js +113 -0
- package/dst/speechflow-node-x2x-filter.js.map +1 -0
- package/dst/speechflow-node-x2x-trace.js +24 -10
- package/dst/speechflow-node-x2x-trace.js.map +1 -1
- package/dst/speechflow-node-xio-device.js +14 -5
- package/dst/speechflow-node-xio-device.js.map +1 -1
- package/dst/speechflow-node-xio-file.js +58 -27
- package/dst/speechflow-node-xio-file.js.map +1 -1
- package/dst/speechflow-node-xio-mqtt.js.map +1 -1
- package/dst/speechflow-node-xio-websocket.js.map +1 -1
- package/dst/speechflow-node.js +1 -0
- package/dst/speechflow-node.js.map +1 -1
- package/dst/speechflow-utils.d.ts +14 -1
- package/dst/speechflow-utils.js +110 -2
- package/dst/speechflow-utils.js.map +1 -1
- package/dst/speechflow.js +23 -4
- package/dst/speechflow.js.map +1 -1
- package/etc/speechflow.yaml +51 -24
- package/package.json +6 -5
- package/src/speechflow-node-a2a-gender.ts +272 -0
- package/src/speechflow-node-a2a-meter.ts +3 -3
- package/src/speechflow-node-a2a-mute.ts +1 -0
- package/src/speechflow-node-a2a-vad.ts +58 -68
- package/src/speechflow-node-a2a-wav.ts +128 -91
- package/src/speechflow-node-a2t-deepgram.ts +15 -4
- package/src/speechflow-node-t2a-elevenlabs.ts +13 -8
- package/src/speechflow-node-t2a-kokoro.ts +3 -3
- package/src/speechflow-node-t2t-deepl.ts +2 -2
- package/src/speechflow-node-t2t-format.ts +2 -2
- package/src/speechflow-node-t2t-ollama.ts +2 -2
- package/src/speechflow-node-t2t-openai.ts +2 -2
- package/src/speechflow-node-t2t-subtitle.ts +1 -1
- package/src/speechflow-node-t2t-transformers.ts +2 -2
- package/src/speechflow-node-x2x-filter.ts +122 -0
- package/src/speechflow-node-x2x-trace.ts +28 -11
- package/src/speechflow-node-xio-device.ts +20 -8
- package/src/speechflow-node-xio-file.ts +74 -36
- package/src/speechflow-node-xio-mqtt.ts +3 -3
- package/src/speechflow-node-xio-websocket.ts +1 -1
- package/src/speechflow-node.ts +2 -0
- package/src/speechflow-utils.ts +81 -2
- package/src/speechflow.ts +46 -27
package/src/speechflow.ts
CHANGED
|
@@ -5,33 +5,33 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
/* standard dependencies */
|
|
8
|
-
import path
|
|
9
|
-
import Stream
|
|
10
|
-
import { EventEmitter }
|
|
11
|
-
import http
|
|
12
|
-
import * as HAPI
|
|
13
|
-
import WebSocket
|
|
14
|
-
import HAPIWebSocket
|
|
15
|
-
import HAPIHeader
|
|
8
|
+
import path from "node:path"
|
|
9
|
+
import Stream from "node:stream"
|
|
10
|
+
import { EventEmitter } from "node:events"
|
|
11
|
+
import http from "node:http"
|
|
12
|
+
import * as HAPI from "@hapi/hapi"
|
|
13
|
+
import WebSocket from "ws"
|
|
14
|
+
import HAPIWebSocket from "hapi-plugin-websocket"
|
|
15
|
+
import HAPIHeader from "hapi-plugin-header"
|
|
16
16
|
|
|
17
17
|
/* external dependencies */
|
|
18
|
-
import { DateTime }
|
|
19
|
-
import CLIio
|
|
20
|
-
import yargs
|
|
21
|
-
import { hideBin }
|
|
22
|
-
import jsYAML
|
|
23
|
-
import FlowLink
|
|
24
|
-
import objectPath
|
|
25
|
-
import installedPackages
|
|
26
|
-
import dotenvx
|
|
27
|
-
import syspath
|
|
28
|
-
import * as arktype
|
|
29
|
-
import Table
|
|
30
|
-
import chalk
|
|
18
|
+
import { DateTime } from "luxon"
|
|
19
|
+
import CLIio from "cli-io"
|
|
20
|
+
import yargs from "yargs"
|
|
21
|
+
import { hideBin } from "yargs/helpers"
|
|
22
|
+
import jsYAML from "js-yaml"
|
|
23
|
+
import FlowLink from "flowlink"
|
|
24
|
+
import objectPath from "object-path"
|
|
25
|
+
import installedPackages from "installed-packages"
|
|
26
|
+
import dotenvx from "@dotenvx/dotenvx"
|
|
27
|
+
import syspath from "syspath"
|
|
28
|
+
import * as arktype from "arktype"
|
|
29
|
+
import Table from "cli-table3"
|
|
30
|
+
import chalk from "chalk"
|
|
31
31
|
|
|
32
32
|
/* internal dependencies */
|
|
33
|
-
import SpeechFlowNode
|
|
34
|
-
import pkg
|
|
33
|
+
import SpeechFlowNode from "./speechflow-node"
|
|
34
|
+
import pkg from "../package.json"
|
|
35
35
|
|
|
36
36
|
/* central CLI context */
|
|
37
37
|
let cli: CLIio | null = null
|
|
@@ -234,6 +234,7 @@ type wsPeerInfo = {
|
|
|
234
234
|
"./speechflow-node-a2a-wav.js",
|
|
235
235
|
"./speechflow-node-a2a-mute.js",
|
|
236
236
|
"./speechflow-node-a2a-meter.js",
|
|
237
|
+
"./speechflow-node-a2a-gender.js",
|
|
237
238
|
"./speechflow-node-a2a-vad.js",
|
|
238
239
|
"./speechflow-node-a2t-deepgram.js",
|
|
239
240
|
"./speechflow-node-t2a-elevenlabs.js",
|
|
@@ -244,6 +245,7 @@ type wsPeerInfo = {
|
|
|
244
245
|
"./speechflow-node-t2t-transformers.js",
|
|
245
246
|
"./speechflow-node-t2t-subtitle.js",
|
|
246
247
|
"./speechflow-node-t2t-format.js",
|
|
248
|
+
"./speechflow-node-x2x-filter.js",
|
|
247
249
|
"./speechflow-node-x2x-trace.js",
|
|
248
250
|
"./speechflow-node-xio-device.js",
|
|
249
251
|
"./speechflow-node-xio-file.js",
|
|
@@ -471,9 +473,22 @@ type wsPeerInfo = {
|
|
|
471
473
|
throw new Error(`stream of node "${node.id}" still not initialized`)
|
|
472
474
|
cli!.log("info", `observe stream of node "${node.id}" for finish event`)
|
|
473
475
|
activeNodes.add(node)
|
|
476
|
+
node.stream.on("end", () => {
|
|
477
|
+
if (activeNodes.has(node))
|
|
478
|
+
activeNodes.delete(node)
|
|
479
|
+
cli!.log("info", `readable stream of node "${node.id}" ended (${activeNodes.size} nodes remaining active)`)
|
|
480
|
+
if (activeNodes.size === 0) {
|
|
481
|
+
const timeFinished = DateTime.now()
|
|
482
|
+
const duration = timeFinished.diff(timeZero)
|
|
483
|
+
cli!.log("info", "everything finished -- stream processing in SpeechFlow graph stops " +
|
|
484
|
+
`(total duration: ${duration.toFormat("hh:mm:ss.SSS")})`)
|
|
485
|
+
finishEvents.emit("finished")
|
|
486
|
+
}
|
|
487
|
+
})
|
|
474
488
|
node.stream.on("finish", () => {
|
|
475
|
-
activeNodes.
|
|
476
|
-
|
|
489
|
+
if (activeNodes.has(node))
|
|
490
|
+
activeNodes.delete(node)
|
|
491
|
+
cli!.log("info", `writable stream of node "${node.id}" finished (${activeNodes.size} nodes remaining active)`)
|
|
477
492
|
if (activeNodes.size === 0) {
|
|
478
493
|
const timeFinished = DateTime.now()
|
|
479
494
|
const duration = timeFinished.diff(timeZero)
|
|
@@ -696,10 +711,14 @@ type wsPeerInfo = {
|
|
|
696
711
|
}
|
|
697
712
|
|
|
698
713
|
/* terminate process */
|
|
699
|
-
if (signal === "finished")
|
|
714
|
+
if (signal === "finished") {
|
|
715
|
+
cli!.log("info", "terminate process (exit code 0)")
|
|
700
716
|
process.exit(0)
|
|
701
|
-
|
|
717
|
+
}
|
|
718
|
+
else {
|
|
719
|
+
cli!.log("info", "terminate process (exit code 1)")
|
|
702
720
|
process.exit(1)
|
|
721
|
+
}
|
|
703
722
|
}
|
|
704
723
|
finishEvents.on("finished", () => {
|
|
705
724
|
shutdown("finished")
|