Skip to content

Commit d8a15e7

Browse files
committed
try to avoid persisting empty thinking/text blocks
1 parent 542b9fa commit d8a15e7

2 files changed

Lines changed: 33 additions & 13 deletions

File tree

‎packages/opencode/src/session/index.ts‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,23 @@ export namespace Session {
342342
return part
343343
})
344344

345+
export const removePart = fn(
346+
z.object({
347+
sessionID: Identifier.schema("session"),
348+
messageID: Identifier.schema("message"),
349+
partID: Identifier.schema("part"),
350+
}),
351+
async (input) => {
352+
await Storage.remove(["part", input.messageID, input.partID])
353+
Bus.publish(MessageV2.Event.PartRemoved, {
354+
sessionID: input.sessionID,
355+
messageID: input.messageID,
356+
partID: input.partID,
357+
})
358+
return input.partID
359+
},
360+
)
361+
345362
export const getUsage = fn(
346363
z.object({
347364
model: z.custom<ModelsDev.Model>(),

‎packages/opencode/src/session/prompt.ts‎

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -916,21 +916,22 @@ export namespace SessionPrompt {
916916
const part = reasoningMap[value.id]
917917
part.text += value.text
918918
if (value.providerMetadata) part.metadata = value.providerMetadata
919-
if (part.text) await Session.updatePart(part)
919+
if (part.text.trim()) await Session.updatePart(part)
920920
}
921921
break
922922

923923
case "reasoning-end":
924924
if (value.id in reasoningMap) {
925925
const part = reasoningMap[value.id]
926926
part.text = part.text.trimEnd()
927-
928-
part.time = {
929-
...part.time,
930-
end: Date.now(),
927+
if (part.text) {
928+
part.time = {
929+
...part.time,
930+
end: Date.now(),
931+
}
932+
if (value.providerMetadata) part.metadata = value.providerMetadata
933+
await Session.updatePart(part)
931934
}
932-
if (value.providerMetadata) part.metadata = value.providerMetadata
933-
await Session.updatePart(part)
934935
delete reasoningMap[value.id]
935936
}
936937
break
@@ -1085,19 +1086,21 @@ export namespace SessionPrompt {
10851086
if (currentText) {
10861087
currentText.text += value.text
10871088
if (value.providerMetadata) currentText.metadata = value.providerMetadata
1088-
if (currentText.text) await Session.updatePart(currentText)
1089+
if (currentText.text.trim()) await Session.updatePart(currentText)
10891090
}
10901091
break
10911092

10921093
case "text-end":
10931094
if (currentText) {
10941095
currentText.text = currentText.text.trimEnd()
1095-
currentText.time = {
1096-
start: Date.now(),
1097-
end: Date.now(),
1096+
if (currentText.text) {
1097+
currentText.time = {
1098+
start: Date.now(),
1099+
end: Date.now(),
1100+
}
1101+
if (value.providerMetadata) currentText.metadata = value.providerMetadata
1102+
await Session.updatePart(currentText)
10981103
}
1099-
if (value.providerMetadata) currentText.metadata = value.providerMetadata
1100-
await Session.updatePart(currentText)
11011104
}
11021105
currentText = undefined
11031106
break

0 commit comments

Comments
 (0)