"""Moteur Gemini : la transcription part chez Google, avec repli local. Aucun test ne touche le réseau : l'envoi HTTP et la lecture de la clé sont injectés. Ce qu'on éprouve ici, c'est la forme de la requête, la lecture de la réponse, et surtout le repli — une dictée ne doit JAMAIS être perdue parce que le réseau ou l'API tombe. """ import base64 import io import wave import numpy as np import pytest from moteur import choisir_transcripteur, detecter_moteur from moteur.gemini import ( ErreurGemini, TranscripteurAvecRepli, TranscripteurGemini, audio_en_wav, lire_cle, ) def _reponse(texte): return {"candidates": [{"content": {"parts": [{"text": texte}]}}]} def _transcripteur(envoyer, cle="cle-test"): return TranscripteurGemini( "gemini-x", "fr", "Vocabulaire : Gitea, iCloud.", lire_cle=lambda: cle, envoyer=envoyer, ) # --- encodage audio --------------------------------------------------------- def test_l_audio_devient_un_wav_16_bits_mono_a_16_khz(): audio = np.array([0.0, 0.5, -0.5, 1.0], dtype="float32") with wave.open(io.BytesIO(audio_en_wav(audio, 16000))) as w: assert (w.getnchannels(), w.getsampwidth(), w.getframerate()) == (1, 2, 16000) echantillons = np.frombuffer(w.readframes(4), dtype="