feat(devin): map model aliases and swe-1-7/haiku/sonnet/gpt-4-1 UIDs

This commit is contained in:
sususu
2026-09-12 21:09:09 +08:00
committed by sususu98
parent ca664c6ede
commit bf06746d42
2 changed files with 64 additions and 0 deletions

View File

@@ -113,6 +113,12 @@ func ResolveDevinChatModelUID(rawModel string, thinkingLevel string, budgetToken
clamped := clampEffort(effort, swe2Efforts, "high")
return "swe-2-" + clamped
case strings.Contains(lowerBase, "swe-1-7") || strings.Contains(lowerBase, "swe-1.7"):
if effort == "medium" {
return "swe-1-7-medium"
}
return "swe-1-7"
case strings.Contains(lowerBase, "fable-5-1") || strings.Contains(lowerBase, "fable-5.1"):
clamped := clampEffort(effort, fable51Efforts, "medium")
return "claude-fable-5-1-" + clamped
@@ -121,10 +127,22 @@ func ResolveDevinChatModelUID(rawModel string, thinkingLevel string, budgetToken
clamped := clampEffort(effort, fable51Efforts, "medium")
return "claude-5-fable-" + clamped
case strings.Contains(lowerBase, "claude-haiku-4-5") || strings.Contains(lowerBase, "claude-haiku-4.5") || strings.Contains(lowerBase, "haiku-4-5"):
return "MODEL_PRIVATE_11"
case strings.Contains(lowerBase, "claude-sonnet-4-5") || strings.Contains(lowerBase, "claude-sonnet-4.5") || strings.Contains(lowerBase, "sonnet-4-5"):
if effort != "" && effort != "none" {
return "MODEL_PRIVATE_3"
}
return "MODEL_PRIVATE_2"
case strings.Contains(lowerBase, "astra"):
clamped := clampEffort(effort, astraEfforts, "medium")
return "gpt-6-astra-" + clamped
case strings.Contains(lowerBase, "gpt-4-1") || strings.Contains(lowerBase, "gpt-4.1"):
return "MODEL_CHAT_GPT_4_1_2025_04_14"
case strings.Contains(lowerBase, "glm-5-2") || strings.Contains(lowerBase, "glm-5.2"):
if effort == "none" {
return "glm-5-2-none"
@@ -139,6 +157,10 @@ func ResolveDevinChatModelUID(rawModel string, thinkingLevel string, budgetToken
clamped := clampEffort(effort, gemini38Efforts, "high")
return "gemini-3-8-flash-" + clamped
case lowerBase == "gemini-3-flash":
clamped := clampEffort(effort, gemini38Efforts, "high")
return "gemini-3-8-flash-" + clamped
case strings.Contains(lowerBase, "grok-4-6") || strings.Contains(lowerBase, "grok-4.6"):
clamped := clampEffort(effort, grok46Efforts, "high")
return "grok-4-6-" + clamped

View File

@@ -172,6 +172,48 @@ func TestResolveDevinChatModelUID(t *testing.T) {
thinkingLevel: "",
want: "deepseek-v4-1-flash-max",
},
{
name: "swe-1-7 default maps to swe-1-7",
rawModel: "devin/swe-1-7",
thinkingLevel: "",
want: "swe-1-7",
},
{
name: "swe-1-7 with medium maps to swe-1-7-medium",
rawModel: "devin/swe-1-7:medium",
thinkingLevel: "",
want: "swe-1-7-medium",
},
{
name: "claude-haiku-4-5 maps to MODEL_PRIVATE_11",
rawModel: "devin/claude-haiku-4-5",
thinkingLevel: "",
want: "MODEL_PRIVATE_11",
},
{
name: "claude-sonnet-4-5 non-thinking maps to MODEL_PRIVATE_2",
rawModel: "devin/claude-sonnet-4-5",
thinkingLevel: "",
want: "MODEL_PRIVATE_2",
},
{
name: "claude-sonnet-4-5 thinking maps to MODEL_PRIVATE_3",
rawModel: "devin/claude-sonnet-4-5:high",
thinkingLevel: "",
want: "MODEL_PRIVATE_3",
},
{
name: "gpt-4-1 maps to MODEL_CHAT_GPT_4_1_2025_04_14",
rawModel: "devin/gpt-4-1",
thinkingLevel: "",
want: "MODEL_CHAT_GPT_4_1_2025_04_14",
},
{
name: "gemini-3-flash alias maps to gemini-3-8-flash-high",
rawModel: "devin/gemini-3-flash",
thinkingLevel: "",
want: "gemini-3-8-flash-high",
},
}
for _, tt := range tests {