# Configuration STT - Speech-to-Text

CELUNA supporte **4 engines STT** différents, configurables via `config/voice.json`.

## Engines Disponibles

### 1. **PocketSphinx** - Keyword Spotting Léger
- **Usage** : Détection de mots-clés (mode passif)
- **Taille** : ~10 MB
- **Performance** : Très économe (CPU/RAM)
- **Précision** : Moyenne (bon pour wake words)
- **Installation** : `sudo apt install pocketsphinx libpocketsphinx-dev`
- **Modèle** : `/usr/share/pocketsphinx/model/en-us`

**Config** :
```json
{
    "stt": {
        "passive_mode": {
            "enabled": true,
            "engine": "pocketsphinx",
            "keywords": ["celuna", "hey celuna", "ok celuna"],
            "threshold": 0.8,
            "model_path": "/usr/share/pocketsphinx/model/en-us"
        }
    }
}
```

### 2. **Vosk** - STT Local Équilibré
- **Usage** : Transcription complète locale
- **Taille** : 50 MB (small), 1.8 GB (large)
- **Performance** : Rapide, usage modéré
- **Précision** : Bonne
- **Installation** : Télécharger modèle depuis [alphacephei.com/vosk/models](https://alphacephei.com/vosk/models)
- **Modèle** : `./models/vosk-model-small-fr-0.22`

**Config** :
```json
{
    "stt": {
        "active_mode": {
            "enabled": true,
            "engine": "vosk",
            "model_path": "./models/vosk-model-small-fr-0.22",
            "language": "fr"
        }
    }
}
```

### 3. **Whisper.cpp** - STT Local Haute Qualité
- **Usage** : Transcription de haute qualité offline
- **Taille** : 75 MB (tiny) à 2.9 GB (large)
- **Performance** : Plus lourd, très précis
- **Précision** : Excellente
- **Installation** : Compiler whisper.cpp et télécharger modèles GGML
- **Modèle** : `./models/ggml-base.bin`

**Config** :
```json
{
    "stt": {
        "active_mode": {
            "enabled": true,
            "engine": "whisper-cpp",
            "model_path": "./models/ggml-base.bin",
            "language": "fr"
        }
    }
}
```

### 4. **Whisper API** - STT Cloud OpenAI
- **Usage** : Transcription via API OpenAI
- **Taille** : N/A (cloud)
- **Performance** : Dépend de latence réseau
- **Précision** : Excellente
- **Installation** : Aucune (API key requise)
- **Coût** : $0.006 / minute

**Config** :
```json
{
    "stt": {
        "active_mode": {
            "enabled": true,
            "engine": "whisper-api",
            "fallback_engine": "whisper-api"
        },
        "whisper_api": {
            "api_key_env": "OPENAI_API_KEY",
            "model": "whisper-1"
        }
    }
}
```

## Configuration Complète

### Dual Mode (Passive + Active)

```json
{
    "tts": {
        "enabled": true,
        "engine": "auto",
        "rate": 0,
        "volume": 80,
        "voice": "fr-fr"
    },
    "stt": {
        "passive_mode": {
            "enabled": true,
            "engine": "pocketsphinx",
            "keywords": ["celuna", "hey celuna", "ok celuna"],
            "threshold": 0.8,
            "model_path": "/usr/share/pocketsphinx/model/en-us"
        },
        "active_mode": {
            "enabled": true,
            "engine": "vosk",
            "model_path": "./models/vosk-model-small-fr-0.22",
            "language": "fr",
            "timeout_seconds": 30,
            "fallback_engine": "whisper-api"
        },
        "whisper_api": {
            "api_key_env": "OPENAI_API_KEY",
            "model": "whisper-1"
        },
        "microphone": {
            "device_id": -1,
            "sample_rate": 16000,
            "channels": 1,
            "buffer_size": 1024
        }
    }
}
```

## Mode Auto

Utilise `"engine": "auto"` pour sélection automatique :

1. Essaie **Vosk** si modèle disponible
2. Essaie **Whisper.cpp** si modèle disponible
3. Fallback sur **Whisper API** si clé API présente
4. Sinon utilise **Stub** (mode désactivé)

```json
{
    "stt": {
        "active_mode": {
            "engine": "auto",
            "model_path": "./models/vosk-model-small-fr-0.22",
            "language": "fr"
        }
    }
}
```

## Comparaison des Engines

| Engine | Taille | CPU | RAM | Latence | Précision | Usage Recommandé |
|--------|--------|-----|-----|---------|-----------|------------------|
| **PocketSphinx** | 10 MB | Faible | Faible | Très rapide | Moyenne | Wake words, keywords |
| **Vosk** | 50 MB+ | Moyen | Moyen | Rapide | Bonne | Transcription générale |
| **Whisper.cpp** | 75 MB+ | Élevé | Élevé | Moyen | Excellente | Haute qualité offline |
| **Whisper API** | 0 MB | Nul | Nul | Variable | Excellente | Simplicité, cloud |

## Workflow Recommandé

### Scénario 1 : Assistant Vocal Local
```
Mode Passif (PocketSphinx) → Détecte "hey celuna"
    ↓
Mode Actif (Vosk) → Transcrit la commande
    ↓
Traite la commande
```

### Scénario 2 : Haute Qualité avec Fallback
```
Essaie Vosk (local, rapide)
    ↓ (si échec)
Essaie Whisper.cpp (local, précis)
    ↓ (si échec)
Fallback Whisper API (cloud)
```

### Scénario 3 : Cloud-First
```
Whisper API directement (simplicité, pas de setup local)
```

## Installation des Dépendances

### Ubuntu/Debian

```bash
# PocketSphinx
sudo apt install pocketsphinx libpocketsphinx-dev

# Vosk
# Télécharger depuis https://alphacephei.com/vosk/models
mkdir -p models
cd models
wget https://alphacephei.com/vosk/models/vosk-model-small-fr-0.22.zip
unzip vosk-model-small-fr-0.22.zip

# Whisper.cpp
git clone https://github.com/ggerganov/whisper.cpp
cd whisper.cpp
make
# Télécharger modèles GGML
bash ./models/download-ggml-model.sh base
```

## Variables d'Environnement

Configurez dans `.env` :

```bash
# Whisper API (OpenAI)
OPENAI_API_KEY=sk-...

# Optionnel : Chemins personnalisés
STT_MODEL_PATH=/path/to/models
```

## Troubleshooting

### PocketSphinx ne fonctionne pas
```bash
# Vérifier installation
dpkg -l | grep pocketsphinx

# Vérifier modèle
ls /usr/share/pocketsphinx/model/en-us
```

### Vosk ne détecte rien
```bash
# Vérifier que libvosk.so est installée
ldconfig -p | grep vosk

# Télécharger le bon modèle pour votre langue
```

### Whisper.cpp erreur
```bash
# Recompiler avec support GGML
cd whisper.cpp && make clean && make

# Vérifier format du modèle (doit être .bin)
file models/ggml-base.bin
```

### Whisper API timeout
```bash
# Vérifier clé API
echo $OPENAI_API_KEY

# Tester l'API manuellement
curl https://api.openai.com/v1/models \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```
