fix(agent): resolve supports_vision override for named custom providers
Named custom providers are rewritten to provider="custom" at runtime (hermes_cli/runtime_provider.py:_resolve_named_custom_runtime), so a config under providers.my-vllm.models.my-llava.supports_vision was unreachable via self.provider alone. Also try cfg.model.provider as a candidate provider key, covering both runtime and config naming. Adds a regression test for the named-provider path.
This commit is contained in:
12
run_agent.py
12
run_agent.py
@@ -3213,8 +3213,16 @@ class AIAgent:
|
|||||||
cfg = load_config()
|
cfg = load_config()
|
||||||
provider = (getattr(self, "provider", "") or "").strip()
|
provider = (getattr(self, "provider", "") or "").strip()
|
||||||
model = (getattr(self, "model", "") or "").strip()
|
model = (getattr(self, "model", "") or "").strip()
|
||||||
for keys in (("model", "supports_vision"),
|
# self.provider is the runtime-resolved value, which is rewritten
|
||||||
("providers", provider, "models", model, "supports_vision")):
|
# to "custom" for named custom providers (see
|
||||||
|
# hermes_cli/runtime_provider.py:_resolve_named_custom_runtime),
|
||||||
|
# while the config still holds the user-declared name (e.g.
|
||||||
|
# "my-vllm") under model.provider. Try both as provider keys.
|
||||||
|
config_provider = str(cfg_get(cfg, "model", "provider") or "").strip()
|
||||||
|
candidates = [("model", "supports_vision")]
|
||||||
|
for p in dict.fromkeys(filter(None, (provider, config_provider))):
|
||||||
|
candidates.append(("providers", p, "models", model, "supports_vision"))
|
||||||
|
for keys in candidates:
|
||||||
override = cfg_get(cfg, *keys)
|
override = cfg_get(cfg, *keys)
|
||||||
if override is not None:
|
if override is not None:
|
||||||
return bool(override)
|
return bool(override)
|
||||||
|
|||||||
@@ -186,6 +186,21 @@ class TestModelSupportsVision:
|
|||||||
patch("agent.models_dev.get_model_capabilities", return_value=None):
|
patch("agent.models_dev.get_model_capabilities", return_value=None):
|
||||||
assert agent._model_supports_vision() is True
|
assert agent._model_supports_vision() is True
|
||||||
|
|
||||||
|
def test_named_custom_provider_resolved_via_config_provider(self):
|
||||||
|
# Named custom providers get runtime self.provider rewritten to
|
||||||
|
# "custom" while the config keeps the original name under
|
||||||
|
# model.provider. The override must still resolve.
|
||||||
|
agent = _make_agent()
|
||||||
|
agent.provider = "custom"
|
||||||
|
agent.model = "my-llava"
|
||||||
|
cfg = {
|
||||||
|
"model": {"provider": "my-vllm", "default": "my-llava"},
|
||||||
|
"providers": {"my-vllm": {"models": {"my-llava": {"supports_vision": True}}}},
|
||||||
|
}
|
||||||
|
with patch("hermes_cli.config.load_config", return_value=cfg), \
|
||||||
|
patch("agent.models_dev.get_model_capabilities", return_value=None):
|
||||||
|
assert agent._model_supports_vision() is True
|
||||||
|
|
||||||
def test_override_false_disables_vision_for_models_dev_models(self):
|
def test_override_false_disables_vision_for_models_dev_models(self):
|
||||||
agent = _make_agent()
|
agent = _make_agent()
|
||||||
fake_caps = MagicMock()
|
fake_caps = MagicMock()
|
||||||
|
|||||||
Reference in New Issue
Block a user