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.
Files changed (67) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +37 -3
  3. package/dst/speechflow-node-a2a-gender.d.ts +17 -0
  4. package/dst/speechflow-node-a2a-gender.js +272 -0
  5. package/dst/speechflow-node-a2a-gender.js.map +1 -0
  6. package/dst/speechflow-node-a2a-meter.js +2 -2
  7. package/dst/speechflow-node-a2a-meter.js.map +1 -1
  8. package/dst/speechflow-node-a2a-mute.js +1 -0
  9. package/dst/speechflow-node-a2a-mute.js.map +1 -1
  10. package/dst/speechflow-node-a2a-vad.js +47 -63
  11. package/dst/speechflow-node-a2a-vad.js.map +1 -1
  12. package/dst/speechflow-node-a2a-wav.js +145 -122
  13. package/dst/speechflow-node-a2a-wav.js.map +1 -1
  14. package/dst/speechflow-node-a2t-deepgram.js +13 -3
  15. package/dst/speechflow-node-a2t-deepgram.js.map +1 -1
  16. package/dst/speechflow-node-t2a-elevenlabs.js +10 -5
  17. package/dst/speechflow-node-t2a-elevenlabs.js.map +1 -1
  18. package/dst/speechflow-node-t2a-kokoro.js.map +1 -1
  19. package/dst/speechflow-node-t2t-deepl.js.map +1 -1
  20. package/dst/speechflow-node-t2t-format.js.map +1 -1
  21. package/dst/speechflow-node-t2t-ollama.js.map +1 -1
  22. package/dst/speechflow-node-t2t-openai.js.map +1 -1
  23. package/dst/speechflow-node-t2t-subtitle.js.map +1 -1
  24. package/dst/speechflow-node-t2t-transformers.js.map +1 -1
  25. package/dst/speechflow-node-x2x-filter.d.ts +11 -0
  26. package/dst/speechflow-node-x2x-filter.js +113 -0
  27. package/dst/speechflow-node-x2x-filter.js.map +1 -0
  28. package/dst/speechflow-node-x2x-trace.js +24 -10
  29. package/dst/speechflow-node-x2x-trace.js.map +1 -1
  30. package/dst/speechflow-node-xio-device.js +14 -5
  31. package/dst/speechflow-node-xio-device.js.map +1 -1
  32. package/dst/speechflow-node-xio-file.js +58 -27
  33. package/dst/speechflow-node-xio-file.js.map +1 -1
  34. package/dst/speechflow-node-xio-mqtt.js.map +1 -1
  35. package/dst/speechflow-node-xio-websocket.js.map +1 -1
  36. package/dst/speechflow-node.js +1 -0
  37. package/dst/speechflow-node.js.map +1 -1
  38. package/dst/speechflow-utils.d.ts +14 -1
  39. package/dst/speechflow-utils.js +110 -2
  40. package/dst/speechflow-utils.js.map +1 -1
  41. package/dst/speechflow.js +23 -4
  42. package/dst/speechflow.js.map +1 -1
  43. package/etc/speechflow.yaml +51 -24
  44. package/package.json +6 -5
  45. package/src/speechflow-node-a2a-gender.ts +272 -0
  46. package/src/speechflow-node-a2a-meter.ts +3 -3
  47. package/src/speechflow-node-a2a-mute.ts +1 -0
  48. package/src/speechflow-node-a2a-vad.ts +58 -68
  49. package/src/speechflow-node-a2a-wav.ts +128 -91
  50. package/src/speechflow-node-a2t-deepgram.ts +15 -4
  51. package/src/speechflow-node-t2a-elevenlabs.ts +13 -8
  52. package/src/speechflow-node-t2a-kokoro.ts +3 -3
  53. package/src/speechflow-node-t2t-deepl.ts +2 -2
  54. package/src/speechflow-node-t2t-format.ts +2 -2
  55. package/src/speechflow-node-t2t-ollama.ts +2 -2
  56. package/src/speechflow-node-t2t-openai.ts +2 -2
  57. package/src/speechflow-node-t2t-subtitle.ts +1 -1
  58. package/src/speechflow-node-t2t-transformers.ts +2 -2
  59. package/src/speechflow-node-x2x-filter.ts +122 -0
  60. package/src/speechflow-node-x2x-trace.ts +28 -11
  61. package/src/speechflow-node-xio-device.ts +20 -8
  62. package/src/speechflow-node-xio-file.ts +74 -36
  63. package/src/speechflow-node-xio-mqtt.ts +3 -3
  64. package/src/speechflow-node-xio-websocket.ts +1 -1
  65. package/src/speechflow-node.ts +2 -0
  66. package/src/speechflow-utils.ts +81 -2
  67. 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 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"
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 } 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"
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 from "./speechflow-node"
34
- import pkg from "../package.json"
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.delete(node)
476
- cli!.log("info", `stream of node "${node.id}" finished (${activeNodes.size} nodes remaining active)`)
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
- else
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")