Guide d'installation

Déclarer RECscript sur votre passerelle

Cette page s'adresse à l'équipe qui administre la passerelle IA, pas à l'utilisateur de l'application. Elle a probablement été transmise par un collaborateur à qui RECscript demande une adresse, une clé et un nom de modèle qu'il ne peut pas inventer. Compter une dizaine de minutes.

1. Qui fait quoi

RECscript transcrit des réunions sur Android. En mode passerelle, il n'appelle aucun de nos serveurs et aucun fournisseur d'IA directement : il appelle la vôtre, avec une clé que vous émettez, vers le modèle que vous avez choisi. C'est vous qui décidez du fournisseur, de sa juridiction, des quotas et de la journalisation.

ÉtapeQuiOù
Déclarer le modèle, émettre la cléVousVotre passerelle — cette page
Saisir les trois valeurs, testerL'utilisateurRéglages de l'application
Rien à installer de notre côté

Il n'y a aucun connecteur, aucun agent, aucun compte à créer chez nous. RECscript parle le schéma OpenAI : si votre passerelle l'expose — LiteLLM, mais aussi bien un autre proxy compatible — elle convient telle quelle.

2. Ce qui est demandé

L'application a besoin d'un modèle capable de transcrire un fichier audio avec séparation des intervenants. À ce jour, deux identifiants sont validés côté LiteLLM :

  • voxtral-mini-latest
  • voxtral-mini-2602

Le fournisseur derrière cet alias vous appartient : Mistral, un hébergeur européen, ou votre propre déploiement. RECscript ne le connaît pas et n'a pas besoin de le connaître.

Un seul alias sert à tout

L'application n'a qu'un champ « modèle ». Cet alias unique est utilisé pour la transcription et pour la génération de texte (comptes rendus, questions-réponses). Si vous déclarez un modèle qui sait transcrire mais pas dialoguer, la transcription fonctionnera et les comptes rendus échoueront. Voir le config.yaml pour la manière de couvrir les deux.

3. Le config.yaml

Sur une installation LiteLLM, les modèles se déclarent dans le fichier config.yaml — celui que vous passez au serveur via --config, ou monté dans le conteneur. Ajoutez ces entrées à la section model_list existante, sans toucher au reste :

model_list:
  # ── Transcription : c'est cet alias que l'utilisateur saisira ──
  - model_name: voxtral-mini-latest
    litellm_params:
      model: mistral/voxtral-mini-latest
      api_key: os.environ/MISTRAL_API_KEY

  # ── Texte : comptes rendus et questions-réponses ──
  - model_name: ministral-8b-latest
    litellm_params:
      model: mistral/ministral-8b-latest
      api_key: os.environ/MISTRAL_API_KEY

Puis redémarrez la passerelle pour que la déclaration prenne effet. MISTRAL_API_KEY est ici une variable d'environnement du serveur LiteLLM : la clé du fournisseur reste chez vous, et ne descend jamais sur les postes.

Le cas des deux modèles

Comme l'application n'expose qu'un champ, elle enverra voxtral-mini-latest aussi bien aux transcriptions qu'aux comptes rendus. Deux montages fonctionnent :

  • Le plus simple — déclarer les deux entrées ci-dessus, et accepter que les comptes rendus passent par le modèle Voxtral, qui sait aussi dialoguer.
  • Le plus propre — un router_settings avec un fallback de voxtral-mini-latest vers ministral-8b-latest sur les appels /chat/completions, si votre version de LiteLLM le permet.

Le nom que vous mettez dans model_name est libre : transcription-interne conviendrait tout aussi bien. C'est cet alias-là, et pas le nom du modèle sous-jacent, que l'utilisateur devra saisir dans l'application.

4. La clé virtuelle

Émettez une clé virtuelle de la passerelle pour l'application — jamais la clé du fournisseur. C'est tout l'intérêt du montage : le poste client ignore qui est le fournisseur, et vous coupez l'accès en révoquant la clé, sans passer par nous.

curl -X POST 'https://ia.votre-entreprise.fr/key/generate' \
  -H 'Authorization: Bearer $LITELLM_MASTER_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "models": ["voxtral-mini-latest", "ministral-8b-latest"],
    "key_alias": "recscript",
    "max_budget": 50
  }'

Vos politiques habituelles s'appliquent telles quelles : quotas par utilisateur, budgets, journalisation, filtrage. Ce sont celles de votre passerelle, pas les nôtres — nous n'avons aucun moyen de les contourner puisque nous ne sommes pas sur le chemin.

5. Ce qu'on remet à l'utilisateur

Trois valeurs, et rien d'autre :

ChampExempleRemarque
Adresse de la passerelle https://ia.votre-entreprise.fr Sans /v1 final : l'application l'ajoute. Elle tolère qu'il soit présent, et le retire.
Clé sk-… La clé virtuelle émise à l'étape précédente.
Nom du modèle voxtral-mini-latest L'alias tel que model_name le nomme, pas le modèle sous-jacent.

