feat(mediabox): wyoming

This commit is contained in:
arcnmx 2024-09-12 17:15:06 -07:00
parent a5966c0724
commit a202d0703f
9 changed files with 283 additions and 2 deletions

View file

@ -0,0 +1,22 @@
{
config,
lib,
...
}: let
inherit (lib.modules) mkIf mkDefault;
cfg = config.services.wyoming.openwakeword;
in {
imports = [./wyoming.nix];
services.wyoming.openwakeword = {
enable = mkDefault true;
uri = mkDefault "tcp://0.0.0.0:10400";
# models: https://github.com/dscripka/openWakeWord?tab=readme-ov-file#pre-trained-models
preloadModels = mkDefault [
"ok_nabu"
"hey_rhasspy"
];
};
# allow access to LAN satellites
networking.firewall.interfaces.local.allowedTCPPorts = mkIf cfg.enable [cfg.port];
}

18
nixos/wyoming/piper.nix Normal file
View file

@ -0,0 +1,18 @@
{
config,
lib,
...
}: let
inherit (lib.modules) mkDefault;
in {
imports = [./wyoming.nix];
services.wyoming.piper = {
# voices: https://rhasspy.github.io/piper-samples/
servers.piper = {
enable = mkDefault true;
uri = mkDefault "tcp://0.0.0.0:10200";
voice = mkDefault "en_GB-semaine-medium";
speaker = mkDefault 0;
};
};
}

40
nixos/wyoming/whisper.nix Normal file
View file

@ -0,0 +1,40 @@
{
config,
lib,
...
}: let
inherit (lib.modules) mkIf mkForce mkDefault;
cfg = config.services.wyoming.faster-whisper;
inherit (cfg.servers) whisper;
useRocm = false; # broken...
in {
imports = [./wyoming.nix];
services.wyoming.faster-whisper = {
# models: https://github.com/rhasspy/wyoming-faster-whisper/releases/tag/v2.0.0
servers.whisper = {
enable = mkDefault true;
language = mkDefault "en";
model = let
#distil = "distil";
#distil = "distil-whisper/distil-whisper";
distil = "Systran/faster-distil-whisper";
#size = "small.en";
size = "medium.en";
#size = "large-v3";
in
mkDefault "${distil}-${size}";
uri = mkDefault "tcp://0.0.0.0:10300";
device = mkIf useRocm "cuda";
};
};
systemd.services.wyoming-faster-whisper-whisper = mkIf whisper.enable {
serviceConfig = mkIf (whisper.device != "cpu" && useRocm) {
DeviceAllow = [
"char-drm"
"char-kfd"
];
SupplementaryGroups = ["render"];
PrivateDevices = mkForce false;
};
};
}

22
nixos/wyoming/wyoming.nix Normal file
View file

@ -0,0 +1,22 @@
{
config,
lib,
...
}: let
inherit (lib.modules) mkIf mkMerge;
inherit (lib.attrsets) mapAttrsToList;
cfgs = config.services.wyoming;
in {
config = {
networking.firewall.interfaces.lan.allowedTCPPorts = let
mkServerPort = _: server: mkIf (server.enable && server ? port) server.port;
mkServicePorts = name: cfg:
mapAttrsToList mkServerPort
cfg.servers
or {
${name} = cfg;
};
in
mkMerge (mapAttrsToList mkServicePorts cfgs);
};
}