mirror of
https://github.com/open-jarvis/OpenJarvis.git
synced 2026-07-29 18:40:38 +00:00
123 lines
3.8 KiB
Python
123 lines
3.8 KiB
Python
"""Tests for intelligence-pillar appliers."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from openjarvis.learning.spec_search.execute.base import ApplyContext
|
|
from openjarvis.learning.spec_search.models import (
|
|
Edit,
|
|
EditOp,
|
|
EditPillar,
|
|
EditRiskTier,
|
|
)
|
|
|
|
|
|
def _make_ctx(tmp_path: Path) -> ApplyContext:
|
|
(tmp_path / "config.toml").write_text(
|
|
"[learning.routing]\n"
|
|
'policy = "learned"\n'
|
|
"\n"
|
|
"[learning.routing.policy_map]\n"
|
|
'math = "qwen2.5-coder:3b"\n'
|
|
'code = "qwen2.5-coder:7b"\n'
|
|
)
|
|
return ApplyContext(openjarvis_home=tmp_path, session_id="s1")
|
|
|
|
|
|
def _make_routing_edit(
|
|
query_class: str = "math",
|
|
model: str = "qwen2.5-coder:14b",
|
|
) -> Edit:
|
|
return Edit(
|
|
id="edit-001",
|
|
pillar=EditPillar.INTELLIGENCE,
|
|
op=EditOp.SET_MODEL_FOR_QUERY_CLASS,
|
|
target="learning.routing.policy_map.math",
|
|
payload={"query_class": query_class, "model": model},
|
|
rationale="Route math to bigger model",
|
|
expected_improvement="cluster-001",
|
|
risk_tier=EditRiskTier.AUTO,
|
|
)
|
|
|
|
|
|
def _make_param_edit(
|
|
model: str = "qwen2.5-coder:7b",
|
|
param: str = "temperature",
|
|
value: float = 0.3,
|
|
) -> Edit:
|
|
return Edit(
|
|
id="edit-002",
|
|
pillar=EditPillar.INTELLIGENCE,
|
|
op=EditOp.SET_MODEL_PARAM,
|
|
target=f"models.{model}.{param}",
|
|
payload={"model": model, "param": param, "value": value},
|
|
rationale="Lower temperature for code",
|
|
expected_improvement="cluster-001",
|
|
risk_tier=EditRiskTier.AUTO,
|
|
)
|
|
|
|
|
|
class TestSetModelForQueryClassApplier:
|
|
"""Tests for SetModelForQueryClassApplier."""
|
|
|
|
def test_validate_ok(self, tmp_path: Path) -> None:
|
|
from openjarvis.learning.spec_search.execute.appliers.intelligence import (
|
|
SetModelForQueryClassApplier,
|
|
)
|
|
|
|
applier = SetModelForQueryClassApplier()
|
|
ctx = _make_ctx(tmp_path)
|
|
result = applier.validate(_make_routing_edit(), ctx)
|
|
assert result.ok
|
|
|
|
def test_apply_updates_config(self, tmp_path: Path) -> None:
|
|
from openjarvis.learning.spec_search.execute.appliers.intelligence import (
|
|
SetModelForQueryClassApplier,
|
|
)
|
|
|
|
applier = SetModelForQueryClassApplier()
|
|
ctx = _make_ctx(tmp_path)
|
|
applier.apply(_make_routing_edit(), ctx)
|
|
content = ctx.config_path.read_text()
|
|
assert "qwen2.5-coder:14b" in content
|
|
|
|
def test_apply_adds_new_query_class(self, tmp_path: Path) -> None:
|
|
from openjarvis.learning.spec_search.execute.appliers.intelligence import (
|
|
SetModelForQueryClassApplier,
|
|
)
|
|
|
|
applier = SetModelForQueryClassApplier()
|
|
ctx = _make_ctx(tmp_path)
|
|
edit = _make_routing_edit(query_class="science", model="qwen2.5-coder:14b")
|
|
applier.apply(edit, ctx)
|
|
content = ctx.config_path.read_text()
|
|
assert "science" in content
|
|
assert "qwen2.5-coder:14b" in content
|
|
|
|
|
|
class TestSetModelParamApplier:
|
|
"""Tests for SetModelParamApplier."""
|
|
|
|
def test_validate_ok(self, tmp_path: Path) -> None:
|
|
from openjarvis.learning.spec_search.execute.appliers.intelligence import (
|
|
SetModelParamApplier,
|
|
)
|
|
|
|
applier = SetModelParamApplier()
|
|
ctx = _make_ctx(tmp_path)
|
|
result = applier.validate(_make_param_edit(), ctx)
|
|
assert result.ok
|
|
|
|
def test_apply_writes_param(self, tmp_path: Path) -> None:
|
|
from openjarvis.learning.spec_search.execute.appliers.intelligence import (
|
|
SetModelParamApplier,
|
|
)
|
|
|
|
applier = SetModelParamApplier()
|
|
ctx = _make_ctx(tmp_path)
|
|
applier.apply(_make_param_edit(), ctx)
|
|
content = ctx.config_path.read_text()
|
|
assert "temperature" in content
|
|
assert "0.3" in content
|