Unverified Commit 8ddf32ce authored by Martin Weinelt's avatar Martin Weinelt Committed by GitHub
Browse files

wyoming-faster-whisper: 2.5.0 -> 3.1.0 (#493887)

parents cc7c55e1 4e807c81
Loading
Loading
Loading
Loading
+262 −222
Original line number Diff line number Diff line
@@ -18,10 +18,6 @@ let
    types
    ;

  inherit (builtins)
    toString
    ;

  inherit (utils)
    escapeSystemdExecArgs
    ;
@@ -36,26 +32,62 @@ in
      description = ''
        Attribute set of wyoming-faster-whisper instances to spawn.
      '';
      type = attrsOf (submodule {
      type = attrsOf (
        submodule (
          { name, ... }:
          {
            options = {
              enable = mkEnableOption "Wyoming faster-whisper server";

              zeroconf = {
                enable = mkEnableOption "zeroconf discovery" // {
                  default = true;
                };

                name = mkOption {
                  type = str;
                  default = "faster-whisper-${name}";
                  description = ''
                    The advertised name for zeroconf discovery.
                  '';
                };
              };

              sttLibrary = mkOption {
                type = enum [
                  "auto"
                  "faster-whisper"
                  "onnx-asr"
                  "sherpa"
                  "transformers"
                ];
                default = "auto";
                example = "sherpa";
                description = ''
                  Library used for speech-to-text process.

                  When set to `auto` picks a default based on the {option}`language`.
                '';
              };

              model = mkOption {
                type = str;
            default = "tiny-int8";
            example = "Systran/faster-distil-whisper-small.en";
                default = "auto";
                example = "sherpa-onnx-nemo-parakeet-tdt-0.6b-v3-int8";
                # https://github.com/home-assistant/addons/blob/master/whisper/DOCS.md#option-model
                description = ''
                  Name of the voice model to use. Can also be a HuggingFace model ID or a path to
                  a custom model directory.

              With {option}`useTranformers` enabled, a HuggingFace transformers Whisper model
              ID from HuggingFace like `openai/whisper-tiny.en` must be used.
                  When set to `auto` picks a default based on the {option}`language`,

                  With {option}`sttLibrary` set to `transformers`, a HuggingFace transformers Whisper model
                  ID from HuggingFace like `openai/whisper-tiny` or `openai/whisper-base` must be used.

                  Compressed models (`int8`) are slightly less accurate, but smaller and faster.
                  Distilled models are uncompressed and faster and smaller than non-distilled models.

              Available models:
                  Available models for faster-whisper:
                  - `tiny-int8` (compressed)
                  - `tiny`
                  - `tiny.en` (English only)
@@ -80,14 +112,6 @@ in
                '';
              };

          useTransformers = mkOption {
            type = bool;
            default = false;
            description = ''
              Whether to provide the dependencies to allow using transformer models.
            '';
          };

              uri = mkOption {
                type = strMatching "^(tcp|unix)://.*$";
                example = "tcp://0.0.0.0:10300";
@@ -236,7 +260,7 @@ in
                  "prompt-engineer" a context for transcription, e.g. custom vocabularies or proper nouns
                  to make it more likely to predict those word correctly.

              Not supported when the {option}`customModelType` is `transformers`.
                  Only supported when the {option}`sttLibrary` is `faster-whisper`.
                '';
              };

@@ -246,7 +270,8 @@ in
                example = 5;
                description = ''
                  The number of beams to use in beam search.
              Use `0` to automatically select a value based on the CPU.

                  The default (`0`) will use 1 beam on ARM systems (assumes an ARM SBC) and 5 everywhere else.
                '';
                apply = toString;
              };
@@ -259,7 +284,9 @@ in
                '';
              };
            };
      });
          }
        )
      );
    };
  };

