fix(core): resolve hidden title models internally

This commit is contained in:
Aiden Cline 2026-07-13 13:44:03 -05:00
commit fb0f763603
5 changed files with 92 additions and 28 deletions

View file

@ -411,6 +411,9 @@ describe("CatalogV2", () => {
})
expect((yield* catalog.model.small(providerID))?.id).toBe(ModelV2.ID.make("gpt-5.4-nano"))
expect((yield* catalog.model.available()).some((model) => model.id === ModelV2.ID.make("gpt-5.4-nano"))).toBe(
false,
)
}),
)

View file

@ -289,6 +289,28 @@ describe("GithubCopilotPlugin", () => {
}),
)
it.effect("pins picker-hidden utility models for internal small-model work", () =>
Effect.gen(function* () {
const catalog = yield* Catalog.Service
const providerID = ProviderV2.ID.githubCopilot
yield* catalog.transform((catalog) => {
catalog.provider.update(providerID, () => {})
catalog.model.update(providerID, ModelV2.ID.make("gpt-4.1"), (model) => {
model.enabled = false
})
catalog.model.update(providerID, ModelV2.ID.make("gpt-5.4-nano"), (model) => {
model.enabled = false
})
})
yield* addPlugin()
expect((yield* catalog.model.small(providerID))?.id).toBe(ModelV2.ID.make("gpt-5.4-nano"))
expect((yield* catalog.model.available()).some((model) => model.id === ModelV2.ID.make("gpt-5.4-nano"))).toBe(
false,
)
}),
)
it.effect("does not disable gpt-5-chat-latest for non-Copilot providers", () =>
Effect.gen(function* () {
const catalog = yield* Catalog.Service

View file

@ -55,6 +55,21 @@ const models = Layer.mock(SessionRunnerModel.Service)({
: model
return Effect.succeed(SessionRunnerModel.resolved(selected))
},
resolveCatalogModel: (session, selected) => {
resolvedModels.push({ id: selected.id, provider: selected.providerID })
if (failSmallResolve && selected.id === ModelV2.ID.make("mini")) {
return Effect.fail(new Error("small unavailable") as never)
}
return Effect.succeed(
SessionRunnerModel.resolved(
Model.make({
id: selected.id,
provider: selected.providerID,
route: OpenAIChat.route.with({ limits: { context: 10_000, output: 1_000 } }),
}),
),
)
},
})
const it = testEffect(
AppNodeBuilder.build(
@ -152,9 +167,11 @@ const seedSmallModel = () =>
model.time.released = Date.now()
})
catalog.model.update(providerID, ModelV2.ID.make("mini"), (model) => {
model.enabled = false
model.family = ModelV2.Family.make("gpt-nano")
model.time.released = Date.now()
})
catalog.model.small.set(providerID, ModelV2.ID.make("mini"))
})
})