feat(plugins): add source-aware evidence and recording timelines
This commit is contained in:
1 parent
72ff342605
commit
ef7af9988e
61 files changed
+3847
-108
No files matched your search
@@ -0,0 +1,79 @@
|
||||
"""Per-task archive quality overrides outrank JSON and saved environment defaults."""
|
||||
|
||||
import json
|
||||
|
||||
import pytest
|
||||
|
||||
from apps.admin_console.services.task_import import TaskCase, TaskOptions
|
||||
from artemis.config.agent import AgentGlobalConfig, load_agent_config
|
||||
from artemis.config.settings import settings
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def recording_defaults(monkeypatch):
|
||||
monkeypatch.setattr(settings, "ARTEMIS_RECORDING_CONFIG", {"fps": 10, "h264_kbps": 900})
|
||||
monkeypatch.setattr(settings, "ARTEMIS_TASK_RECORDING_CONFIG", {})
|
||||
|
||||
|
||||
def test_json_recording_defaults_override_saved_defaults(tmp_path):
|
||||
config = tmp_path / "artemis.jsonc"
|
||||
config.write_text(json.dumps({"agent": {"recording": {"fps": 20}}}), encoding="utf-8")
|
||||
result = load_agent_config(config).recording
|
||||
assert result.fps == 20
|
||||
assert result.h264_kbps == 900
|
||||
assert result.max_long_edge == 1280
|
||||
|
||||
|
||||
def test_task_recording_override_has_highest_priority_and_is_partial(tmp_path, monkeypatch):
|
||||
monkeypatch.setattr(settings, "ARTEMIS_TASK_RECORDING_CONFIG", {"fps": 30})
|
||||
config = tmp_path / "artemis.jsonc"
|
||||
config.write_text(
|
||||
json.dumps({"agent": {"recording": {"fps": 20, "max_long_edge": 1920}}}), encoding="utf-8"
|
||||
)
|
||||
result = load_agent_config(config).recording
|
||||
assert result.fps == 30
|
||||
assert result.max_long_edge == 1920
|
||||
assert result.h264_kbps == 900
|
||||
|
||||
|
||||
def test_task_recording_override_applies_without_json_recording_block(monkeypatch):
|
||||
monkeypatch.setattr(settings, "ARTEMIS_TASK_RECORDING_CONFIG", {"fps": 30})
|
||||
assert AgentGlobalConfig().recording.fps == 30
|
||||
|
||||
|
||||
def test_invalid_task_recording_override_is_rejected(monkeypatch):
|
||||
monkeypatch.setattr(settings, "ARTEMIS_TASK_RECORDING_CONFIG", {"fps": 500})
|
||||
with pytest.raises(ValueError, match="fps"):
|
||||
AgentGlobalConfig.model_validate({"recording": {"fps": 20}})
|
||||
|
||||
|
||||
def test_task_and_batch_serialization_do_not_inject_unset_recording_defaults():
|
||||
options = TaskOptions.model_validate({"recording": {"fps": 30}})
|
||||
assert options.model_dump(exclude_none=True)["recording"] == {"fps": 30}
|
||||
case = TaskCase(name="fixture", goal="fixture", task_config=options)
|
||||
assert case.model_dump()["task_config"]["recording"] == {"fps": 30}
|
||||
# Round trips through stored batches preserve the partial override.
|
||||
restored = TaskCase.model_validate(case.model_dump())
|
||||
assert restored.model_dump()["task_config"]["recording"] == {"fps": 30}
|
||||
|
||||
|
||||
def test_worker_env_keeps_task_quality_separate_from_saved_defaults(monkeypatch):
|
||||
from apps.admin_console.services.task_queue_service import TaskQueueService
|
||||
from artemis.runtime.adb_endpoint import AdbEndpoint, AdbTarget
|
||||
|
||||
monkeypatch.setenv("ARTEMIS_RECORDING_CONFIG", '{"fps":10}')
|
||||
monkeypatch.setenv("ARTEMIS_TASK_RECORDING_CONFIG", '{"fps":60}')
|
||||
_, environment = TaskQueueService._build_worker_invocation(
|
||||
{"runtime_overrides": {"recording": {"fps": 30}}},
|
||||
"test-run",
|
||||
None,
|
||||
"fixture",
|
||||
"flash",
|
||||
AdbTarget(AdbEndpoint.local()),
|
||||
)
|
||||
assert json.loads(environment["ARTEMIS_RECORDING_CONFIG"]) == {"fps": 10}
|
||||
assert json.loads(environment["ARTEMIS_TASK_RECORDING_CONFIG"]) == {"fps": 30}
|
||||
_, clean_environment = TaskQueueService._build_worker_invocation(
|
||||
{}, "test-run", None, "fixture", "flash", AdbTarget(AdbEndpoint.local())
|
||||
)
|
||||
assert "ARTEMIS_TASK_RECORDING_CONFIG" not in clean_environment
|
||||
Reference in new issue
Block a user