Implemented a --modules CLI flag to allow runtime selection of the modules to be run
This commit is contained in:
@@ -2,11 +2,11 @@ import json
|
||||
|
||||
import pytest
|
||||
|
||||
from audita.core.config import AuditaConfig
|
||||
from audita.core.config import AuditaConfig, ConfigOverrides
|
||||
from audita.core.errors import AuditaLLMError
|
||||
from audita.core.io import write_report
|
||||
from audita.core.schemas import parse_glossary_yaml, parse_source_transcript_json
|
||||
from audita.modules import default_module_specs
|
||||
from audita.modules import DEFAULT_MODULE_KEYS, default_module_specs, resolve_module_specs
|
||||
from audita.pipeline import process_transcript, process_transcript_result
|
||||
|
||||
|
||||
@@ -73,9 +73,9 @@ def test_process_transcript_runs_noop_framework(tmp_path):
|
||||
assert revised[0].text == "Hello. Again."
|
||||
assert revised[1].text == "Done."
|
||||
assert [call["stage_name"] for call in llm_client.calls] == [
|
||||
"glossary_primary:proposal",
|
||||
"glossary_1:proposal",
|
||||
"homophones:proposal",
|
||||
"glossary_secondary:proposal",
|
||||
"glossary_2:proposal",
|
||||
]
|
||||
|
||||
|
||||
@@ -111,9 +111,9 @@ def test_process_transcript_result_writes_report_and_preserves_skips_per_policy(
|
||||
|
||||
assert result.work_dir_retained is True
|
||||
assert result.report.pipeline == [
|
||||
"glossary_primary",
|
||||
"glossary_1",
|
||||
"homophones",
|
||||
"glossary_secondary",
|
||||
"glossary_2",
|
||||
"spoken_word",
|
||||
"grammar",
|
||||
]
|
||||
@@ -142,13 +142,21 @@ def test_external_report_can_be_written(tmp_path):
|
||||
write_report(report_path, result.report)
|
||||
|
||||
payload = json.loads(report_path.read_text(encoding="utf-8"))
|
||||
assert payload["pipeline"][0] == "glossary_primary"
|
||||
assert payload["pipeline"][0] == "glossary_1"
|
||||
assert payload["totals"]["applied_change_count"] == 0
|
||||
|
||||
|
||||
def test_default_module_specs_expose_final_validator_order():
|
||||
specs = default_module_specs()
|
||||
|
||||
assert DEFAULT_MODULE_KEYS == ("glossary", "homophones", "glossary", "spoken_word", "grammar")
|
||||
assert [spec.instance_name for spec in specs] == [
|
||||
"glossary_1",
|
||||
"homophones",
|
||||
"glossary_2",
|
||||
"spoken_word",
|
||||
"grammar",
|
||||
]
|
||||
assert [validator.name for validator in specs[0].module.validators()] == [
|
||||
"proposal_confidence_guard",
|
||||
"protected_glossary_guard",
|
||||
@@ -201,9 +209,9 @@ def test_process_transcript_result_missing_api_key_writes_failed_report(tmp_path
|
||||
assert report["status"] == "failed"
|
||||
assert report["normalization"]["normalized_segment_count"] == 2
|
||||
assert report["pipeline"] == [
|
||||
"glossary_primary",
|
||||
"glossary_1",
|
||||
"homophones",
|
||||
"glossary_secondary",
|
||||
"glossary_2",
|
||||
"spoken_word",
|
||||
"grammar",
|
||||
]
|
||||
@@ -286,7 +294,7 @@ def test_process_transcript_result_preserves_partial_progress_when_later_module_
|
||||
|
||||
assert report["status"] == "failed"
|
||||
assert report["normalization"]["normalized_segment_count"] == 1
|
||||
assert [module["instance_name"] for module in report["modules"]] == ["glossary_primary"]
|
||||
assert [module["instance_name"] for module in report["modules"]] == ["glossary_1"]
|
||||
assert report["applied_changes"][0]["corrected_text"] == "Jesters"
|
||||
assert report["applied_changes"][0]["segment_text_after"] == "There were Jesters at the dam."
|
||||
assert report["totals"]["applied_change_count"] == 1
|
||||
@@ -351,7 +359,7 @@ def test_process_transcript_result_preserves_partial_skips_and_validator_diagnos
|
||||
|
||||
run_dir = next((tmp_path / "work").iterdir())
|
||||
report = json.loads((run_dir / "report.json").read_text(encoding="utf-8"))
|
||||
validator_dir = run_dir / "glossary_primary"
|
||||
validator_dir = run_dir / "glossary_1"
|
||||
|
||||
assert report["status"] == "failed"
|
||||
assert report["modules"] == []
|
||||
@@ -361,3 +369,29 @@ def test_process_transcript_result_preserves_partial_skips_and_validator_diagnos
|
||||
assert "unknown correction_index" in report["error"]
|
||||
assert (validator_dir / "spoken_form_plausibility_review-prompt-0000.json").exists()
|
||||
assert (validator_dir / "spoken_form_plausibility_review-response-0000.json").exists()
|
||||
|
||||
|
||||
def test_resolve_module_specs_numbers_repeated_keys():
|
||||
specs = resolve_module_specs(["glossary", "homophones", "glossary"])
|
||||
|
||||
assert [spec.instance_name for spec in specs] == ["glossary_1", "homophones", "glossary_2"]
|
||||
assert [spec.module_key for spec in specs] == ["glossary", "homophones", "glossary"]
|
||||
|
||||
|
||||
def test_process_transcript_result_supports_grammar_only_module_override(tmp_path):
|
||||
config = AuditaConfig.from_sources(
|
||||
env={},
|
||||
overrides=ConfigOverrides(work_dir=tmp_path / "work", work_dir_retention="always"),
|
||||
)
|
||||
|
||||
result = process_transcript_result(
|
||||
_transcript(),
|
||||
_glossary(),
|
||||
config,
|
||||
module_keys=["grammar"],
|
||||
llm_client=FakeStructuredLLMClient([]),
|
||||
)
|
||||
|
||||
assert [segment.id for segment in result.transcript] == [1, 2]
|
||||
assert result.report.pipeline == ["grammar"]
|
||||
assert result.report.totals["applied_change_count"] == 0
|
||||
|
||||
Reference in New Issue
Block a user