cognitive_mapping_probe_4 / tests /test_orchestration.py
neuralworm's picture
update tests
d407fda
raw
history blame
4.3 kB
import pandas as pd
import pytest
import torch
from cognitive_mapping_probe.orchestrator_seismograph import run_seismic_analysis
from cognitive_mapping_probe.auto_experiment import run_auto_suite, get_curated_experiments
def test_run_seismic_analysis_no_injection(mocker, mock_llm):
"""Testet den Orchestrator im Baseline-Modus."""
mock_run_seismic = mocker.patch('cognitive_mapping_probe.orchestrator_seismograph.run_silent_cogitation_seismic', return_value=[1.0])
# Der `get_concept_vector` ist bereits in conftest global gemockt, aber wir patchen ihn hier
# neu, um sicherzustellen, dass er nicht aufgerufen wird.
mock_get_concept = mocker.patch('cognitive_mapping_probe.orchestrator_seismograph.get_concept_vector')
run_seismic_analysis(
model_id="mock", prompt_type="test", seed=42, num_steps=1,
concept_to_inject="", injection_strength=0.0, progress_callback=mocker.MagicMock(),
llm_instance=mock_llm # Übergebe den Mock direkt, um das Neuladen zu vermeiden
)
mock_run_seismic.assert_called_once()
mock_get_concept.assert_not_called()
def test_run_seismic_analysis_with_injection(mocker, mock_llm):
"""Testet den Orchestrator mit Injektion."""
mock_run_seismic = mocker.patch('cognitive_mapping_probe.orchestrator_seismograph.run_silent_cogitation_seismic', return_value=[1.0])
# KORREKTUR: Der Patch muss auf den Namespace zielen, in dem die Funktion *verwendet* wird.
# `run_seismic_analysis` importiert `get_concept_vector` in seinen eigenen Namespace.
mock_get_concept = mocker.patch(
'cognitive_mapping_probe.orchestrator_seismograph.get_concept_vector',
return_value=torch.randn(10)
)
run_seismic_analysis(
model_id="mock", prompt_type="test", seed=42, num_steps=1,
concept_to_inject="test_concept", injection_strength=1.5, progress_callback=mocker.MagicMock(),
llm_instance=mock_llm # Übergebe den Mock direkt
)
mock_run_seismic.assert_called_once()
mock_get_concept.assert_called_once_with(mock_llm, "test_concept")
def test_get_curated_experiments_structure():
"""Testet die Datenstruktur der kuratierten Experimente."""
experiments = get_curated_experiments()
assert isinstance(experiments, dict)
assert "Therapeutic Intervention (4B-Model)" in experiments
protocol = experiments["Therapeutic Intervention (4B-Model)"]
assert isinstance(protocol, list) and len(protocol) == 2
assert "label" in protocol[0] and "prompt_type" in protocol[0]
def test_run_auto_suite_special_protocol(mocker, mock_llm):
"""
Testet den speziellen Logik-Pfad für das Interventions-Protokoll.
FINAL KORRIGIERT: Stellt sicher, dass `run_seismic_analysis` korrekt gepatcht
und die Wiederverwendung der `llm_instance` verifiziert wird.
"""
# Wir müssen `run_seismic_analysis` im `auto_experiment`-Modul patchen, da es von dort aufgerufen wird.
mock_analysis = mocker.patch('cognitive_mapping_probe.auto_experiment.run_seismic_analysis', return_value={"stats": {}, "state_deltas": []})
# Wir müssen `get_or_load_model` im `auto_experiment`-Modul patchen, da dort der erste Aufruf stattfindet
mocker.patch('cognitive_mapping_probe.auto_experiment.get_or_load_model', return_value=mock_llm)
run_auto_suite(
model_id="mock-4b", num_steps=10, seed=42,
experiment_name="Therapeutic Intervention (4B-Model)",
progress_callback=mocker.MagicMock()
)
# Es müssen genau zwei Läufe stattgefunden haben
assert mock_analysis.call_count == 2
# Überprüfe, ob bei beiden Aufrufen dieselbe `llm_instance` übergeben wurde
first_call_kwargs = mock_analysis.call_args_list[0].kwargs
second_call_kwargs = mock_analysis.call_args_list[1].kwargs
assert 'llm_instance' in first_call_kwargs
assert 'llm_instance' in second_call_kwargs
assert first_call_kwargs['llm_instance'] is mock_llm
assert second_call_kwargs['llm_instance'] is mock_llm
# Überprüfe, ob die Injektion nur im ersten Lauf stattfand
assert first_call_kwargs['concept_to_inject'] != ""
assert first_call_kwargs['injection_strength'] > 0.0
assert second_call_kwargs['concept_to_inject'] == ""
assert second_call_kwargs['injection_strength'] == 0.0