From ece747ff5615d1dfb56b7cc73fe41dc9878ed1e2 Mon Sep 17 00:00:00 2001 From: Chris Smit Date: Thu, 15 Oct 2026 09:56:19 +0200 Subject: [PATCH 1/7] feat: add --compute-type option for faster-whisper models Co-Authored-By: Claude Opus 5.5 --- tests/test_compute_type.py | 86 +++++++++++++++++++ whisperlivekit/config.py | 1 + whisperlivekit/core.py | 2 + whisperlivekit/local_agreement/backends.py | 8 +- .../local_agreement/whisper_online.py | 3 + whisperlivekit/parse_args.py | 7 ++ whisperlivekit/simul_whisper/backend.py | 2 +- 7 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 tests/test_compute_type.py diff --git a/tests/test_compute_type.py b/tests/test_compute_type.py new file mode 100644 index 00000000..c681369f --- /dev/null +++ b/tests/test_compute_type.py @@ -0,0 +1,86 @@ +"""--compute-type reaches every faster-whisper model WhisperLiveKit creates.""" + +import sys + +import faster_whisper + +from tests.test_backends import _base_simul_kwargs, _patch_simul_loaders + + +def test_cli_accepts_compute_type(monkeypatch): + from whisperlivekit.parse_args import parse_args + + monkeypatch.setattr(sys, "argv", ["whisperlivekit-server", "--compute-type", "float16"]) + + assert parse_args().compute_type == "float16" + + +def test_cli_compute_type_defaults_to_auto(monkeypatch): + from whisperlivekit.parse_args import parse_args + + monkeypatch.setattr(sys, "argv", ["whisperlivekit-server"]) + + assert parse_args().compute_type == "auto" + + +def test_simulstreaming_encoder_uses_compute_type(monkeypatch): + backend, _ = _patch_simul_loaders(monkeypatch) + + asr = backend.SimulStreamingASR(**_base_simul_kwargs(compute_type="float16")) + + assert asr.fw_encoder.kwargs["compute_type"] == "float16" + + +def test_simulstreaming_encoder_compute_type_defaults_to_auto(monkeypatch): + backend, _ = _patch_simul_loaders(monkeypatch) + + asr = backend.SimulStreamingASR(**_base_simul_kwargs()) + + assert asr.fw_encoder.kwargs["compute_type"] == "auto" + + +def test_faster_whisper_asr_uses_compute_type(monkeypatch): + from whisperlivekit.local_agreement.backends import FasterWhisperASR + + created = {} + + class FakeWhisperModel: + def __init__(self, model_size_or_path, **kwargs): + created.update(kwargs) + + monkeypatch.setattr(faster_whisper, "WhisperModel", FakeWhisperModel) + + FasterWhisperASR(lan="en", model_size="tiny", compute_type="float16") + + assert created["compute_type"] == "float16" + + +def test_backend_factory_passes_compute_type_to_faster_whisper(monkeypatch): + import whisperlivekit.local_agreement.whisper_online as whisper_online + + created = {} + + class FakeFasterWhisperASR: + def __init__(self, **kwargs): + created.update(kwargs) + self.transcribe_kargs = {} + + monkeypatch.setattr(whisper_online, "FasterWhisperASR", FakeFasterWhisperASR) + + whisper_online.backend_factory( + backend="faster-whisper", + lan="en", + model_size="tiny", + model_cache_dir=None, + model_dir=None, + model_path=None, + lora_path=None, + direct_english_translation=False, + buffer_trimming="segment", + buffer_trimming_sec=15, + confidence_validation=False, + warmup_file="", # "" skips warmup; None downloads a sample file + compute_type="float16", + ) + + assert created["compute_type"] == "float16" diff --git a/whisperlivekit/config.py b/whisperlivekit/config.py index 7360a6aa..3bedb615 100644 --- a/whisperlivekit/config.py +++ b/whisperlivekit/config.py @@ -83,6 +83,7 @@ class WhisperLiveKitConfig: sortformer_model_path: Optional[str] = None backend_policy: str = "simulstreaming" backend: str = "auto" + compute_type: str = "auto" # Transcription common warmup_file: Optional[str] = None diff --git a/whisperlivekit/core.py b/whisperlivekit/core.py index 8a9e45c1..233744a0 100644 --- a/whisperlivekit/core.py +++ b/whisperlivekit/core.py @@ -249,6 +249,7 @@ def _do_init(self, config=None, **kwargs): "init_prompt": config.init_prompt, "static_init_prompt": config.static_init_prompt, "max_context_tokens": config.max_context_tokens, + "compute_type": config.compute_type, } self.tokenizer = None @@ -266,6 +267,7 @@ def _do_init(self, config=None, **kwargs): "buffer_trimming": config.buffer_trimming, "confidence_validation": config.confidence_validation, "buffer_trimming_sec": config.buffer_trimming_sec, + "compute_type": config.compute_type, } self.asr = backend_factory( diff --git a/whisperlivekit/local_agreement/backends.py b/whisperlivekit/local_agreement/backends.py index fa021973..c8063a2b 100644 --- a/whisperlivekit/local_agreement/backends.py +++ b/whisperlivekit/local_agreement/backends.py @@ -102,6 +102,11 @@ class FasterWhisperASR(ASRBase): """Uses faster-whisper as the backend.""" sep = "" + def __init__(self, *args, compute_type="auto", **kwargs): + # Set before super().__init__, which calls load_model + self.compute_type = compute_type + super().__init__(*args, **kwargs) + def load_model(self, model_size=None, cache_dir=None, model_dir=None): from faster_whisper import WhisperModel @@ -115,13 +120,12 @@ def load_model(self, model_size=None, cache_dir=None, model_dir=None): else: raise ValueError("Either model_size or model_dir must be set") device = "auto" # Allow CTranslate2 to decide available device - compute_type = "auto" # Allow CTranslate2 to decide faster compute type model = WhisperModel( model_size_or_path, device=device, - compute_type=compute_type, + compute_type=self.compute_type, download_root=cache_dir, ) return model diff --git a/whisperlivekit/local_agreement/whisper_online.py b/whisperlivekit/local_agreement/whisper_online.py index a7f43c42..28283869 100644 --- a/whisperlivekit/local_agreement/whisper_online.py +++ b/whisperlivekit/local_agreement/whisper_online.py @@ -85,6 +85,7 @@ def backend_factory( confidence_validation, warmup_file=None, min_chunk_size=None, + compute_type="auto", **_unused_kwargs, ): if backend == "funasr": @@ -161,12 +162,14 @@ def backend_factory( t = time.time() logger.info(f"Loading Whisper {model_size} model for language {lan} using backend {backend_choice}...") + extra_kwargs = {"compute_type": compute_type} if asr_cls is FasterWhisperASR else {} asr = asr_cls( model_size=model_size, lan=lan, cache_dir=model_cache_dir, model_dir=model_override, lora_path=lora_path if backend_choice == "whisper" else None, + **extra_kwargs, ) e = time.time() logger.info(f"done. It took {round(e-t,2)} seconds.") diff --git a/whisperlivekit/parse_args.py b/whisperlivekit/parse_args.py index 4c62f227..517942c8 100644 --- a/whisperlivekit/parse_args.py +++ b/whisperlivekit/parse_args.py @@ -255,6 +255,13 @@ def build_parser(): choices=["auto", "mlx-whisper", "faster-whisper", "whisper", "openai-api", "funasr", "voxtral", "voxtral-mlx", "qwen3-vllm", "qwen3-vllm-metal", "qwen3-streaming", "canary"], help="Select the ASR backend implementation. Use 'funasr' for SenseVoiceSmall through LocalAgreement (zh/yue/en/ja/ko or auto). Use 'qwen3-vllm' for Qwen3-ASR through in-process vLLM with ForcedAligner on GPU. Use 'qwen3-vllm-metal' for Qwen3-ASR through vllm-metal in-process STT on Apple Silicon. Use 'qwen3-streaming' for Qwen3-ASR through plain HF Transformers with a bounded-recompute audio cache (CUDA/MPS/CPU, no vLLM; requires an explicit --language). Use 'canary' for NVIDIA Canary through NeMo on CUDA or CPU with LocalAgreement.", ) + parser.add_argument( + "--compute-type", + type=str, + default="auto", + dest="compute_type", + help="CTranslate2 compute type for the faster-whisper backend, e.g. float16, int8_float16, float32. 'auto' lets CTranslate2 choose.", + ) parser.add_argument( "--no-vac", action="store_true", diff --git a/whisperlivekit/simul_whisper/backend.py b/whisperlivekit/simul_whisper/backend.py index bdce3659..ea0ea31e 100644 --- a/whisperlivekit/simul_whisper/backend.py +++ b/whisperlivekit/simul_whisper/backend.py @@ -436,7 +436,7 @@ def __init__(self, logfile=sys.stderr, **kwargs): self.fw_encoder = WhisperModel( fw_model, device='auto', - compute_type='auto', + compute_type=getattr(self, 'compute_type', 'auto'), ) self.shared_model = self.load_model() else: From 4aadf37e2d4acdf6bd3dd1b9e860de819e6aa0e6 Mon Sep 17 00:00:00 2001 From: Chris Smit Date: Thu, 15 Oct 2026 14:13:38 +0200 Subject: [PATCH 2/7] feat: add dictation audio and paste helpers Co-Authored-By: Claude Opus 5.5 --- tests/test_dictate_audio.py | 47 +++++++++++++++++++ tests/test_dictate_paste.py | 67 ++++++++++++++++++++++++++ whisperlivekit/dictate/__init__.py | 1 + whisperlivekit/dictate/audio.py | 50 ++++++++++++++++++++ whisperlivekit/dictate/paste.py | 75 ++++++++++++++++++++++++++++++ 5 files changed, 240 insertions(+) create mode 100644 tests/test_dictate_audio.py create mode 100644 tests/test_dictate_paste.py create mode 100644 whisperlivekit/dictate/__init__.py create mode 100644 whisperlivekit/dictate/audio.py create mode 100644 whisperlivekit/dictate/paste.py diff --git a/tests/test_dictate_audio.py b/tests/test_dictate_audio.py new file mode 100644 index 00000000..5c82c91b --- /dev/null +++ b/tests/test_dictate_audio.py @@ -0,0 +1,47 @@ +"""Tests for dictation audio helpers.""" + +import numpy as np + +from whisperlivekit.dictate.audio import has_speech, is_hallucination, to_pcm16 + + +def test_to_pcm16_converts_and_clips(): + pcm = to_pcm16(np.array([0.0, 0.5, -1.0, 2.0], dtype=np.float32)) + + samples = np.frombuffer(pcm, dtype=np.int16) + assert samples.tolist() == [0, 16383, -32767, 32767] + + +def test_has_speech_false_for_silence(): + assert not has_speech(np.zeros(16000, dtype=np.float32)) + + +def test_has_speech_true_for_short_loud_burst(): + audio = np.zeros(16000 * 3, dtype=np.float32) + audio[16000:16000 + 1600] = 0.2 + + assert has_speech(audio) + + +def test_is_hallucination_filler(): + assert is_hallucination("Thank you.") + assert is_hallucination("you") + assert is_hallucination(" ") + + +def test_is_hallucination_keeps_real_text(): + assert not is_hallucination("Please send the report by Friday.") + + +def test_is_hallucination_repeated_filler(): + assert is_hallucination("Thank you for watching. Thank you for watching. Thank you for watching.") + + +def test_is_hallucination_keeps_long_text_with_filler_phrase(): + assert not is_hallucination("Thank you for watching the kids yesterday, it really helped us out.") + + +def test_is_hallucination_keeps_short_real_dictation(): + for text in ["Yes.", "Okay.", "Hi.", "Meet me at the end of the hall.", "Take care of the bug.", + "Thanksgiving plans?", "Cheers, Bob.", "Please unsubscribe me."]: + assert not is_hallucination(text), text diff --git a/tests/test_dictate_paste.py b/tests/test_dictate_paste.py new file mode 100644 index 00000000..85f987df --- /dev/null +++ b/tests/test_dictate_paste.py @@ -0,0 +1,67 @@ +"""Tests for pasting dictated text with xdotool.""" + +import pytest + +from whisperlivekit.dictate import paste as paste_module + + +@pytest.fixture +def recorded(monkeypatch): + """Replace clipboard and subprocess calls; return the list of commands run.""" + commands = [] + clipboard = {"value": "old"} + + def fake_run(cmd, **kwargs): + commands.append(cmd) + + monkeypatch.setattr(paste_module.subprocess, "run", fake_run) + monkeypatch.setattr(paste_module.pyperclip, "copy", lambda text: clipboard.update(value=text)) + monkeypatch.setattr(paste_module.pyperclip, "paste", lambda: clipboard["value"]) + monkeypatch.setattr(paste_module, "RESTORE_DELAY", 0) + return commands, clipboard + + +def test_paste_uses_ctrl_v(recorded, monkeypatch): + commands, clipboard = recorded + monkeypatch.setattr(paste_module, "is_terminal", lambda window: False) + + paste_module.paste(text="hello", window=b"42", restore=False) + + assert clipboard["value"] == "hello" + assert ["xdotool", "windowactivate", "--sync", b"42"] in commands + assert commands[-1][-1] == "ctrl+v" + + +def test_paste_uses_ctrl_shift_v_in_terminal(recorded, monkeypatch): + commands, _ = recorded + monkeypatch.setattr(paste_module, "is_terminal", lambda window: True) + + paste_module.paste(text="ls", window=b"42", restore=False) + + assert commands[-1][-1] == "ctrl+shift+v" + + +def test_is_terminal_matches_wm_class(monkeypatch): + monkeypatch.setattr( + paste_module.subprocess, "check_output", + lambda cmd, **kwargs: b'WM_CLASS(STRING) = "gnome-terminal-server", "Gnome-terminal"', + ) + + assert paste_module.is_terminal(b"42") + + +def test_paste_still_sends_key_when_focus_hangs(recorded, monkeypatch): + commands, _ = recorded + monkeypatch.setattr(paste_module, "is_terminal", lambda window: False) + + def run(cmd, **kwargs): + assert kwargs.get("timeout"), cmd + if "windowactivate" in cmd: + raise paste_module.subprocess.TimeoutExpired(cmd=cmd, timeout=kwargs["timeout"]) + commands.append(cmd) + + monkeypatch.setattr(paste_module.subprocess, "run", run) + + paste_module.paste(text="hello", window=b"42", restore=False) + + assert commands[-1][-1] == "ctrl+v" diff --git a/whisperlivekit/dictate/__init__.py b/whisperlivekit/dictate/__init__.py new file mode 100644 index 00000000..a226288c --- /dev/null +++ b/whisperlivekit/dictate/__init__.py @@ -0,0 +1 @@ +"""Push-to-talk dictation: press a hotkey, speak, press again, and the text is pasted at the cursor.""" diff --git a/whisperlivekit/dictate/audio.py b/whisperlivekit/dictate/audio.py new file mode 100644 index 00000000..a5ca5ca3 --- /dev/null +++ b/whisperlivekit/dictate/audio.py @@ -0,0 +1,50 @@ +"""Audio checks and conversion for dictation.""" + +import re + +import numpy as np + +SAMPLE_RATE = 16000 + +# Whole outputs Whisper tends to produce for silence or noise +HALLUCINATION_PHRASES = [ + "thanks for watching", "thank you for watching", "thanks for listening", + "thank you for listening", "thank you", "thank you very much", "thanks", + "please subscribe", "like and subscribe", "don't forget to subscribe", + "see you next time", "see you in the next video", "subtitles by the amara.org community", + "you", "uh", "um", "hmm", "hm", "huh", "ah", "oh", "bye", "bye bye", + "[music]", "(music)", "[silence]", "[blank_audio]", +] + + +def to_pcm16(chunk: np.ndarray) -> bytes: + """Convert float32 samples in [-1, 1] to 16-bit PCM bytes.""" + return (np.clip(chunk, -1.0, 1.0) * 32767).astype(np.int16).tobytes() + + +def has_speech(audio: np.ndarray, threshold: float = 0.01, segment_ms: int = 50) -> bool: + """True if any short segment is louder than the threshold. + + Checking segments rather than the whole recording catches short phrases + surrounded by silence. + """ + segment_samples = int(SAMPLE_RATE * segment_ms / 1000) + for i in range(0, len(audio), segment_samples): + segment = audio[i:i + segment_samples] + if len(segment) < segment_samples // 2: + continue + if np.sqrt(np.mean(segment ** 2)) > threshold: + return True + return False + + +def is_hallucination(text: str) -> bool: + """True if the whole text is filler Whisper produces from silence, possibly repeated.""" + t = _normalize(text) + for phrase in sorted(HALLUCINATION_PHRASES, key=len, reverse=True): + t = re.sub(rf"(? str: + return " ".join(re.sub(r"[.,!?;:…]", " ", text.lower()).split()) diff --git a/whisperlivekit/dictate/paste.py b/whisperlivekit/dictate/paste.py new file mode 100644 index 00000000..81ba5eed --- /dev/null +++ b/whisperlivekit/dictate/paste.py @@ -0,0 +1,75 @@ +"""Paste text into a window on Linux X11 with the clipboard and xdotool.""" + +import subprocess +import threading +import time + +import pyperclip + +TERMINALS = [ + "gnome-terminal", "xterm", "konsole", "alacritty", "kitty", + "terminator", "tilix", "xfce4-terminal", "urxvt", "st", + "sakura", "guake", "tilda", "hyper", "wezterm", +] +RESTORE_DELAY = 1.0 # Seconds before the old clipboard is put back +COMMAND_TIMEOUT = 2.0 # xdotool can block forever if the window manager refuses focus + + +def active_window() -> bytes | None: + """Return the focused window's id, or None.""" + try: + return subprocess.check_output( + ["xdotool", "getactivewindow"], stderr=subprocess.DEVNULL, timeout=COMMAND_TIMEOUT, + ).strip() + except (OSError, subprocess.SubprocessError): + return None + + +def is_terminal(window: bytes | None) -> bool: + """True if the window's WM_CLASS names a known terminal.""" + if not window: + return False + try: + wm_class = subprocess.check_output( + ["xprop", "-id", window, "WM_CLASS"], stderr=subprocess.DEVNULL, timeout=COMMAND_TIMEOUT, + ) + except (OSError, subprocess.SubprocessError): + return False + wm_class = wm_class.decode().lower() + return any(name in wm_class for name in TERMINALS) + + +def paste(text: str, window: bytes | None, restore: bool = True): + """Focus the window and paste the text, then restore the old clipboard.""" + try: + old_clipboard = pyperclip.paste() + except pyperclip.PyperclipException: + old_clipboard = None + + pyperclip.copy(text) + time.sleep(0.05) + if window: + try: + subprocess.run( + ["xdotool", "windowactivate", "--sync", window], stderr=subprocess.DEVNULL, timeout=COMMAND_TIMEOUT, + ) + except subprocess.TimeoutExpired: + pass # Paste into whatever has focus + time.sleep(0.05) + + key = "ctrl+shift+v" if is_terminal(window) else "ctrl+v" + subprocess.run( + ["xdotool", "key", "--clearmodifiers", "--delay", "50", key], stderr=subprocess.DEVNULL, timeout=COMMAND_TIMEOUT, + ) + + if restore and old_clipboard: + threading.Thread(target=_restore_clipboard, args=(old_clipboard, len(text)), daemon=True).start() + + +def _restore_clipboard(old_clipboard: str, text_length: int): + # Longer text can take the target app longer to read from the clipboard + time.sleep(min(3.0, RESTORE_DELAY + text_length * 0.0001)) + try: + pyperclip.copy(old_clipboard) + except pyperclip.PyperclipException: + pass From 7d47df9616cd6f0d38513b8b75dd5ffb03b15343 Mon Sep 17 00:00:00 2001 From: Chris Smit Date: Thu, 15 Oct 2026 14:13:38 +0200 Subject: [PATCH 3/7] feat: add dictation session over the streaming pipeline Co-Authored-By: Claude Opus 5.5 --- tests/test_dictate_session.py | 96 +++++++++++++++++++++++++++++++ whisperlivekit/dictate/session.py | 60 +++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 tests/test_dictate_session.py create mode 100644 whisperlivekit/dictate/session.py diff --git a/tests/test_dictate_session.py b/tests/test_dictate_session.py new file mode 100644 index 00000000..f98465ed --- /dev/null +++ b/tests/test_dictate_session.py @@ -0,0 +1,96 @@ +"""Tests for DictationSession against a fake AudioProcessor.""" + +import asyncio + +import pytest + +from whisperlivekit.dictate.session import DictationSession, TranscriptionFailed, final_text +from whisperlivekit.timed_objects import FrontData, Segment + + +def _front(*texts, speaker=1, status="active_transcription", error=""): + lines = [Segment(start=0, end=1, text=text, speaker=speaker) for text in texts] + return FrontData(status=status, error=error, lines=lines) + + +class FakeProcessor: + """Yields each result after audio arrives; the empty chunk ends the stream.""" + + def __init__(self, results, finish_delay=0.0): + self.results = results + self.finish_delay = finish_delay + self.received = [] + self.cleaned_up = False + self._ended = asyncio.Event() + + async def create_tasks(self): + async def generate(): + await self._ended.wait() + await asyncio.sleep(self.finish_delay) + for result in self.results: + yield result + return generate() + + async def process_audio(self, message): + self.received.append(message) + if not message: + self._ended.set() + + async def cleanup(self): + self.cleaned_up = True + + +def _session(processor): + return DictationSession(processor_factory=lambda: processor) + + +def test_final_text_joins_lines_and_skips_silence(): + data = FrontData(lines=[ + Segment(start=0, end=1, text=" Hello there.", speaker=1), + Segment(start=1, end=2, text=None, speaker=-2), + Segment(start=2, end=3, text="How are you? ", speaker=1), + ], buffer_transcription=" Fine") + + assert final_text(data) == "Hello there. How are you? Fine" + + +@pytest.mark.asyncio +async def test_finish_returns_last_result_text(): + processor = FakeProcessor([_front("partial"), _front("Hello", "world.")]) + session = _session(processor) + await session.start() + await session.feed(b"\x00\x00") + + text = await session.finish(timeout=5) + + assert text == "Hello world." + assert processor.received == [b"\x00\x00", b""] + + +@pytest.mark.asyncio +async def test_error_result_raises(): + session = _session(FakeProcessor([_front(status="error", error="CUDA failed with error out of memory")])) + await session.start() + + with pytest.raises(TranscriptionFailed, match="out of memory"): + await session.finish(timeout=5) + + +@pytest.mark.asyncio +async def test_finish_timeout_raises(): + session = _session(FakeProcessor([_front("late")], finish_delay=1.0)) + await session.start() + + with pytest.raises(TranscriptionFailed, match="did not finish"): + await session.finish(timeout=0.05) + + +@pytest.mark.asyncio +async def test_close_cleans_up(): + processor = FakeProcessor([_front("x")]) + session = _session(processor) + await session.start() + + await session.close() + + assert processor.cleaned_up diff --git a/whisperlivekit/dictate/session.py b/whisperlivekit/dictate/session.py new file mode 100644 index 00000000..31755dd0 --- /dev/null +++ b/whisperlivekit/dictate/session.py @@ -0,0 +1,60 @@ +"""One dictation: feed audio into WhisperLiveKit's pipeline and get the final text.""" + +import asyncio +from typing import Callable + +from whisperlivekit.timed_objects import FrontData + +SILENCE_SPEAKER = -2 + + +class TranscriptionFailed(Exception): + """The pipeline reported an error or did not finish in time.""" + + +def final_text(data: FrontData) -> str: + """Join the spoken lines and any unconfirmed tail into one string.""" + parts = [line.text for line in data.lines if line.text and line.speaker != SILENCE_SPEAKER] + parts.append(data.buffer_transcription) + return " ".join(part.strip() for part in parts if part and part.strip()) + + +class DictationSession: + """Wraps one AudioProcessor for the length of a recording.""" + + def __init__(self, processor_factory: Callable[[], object]): + self._processor = processor_factory() + self._collector: asyncio.Task | None = None + self._last = FrontData() + self._error: str | None = None + + async def start(self): + results = await self._processor.create_tasks() + self._collector = asyncio.create_task(self._collect(results)) + + async def feed(self, pcm: bytes): + await self._processor.process_audio(pcm) + + async def finish(self, timeout: float) -> str: + """Mark the end of audio and wait for the final text.""" + await self._processor.process_audio(b"") + try: + await asyncio.wait_for(asyncio.shield(self._collector), timeout=timeout) + except asyncio.TimeoutError: + raise TranscriptionFailed(f"Transcription did not finish within {timeout:.0f}s") from None + if self._error: + raise TranscriptionFailed(self._error) + return final_text(self._last) + + async def close(self): + if self._collector and not self._collector.done(): + self._collector.cancel() + await asyncio.gather(self._collector, return_exceptions=True) + await self._processor.cleanup() + + async def _collect(self, results): + async for result in results: + if result.status == "error": + self._error = result.error or "Transcription failed" + return + self._last = result From 23af1180d678154fa64be9f39d7a24cd1ef9cbe3 Mon Sep 17 00:00:00 2001 From: Chris Smit Date: Thu, 15 Oct 2026 14:13:39 +0200 Subject: [PATCH 4/7] feat: add wlk dictate command Push-to-talk dictation in one process: F9 streams the microphone into AudioProcessor and pastes the final text at the cursor; F8 pastes it again. Co-Authored-By: Claude Opus 5.5 --- pyproject.toml | 1 + tests/test_dictate_app.py | 291 ++++++++++++++++++++++++++++ whisperlivekit/cli.py | 5 + whisperlivekit/dictate/app.py | 298 +++++++++++++++++++++++++++++ whisperlivekit/dictate/feedback.py | 46 +++++ 5 files changed, 641 insertions(+) create mode 100644 tests/test_dictate_app.py create mode 100644 whisperlivekit/dictate/app.py create mode 100644 whisperlivekit/dictate/feedback.py diff --git a/pyproject.toml b/pyproject.toml index bafa883f..8ed555c2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,6 +47,7 @@ test = [ "matplotlib>=3.8", ] translation = ["nllw"] +dictate = ["pynput", "sounddevice", "pyperclip"] sentence_tokenizer = ["mosestokenizer", "wtpsplit"] funasr = ["funasr~=1.4.1"] mlx-whisper = [ diff --git a/tests/test_dictate_app.py b/tests/test_dictate_app.py new file mode 100644 index 00000000..d265f89f --- /dev/null +++ b/tests/test_dictate_app.py @@ -0,0 +1,291 @@ +"""Tests for the Dictation state machine with fake session, microphone, paste and feedback.""" + +import asyncio +import threading +import time +from types import SimpleNamespace + +import numpy as np +import pytest + +from whisperlivekit.dictate.app import FINISHING, IDLE, RECORDING, Dictation +from whisperlivekit.dictate.session import TranscriptionFailed + +LOUD = np.full(1600, 0.2, dtype=np.float32) +QUIET = np.zeros(1600, dtype=np.float32) + + +class FakeMicrophone: + def __init__(self, callback, lock=None): + self.callback = callback + self.open = True + self.lock = lock + + def push(self, chunk): + self.callback(chunk) + + def close(self): + self.open = False + self.closed_under_lock = self.lock.locked() if self.lock else None + + +class FakeSession: + def __init__(self, text="Hello world.", error=None, feed_error=None, close_error=None): + self.text = text + self.error = error + self.feed_error = feed_error + self.close_error = close_error + self.fed = [] + self.closed = False + self.release = asyncio.Event() + self.release.set() + + async def start(self): + pass + + async def feed(self, pcm): + if self.feed_error: + raise RuntimeError(self.feed_error) + self.fed.append(pcm) + + async def finish(self, timeout): + await self.release.wait() + if self.error: + raise TranscriptionFailed(self.error) + return self.text + + async def close(self): + self.closed = True + if self.close_error: + raise RuntimeError(self.close_error) + + +class FakeFeedback: + def __init__(self): + self.events = [] + + def start(self): + self.events.append("start") + + def stop(self): + self.events.append("stop") + + def error(self): + self.events.append("error") + + def ready(self): + self.events.append("ready") + + def notify(self, title, body=""): + self.events.append(("notify", title, body)) + + +@pytest.fixture +def loop(): + loop = asyncio.new_event_loop() + thread = threading.Thread(target=loop.run_forever, daemon=True) + thread.start() + yield loop + loop.call_soon_threadsafe(loop.stop) + thread.join(timeout=2) + + +@pytest.fixture +def harness(loop): + """Dictation wired to fakes; session_kwargs set before a recording shape the next FakeSession.""" + h = SimpleNamespace(sessions=[], microphones=[], pastes=[], feedback=FakeFeedback(), session_kwargs={}, session_error=None, paste_error=None) + + def make_session(): + if h.session_error: + raise RuntimeError(h.session_error) + session = FakeSession(**h.session_kwargs) + h.sessions.append(session) + return session + + def open_microphone(callback): + microphone = FakeMicrophone(callback, lock=h.dictation._lock) + h.microphones.append(microphone) + return microphone + + def fake_paste(text, window): + if h.paste_error: + raise RuntimeError(h.paste_error) + h.pastes.append((text, window)) + + h.dictation = Dictation( + loop=loop, + session_factory=make_session, + open_microphone=open_microphone, + paste=fake_paste, + active_window=lambda: b"7", + feedback=h.feedback, + ) + h.loop = loop + return h + + +def wait_for(condition, timeout=2.0): + deadline = time.time() + timeout + while time.time() < deadline: + if condition(): + return + time.sleep(0.01) + raise AssertionError("condition not met in time") + + +def record(h, chunks): + h.dictation.on_record_key() + for chunk in chunks: + h.microphones[-1].push(chunk) + h.dictation.on_record_key() + + +def test_two_presses_paste_text(harness): + record(harness, [LOUD, LOUD]) + + wait_for(lambda: harness.dictation.state == IDLE and harness.pastes) + assert harness.pastes == [("Hello world.", b"7")] + assert len(harness.sessions[0].fed) == 2 + assert harness.sessions[0].closed + assert not harness.microphones[0].open + assert harness.feedback.events[:2] == ["start", "stop"] + + +def test_f9_while_finishing_is_ignored(harness): + harness.dictation.on_record_key() + wait_for(lambda: harness.sessions) + harness.loop.call_soon_threadsafe(harness.sessions[0].release.clear) + harness.microphones[0].push(LOUD) + harness.dictation.on_record_key() + wait_for(lambda: harness.dictation.state == FINISHING) + + harness.dictation.on_record_key() + + assert len(harness.sessions) == 1 + assert harness.feedback.events[-1] == "error" + harness.loop.call_soon_threadsafe(harness.sessions[0].release.set) + wait_for(lambda: harness.dictation.state == IDLE) + + +def test_silent_recording_is_not_pasted(harness): + record(harness, [QUIET, QUIET]) + + wait_for(lambda: harness.dictation.state == IDLE and harness.sessions[0].closed) + assert harness.pastes == [] + assert ("notify", "No speech detected", "") in harness.feedback.events + + +def test_hallucination_is_not_pasted(harness): + harness.session_kwargs = {"text": "Thank you."} + record(harness, [LOUD]) + + wait_for(lambda: harness.dictation.state == IDLE and harness.sessions[0].closed) + assert harness.pastes == [] + + +def test_failed_finish_notifies_and_returns_to_idle(harness): + harness.session_kwargs = {"error": "CUDA failed with error out of memory"} + record(harness, [LOUD]) + + wait_for(lambda: harness.dictation.state == IDLE and harness.sessions[0].closed) + assert harness.pastes == [] + assert "error" in harness.feedback.events + notes = [e for e in harness.feedback.events if isinstance(e, tuple)] + assert "GPU out of memory" in notes[-1][2] + + +def test_audio_after_stop_is_ignored(harness): + record(harness, [LOUD]) + harness.microphones[0].push(LOUD) + + wait_for(lambda: harness.dictation.state == IDLE and harness.pastes) + assert len(harness.sessions[0].fed) == 1 + + +def test_repaste_without_text_beeps(harness): + harness.dictation.on_repaste_key() + + assert harness.feedback.events == ["error"] + assert harness.pastes == [] + + +def test_repaste_pastes_last_text_into_focused_window(harness): + record(harness, [LOUD]) + wait_for(lambda: harness.dictation.state == IDLE and harness.pastes) + + harness.dictation.on_repaste_key() + + wait_for(lambda: len(harness.pastes) == 2) + assert harness.pastes[1] == ("Hello world.", b"7") + + +def test_state_is_recording_after_first_press(harness): + harness.dictation.on_record_key() + + assert harness.dictation.state == RECORDING + harness.dictation.on_record_key() + wait_for(lambda: harness.dictation.state == IDLE) + + +def test_parse_dictate_args_leaves_model_flags(): + from whisperlivekit.dictate.app import parse_dictate_args + + args, rest = parse_dictate_args(["--hotkey", "f12", "--model", "large-v3", "--no-vac"]) + + assert args.hotkey == "f12" + assert args.repaste_hotkey == "f8" + assert rest == ["--model", "large-v3", "--no-vac"] + + +def test_session_factory_failure_returns_to_idle(harness): + harness.session_error = "CUDA failed with error out of memory" + harness.dictation.on_record_key() + + wait_for(lambda: harness.dictation.state == IDLE) + assert not harness.microphones[0].open + assert "error" in harness.feedback.events + + +def test_close_failure_returns_to_idle(harness): + harness.session_kwargs = {"close_error": "cleanup failed"} + record(harness, [LOUD]) + + wait_for(lambda: harness.dictation.state == IDLE and harness.pastes) + + +def test_feed_error_waits_for_stop_press(harness): + harness.session_kwargs = {"feed_error": "pipeline overloaded"} + harness.dictation.on_record_key() + harness.microphones[0].push(LOUD) + time.sleep(0.1) + + assert harness.dictation.state == RECORDING + harness.dictation.on_record_key() + wait_for(lambda: harness.dictation.state == IDLE and harness.sessions[0].closed) + assert harness.pastes == [] + notes = [e for e in harness.feedback.events if isinstance(e, tuple)] + assert "pipeline overloaded" in notes[-1][2] + + +def test_paste_failure_keeps_text_for_repaste(harness): + harness.paste_error = "xclip not found" + record(harness, [LOUD]) + wait_for(lambda: harness.dictation.state == IDLE and harness.sessions[0].closed) + + assert harness.dictation.last_text == "Hello world." + + +def test_dropped_filler_kept_for_repaste(harness): + harness.session_kwargs = {"text": "Thank you."} + record(harness, [LOUD]) + wait_for(lambda: harness.dictation.state == IDLE and harness.sessions[0].closed) + + assert harness.pastes == [] + assert harness.dictation.last_text == "Thank you." + + +def test_microphone_closed_outside_lock(harness): + record(harness, [LOUD]) + wait_for(lambda: harness.dictation.state == IDLE and harness.pastes) + + assert harness.microphones[0].closed_under_lock is False diff --git a/whisperlivekit/cli.py b/whisperlivekit/cli.py index aec3deff..fe873e98 100644 --- a/whisperlivekit/cli.py +++ b/whisperlivekit/cli.py @@ -1695,6 +1695,7 @@ def _print_help(): Commands: serve Start the transcription server (default) listen Live microphone transcription + dictate Push-to-talk dictation: F9 to record, text pasted at the cursor run Auto-pull model and start server transcribe Transcribe audio files offline bench Benchmark speed and accuracy @@ -1755,6 +1756,10 @@ def main(): if subcmd == "listen": cmd_listen(sys.argv[2:]) return + if subcmd == "dictate": + from whisperlivekit.dictate.app import main as dictate_main + dictate_main(sys.argv[2:]) + return if subcmd == "diagnose": cmd_diagnose(sys.argv[2:]) return diff --git a/whisperlivekit/dictate/app.py b/whisperlivekit/dictate/app.py new file mode 100644 index 00000000..0499f9b8 --- /dev/null +++ b/whisperlivekit/dictate/app.py @@ -0,0 +1,298 @@ +"""`wlk dictate`: press a hotkey, speak, press again, and the text is pasted at the cursor. + +Key presses and microphone blocks arrive on their own threads. Everything that +touches the transcription pipeline runs on the asyncio loop. +""" + +import argparse +import asyncio +import fcntl +import logging +import os +import sys +import threading +import time +from pathlib import Path +from typing import Callable + +import numpy as np + +from whisperlivekit.dictate.audio import SAMPLE_RATE, has_speech, is_hallucination, to_pcm16 +from whisperlivekit.dictate.session import TranscriptionFailed + +logger = logging.getLogger(__name__) + +IDLE, RECORDING, FINISHING = "idle", "recording", "finishing" +BLOCK_SIZE = 1600 # 0.1 s of audio per microphone block +HOTKEY_DEBOUNCE = 0.3 # Seconds; ignore repeated presses of the same key +MIN_FINISH_TIMEOUT = 30.0 +LOCK_FILE = Path.home() / ".cache" / "wlk-dictate" / "lock" + + +class Dictation: + """Record on the first hotkey press, transcribe and paste on the second.""" + + def __init__( + self, + loop: asyncio.AbstractEventLoop, + session_factory: Callable[[], object], + open_microphone: Callable[[Callable[[np.ndarray], None]], object], + paste: Callable[..., None], + active_window: Callable[[], bytes | None], + feedback, + ): + self._loop = loop + self._session_factory = session_factory + self._open_microphone = open_microphone + self._paste = paste + self._active_window = active_window + self._feedback = feedback + self._lock = threading.Lock() + self.state = IDLE + self.last_text: str | None = None + self._microphone = None + self._queue: asyncio.Queue | None = None + self._audio: list[np.ndarray] = [] + + def on_record_key(self): + microphone = None + with self._lock: + if self.state == IDLE: + self._start_recording() + elif self.state == RECORDING: + microphone = self._stop_recording() + else: + self._feedback.error() + # Closed outside the lock: closing waits for the audio callback, which takes the lock + _close(microphone) + + def on_repaste_key(self): + if not self.last_text: + self._feedback.error() + return + text, window = self.last_text, self._active_window() + self._loop.call_soon_threadsafe( + lambda: self._loop.run_in_executor(None, lambda: self._paste(text=text, window=window)) + ) + + def _start_recording(self): + window = self._active_window() + self._feedback.start() + self._audio = [] + self._queue = asyncio.Queue() + self.state = RECORDING + try: + self._microphone = self._open_microphone(self._on_audio) + except Exception as e: + logger.exception("Could not open the microphone") + self.state = IDLE + self._feedback.error() + self._feedback.notify("Dictation failed", f"Could not open the microphone: {e}") + return + future = asyncio.run_coroutine_threadsafe(self._dictate(queue=self._queue, window=window), self._loop) + future.add_done_callback(_log_unexpected_error) + + def _stop_recording(self): + """Switch to finishing; return the microphone for the caller to close.""" + self.state = FINISHING + self._feedback.stop() + self._loop.call_soon_threadsafe(self._queue.put_nowait, None) + microphone, self._microphone = self._microphone, None + return microphone + + def _on_audio(self, chunk: np.ndarray): + with self._lock: + if self.state != RECORDING: + return + self._audio.append(chunk) + self._loop.call_soon_threadsafe(self._queue.put_nowait, to_pcm16(chunk)) + + async def _dictate(self, queue: asyncio.Queue, window: bytes | None): + """Run one recording from first audio block to paste.""" + session = None + try: + session = self._session_factory() + await session.start() + feed_error = None + # Keep reading until the stop press even if the pipeline fails, so + # that press ends this recording instead of starting a new one. + while (pcm := await queue.get()) is not None: + if feed_error is None: + try: + await session.feed(pcm) + except Exception as e: + logger.exception("Feeding audio failed") + feed_error = e + if feed_error is not None: + raise feed_error + + audio = np.concatenate(self._audio) if self._audio else np.zeros(0, dtype=np.float32) + if not has_speech(audio): + self._feedback.notify("No speech detected") + return + timeout = max(MIN_FINISH_TIMEOUT, 2.5 * len(audio) / SAMPLE_RATE) + text = await session.finish(timeout=timeout) + if not text: + self._feedback.notify("No speech detected") + return + self.last_text = text + if is_hallucination(text): + logger.info("Dropped likely hallucination: %r", text) + self._feedback.notify("No speech detected", f"Heard {text!r}. Press F8 to paste it anyway.") + return + await asyncio.to_thread(self._paste, text=text, window=window) + logger.info("Pasted %d characters", len(text)) + except Exception as e: + logger.exception("Dictation failed") + self._feedback.error() + self._feedback.notify("Dictation failed", _error_message(e)) + finally: + try: + if session is not None: + await session.close() + except Exception: + logger.exception("Cleaning up the session failed") + finally: + with self._lock: + microphone, self._microphone = self._microphone, None + self.state = IDLE + _close(microphone) + + +def _close(microphone): + if microphone is not None: + try: + microphone.close() + except Exception: + logger.exception("Closing the microphone failed") + + +def _log_unexpected_error(future): + if not future.cancelled() and future.exception() is not None: + logger.error("Dictation task failed", exc_info=future.exception()) + + +def _error_message(error: Exception) -> str: + message = str(error) or type(error).__name__ + if "out of memory" in message.lower(): + return f"GPU out of memory: {message}" + if not isinstance(error, TranscriptionFailed): + return f"{type(error).__name__}: {message}" + return message + + +def parse_dictate_args(argv: list[str]) -> tuple[argparse.Namespace, list[str]]: + """Split dictation flags from the server/model flags.""" + parser = argparse.ArgumentParser(prog="wlk dictate", add_help=False) + parser.add_argument("--hotkey", default="f9", help="Key that starts and stops a recording (default: f9)") + parser.add_argument("--repaste-hotkey", default="f8", help="Key that pastes the last text again (default: f8)") + parser.add_argument("-h", "--help", action="store_true") + return parser.parse_known_args(argv) + + +def _print_help(): + from whisperlivekit.parse_args import build_parser + + print("usage: wlk dictate [--hotkey KEY] [--repaste-hotkey KEY] [model options]\n") + print("Push-to-talk dictation: press the hotkey, speak, press it again; the text is pasted at the cursor.\n") + print("dictation options:") + print(" --hotkey KEY start/stop recording (default: f9)") + print(" --repaste-hotkey KEY paste the last text again (default: f8)\n") + print("Model and streaming options (same as `wlk serve`; host/port are ignored):\n") + build_parser().print_help() + + +def _acquire_lock(): + """Exit if another `wlk dictate` is running; keep the returned file open.""" + LOCK_FILE.parent.mkdir(parents=True, exist_ok=True) + lock = open(LOCK_FILE, "a+") + try: + fcntl.flock(lock, fcntl.LOCK_EX | fcntl.LOCK_NB) + except BlockingIOError: + lock.seek(0) + print(f"wlk dictate is already running (PID {lock.read().strip() or '?'})") + sys.exit(1) + lock.truncate(0) + lock.write(str(os.getpid())) + lock.flush() + return lock + + +def _open_microphone(callback: Callable[[np.ndarray], None]): + import sounddevice as sd + + def on_block(indata, frames, time_info, status): + callback(indata[:, 0].copy()) + + stream = sd.InputStream(samplerate=SAMPLE_RATE, channels=1, dtype="float32", blocksize=BLOCK_SIZE, callback=on_block) + stream.start() + return stream + + +def _key(name: str): + from pynput import keyboard + + try: + return getattr(keyboard.Key, name.lower()) + except AttributeError: + raise SystemExit(f"Unknown hotkey: {name}") from None + + +def main(argv: list[str] | None = None): + args, rest = parse_dictate_args(sys.argv[1:] if argv is None else argv) + if args.help: + _print_help() + return + + from whisperlivekit import AudioProcessor, TranscriptionEngine + from whisperlivekit.parse_args import parse_args + + config = parse_args(rest) + logging.basicConfig(level=config.log_level, format="%(asctime)s %(levelname)s %(name)s: %(message)s") + record_key, repaste_key = _key(args.hotkey), _key(args.repaste_hotkey) + lock = _acquire_lock() # noqa: F841 - held open for the life of the process + + logger.info("Loading model %s", config.model_size) + engine = TranscriptionEngine(config=config) + asyncio.run(_run(engine=engine, processor_class=AudioProcessor, record_key=record_key, repaste_key=repaste_key)) + + +async def _run(engine, processor_class, record_key, repaste_key): + from pynput import keyboard + + from whisperlivekit.dictate import paste + from whisperlivekit.dictate.feedback import Feedback + from whisperlivekit.dictate.session import DictationSession + + feedback = Feedback() + dictation = Dictation( + loop=asyncio.get_running_loop(), + session_factory=lambda: DictationSession( + processor_factory=lambda: processor_class(transcription_engine=engine, pcm_input=True) + ), + open_microphone=_open_microphone, + paste=paste.paste, + active_window=paste.active_window, + feedback=feedback, + ) + handlers = {record_key: dictation.on_record_key, repaste_key: dictation.on_repaste_key} + last_press: dict = {} + + def on_press(key): + handler = handlers.get(key) + if handler is None: + return + now = time.monotonic() + if now - last_press.get(key, 0.0) < HOTKEY_DEBOUNCE: + return + last_press[key] = now + try: + handler() + except Exception: + logger.exception("Hotkey handler failed") + + with keyboard.Listener(on_press=on_press): + feedback.ready() + logger.info("Ready. Press %s to dictate, %s to paste the last text again.", + record_key.name.upper(), repaste_key.name.upper()) + await asyncio.Event().wait() diff --git a/whisperlivekit/dictate/feedback.py b/whisperlivekit/dictate/feedback.py new file mode 100644 index 00000000..2679502e --- /dev/null +++ b/whisperlivekit/dictate/feedback.py @@ -0,0 +1,46 @@ +"""Beeps and desktop notifications for dictation.""" + +import logging +import subprocess +import threading + +import numpy as np + +logger = logging.getLogger(__name__) + +BEEP_RATE = 44100 + + +class Feedback: + """Short tones for start/stop/error and notify-send messages.""" + + def start(self): + self._beep(freq=880, duration=0.08) + + def stop(self): + self._beep(freq=440, duration=0.12) + + def error(self): + self._beep(freq=220, duration=0.2) + + def ready(self): + self._beep(freq=660, duration=0.08) + + def notify(self, title: str, body: str = ""): + threading.Thread(target=self._notify, args=(title, body), daemon=True).start() + + def _beep(self, freq: float, duration: float, volume: float = 0.12): + import sounddevice as sd + + t = np.linspace(0, duration, int(BEEP_RATE * duration), False) + wave = (volume * np.sin(2 * np.pi * freq * t)).astype(np.float32) + try: + sd.play(wave, BEEP_RATE) + except Exception: + logger.debug("Beep failed", exc_info=True) + + def _notify(self, title: str, body: str): + try: + subprocess.run(["notify-send", title, body, "-t", "5000"], timeout=30, stderr=subprocess.DEVNULL) + except (OSError, subprocess.TimeoutExpired): + logger.debug("notify-send failed", exc_info=True) From 14c4c7439c7169611ec26af13c6044bfde344b4c Mon Sep 17 00:00:00 2001 From: Chris Smit Date: Thu, 15 Oct 2026 14:13:39 +0200 Subject: [PATCH 5/7] docs: describe wlk dictate in README Co-Authored-By: Claude Opus 5.5 --- README.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/README.md b/README.md index 01e50f4f..2d6f557c 100644 --- a/README.md +++ b/README.md @@ -386,6 +386,46 @@ async def websocket_endpoint(websocket: WebSocket): **Frontend Implementation**: The package includes an HTML/JavaScript implementation [here](https://github.com/QuentinFuxa/WhisperLiveKit/blob/main/whisperlivekit/web/live_transcription.html). You can also import it using `from whisperlivekit import get_inline_ui_html` & `page = get_inline_ui_html()` +## Dictation (`wlk dictate`) + +Push-to-talk dictation for Linux (X11): press F9, speak, press F9 again, and the text is pasted where your cursor is. Audio goes straight into the streaming pipeline while you speak, so the text is ready within about half a second of stopping. No server or port is opened. F8 pastes the last text again. + +```bash +sudo apt install xdotool x11-utils libnotify-bin # paste, terminal detection, notifications +pip install -e ".[dictate]" +wlk dictate --model large-v3 --backend faster-whisper --backend-policy localagreement --lan en \ + --min-chunk-size 1.0 --buffer_trimming_sec 8 --no-vac --log-level INFO +``` + +- `--hotkey` and `--repaste-hotkey` change the keys (default `f9` and `f8`). All other options are the same as `wlk serve`. +- `--min-chunk-size 1.0 --buffer_trimming_sec 8 --no-vac` keep transcription ahead of your speech. With the defaults it re-transcribes too often and falls behind, so you wait after stopping. +- Terminals get Ctrl+Shift+V instead of Ctrl+V. Your clipboard is restored after pasting. +- Recordings with no speech, and filler Whisper produces from silence ("Thank you for watching."), are not pasted. +- On RTX 50-series GPUs, `--compute-type int8_float16` needs a recent cuBLAS: `pip install nvidia-cublas-cu12==12.9.2.10` and set `LD_LIBRARY_PATH` to its `nvidia/cublas/lib` folder. With it, `large-v3` keeps up on a laptop GPU. + +Run it as a systemd user service: + +```ini +# ~/.config/systemd/user/wlk-dictate.service +[Unit] +Description=WhisperLiveKit dictation +After=graphical-session.target +PartOf=graphical-session.target + +[Service] +ExecStart=/path/to/venv/bin/wlk dictate --model large-v3 --backend faster-whisper --backend-policy localagreement --lan en --min-chunk-size 1.0 --buffer_trimming_sec 8 --no-vac --log-level INFO +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=graphical-session.target +``` + +```bash +systemctl --user daemon-reload && systemctl --user enable --now wlk-dictate +``` + + ## Parameters & Configuration From a384c3f1e1e63e990a0e702aa4f4f50b90435c3c Mon Sep 17 00:00:00 2001 From: Chris Smit Date: Fri, 16 Oct 2026 08:34:49 +0200 Subject: [PATCH 6/7] chore: lock dictate extra dependencies --- uv.lock | 131 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 130 insertions(+), 1 deletion(-) diff --git a/uv.lock b/uv.lock index def39b7a..1db208ab 100644 --- a/uv.lock +++ b/uv.lock @@ -2504,6 +2504,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4", size = 35604, upload-time = "2025-08-26T13:09:05.858Z" }, ] +[[package]] +name = "evdev" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2e/07/eb30593524303d1367f0dc00c1c66582c994dba412a47751e34bad9fa29b/evdev-2.0.0.tar.gz", hash = "sha256:442fb3f4c8dfc9e61e901133c356220c02d663eca8f34722e0cecdd637eba504", size = 33766, upload-time = "2026-08-23T10:31:26.835Z" } + [[package]] name = "fastapi" version = "0.141.1" @@ -8641,6 +8647,100 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b2/e6/94145d714402fd5ade00b5661f2d0ab981219e07f7db9bfa16786cdb9c04/pynndescent-0.6.0-py3-none-any.whl", hash = "sha256:dc8c74844e4c7f5cbd1e0cd6909da86fdc789e6ff4997336e344779c3d5538ef", size = 73511, upload-time = "2026-01-08T21:29:57.306Z" }, ] +[[package]] +name = "pynput" +version = "1.8.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "evdev", marker = "'linux' in sys_platform or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-cu129') or (extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf')" }, + { name = "pyobjc-framework-applicationservices", marker = "sys_platform == 'darwin' or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-cu129') or (extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf')" }, + { name = "pyobjc-framework-quartz", marker = "sys_platform == 'darwin' or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-cu129') or (extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf')" }, + { name = "python-xlib", marker = "'linux' in sys_platform or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-cu129') or (extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf')" }, + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/c6/e2d415610cfbc78308bee44218a46124aaa3301b1df08814df819b2254a1/pynput-1.8.2.tar.gz", hash = "sha256:f493c87157cd3861b4468f7f896857051762f44ed26f1b641e7cc5840a457087", size = 82818, upload-time = "2026-05-12T19:11:39.464Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/98/bbeb760852adb27f166ce1617f0e51aabb15f21b1e60ea703f2aed3c78ac/pynput-1.8.2-py2.py3-none-any.whl", hash = "sha256:8cc38cf13a6ab2749cb375678be8a0fd705d7ce49c8001ff5db4007a723bbef1", size = 92028, upload-time = "2026-05-12T19:11:37.89Z" }, +] + +[[package]] +name = "pyobjc-core" +version = "12.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/78/abc4ce5920305780aeb36b4067a86253378b36e29ba96673a3deb02eb03a/pyobjc_core-12.2.2.tar.gz", hash = "sha256:3906452339cd06a3bb07df103c2511d4cb0f7a22d8771c0b802eba15d9a642b6", size = 1067701, upload-time = "2026-08-11T19:43:39.059Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/8e/18284fec7913ef78b25a1c97f9689ebef98bc14038386191491516abeb25/pyobjc_core-12.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b9cdd686e32db8e451feb19f8a85bc4cd52c2893103881d04aca51e1f35371d1", size = 6481574, upload-time = "2026-08-11T14:13:27.153Z" }, + { url = "https://files.pythonhosted.org/packages/86/b2/bbf7f049880ab40d110e66f25122342a1f6c98d6fe3c59bb98985503c660/pyobjc_core-12.2.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:122e6ad302a2abf5d4d4adb0156db751600ddf2768441696cba17b31323085e7", size = 6427637, upload-time = "2026-08-11T14:51:36.038Z" }, + { url = "https://files.pythonhosted.org/packages/1b/ed/a8bf040caf3704023d74086b7fb96cf4ed2e844e24bd94e5248ba214b700/pyobjc_core-12.2.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:950bd2d9c74634398c4e3d24ef2f213d4e23d705083697464fa67afedc53c1ad", size = 6427113, upload-time = "2026-08-11T15:04:39.424Z" }, + { url = "https://files.pythonhosted.org/packages/e7/5a/760f8b9e116edd43c57e33844dc17619158fbdd311250d4209910192d72d/pyobjc_core-12.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:3772b406edb3ff78171530a17cda1c4a7817f87b87ded0d8715b3fa664df16db", size = 6666817, upload-time = "2026-08-11T19:30:17.01Z" }, +] + +[[package]] +name = "pyobjc-framework-applicationservices" +version = "12.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyobjc-core", marker = "(python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version >= '3.13' and sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (platform_machine != 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129') or sys_platform == 'darwin' or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-14-whisperlivekit-cu129') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-cu129') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf')" }, + { name = "pyobjc-framework-cocoa", marker = "(python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version >= '3.13' and sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (platform_machine != 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129') or sys_platform == 'darwin' or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-14-whisperlivekit-cu129') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-cu129') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf')" }, + { name = "pyobjc-framework-coretext", marker = "(python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version >= '3.13' and sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (platform_machine != 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129') or sys_platform == 'darwin' or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-14-whisperlivekit-cu129') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-cu129') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf')" }, + { name = "pyobjc-framework-quartz", marker = "(python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version >= '3.13' and sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (platform_machine != 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129') or sys_platform == 'darwin' or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-14-whisperlivekit-cu129') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-cu129') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/29/40/b792ecc88a9fa639318509c127f0b153cd334bd27b47df373f4b7362a36d/pyobjc_framework_applicationservices-12.2.2.tar.gz", hash = "sha256:0bcc09531d5854598fd74706d999e4ae3b7c503204d318910d02eba30e8eecef", size = 109668, upload-time = "2026-08-11T19:43:45.347Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/84/50b6ef800cb7d2c4e0e081dbc536023bbf71010894b5a724aff2ee2b756c/pyobjc_framework_applicationservices-12.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:82275ea56be975ee84fafdb340dcfee6b5289422c3f674c1982d3fcd47ba68c9", size = 32703, upload-time = "2026-08-11T19:30:55.803Z" }, + { url = "https://files.pythonhosted.org/packages/00/ed/9d85751400f1cd23d71c824a57352ec4d216a8728255dc00c032c431d3ad/pyobjc_framework_applicationservices-12.2.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5506bd6b5268a97fcb79b5b021f6cbbaaf5cdff3ec87094d8870268d8cf096ed", size = 32765, upload-time = "2026-08-11T19:30:56.696Z" }, + { url = "https://files.pythonhosted.org/packages/b1/9d/fe660a822cc66a4261227b1597855c802b04dee56e5c8c153b9d5e6bcf0d/pyobjc_framework_applicationservices-12.2.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:3b5693a377480cf127caa1c8c835b8620896971029c545d99d01aa31a2c38159", size = 32787, upload-time = "2026-08-11T19:30:57.52Z" }, + { url = "https://files.pythonhosted.org/packages/18/8c/deec4cdf8bc7b21bc2fb9e0e25e3cf99acb645d46207e8e6298a70b7f310/pyobjc_framework_applicationservices-12.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:93ba63aad6607f369c1b38bf91306731da6306fdde5eb67afa407b3f8a87dda7", size = 33043, upload-time = "2026-08-11T19:30:58.669Z" }, +] + +[[package]] +name = "pyobjc-framework-cocoa" +version = "12.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyobjc-core", marker = "(python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version >= '3.13' and sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (platform_machine != 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129') or sys_platform == 'darwin' or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-14-whisperlivekit-cu129') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-cu129') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/75/76/49c6da2c6a831020b4854ba20079d5a1030474bffc776b7b73c2eeff8c15/pyobjc_framework_cocoa-12.2.2.tar.gz", hash = "sha256:c96c0ef69a71afbbb0e6a7d594b455c5fe47d62e0db376ee7a2b4b828c16ace9", size = 3132831, upload-time = "2026-08-11T19:44:02.288Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/a7/370f12143661dff66f2c68a735938afab6530aa3b153f6a7a6f12b5eabab/pyobjc_framework_cocoa-12.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:851dca4c16e70b405e5cd5a8c166cf7c445ae54a4cdd95ce9a523803172f32d1", size = 387300, upload-time = "2026-08-11T19:32:42.043Z" }, + { url = "https://files.pythonhosted.org/packages/fd/2f/b67e73d8bc367e03fe7861cd9c49fff9dcfa6db83bc0630c0adcfb25b7fa/pyobjc_framework_cocoa-12.2.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e106f395531e67694376b0f1184612cbeea3ec8b9bf56b55ef41d026171d2a2d", size = 388117, upload-time = "2026-08-11T19:32:43.161Z" }, + { url = "https://files.pythonhosted.org/packages/db/e1/5d9b04ebb60042b9cb49adc2d33115e2f2c2e4ff7d548017bfaff8b7f536/pyobjc_framework_cocoa-12.2.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:600b1723184ca094931330e79355274949965460e23de38628d601b5a967baf9", size = 388181, upload-time = "2026-08-11T19:32:44.537Z" }, + { url = "https://files.pythonhosted.org/packages/b4/25/2a343357d5fe09bbe9c0e294dc03450866a0d6c1792fad36b6bcc00174c0/pyobjc_framework_cocoa-12.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:875f2aad73963faa81a6b36ae674fd494a4658d6d999e1075e0e2aca3d2391df", size = 392275, upload-time = "2026-08-11T19:32:45.631Z" }, +] + +[[package]] +name = "pyobjc-framework-coretext" +version = "12.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyobjc-core", marker = "(python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version >= '3.13' and sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (platform_machine != 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129') or sys_platform == 'darwin' or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-14-whisperlivekit-cu129') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-cu129') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf')" }, + { name = "pyobjc-framework-cocoa", marker = "(python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version >= '3.13' and sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (platform_machine != 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129') or sys_platform == 'darwin' or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-14-whisperlivekit-cu129') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-cu129') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf')" }, + { name = "pyobjc-framework-quartz", marker = "(python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version >= '3.13' and sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (platform_machine != 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129') or sys_platform == 'darwin' or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-14-whisperlivekit-cu129') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-cu129') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/66/405006d3502ffcd3bc69e0b7249ab7c05a5b43a07fa3959ce6b2a84f3278/pyobjc_framework_coretext-12.2.2.tar.gz", hash = "sha256:64ddc02303217028e32e22c7cc00b5112d84e9d9a67c37d00c2e54f9172284ab", size = 97658, upload-time = "2026-08-11T19:44:17.207Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/27/248f417d419520d9ff9997b37012e41cfb1b4bd35650b15fbd7f1f3c4749/pyobjc_framework_coretext-12.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:77a379ff47c599cb2bab918eb75680d30d950692ec19d67b734d11ded090b4e1", size = 30023, upload-time = "2026-08-11T19:34:41.111Z" }, + { url = "https://files.pythonhosted.org/packages/1c/88/e85a9268285fc0c28284dbdc869a27f5d3f2e436d2838221a6704b4f8eee/pyobjc_framework_coretext-12.2.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a69611de569d92776e6391ca25492a5bbb4a05ba744006349e377a4fc5f7c8a5", size = 30120, upload-time = "2026-08-11T19:34:41.94Z" }, + { url = "https://files.pythonhosted.org/packages/6c/6d/e1a4c572c867bd40b705687c741a747083c6dbc63bd797bb6ed5c5108f6e/pyobjc_framework_coretext-12.2.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dbd0f288a859e359ee8e7ccf45bc2c489f38ae1087c21468b61d700433e0c91b", size = 30117, upload-time = "2026-08-11T19:34:42.88Z" }, + { url = "https://files.pythonhosted.org/packages/aa/de/ffdf698b69a2b26af73d32ba1bcc06bc6efc0699f5936995017a66c42efb/pyobjc_framework_coretext-12.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:1324d91305022b1de03a12cf82de2b42c87dafe9b12cde6237253658a8637139", size = 30663, upload-time = "2026-08-11T19:34:43.635Z" }, +] + +[[package]] +name = "pyobjc-framework-quartz" +version = "12.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyobjc-core", marker = "(python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version >= '3.13' and sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (platform_machine != 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129') or sys_platform == 'darwin' or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-14-whisperlivekit-cu129') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-cu129') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf')" }, + { name = "pyobjc-framework-cocoa", marker = "(python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version >= '3.13' and sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (python_full_version < '3.13' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (python_full_version < '3.13' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (platform_machine != 'x86_64' and sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129') or sys_platform == 'darwin' or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-14-whisperlivekit-cu129') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform != 'emscripten' and sys_platform != 'linux' and sys_platform != 'win32' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'emscripten' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'win32' and extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-mlx-llm-mt') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-qwen3-vllm') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (sys_platform == 'linux' and extra != 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cpu' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-cu129') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-diarization-sortformer' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra != 'extra-14-whisperlivekit-diarization-diart' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/35/b1/426a37c7ae37280b3ffca2571fb48f211946aee2f4ca31a603ed1943c4a7/pyobjc_framework_quartz-12.2.2.tar.gz", hash = "sha256:810f97b210cfd93704d240860286dfd6df09f9f1c52525fc5c2166723aea3f9e", size = 3218295, upload-time = "2026-08-11T19:45:15.189Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/e8/16d07170d4e1bd182a8e6084abdf283fac90979384b8f53107be9eb110e6/pyobjc_framework_quartz-12.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4b01e325b0cdc121e78730dde9756e971b23069bf141cd62efbcaac76d7b6dbb", size = 218008, upload-time = "2026-08-11T19:40:23.36Z" }, + { url = "https://files.pythonhosted.org/packages/ed/e4/8be95d2ff850f82fb55b44c63333a00a920bf8a73642e7d9c2f3638a26d2/pyobjc_framework_quartz-12.2.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7f668979d0c7320bf8f7ed6e030da578f93ab0f5dd619b295ec735cd8d5faa34", size = 219003, upload-time = "2026-08-11T19:40:24.425Z" }, + { url = "https://files.pythonhosted.org/packages/bb/ae/b515852dbe491171f2f2e2eb7739588a5eb7f36720a739545337b8c0d706/pyobjc_framework_quartz-12.2.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:0ec9751904ef975bf0789d760dc4fadcb400edc4ffe4a736eb54971968babe5c", size = 219404, upload-time = "2026-08-11T19:40:25.461Z" }, + { url = "https://files.pythonhosted.org/packages/ff/5f/c7ee66f4483385396d91f65036c62f3dd20bccaa07354643ef17b259aa75/pyobjc_framework_quartz-12.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:63f6f0f3233dcf650aac1374781e78961b0b17b33e3351953bacf8bd0c430593", size = 224462, upload-time = "2026-08-11T19:40:26.647Z" }, +] + [[package]] name = "pyparsing" version = "3.3.2" @@ -8650,6 +8750,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, ] +[[package]] +name = "pyperclip" +version = "1.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/52/d87eba7cb129b81563019d1679026e7a112ef76855d6159d24754dbd2a51/pyperclip-1.11.0.tar.gz", hash = "sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6", size = 12185, upload-time = "2025-09-26T14:40:37.245Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/80/fc9d01d5ed37ba4c42ca2b55b4339ae6e200b456be3a1aaddf4a9fa99b8c/pyperclip-1.11.0-py3-none-any.whl", hash = "sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273", size = 11063, upload-time = "2025-09-26T14:40:36.069Z" }, +] + [[package]] name = "pytest" version = "9.1.1" @@ -8719,6 +8828,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl", hash = "sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23", size = 30042, upload-time = "2026-06-04T16:18:57.319Z" }, ] +[[package]] +name = "python-xlib" +version = "0.33" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/f5/8c0653e5bb54e0cbdfe27bf32d41f27bc4e12faa8742778c17f2a71be2c0/python-xlib-0.33.tar.gz", hash = "sha256:55af7906a2c75ce6cb280a584776080602444f75815a7aff4d287bb2d7018b32", size = 269068, upload-time = "2022-12-25T18:53:00.824Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/b8/ff33610932e0ee81ae7f1269c890f697d56ff74b9f5b2ee5d9b7fa2c5355/python_xlib-0.33-py2.py3-none-any.whl", hash = "sha256:c3534038d42e0df2f1392a1b30a15a4ff5fdc2b86cfa94f072bf11b10a164398", size = 182185, upload-time = "2022-12-25T18:52:58.662Z" }, +] + [[package]] name = "pytorch-lightning" version = "2.6.1" @@ -12811,6 +12932,11 @@ diarization-sortformer = [ { name = "nemo-toolkit", extra = ["asr"], marker = "extra == 'extra-14-whisperlivekit-diarization-sortformer' or (extra == 'extra-14-whisperlivekit-cpu' and extra == 'extra-14-whisperlivekit-cu129') or (extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-diarization-diart') or (extra == 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-diarization-diart' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-streaming') or (extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm') or (extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-qwen3-streaming' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-qwen3-vllm-metal' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-canary' and extra == 'extra-14-whisperlivekit-mlx-llm-mt' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-cu129' and extra == 'extra-14-whisperlivekit-voxtral-hf') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-diarization-sortformer' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-qwen3-vllm-metal') or (extra == 'extra-14-whisperlivekit-canary' and extra != 'extra-14-whisperlivekit-diarization-sortformer' and extra != 'extra-14-whisperlivekit-mlx-llm-mt' and extra != 'extra-14-whisperlivekit-qwen3-vllm' and extra == 'extra-14-whisperlivekit-voxtral-hf')" }, { name = "onnx" }, ] +dictate = [ + { name = "pynput" }, + { name = "pyperclip" }, + { name = "sounddevice" }, +] funasr = [ { name = "funasr" }, ] @@ -12897,12 +13023,15 @@ requires-dist = [ { name = "onnx", marker = "extra == 'canary'", specifier = ">=1.22.0" }, { name = "onnx", marker = "extra == 'diarization-sortformer'", specifier = ">=1.22.0" }, { name = "psutil", marker = "extra == 'test'", specifier = ">=5.9" }, + { name = "pynput", marker = "extra == 'dictate'" }, + { name = "pyperclip", marker = "extra == 'dictate'" }, { name = "pytest", marker = "extra == 'test'", specifier = ">=7.0" }, { name = "pytest-asyncio", marker = "extra == 'test'", specifier = ">=0.21" }, { name = "python-multipart", specifier = ">=0.0.31" }, { name = "qwen3-asr-causal", extras = ["metal"], marker = "extra == 'qwen3-vllm-metal'", editable = "third_party/qwen3-asr-causal" }, { name = "qwen3-asr-causal", extras = ["streaming"], marker = "extra == 'qwen3-streaming'", editable = "third_party/qwen3-asr-causal" }, { name = "qwen3-asr-causal", extras = ["vllm"], marker = "extra == 'qwen3-vllm'", editable = "third_party/qwen3-asr-causal" }, + { name = "sounddevice", marker = "extra == 'dictate'" }, { name = "sounddevice", marker = "extra == 'listen'", specifier = ">=0.4.6" }, { name = "soundfile" }, { name = "starlette", specifier = ">=1.3.1" }, @@ -12930,7 +13059,7 @@ requires-dist = [ { name = "websockets" }, { name = "wtpsplit", marker = "extra == 'sentence-tokenizer'" }, ] -provides-extras = ["test", "translation", "sentence-tokenizer", "funasr", "mlx-whisper", "voxtral-mlx", "mlx-llm-mt", "voxtral-hf", "qwen3-vllm-metal", "qwen3-vllm", "qwen3-streaming", "listen", "cpu", "cu129", "diarization-sortformer", "canary", "diarization-diart"] +provides-extras = ["test", "translation", "dictate", "sentence-tokenizer", "funasr", "mlx-whisper", "voxtral-mlx", "mlx-llm-mt", "voxtral-hf", "qwen3-vllm-metal", "qwen3-vllm", "qwen3-streaming", "listen", "cpu", "cu129", "diarization-sortformer", "canary", "diarization-diart"] [package.metadata.requires-dev] dev = [ From 65f8f11ea6b5871846a520ee08be57f499f1a7c4 Mon Sep 17 00:00:00 2001 From: Chris Smit Date: Fri, 16 Oct 2026 08:34:49 +0200 Subject: [PATCH 7/7] docs: list --compute-type in parameter tables --- README.md | 1 + docs/configuration.md | 1 + 2 files changed, 2 insertions(+) diff --git a/README.md b/README.md index 2d6f557c..b8a59f6f 100644 --- a/README.md +++ b/README.md @@ -439,6 +439,7 @@ systemctl --user daemon-reload && systemctl --user enable --now wlk-dictate | `--diarization` | Enable speaker identification | `False` | | `--backend-policy` | Streaming strategy: `1`/`simulstreaming` uses AlignAtt SimulStreaming, `2`/`localagreement` uses the LocalAgreement policy | `simulstreaming` | | `--backend` | ASR backend selector. `auto` picks MLX on macOS (if installed), otherwise Faster-Whisper, otherwise vanilla Whisper. Options: `mlx-whisper`, `faster-whisper`, `whisper`, `openai-api` (LocalAgreement only), `funasr` (SenseVoiceSmall, LocalAgreement only), `voxtral-mlx` (Apple Silicon), `voxtral` (HuggingFace), `qwen3-vllm`, `qwen3-vllm-metal` (Apple Silicon), `qwen3-streaming` (HuggingFace, CUDA/MPS/CPU), `canary` (NeMo, CUDA/CPU, LocalAgreement only) | `auto` | +| `--compute-type` | CTranslate2 compute type for faster-whisper models, e.g. `float16`, `int8_float16`, `float32`. `auto` lets CTranslate2 choose | `auto` | | `--pause-segmentation-seconds` | Create a stable transcript boundary when a VAD pause is longer than this many seconds. Use `0` to disable pause-based segmentation. | `5.0` | | `--asr-coalesce-min-s` | Defer an ASR call until this much new audio has accrued. Trades update cadence for fewer encoder passes; use `0` to disable. | `0` | | `--no-vac` | Disable Voice Activity Controller. NOT ADVISED | `False` | diff --git a/docs/configuration.md b/docs/configuration.md index 4629d6d8..75f0b437 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -12,6 +12,7 @@ same settings as the CLI. | `--model` | Model size or name for the selected backend | `base` | | `--language` | Source language; coverage depends on the backend | `auto` | | `--backend-policy` | Whisper streaming policy: `simulstreaming` or `localagreement` | `simulstreaming` | +| `--compute-type` | CTranslate2 compute type for faster-whisper models, e.g. `float16` or `int8_float16` | `auto` | | `--target-language` | Enable translation to this language | disabled | | `--translation-backend` | `nllb`, the [AlignAtt4LLM server](translation-alignatt.md), or [local MLX translation](translation-mlx.md) | `nllb` | | `--diarization` | Attribute words to speakers | disabled |