refactor(agent): consolidate provider preset resolution

This commit is contained in:
jxxghp
2026-05-08 12:35:02 +08:00
parent c9931aa948
commit c6d95cd006
3 changed files with 254 additions and 135 deletions
+101
View File
@@ -294,6 +294,107 @@ class LlmProviderRegistryTest(unittest.TestCase):
"minimax-cn-coding-plan",
)
def test_builtin_moonshot_provider_includes_kimi_for_coding_preset(self):
manager = LLMProviderManager()
provider = manager.get_provider("moonshot")
serialized = manager.list_providers()
moonshot_payload = next(item for item in serialized if item["id"] == "moonshot")
self.assertEqual(provider.name, "Moonshot / Kimi")
self.assertEqual(provider.runtime, "openai_compatible")
self.assertEqual(
tuple((preset.id, preset.label, preset.value, preset.runtime) for preset in provider.base_url_presets),
(
("moonshot-cn", "中国站", "https://api.moonshot.cn/v1", None),
("moonshot-global", "国际站", "https://api.moonshot.ai/v1", None),
(
"moonshot-kimi-coding",
"Kimi for Coding",
"https://api.kimi.com/coding/v1",
"anthropic_compatible",
),
),
)
self.assertEqual(
tuple(item["id"] for item in moonshot_payload["base_url_presets"]),
("moonshot-cn", "moonshot-global", "moonshot-kimi-coding"),
)
def test_kimi_coding_alias_resolves_to_moonshot_provider(self):
manager = LLMProviderManager()
provider = manager.get_provider("kimi-coding")
self.assertEqual(provider.id, "moonshot")
def test_resolve_runtime_prefers_kimi_for_coding_preset_runtime(self):
manager = LLMProviderManager()
runtime = asyncio.run(
manager.resolve_runtime(
provider_id="moonshot",
model=None,
api_key="sk-test",
base_url="https://api.kimi.com/coding/v1",
base_url_preset_id="moonshot-kimi-coding",
)
)
self.assertEqual(runtime["provider_id"], "moonshot")
self.assertEqual(runtime["runtime"], "anthropic_compatible")
self.assertEqual(runtime["base_url"], "https://api.kimi.com/coding")
def test_resolve_model_list_strategy_prefers_kimi_for_coding_preset(self):
manager = LLMProviderManager()
provider = manager.get_provider("moonshot")
self.assertEqual(
manager._resolve_provider_model_list_strategy(
provider,
base_url="https://api.kimi.com/coding/v1",
base_url_preset_id="moonshot-kimi-coding",
),
"anthropic_compatible",
)
def test_chatgpt_oauth_models_follow_models_dev_catalog(self):
manager = LLMProviderManager()
payload = {
"openai": {
"id": "openai",
"name": "OpenAI",
"models": {
"gpt-5.5": {
"name": "GPT-5.5",
"limit": {"context": 400000},
},
"o4-mini": {
"name": "o4-mini",
"limit": {"context": 200000},
},
},
}
}
with patch.object(manager, "get_models_dev_data", AsyncMock(return_value=payload)):
models = asyncio.run(
manager._list_chatgpt_oauth_models(provider_id="chatgpt")
)
self.assertEqual([item["id"] for item in models], ["gpt-5.5", "o4-mini"])
self.assertTrue(all(item["source"] == "models.dev" for item in models))
def test_chatgpt_oauth_models_return_empty_when_catalog_missing(self):
manager = LLMProviderManager()
with patch.object(manager, "get_models_dev_data", AsyncMock(return_value={})):
models = asyncio.run(
manager._list_chatgpt_oauth_models(provider_id="chatgpt")
)
self.assertEqual(models, [])
if __name__ == "__main__":
unittest.main()