File size: 2,792 Bytes
35d483e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
from __future__ import annotations

import tempfile
import unittest
from pathlib import Path
from types import SimpleNamespace
from unittest.mock import patch

import numpy as np

import app
from turn_detection.runtime import Prediction


class _DevelopmentPredictor:
    metadata = SimpleNamespace(
        development_only=True,
        training_status="preview-only",
        data_scope="one audited shard",
        threshold=0.73,
    )

    def predict(self, audio: object, sample_rate: int) -> Prediction:
        del audio, sample_rate
        return Prediction(
            endpoint_probability=0.8,
            inference_ms=1.25,
            model_name="partial-preview",
        )


class DemoEvidenceStatusTest(unittest.TestCase):
    def test_default_model_supports_space_and_model_repository_layouts(self) -> None:
        with tempfile.TemporaryDirectory() as directory:
            root = Path(directory)
            space_model = root / "artifacts" / "model.onnx"
            repository_model = root / "model.onnx"
            repository_model.write_bytes(b"onnx")
            with patch.object(
                app,
                "DEFAULT_MODEL_CANDIDATES",
                (space_model, repository_model),
            ):
                self.assertEqual(app._default_model_path(), repository_model)

            space_model.parent.mkdir(parents=True)
            space_model.write_bytes(b"onnx")
            with patch.object(
                app,
                "DEFAULT_MODEL_CANDIDATES",
                (space_model, repository_model),
            ):
                self.assertEqual(app._default_model_path(), space_model)

            space_model.unlink()
            repository_model.unlink()
            with patch.object(
                app,
                "DEFAULT_MODEL_CANDIDATES",
                (space_model, repository_model),
            ):
                self.assertEqual(app._default_model_path(), space_model)

    def test_development_model_is_conspicuously_labelled(self) -> None:
        with patch.object(app, "get_predictor", return_value=_DevelopmentPredictor()):
            status, labels, diagnostics, timeline = app.analyze_turn(
                (16_000, np.zeros(1_600, dtype=np.float32)),
                threshold=0.73,
                silence_ms=300,
                max_silence_ms=1_800,
            )

        self.assertIn("Development model", status)
        self.assertIn("one audited shard", status)
        self.assertTrue(diagnostics["development_only"])
        self.assertTrue(diagnostics["emit_response"])
        self.assertEqual(diagnostics["training_status"], "preview-only")
        self.assertEqual(labels["END"], 0.8)
        self.assertIn("threshold 0.73", timeline)


if __name__ == "__main__":
    unittest.main()