dponcedeleonf commited on
Commit
1ffbccc
·
verified ·
1 Parent(s): 0c50766

initial: speech-to-speech backend

Browse files
Files changed (3) hide show
  1. Dockerfile +40 -0
  2. README.md +20 -5
  3. entrypoint.sh +31 -0
Dockerfile ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM pytorch/pytorch:2.6.0-cuda12.4-cudnn9-runtime
2
+
3
+ ENV DEBIAN_FRONTEND=noninteractive \
4
+ PYTHONUNBUFFERED=1 \
5
+ PIP_DISABLE_PIP_VERSION_CHECK=1
6
+
7
+ RUN apt-get update && apt-get install -y --no-install-recommends \
8
+ git \
9
+ ffmpeg \
10
+ libsndfile1 \
11
+ espeak-ng \
12
+ curl \
13
+ ca-certificates \
14
+ && rm -rf /var/lib/apt/lists/*
15
+
16
+ RUN useradd -m -u 1000 user
17
+
18
+ USER user
19
+ ENV HOME=/home/user \
20
+ PATH=/home/user/.local/bin:$PATH \
21
+ HF_HOME=/home/user/hf_cache \
22
+ TRANSFORMERS_CACHE=/home/user/hf_cache
23
+
24
+ WORKDIR /home/user/app
25
+
26
+ RUN pip install --user --no-cache-dir --upgrade pip
27
+
28
+ # speech-to-speech desde main (v0.2.10 en PyPI no expone --llm_backend chat-completions)
29
+ RUN pip install --user --no-cache-dir \
30
+ "speech-to-speech @ git+https://github.com/huggingface/speech-to-speech.git@main"
31
+
32
+ # Deps transitivas que a veces faltan en la instalación mínima
33
+ RUN pip install --user --no-cache-dir num2words
34
+
35
+ COPY --chown=user:user entrypoint.sh /home/user/app/entrypoint.sh
36
+ RUN chmod +x /home/user/app/entrypoint.sh
37
+
38
+ EXPOSE 8765
39
+
40
+ CMD ["/home/user/app/entrypoint.sh"]
README.md CHANGED
@@ -1,10 +1,25 @@
1
  ---
2
- title: S2s Backend
3
- emoji: 📊
4
- colorFrom: pink
5
- colorTo: gray
6
  sdk: docker
 
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: S2S Backend HF Cerebras
3
+ emoji: 🎤
4
+ colorFrom: green
5
+ colorTo: indigo
6
  sdk: docker
7
+ app_port: 8765
8
  pinned: false
9
+ suggested_hardware: t4-small
10
+ short_description: Parakeet + Gemma-4 Cerebras + Qwen3-TTS realtime
11
  ---
12
 
13
+ Backend WebSocket compatible con el protocolo OpenAI Realtime GA.
14
+ Sirve `/v1/realtime` en el `app_port` del Space.
15
+
16
+ Corre `huggingface/speech-to-speech --mode realtime` con:
17
+ - **STT**: `nvidia/parakeet-tdt-0.6b-v3` (en GPU del Space)
18
+ - **LLM**: `google/gemma-4-31B-it:cerebras` vía HF Router
19
+ - **TTS**: `Qwen3-TTS-12Hz-1.7B` (en GPU del Space, backend torch)
20
+
21
+ Secretos requeridos:
22
+ - `HF_TOKEN` — token con acceso a Inference Providers (para Cerebras via router)
23
+
24
+ Cliente: cualquier frontend que hable OpenAI Realtime, por ejemplo el fork de
25
+ `smolagents/hf-realtime-voice`. Poner `wss://<este-space>.hf.space` en Settings.
entrypoint.sh ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ if [ -z "${HF_TOKEN:-}" ]; then
5
+ echo "ERROR: HF_TOKEN no está definido. Configuralo en Space Settings -> Secrets."
6
+ exit 1
7
+ fi
8
+
9
+ # Réplica de la config del backend de smolagents/hf-realtime-voice:
10
+ # VAD: Silero (built-in, tiny, en GPU/CPU)
11
+ # STT: Parakeet TDT (NVIDIA), en la GPU del Space
12
+ # LLM: Gemma 4 31B en Cerebras, via HF Router (único servicio remoto)
13
+ # TTS: Qwen3-TTS 1.7B, backend PyTorch en la GPU del Space
14
+ #
15
+ # El backend --qwen3_tts_backend torch evita el wheel específico de CUDA de GGML,
16
+ # más simple para deploy en HF Spaces GPU. Si querés máxima velocidad de TTS
17
+ # después, se puede cambiar a ggml y matchear la versión de CUDA de la base image.
18
+ exec speech-to-speech \
19
+ --mode realtime \
20
+ --stt parakeet-tdt \
21
+ --llm_backend chat-completions \
22
+ --tts qwen3 \
23
+ --qwen3_tts_backend torch \
24
+ --model_name "google/gemma-4-31B-it:cerebras" \
25
+ --responses_api_base_url "https://router.huggingface.co/v1" \
26
+ --responses_api_api_key "$HF_TOKEN" \
27
+ --responses_api_reasoning_effort none \
28
+ --responses_api_stream \
29
+ --enable_live_transcription \
30
+ --ws_host 0.0.0.0 \
31
+ --ws_port 8765