fix(cli): dedupe generated installer fallback models
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -127,10 +127,19 @@ describe("generateOmoConfig - model fallback system", () => {
|
|||||||
|
|
||||||
//#then
|
//#then
|
||||||
expect(agents.sisyphus.model).toBe("anthropic/claude-opus-4-6")
|
expect(agents.sisyphus.model).toBe("anthropic/claude-opus-4-6")
|
||||||
expect(agents.sisyphus.fallback_models?.map((entry) => entry.model)).toContain("openai/gpt-5.4")
|
expect(agents.sisyphus.fallback_models).toEqual([
|
||||||
expect(agents.sisyphus.fallback_models?.find((entry) => entry.model === "openai/gpt-5.4")?.variant).toBe("medium")
|
{
|
||||||
|
model: "openai/gpt-5.4",
|
||||||
|
variant: "medium",
|
||||||
|
},
|
||||||
|
])
|
||||||
expect(categories.deep.model).toBe("openai/gpt-5.4")
|
expect(categories.deep.model).toBe("openai/gpt-5.4")
|
||||||
expect(categories.deep.fallback_models?.map((entry) => entry.model)).toContain("anthropic/claude-opus-4-6")
|
expect(categories.deep.fallback_models).toEqual([
|
||||||
|
{
|
||||||
|
model: "anthropic/claude-opus-4-6",
|
||||||
|
variant: "max",
|
||||||
|
},
|
||||||
|
])
|
||||||
})
|
})
|
||||||
|
|
||||||
test("uses haiku for explore when Claude max20", () => {
|
test("uses haiku for explore when Claude max20", () => {
|
||||||
|
|||||||
@@ -47,12 +47,18 @@ function attachFallbackModels<T extends AgentConfig | CategoryConfig>(
|
|||||||
.filter((provider) => isProviderAvailable(provider, availability))
|
.filter((provider) => isProviderAvailable(provider, availability))
|
||||||
.map((provider) => toFallbackModelObject(entry, provider))
|
.map((provider) => toFallbackModelObject(entry, provider))
|
||||||
)
|
)
|
||||||
const primaryIndex = expandedFallbacks.findIndex((entry) => entry.model === config.model)
|
const uniqueFallbacks = expandedFallbacks.filter((entry, index, allEntries) =>
|
||||||
|
allEntries.findIndex((candidate) =>
|
||||||
|
candidate.model === entry.model &&
|
||||||
|
candidate.variant === entry.variant
|
||||||
|
) === index
|
||||||
|
)
|
||||||
|
const primaryIndex = uniqueFallbacks.findIndex((entry) => entry.model === config.model)
|
||||||
if (primaryIndex === -1) {
|
if (primaryIndex === -1) {
|
||||||
return config
|
return config
|
||||||
}
|
}
|
||||||
|
|
||||||
const fallbackModels = expandedFallbacks.slice(primaryIndex + 1)
|
const fallbackModels = uniqueFallbacks.slice(primaryIndex + 1)
|
||||||
if (fallbackModels.length === 0) {
|
if (fallbackModels.length === 0) {
|
||||||
return config
|
return config
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user