Voici l'écran que votre collaborateur a sous les yeux — Réglages → Clé, carte Entreprise LiteLLM. Les trois champs y sont dans l'ordre du tableau ci-dessus :

Écran Clé de RECscript : carte Entreprise LiteLLM avec les champs Adresse de la passerelle, Clé de la passerelle et Nom du modèle, puis le bouton Tester la connexion.
L'écran Clé de l'application. La carte Entreprise LiteLLM doit être sélectionnée (pastille orange) pour que les trois champs s'appliquent.

Une fois les trois valeurs saisies, il appuie sur Tester la connexion puis sur Enregistrer. Le test vérifie la chaîne complète — adresse joignable, clé acceptée, modèle déclaré, format de réponse exploitable — avant le premier enregistrement, plutôt qu'après une réunion entière.

Déploiement sur un parc

Au-delà de quelques postes, ne faites pas recopier ces trois valeurs à chacun : l'offre Entreprise permet de pousser la configuration depuis votre espace client. Le collaborateur laisse alors les trois champs vides et saisit un code RECS-XXXX-XXXX dans la carte Licence d'entreprise, juste en dessous sur le même écran : la passerelle s'installe seule. En savoir plus sur l'offre Entreprise.

6. Deux écarts de protocole

Mesurés contre LiteLLM le 22 septembre 2026. L'application les traite déjà : vous n'avez rien à faire. Ils sont documentés ici parce qu'ils expliquent deux comportements qui, autrement, ressembleraient à des anomalies.

La diarisation exige verbose_json

Sans response_format=verbose_json, la passerelle applique le format json d'OpenAI et ne renvoie que le texte. Les segments existent côté serveur mais ne sont pas sérialisés : la séparation des intervenants disparaît sans message d'erreur. L'application l'envoie donc systématiquement dans ce mode.

Le streaming est désactivé

LiteLLM ne sait pas relayer le flux SSE de Voxtral : il l'emballe dans un objet d'erreur… renvoyé avec un code HTTP 200. L'application ne le demande donc jamais en mode passerelle. Conséquence visible pour l'utilisateur : la transcription s'affiche d'un bloc au lieu de défiler au fil de l'eau. C'est normal, et non un défaut de votre installation.

7. Dépannage

Les messages ci-dessous sont ceux que le bouton Tester la connexion affiche à l'utilisateur. Le détail technique renvoyé par la passerelle est toujours affiché en dessous, tel quel : demandez-le, c'est lui qui porte le diagnostic.

Ce que voit l'utilisateurCause probableOù regarder
Passerelle injoignable DNS, TLS, ou adresse hors du réseau accessible depuis le mobile. L'adresse est-elle résolvable depuis le réseau mobile ou le VPN, et pas seulement depuis le LAN ? Certificat accepté par Android ?
Clé refusée 401 / 403 : clé révoquée, expirée, ou budget épuisé. La clé virtuelle et son max_budget.
Modèle absent L'alias saisi n'est pas dans /v1/models. L'application liste les alias réellement exposés : comparez avec le model_name du config.yaml. Passerelle redémarrée ?
Réponse sans intervenants Réponse aplatie au schéma Whisper d'OpenAI. Un guardrail ou une transformation qui réécrit la réponse et perd les segments.
HTTP 400 — No connected db LiteLLM démarré sans sa base de données. Cas réellement rencontré. La gestion des clés virtuelles exige la base : DATABASE_URL.
Un test réussi ne prouve pas la diarisation

L'échantillon envoyé par le test est un silence de courte durée : il valide la chaîne (adresse, clé, modèle, format), mais il n'y a aucune parole à séparer. La séparation des voix se constate au premier enregistrement réel. L'application le dit à l'utilisateur plutôt que de laisser croire à une garantie qu'elle ne peut pas donner.

8. Ce que nous ne voyons pas

En mode passerelle, aucun contenu de réunion ne transite par nos serveurs, et ils ne sont même pas contactés : l'application appelle votre adresse, pas la nôtre. Les enregistrements, transcriptions et comptes rendus restent dans le stockage privé de l'application sur l'appareil.

Le seul échange qui nous concerne encore, dans l'offre Entreprise, est l'activation d'un appareil sous votre licence : nos serveurs voient qu'un appareil s'enrôle, jamais ce qu'il enregistre. Le détail des chemins d'appel est sur la page technique.

Sur la souveraineté, soyons précis

Une passerelle ne crée aucune garantie juridique par elle-même : elle route des appels. Ce qui détermine la souveraineté de vos données, c'est le fournisseur derrière elle, sa nationalité et le droit auquel il répond. Ce mode ne vous vend pas de la souveraineté — il vous rend un choix qui était déjà le vôtre.

Une question sur votre installation ?

Écrivez-nous en décrivant votre passerelle et le message affiché par le test.

Nous contacter