@@ -273,8 +300,8 @@ in
    in
    mkIf (cfg.servers != { }) {
      assertions = mapAttrsToList (server: options: {
        assertion = options.useTransformers -> options.initialPrompt == null;
        message = "wyoming-faster-whisper/${server}: Transformer models (`useTransformers`) do not currently support an `initialPrompt`.";
        assertion = options.sttLibrary != "faster-whisper" -> options.initialPrompt == null;
        message = "wyoming-faster-whisper/${server}: Initial prompt is only supported when using `faster-whisper` as `sttLibrary`.";
      }) cfg.servers;

      systemd.services = mapAttrs' (
@@ -283,8 +310,14 @@ in
          finalPackage = cfg.package.overridePythonAttrs (oldAttrs: {
            dependencies =
              oldAttrs.dependencies
              # for transformer model support
              ++ optionals options.useTransformers oldAttrs.optional-dependencies.transformers;
              ++ optionals options.zeroconf.enable oldAttrs.optional-dependencies.zeroconf
              ++ optionals (
                options.sttLibrary == "onnx-asr" || options.sttLibrary == "auto" && options.language == "ru"
              ) oldAttrs.optional-dependencies.onnx_asr
              ++ optionals (
                options.sttLibrary == "sherpa-onnx" || options.sttLibrary == "auto" && options.language == "en"
              ) oldAttrs.optional-dependencies.sherpa
              ++ optionals (options.sttLibrary == "transformers") oldAttrs.optional-dependencies.transformers;
          });
        in
        nameValuePair "wyoming-faster-whisper-${server}" {
@@ -316,6 +349,8 @@ in
                options.uri
                "--device"
                options.device
                "--stt-library"
                options.sttLibrary
                "--model"
                options.model
                "--language"
@@ -323,8 +358,9 @@ in
                "--beam-size"
                options.beamSize
              ]
              ++ lib.optionals options.useTransformers [
                "--use-transformers"
              ++ lib.optionals options.zeroconf.enable [
                "--zeroconf"
                options.zeroconf.name
              ]
              ++ lib.optionals (options.initialPrompt != null) [
                "--initial-prompt"
@@ -366,6 +402,10 @@ in
              "AF_INET"
              "AF_INET6"
              "AF_UNIX"
            ]
            ++ lib.optionals options.zeroconf.enable [
              # Zeroconf support require network interface enumeration
              "AF_NETLINK"
            ];
            RestrictNamespaces = true;
            RestrictRealtime = true;
+6 −3
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ in
      '';
      type = types.attrsOf (
        types.submodule (
          { ... }:
          { name, ... }:
          {
            options = {
              enable = mkEnableOption "Wyoming Piper server";
@@ -49,7 +49,7 @@ in

                name = mkOption {
                  type = str;
                  default = "piper";
                  default = "piper-${name}";
                  description = ''
                    The advertised name for zeroconf discovery.
                  '';
@@ -205,8 +205,11 @@ in
            RestrictAddressFamilies = [
              "AF_INET"
              "AF_INET6"
              "AF_NETLINK"
              "AF_UNIX"
            ]
            ++ lib.optionals options.zeroconf.enable [
              # Zeroconf support require network interface enumeration
              "AF_NETLINK"
            ];
            RestrictNamespaces = true;
            RestrictRealtime = true;
+24 −9
Original line number Diff line number Diff line
@@ -6,14 +6,14 @@

python3Packages.buildPythonApplication (finalAttrs: {
  pname = "wyoming-faster-whisper";
  version = "2.5.0";
  version = "3.1.0";
  pyproject = true;

  src = fetchFromGitHub {
    owner = "rhasspy";
    repo = "wyoming-faster-whisper";
    tag = "v${finalAttrs.version}";
    hash = "sha256-MKB6gZdGdAYoNK8SRiDHG8xtMZ5mXdaSn+bH4T6o/K4=";
    hash = "sha256-p1FCyj/D7ndKJD1/V5YzhT0xlkg61DSx2m3DCELmPO8=";
  };

  build-system = with python3Packages; [
@@ -25,18 +25,33 @@ python3Packages.buildPythonApplication (finalAttrs: {
    "wyoming"
  ];

  pythonRemoveDeps = [
    # https://github.com/rhasspy/wyoming-faster-whisper/pull/81
    "requests"
  ];

  dependencies = with python3Packages; [
    faster-whisper
    wyoming
  ];

  optional-dependencies = {
    transformers =
      with python3Packages;
      [
  optional-dependencies = with python3Packages; {
    transformers = [
      transformers
    ]
    ++ transformers.optional-dependencies.torch;
    sherpa = [
      sherpa-onnx
    ];
    onnx_asr = [
      onnx-asr
    ]
    ++ onnx-asr.optional-dependencies.cpu
    ++ onnx-asr.optional-dependencies.hub;
    zeroconf = [
      wyoming
    ]
    ++ wyoming.optional-dependencies.zeroconf;
  };

  pythonImportsCheck = [