mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-11-05 08:46:21 +00:00
Merge pull request #6155 from HypoxanthineOvO/fix/composite-kimi-k3-routing
fix(composite): route Kimi Code K3 model IDs
This commit is contained in:
4 files changed
+24
-1
No files matched your search
@@ -31,6 +31,7 @@ func TestOpenAICompatibleTextTargetAllowsCompositeProviders(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
{model: "grok-4.3", platform: service.PlatformGrok},
|
{model: "grok-4.3", platform: service.PlatformGrok},
|
||||||
{model: "kimi-k2-thinking", platform: service.PlatformKimi},
|
{model: "kimi-k2-thinking", platform: service.PlatformKimi},
|
||||||
|
{model: "k3", platform: service.PlatformKimi},
|
||||||
{model: "glm-5.2", platform: service.PlatformZhipu},
|
{model: "glm-5.2", platform: service.PlatformZhipu},
|
||||||
{model: "deepseek-v3.2", platform: service.PlatformDeepseek},
|
{model: "deepseek-v3.2", platform: service.PlatformDeepseek},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -139,7 +139,9 @@ func DetectModelPlatform(model string) (string, bool) {
|
|||||||
return PlatformGemini, true
|
return PlatformGemini, true
|
||||||
case normalized == "grok" || strings.HasPrefix(normalized, "grok-"):
|
case normalized == "grok" || strings.HasPrefix(normalized, "grok-"):
|
||||||
return PlatformGrok, true
|
return PlatformGrok, true
|
||||||
case strings.HasPrefix(normalized, "kimi-"),
|
case normalized == "k3",
|
||||||
|
normalized == "k3-256k",
|
||||||
|
strings.HasPrefix(normalized, "kimi-"),
|
||||||
strings.HasPrefix(normalized, "moonshot-"):
|
strings.HasPrefix(normalized, "moonshot-"):
|
||||||
return PlatformKimi, true
|
return PlatformKimi, true
|
||||||
case strings.HasPrefix(normalized, "glm-"):
|
case strings.HasPrefix(normalized, "glm-"):
|
||||||
|
|||||||
@@ -26,9 +26,13 @@ func TestDetectModelPlatform(t *testing.T) {
|
|||||||
{name: "grok", model: "grok-4", platform: PlatformGrok, ok: true},
|
{name: "grok", model: "grok-4", platform: PlatformGrok, ok: true},
|
||||||
{name: "xai prefix", model: "xai/grok-4", platform: PlatformGrok, ok: true},
|
{name: "xai prefix", model: "xai/grok-4", platform: PlatformGrok, ok: true},
|
||||||
{name: "kimi", model: "kimi-k2-thinking", platform: PlatformKimi, ok: true},
|
{name: "kimi", model: "kimi-k2-thinking", platform: PlatformKimi, ok: true},
|
||||||
|
{name: "kimi code bare k3", model: "K3", platform: PlatformKimi, ok: true},
|
||||||
|
{name: "kimi code bare k3 256k", model: "k3-256k", platform: PlatformKimi, ok: true},
|
||||||
|
{name: "kimi code provider prefix", model: "kimi-code/k3", platform: PlatformKimi, ok: true},
|
||||||
{name: "moonshot prefix", model: "moonshot/moonshot-v1-32k", platform: PlatformKimi, ok: true},
|
{name: "moonshot prefix", model: "moonshot/moonshot-v1-32k", platform: PlatformKimi, ok: true},
|
||||||
{name: "zhipu", model: "glm-5.2", platform: PlatformZhipu, ok: true},
|
{name: "zhipu", model: "glm-5.2", platform: PlatformZhipu, ok: true},
|
||||||
{name: "deepseek", model: "deepseek-v4-pro", platform: PlatformDeepseek, ok: true},
|
{name: "deepseek", model: "deepseek-v4-pro", platform: PlatformDeepseek, ok: true},
|
||||||
|
{name: "unknown k3 alias", model: "k3-preview", ok: false},
|
||||||
{name: "unknown", model: "llama-4-maverick", ok: false},
|
{name: "unknown", model: "llama-4-maverick", ok: false},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -191,6 +191,22 @@ func TestCompositeRouteResolverIgnoresDisabledRoutesAndFallsBackToDetector(t *te
|
|||||||
require.Nil(t, decision.Route)
|
require.Nil(t, decision.Route)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCompositeRouteResolverDetectsKimiCodeBareModels(t *testing.T) {
|
||||||
|
resolver := NewCompositeRouteResolver(nil)
|
||||||
|
|
||||||
|
for _, model := range []string{"k3", "k3-256k", "kimi-code/k3"} {
|
||||||
|
t.Run(model, func(t *testing.T) {
|
||||||
|
decision, err := resolver.Resolve(context.Background(), 7, model, CompositeRouteEndpointMessages)
|
||||||
|
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.True(t, decision.Matched)
|
||||||
|
require.Equal(t, CompositeRouteSourceDetector, decision.Source)
|
||||||
|
require.Equal(t, PlatformKimi, decision.TargetPlatform)
|
||||||
|
require.Equal(t, model, decision.UpstreamModel)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestCompositeRouteResolverExplicitRoutesCoverBucketTwoProviders(t *testing.T) {
|
func TestCompositeRouteResolverExplicitRoutesCoverBucketTwoProviders(t *testing.T) {
|
||||||
resolver := NewCompositeRouteResolver(compositeRouteRepoStub{
|
resolver := NewCompositeRouteResolver(compositeRouteRepoStub{
|
||||||
routes: []CompositeModelRoute{
|
routes: []CompositeModelRoute{
|
||||||
|
|||||||
Reference in new issue
Block a user