summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2026-01-12 12:45:24 -0500
committerDax Raad <[email protected]>2026-01-12 12:45:24 -0500
commit71a7ad1a4ebbc860a40c076df408c9be72408103 (patch)
treea7f67fc91310379efcd3dbed6a839886a0a910fc
parent20399bbdfe7d3f0da96231333b5df91d9b5da599 (diff)
downloadopencode-71a7ad1a4ebbc860a40c076df408c9be72408103.tar.gz
opencode-71a7ad1a4ebbc860a40c076df408c9be72408103.zip
core: fix model selection in title generation to use user's model instead of assistant's
-rw-r--r--packages/opencode/src/session/summary.ts53
1 files changed, 4 insertions, 49 deletions
diff --git a/packages/opencode/src/session/summary.ts b/packages/opencode/src/session/summary.ts
index 83519307a..2bd1b0da6 100644
--- a/packages/opencode/src/session/summary.ts
+++ b/packages/opencode/src/session/summary.ts
@@ -74,11 +74,6 @@ export namespace SessionSummary {
}
await Session.updateMessage(userMsg)
- const assistantMsg = messages.find((m) => m.info.role === "assistant")!.info as MessageV2.Assistant
- const small =
- (await Provider.getSmallModel(assistantMsg.providerID)) ??
- (await Provider.getModel(assistantMsg.providerID, assistantMsg.modelID))
-
const textPart = msgWithParts.parts.find((p) => p.type === "text" && !p.synthetic) as MessageV2.TextPart
if (textPart && !userMsg.summary?.title) {
const agent = await Agent.get("title")
@@ -86,7 +81,10 @@ export namespace SessionSummary {
agent,
user: userMsg,
tools: {},
- model: agent.model ? await Provider.getModel(agent.model.providerID, agent.model.modelID) : small,
+ model: agent.model
+ ? await Provider.getModel(agent.model.providerID, agent.model.modelID)
+ : ((await Provider.getSmallModel(userMsg.model.providerID)) ??
+ (await Provider.getModel(userMsg.model.providerID, userMsg.model.modelID))),
small: true,
messages: [
{
@@ -109,49 +107,6 @@ export namespace SessionSummary {
userMsg.summary.title = result
await Session.updateMessage(userMsg)
}
-
- if (
- messages.some(
- (m) =>
- m.info.role === "assistant" && m.parts.some((p) => p.type === "step-finish" && p.reason !== "tool-calls"),
- )
- ) {
- if (diffs.length > 0) {
- for (const msg of messages) {
- for (const part of msg.parts) {
- if (part.type === "tool" && part.state.status === "completed") {
- part.state.output = "[TOOL OUTPUT PRUNED]"
- }
- }
- }
- const summaryAgent = await Agent.get("summary")
- const stream = await LLM.stream({
- agent: summaryAgent,
- user: userMsg,
- tools: {},
- model: summaryAgent.model
- ? await Provider.getModel(summaryAgent.model.providerID, summaryAgent.model.modelID)
- : small,
- small: true,
- messages: [
- ...MessageV2.toModelMessage(messages),
- {
- role: "user" as const,
- content: `Summarize the above conversation according to your system prompts.`,
- },
- ],
- abort: new AbortController().signal,
- sessionID: userMsg.sessionID,
- system: [],
- retries: 3,
- })
- const result = await stream.text
- if (result) {
- userMsg.summary.body = result
- }
- }
- await Session.updateMessage(userMsg)
- }
}
export const diff = fn(