diff --git a/dockerfiles/Dockerfile.hermes-jetson-stt b/dockerfiles/Dockerfile.hermes-jetson-stt index fef9bd6c7..63da6b9a9 100644 --- a/dockerfiles/Dockerfile.hermes-jetson-stt +++ b/dockerfiles/Dockerfile.hermes-jetson-stt @@ -14,6 +14,9 @@ RUN python3 -m pip install --no-cache-dir --force-reinstall --no-deps \ ADD --checksum=sha256:aff26ae408abcba5fbf8813c21e62b0941638c5f6eebfb145be0c9839262a19a --chmod=0444 \ https://openaipublic.azureedge.net/main/whisper/models/aff26ae408abcba5fbf8813c21e62b0941638c5f6eebfb145be0c9839262a19a/large-v3-turbo.pt \ /opt/models/whisper/large-v3-turbo.pt +ADD --checksum=sha256:9ecf779972d90ba49c06d968637d720dd632c55bbf19d441fb42bf17a411e794 --chmod=0444 \ + https://openaipublic.azureedge.net/main/whisper/models/9ecf779972d90ba49c06d968637d720dd632c55bbf19d441fb42bf17a411e794/small.pt \ + /opt/models/whisper/small.pt RUN chmod 0555 /opt/models /opt/models/whisper COPY dockerfiles/hermes-jetson-stt-server.py /opt/atlas/hermes-jetson-stt-server.py @@ -25,11 +28,11 @@ WORKDIR /opt/atlas # Import the Xavier CUDA stack and confirm Whisper resolves the baked artifact. # Full GPU warm-up is covered by the Kubernetes startup probe on titan-21. -RUN python3 -c "import stat; from pathlib import Path; import torch, whisper; p=Path('/opt/models/whisper'); print(whisper.__file__, whisper.__version__, whisper.available_models()); assert 'large-v3-turbo' in whisper.available_models(); assert stat.S_IMODE(p.stat().st_mode)==0o555; assert stat.S_IMODE((p/'large-v3-turbo.pt').stat().st_mode)==0o444; print(torch.__version__)" +RUN python3 -c "import stat; from pathlib import Path; import torch, whisper; p=Path('/opt/models/whisper'); print(whisper.__file__, whisper.__version__, whisper.available_models()); assert {'large-v3-turbo','small'} <= set(whisper.available_models()); assert stat.S_IMODE(p.stat().st_mode)==0o555; assert all(stat.S_IMODE((p/name).stat().st_mode)==0o444 for name in ('large-v3-turbo.pt','small.pt')); print(torch.__version__)" ENV HERMES_STT_HOST=0.0.0.0 \ HERMES_STT_PORT=9000 \ - HERMES_STT_MODEL=large-v3-turbo \ + HERMES_STT_MODEL=small \ HERMES_STT_CACHE=/opt/models/whisper \ PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 diff --git a/dockerfiles/hermes-jetson-stt-server.py b/dockerfiles/hermes-jetson-stt-server.py index 91550be88..a10ca336e 100644 --- a/dockerfiles/hermes-jetson-stt-server.py +++ b/dockerfiles/hermes-jetson-stt-server.py @@ -17,7 +17,7 @@ import whisper HOST = os.getenv("HERMES_STT_HOST", "0.0.0.0") PORT = int(os.getenv("HERMES_STT_PORT", "9000")) -MODEL_NAME = os.getenv("HERMES_STT_MODEL", "large-v3-turbo") +MODEL_NAME = os.getenv("HERMES_STT_MODEL", "small") CACHE_DIR = Path(os.getenv("HERMES_STT_CACHE", "/cache/whisper")) MAX_AUDIO_BYTES = 30 * 1024 * 1024 MODEL_LOCK = threading.Lock() diff --git a/services/hermes/chat-configmap.yaml b/services/hermes/chat-configmap.yaml index afecbb0f1..c1c4fc8e2 100644 --- a/services/hermes/chat-configmap.yaml +++ b/services/hermes/chat-configmap.yaml @@ -39,7 +39,7 @@ data: enabled: true provider: local_command local: - model: large-v3-turbo + model: small language: auto model_catalog: enabled: true diff --git a/services/hermes/scripts/hermes_stt_client.py b/services/hermes/scripts/hermes_stt_client.py index da9228ad2..639fc7b11 100644 --- a/services/hermes/scripts/hermes_stt_client.py +++ b/services/hermes/scripts/hermes_stt_client.py @@ -48,7 +48,7 @@ def main() -> None: parser.add_argument("input_path", type=Path) parser.add_argument("--output-dir", required=True, type=Path) parser.add_argument("--language", default="auto") - parser.add_argument("--model", default="large-v3-turbo") + parser.add_argument("--model", default="small") args = parser.parse_args() body, boundary = _multipart(args.input_path, args.language, args.model) diff --git a/services/hermes/voice-deployment.yaml b/services/hermes/voice-deployment.yaml index c7e0c8638..e79452e8b 100644 --- a/services/hermes/voice-deployment.yaml +++ b/services/hermes/voice-deployment.yaml @@ -19,7 +19,7 @@ spec: app: hermes-stt annotations: ai.bstein.dev/role: private-chat-speech-to-text - ai.bstein.dev/model: whisper-turbo + ai.bstein.dev/model: whisper-small-multilingual ai.bstein.dev/gpu: titan-21 dedicated speech time-slice spec: runtimeClassName: nvidia @@ -31,7 +31,7 @@ spec: kubernetes.io/hostname: titan-21 containers: - name: stt - image: registry.bstein.dev/bstein/hermes-jetson-stt@sha256:d70bc0892bfce7dc474b24c62d2427a22c6022d0d406c349fcb83d82130de768 + image: registry.bstein.dev/bstein/hermes-jetson-stt@sha256:341fd5c93d202d7368bbd74bd392f207c66e6d3968cc39f2d1684ec87a9d3899 imagePullPolicy: IfNotPresent ports: - {name: http, containerPort: 9000, protocol: TCP} @@ -39,7 +39,7 @@ spec: - {name: HOME, value: /tmp} - {name: XDG_CACHE_HOME, value: /tmp/cache} - {name: HERMES_STT_PORT, value: "9000"} - - {name: HERMES_STT_MODEL, value: large-v3-turbo} + - {name: HERMES_STT_MODEL, value: small} - {name: HERMES_STT_CACHE, value: /opt/models/whisper} - {name: NVIDIA_VISIBLE_DEVICES, value: all} - {name: NVIDIA_DRIVER_CAPABILITIES, value: compute,utility} diff --git a/testing/tests/test_hermes_chat_quality.py b/testing/tests/test_hermes_chat_quality.py index f7c30ece5..ec2f84791 100644 --- a/testing/tests/test_hermes_chat_quality.py +++ b/testing/tests/test_hermes_chat_quality.py @@ -171,7 +171,7 @@ def test_chat_voice_uses_private_jetson_services_and_shared_auto_route(): assert config["stt"] == { "enabled": True, "provider": "local_command", - "local": {"model": "large-v3-turbo", "language": "auto"}, + "local": {"model": "small", "language": "auto"}, } dockerfile = (ROOT / "dockerfiles" / "Dockerfile.hermes-webui").read_text() @@ -191,6 +191,7 @@ def test_voice_models_are_baked_and_runtime_has_no_public_egress(): stt_dockerfile = (ROOT / "dockerfiles" / "Dockerfile.hermes-jetson-stt").read_text() tts_dockerfile = (ROOT / "dockerfiles" / "Dockerfile.hermes-jetson-tts").read_text() assert "ADD --checksum=sha256:aff26ae4" in stt_dockerfile + assert "ADD --checksum=sha256:9ecf7799" in stt_dockerfile assert "--chmod=0444" in stt_dockerfile assert "chmod 0555 /opt/models /opt/models/whisper" in stt_dockerfile assert "HERMES_STT_CACHE=/opt/models/whisper" in stt_dockerfile