hermes-agent/tests/run_agent/test_lmstudio_load_mode.py
2026-07-29 02:19:13 +05:30

85 lines
2.4 KiB
Python

from types import SimpleNamespace
from typing import Any, cast
from hermes_cli.models import LMStudioLoadResult
from run_agent import AIAgent
def _agent(load_mode="explicit"):
return SimpleNamespace(
provider="lmstudio",
model="test/model",
base_url="http://127.0.0.1:1234/v1",
api_key="",
lmstudio_load_mode=load_mode,
_config_context_length=None,
context_compressor=None,
api_mode="chat_completions",
)
def test_lmstudio_jit_load_mode_skips_explicit_preload(monkeypatch):
calls = []
def fake_ensure(*args, **kwargs):
calls.append((args, kwargs))
return LMStudioLoadResult(64_000)
monkeypatch.setattr("hermes_cli.models.ensure_lmstudio_model_loaded", fake_ensure)
result = AIAgent._ensure_lmstudio_runtime_loaded(cast(Any, _agent("jit")))
assert result is None
assert calls == []
def test_lmstudio_explicit_load_mode_passes_no_override_as_none(monkeypatch):
calls = []
def fake_ensure(*args, **kwargs):
calls.append((args, kwargs))
return LMStudioLoadResult(96_000, load_attempted=True)
monkeypatch.setattr("hermes_cli.models.ensure_lmstudio_model_loaded", fake_ensure)
result = AIAgent._ensure_lmstudio_runtime_loaded(cast(Any, _agent("explicit")))
assert result.context_length == 96_000
assert len(calls) == 1
assert calls[0][0][:3] == ("test/model", "http://127.0.0.1:1234/v1", "")
assert calls[0][0][3] is None
assert calls[0][1]["return_load_result"] is True
def test_missing_lmstudio_load_mode_defaults_to_explicit(monkeypatch):
calls = []
agent = _agent()
delattr(agent, "lmstudio_load_mode")
def fake_ensure(*args, **kwargs):
calls.append((args, kwargs))
return LMStudioLoadResult(64_000)
monkeypatch.setattr("hermes_cli.models.ensure_lmstudio_model_loaded", fake_ensure)
AIAgent._ensure_lmstudio_runtime_loaded(cast(Any, agent))
assert len(calls) == 1
def test_explicit_budget_below_loaded_runtime_limits_effective_context():
result = AIAgent._effective_lmstudio_context_length(
80_000,
LMStudioLoadResult(120_000),
)
assert result == 80_000
def test_attempted_unverified_load_has_no_effective_context():
result = AIAgent._effective_lmstudio_context_length(
100_000,
LMStudioLoadResult(None, load_attempted=True),
)
assert result is None