import numpy as np from sentence_api.processing import MOSS_ALGORITHM_VERSION, document_from_transcript from sentence_api.transcription import ( Transcript, TranscriptionSegment, WordTimestamp, _wav_bytes, ) SAMPLE_RATE = 16000 VIDEO_HASH = "a" * 64 def _speech(seconds: float) -> np.ndarray: t = np.arange(int(seconds * SAMPLE_RATE)) / SAMPLE_RATE return 0.25 * np.sin(2 * np.pi * 220 * t) def _silence(seconds: float) -> np.ndarray: return np.zeros(int(seconds * SAMPLE_RATE)) def test_document_from_transcript_splits_sentences_at_punctuation(tmp_path): samples = np.concatenate( [ _speech(8.0), _speech(1.5), _speech(10.5), _speech(4.0), ] ).astype(np.float32) wav = tmp_path / "audio.wav" wav.write_bytes(_wav_bytes(samples, SAMPLE_RATE)) transcript = Transcript( text=( "So I've been single for about four years now and I find it hard to meet " "a guy especially in California. I've tried dating apps, I've met friends " "through friends, I've done online dating and I just feel like most of the " "guys that I meet aren't serious about a relationship." ), segments=[ TranscriptionSegment( start_seconds=0.0, end_seconds=8.0, text=( "So I've been single for about four years now and I find it hard " "to meet a guy especially in" ), ), TranscriptionSegment( start_seconds=8.0, end_seconds=9.5, text="California.", words=[WordTimestamp(8.0, 9.5, "California.")], ), TranscriptionSegment( start_seconds=9.5, end_seconds=20.0, text=( "I've tried dating apps, I've met friends through friends, " "I've done online dating" ), ), TranscriptionSegment( start_seconds=20.0, end_seconds=24.0, text=( "and I just feel like most of the guys that I meet aren't serious " "about a relationship." ), ), ], ) document = document_from_transcript( video_hash=VIDEO_HASH, duration_ms=24000, transcript=transcript, language="en", audio_path=wav, ) assert document.algorithm_version == MOSS_ALGORITHM_VERSION assert [sentence.text for sentence in document.sentences] == [ ( "So I've been single for about four years now and I find it hard to meet " "a guy especially in California." ), ( "I've tried dating apps, I've met friends through friends, I've done " "online dating and I just feel like most of the guys that I meet aren't " "serious about a relationship." ), ] assert document.sentences[0].start_ms == 0 assert document.sentences[0].end_ms == 9500 assert document.sentences[1].start_ms == 9500 assert document.sentences[1].end_ms == 24000 assert all(sentence.reference_speech_duration_ms > 0 for sentence in document.sentences)