102 lines
2.8 KiB
Markdown
102 lines
2.8 KiB
Markdown
# Arioch — Assistant vocal (Mistral Large + Voxtral TTS)
|
||
|
||
Assistant vocal CLI personnalisé utilisant **Mistral Large** pour les réponses et **Voxtral TTS** pour la synthèse vocale.
|
||
|
||
## Prérequis
|
||
|
||
- Python 3.10+
|
||
- Une clé API Mistral : [console.mistral.ai](https://console.mistral.ai)
|
||
- Lecteur audio installé :
|
||
- **macOS** : `afplay` (inclus)
|
||
- **Linux** : `mpg123` → `sudo apt install mpg123`
|
||
|
||
## Installation
|
||
|
||
```bash
|
||
# Cloner et entrer dans le projet
|
||
cd arioch-assistant
|
||
|
||
# Créer un environnement virtuel
|
||
python -m venv .venv
|
||
source .venv/bin/activate # Linux/macOS
|
||
# .venv\Scripts\activate # Windows
|
||
|
||
# Installer les dépendances
|
||
pip install -r requirements.txt
|
||
|
||
# Configurer l'environnement
|
||
cp .env.example .env
|
||
# Éditer .env et renseigner MISTRAL_API_KEY
|
||
```
|
||
|
||
## Utilisation
|
||
|
||
```bash
|
||
python main.py
|
||
```
|
||
|
||
### Commandes disponibles
|
||
|
||
| Commande | Description |
|
||
|----------|-------------|
|
||
| `exit` / `quit` | Quitter l'assistant |
|
||
| `reset` | Effacer l'historique de conversation |
|
||
| `voice <id>` | Changer la voix Voxtral (voice_id) |
|
||
| `voice clear` | Revenir à la voix par défaut |
|
||
| `help` | Afficher l'aide |
|
||
|
||
## Phase 2 : Voix personnalisée (clonage)
|
||
|
||
Enregistre ta propre voix (ou toute autre) avec un fichier audio de 2–3 secondes :
|
||
|
||
```bash
|
||
python scripts/register_voice.py --name "Ma voix" --audio sample.mp3 --language fr
|
||
```
|
||
|
||
L'ID retourné peut être ajouté dans `.env` :
|
||
```
|
||
VOICE_ID=<id_retourné>
|
||
```
|
||
|
||
## Architecture
|
||
|
||
```
|
||
assistant/
|
||
├── config.py # Variables d'environnement et constantes
|
||
├── llm.py # Chat streaming avec Mistral Large (tool-call loop)
|
||
├── tts.py # Synthèse vocale Voxtral TTS
|
||
├── audio.py # Lecture audio cross-platform
|
||
├── cli.py # Boucle REPL interactive + pipeline TTS streaming
|
||
├── mcp_client.py # Gestionnaire de serveurs MCP (tool calling)
|
||
└── profile.py # Chargement des profils de personnalité YAML
|
||
mcp_servers/
|
||
└── traveller_map/ # Serveur MCP Traveller Map (sources TypeScript intégrées)
|
||
├── src/ # Sources TypeScript
|
||
├── dist/ # Build compilé (node dist/index.js)
|
||
└── package.json
|
||
profiles/
|
||
└── traveller_scout.yaml # Profil avec mcp_servers configuré
|
||
scripts/
|
||
└── register_voice.py # Enregistrement d'une voix clonée
|
||
main.py # Point d'entrée
|
||
```
|
||
|
||
## Serveurs MCP embarqués
|
||
|
||
Les serveurs MCP sont dans `mcp_servers/`. Pour (re)compiler un serveur :
|
||
|
||
```bash
|
||
cd mcp_servers/traveller_map
|
||
npm install # première fois seulement
|
||
npm run build
|
||
```
|
||
|
||
Les serveurs sont déclarés dans le profil YAML avec un chemin **relatif** à la racine du projet :
|
||
|
||
```yaml
|
||
mcp_servers:
|
||
- name: traveller-map
|
||
command: node
|
||
args: ["mcp_servers/traveller_map/dist/index.js"]
|
||
```
|