From 83c6e0f8eaaf560df714ea4928719974f9d904da Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Sun, 12 Jul 2026 16:11:05 -0500 Subject: [PATCH] refactor(core): inline title model selection Keep single-use model selection at the title generation call site. --- packages/core/src/session/title.ts | 31 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/packages/core/src/session/title.ts b/packages/core/src/session/title.ts index 41ec8afea08..f3314ef44b7 100644 --- a/packages/core/src/session/title.ts +++ b/packages/core/src/session/title.ts @@ -36,21 +36,6 @@ export class Service extends Context.Service()("@opencode/v2 const truncate = (value: string) => (value.length <= MAX_LENGTH ? value : `${value.slice(0, MAX_LENGTH - 3)}...`) const make = (dependencies: Dependencies) => { - const resolveModel = (session: SessionSchema.Info, agent: AgentV2.Info) => { - if (agent.model) return dependencies.models.resolve({ ...session, model: agent.model }) - return Effect.gen(function* () { - const providerID = session.model?.providerID ?? (yield* dependencies.catalog.model.default())?.providerID - const small = providerID ? yield* dependencies.catalog.model.small(providerID) : undefined - if (!small) return yield* dependencies.models.resolve(session) - return yield* dependencies.models - .resolve({ - ...session, - model: ModelV2.Ref.make({ id: small.id, providerID: small.providerID }), - }) - .pipe(Effect.catch(() => dependencies.models.resolve(session))) - }) - } - const generateForFirstPrompt = Effect.fn("SessionTitle.generateForFirstPrompt")(function* ( db: Database.Interface["db"], session: SessionSchema.Info, @@ -60,7 +45,21 @@ const make = (dependencies: Dependencies) => { if (!firstUser) return const agent = yield* dependencies.agents.get(AgentV2.ID.make("title")) if (!agent) return - const resolved = yield* resolveModel(session, agent).pipe(Effect.catch(() => Effect.succeed(undefined))) + const resolved = yield* ( + agent.model + ? dependencies.models.resolve({ ...session, model: agent.model }) + : Effect.gen(function* () { + const providerID = session.model?.providerID ?? (yield* dependencies.catalog.model.default())?.providerID + const small = providerID ? yield* dependencies.catalog.model.small(providerID) : undefined + if (!small) return yield* dependencies.models.resolve(session) + return yield* dependencies.models + .resolve({ + ...session, + model: ModelV2.Ref.make({ id: small.id, providerID: small.providerID }), + }) + .pipe(Effect.catch(() => dependencies.models.resolve(session))) + }) + ).pipe(Effect.catch(() => Effect.succeed(undefined))) if (!resolved) return const chunks: string[] = [] let failed = false