feat: removido o tamanho do modelo do seletor da tela Editar vídeo
- removido o tamanho do modelo do seletor da tela Editar vídeo - acelerada a transcrição do Scanner com inferência Whisper em lote e cache de hashes - garantido um resultado separado para cada clipe de áudio selecionado no Scanner - adicionado cancelamento do processamento do Scanner pela barra de progresso - exibido estado visual próprio para Scanner cancelado na barra de progresso - reorganizada a tela Scanner em blocos separados de imagem e som Resumo: - 7 arquivos alterados - 1 novos - 6 modificados - 0 removidos 6 files changed, 92 insertions(+), 40 deletions(-) Arquivos: - .jhonny/analises.db - code/cep-plugin/index.html - code/cep-plugin/main.js - code/cep-plugin/styles.css - code/engine/integracoes/whisper/provider_de_transcricao_local.py - code/engine/scanner/transcricao_da_timeline.py - code/engine/testes/test_provider_de_transcricao_local.py
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
"""Testes do provider local de transcrição em lote."""
|
||||
|
||||
import sys
|
||||
import tempfile
|
||||
import types
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import patch
|
||||
|
||||
from engine.integracoes.whisper import ProviderDeTranscricaoLocal
|
||||
|
||||
|
||||
class TesteDoProviderDeTranscricaoLocal(unittest.TestCase):
|
||||
"""Verifica a configuração e a conversão dos segmentos do provider."""
|
||||
|
||||
def test_usa_pipeline_em_lote_com_vad_e_timestamps_de_palavras(self):
|
||||
"""Mantém as opções de qualidade ao usar inferência em lote."""
|
||||
chamadas = {}
|
||||
|
||||
class ModeloFalso:
|
||||
"""Representa o modelo externo durante o teste."""
|
||||
|
||||
def __init__(self, *argumentos, **opcoes):
|
||||
chamadas["modelo"] = (argumentos, opcoes)
|
||||
|
||||
class PipelineFalso:
|
||||
"""Representa o pipeline em lote durante o teste."""
|
||||
|
||||
def __init__(self, model):
|
||||
chamadas["pipeline_modelo"] = model
|
||||
|
||||
def transcribe(self, *argumentos, **opcoes):
|
||||
chamadas["transcricao"] = (argumentos, opcoes)
|
||||
palavra = SimpleNamespace(word="Olá", start=0.0, end=0.5, probability=0.99)
|
||||
segmento = SimpleNamespace(start=0.0, end=0.5, text=" Olá ", words=[palavra])
|
||||
return iter([segmento]), SimpleNamespace(duration=0.5)
|
||||
|
||||
modulo_falso = types.SimpleNamespace(
|
||||
BatchedInferencePipeline=PipelineFalso,
|
||||
WhisperModel=ModeloFalso,
|
||||
)
|
||||
with tempfile.TemporaryDirectory() as pasta:
|
||||
arquivo = Path(pasta) / "audio.wav"
|
||||
arquivo.write_bytes(b"audio")
|
||||
with patch.dict(sys.modules, {"faster_whisper": modulo_falso}):
|
||||
provider = ProviderDeTranscricaoLocal("small", tamanho_do_lote=8)
|
||||
resultado = provider.transcrever(SimpleNamespace(arquivo=str(arquivo)))
|
||||
|
||||
self.assertEqual(resultado[0].texto, "Olá")
|
||||
self.assertEqual(chamadas["transcricao"][1]["batch_size"], 8)
|
||||
self.assertTrue(chamadas["transcricao"][1]["vad_filter"])
|
||||
self.assertTrue(chamadas["transcricao"][1]["word_timestamps"])
|
||||
|
||||
def test_rejeita_tamanho_de_lote_invalido(self):
|
||||
"""Impede configuração silenciosa de um lote inválido."""
|
||||
with self.assertRaises(ValueError):
|
||||
ProviderDeTranscricaoLocal("small", tamanho_do_lote=0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user