mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-04-29 01:31:41 +00:00
fix(config): accept fallback_model list (chain) in validator + save
Runtime already supports list-form fallback_model (run_agent.py:1459 iterates fallback_chain; fallback_cmd.py migrates legacy single-dict configs to list format). The config validator and save_config comment gate still assumed single-dict form and flagged list-form configs as errors. Fix both: - validate_config_structure: when fallback_model is a list, validate each entry has provider+model; keep the existing single-dict path. - save_config: suppress the "add fallback_model" comment when any list entry is well-formed. Adds 4 list-form validator tests.
This commit is contained in:
parent
0edcc57d9a
commit
a8f9c56cb4
2 changed files with 64 additions and 3 deletions
|
|
@ -136,6 +136,40 @@ class TestFallbackModelValidation:
|
|||
fb_issues = [i for i in issues if "fallback" in i.message.lower()]
|
||||
assert len(fb_issues) == 0
|
||||
|
||||
def test_valid_fallback_list(self):
|
||||
"""List-form fallback_model (chain) should validate when every entry has provider+model."""
|
||||
issues = validate_config_structure({
|
||||
"fallback_model": [
|
||||
{"provider": "openrouter", "model": "anthropic/claude-sonnet-4"},
|
||||
{"provider": "anthropic", "model": "claude-sonnet-4-6"},
|
||||
],
|
||||
})
|
||||
fb_issues = [i for i in issues if "fallback" in i.message.lower()]
|
||||
assert len(fb_issues) == 0
|
||||
|
||||
def test_fallback_list_entry_missing_provider(self):
|
||||
issues = validate_config_structure({
|
||||
"fallback_model": [
|
||||
{"provider": "openrouter", "model": "anthropic/claude-sonnet-4"},
|
||||
{"model": "claude-sonnet-4-6"},
|
||||
],
|
||||
})
|
||||
assert any("fallback_model[1]" in i.message and "provider" in i.message for i in issues)
|
||||
|
||||
def test_fallback_list_entry_missing_model(self):
|
||||
issues = validate_config_structure({
|
||||
"fallback_model": [
|
||||
{"provider": "openrouter"},
|
||||
],
|
||||
})
|
||||
assert any("fallback_model[0]" in i.message and "model" in i.message for i in issues)
|
||||
|
||||
def test_fallback_list_entry_not_a_dict(self):
|
||||
issues = validate_config_structure({
|
||||
"fallback_model": ["openrouter:anthropic/claude-sonnet-4"],
|
||||
})
|
||||
assert any("fallback_model[0]" in i.message and "should be a dict" in i.message for i in issues)
|
||||
|
||||
|
||||
class TestMissingModelSection:
|
||||
"""Warn when custom_providers exists but model section is missing."""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue