mirror of
https://github.com/open-jarvis/OpenJarvis.git
synced 2026-07-28 14:07:55 +00:00
* fix(channels): wire channel→agent handler and fix Telegram send pipeline * format code * add supported tests
78 lines
2.8 KiB
Python
78 lines
2.8 KiB
Python
"""Tests for LearningConfig and its integration into JarvisConfig."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from openjarvis.core.config import (
|
|
HardwareInfo,
|
|
JarvisConfig,
|
|
LearningConfig,
|
|
generate_default_toml,
|
|
load_config,
|
|
)
|
|
|
|
|
|
class TestLearningConfig:
|
|
def test_defaults(self) -> None:
|
|
cfg = LearningConfig()
|
|
assert cfg.enabled is False
|
|
assert cfg.update_interval == 100
|
|
assert cfg.auto_update is False
|
|
assert cfg.routing.policy == "heuristic"
|
|
assert cfg.intelligence.policy == "none"
|
|
assert cfg.agent.policy == "none"
|
|
assert cfg.metrics.accuracy_weight == 0.6
|
|
# Backward-compat properties
|
|
assert cfg.default_policy == "heuristic"
|
|
|
|
def test_backward_compat_custom_values(self) -> None:
|
|
cfg = LearningConfig()
|
|
cfg.default_policy = "grpo"
|
|
cfg.reward_weights = "latency=0.4,cost=0.3,efficiency=0.3"
|
|
assert cfg.routing.policy == "grpo"
|
|
assert cfg.metrics.latency_weight == 0.4
|
|
assert cfg.metrics.cost_weight == 0.3
|
|
assert cfg.metrics.efficiency_weight == 0.3
|
|
|
|
def test_jarvis_config_has_learning(self) -> None:
|
|
cfg = JarvisConfig()
|
|
assert hasattr(cfg, "learning")
|
|
assert isinstance(cfg.learning, LearningConfig)
|
|
assert cfg.learning.routing.policy == "heuristic"
|
|
assert cfg.learning.default_policy == "heuristic" # backward-compat
|
|
|
|
def test_toml_loading_with_learning(self, tmp_path: Path) -> None:
|
|
toml_file = tmp_path / "config.toml"
|
|
toml_file.write_text(
|
|
'[learning]\ndefault_policy = "grpo"\nreward_weights = "latency=0.5"\n'
|
|
)
|
|
cfg = load_config(toml_file)
|
|
assert cfg.learning.routing.policy == "grpo"
|
|
assert cfg.learning.metrics.latency_weight == 0.5
|
|
|
|
def test_toml_loading_nested(self, tmp_path: Path) -> None:
|
|
toml_file = tmp_path / "config.toml"
|
|
toml_file.write_text(
|
|
"[learning]\nenabled = true\n\n"
|
|
'[learning.routing]\npolicy = "learned"\n\n'
|
|
"[learning.metrics]\nlatency_weight = 0.5\n"
|
|
)
|
|
cfg = load_config(toml_file)
|
|
assert cfg.learning.enabled is True
|
|
assert cfg.learning.routing.policy == "learned"
|
|
assert cfg.learning.metrics.latency_weight == 0.5
|
|
|
|
def test_toml_loading_without_learning(self, tmp_path: Path) -> None:
|
|
toml_file = tmp_path / "config.toml"
|
|
toml_file.write_text("[engine]\n")
|
|
cfg = load_config(toml_file)
|
|
assert cfg.learning.routing.policy == "heuristic"
|
|
|
|
def test_generate_default_toml_includes_learning(self) -> None:
|
|
hw = HardwareInfo()
|
|
toml_str = generate_default_toml(hw)
|
|
assert "[learning]" in toml_str
|
|
assert "[learning.routing]" in toml_str
|
|
assert 'policy = "heuristic"' in toml_str
|