Skip to content

Commit 01d5187

Browse files
thdxrAiden Cline
authored andcommitted
remove unnecessary deep clones from session loop and LLM stream (#14354)
1 parent ae50f24 commit 01d5187

2 files changed

Lines changed: 4 additions & 11 deletions

File tree

packages/opencode/src/session/llm.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
tool,
1212
jsonSchema,
1313
} from "ai"
14-
import { clone, mergeDeep, pipe } from "remeda"
14+
import { mergeDeep, pipe } from "remeda"
1515
import { ProviderTransform } from "@/provider/transform"
1616
import { Config } from "@/config/config"
1717
import { Instance } from "@/project/instance"
@@ -80,15 +80,11 @@ export namespace LLM {
8080
)
8181

8282
const header = system[0]
83-
const original = clone(system)
8483
await Plugin.trigger(
8584
"experimental.chat.system.transform",
8685
{ sessionID: input.sessionID, model: input.model },
8786
{ system },
8887
)
89-
if (system.length === 0) {
90-
system.push(...original)
91-
}
9288
// rejoin to maintain 2-part structure for caching if header unchanged
9389
if (system.length > 2 && system[0] === header) {
9490
const rest = system.slice(1)

packages/opencode/src/session/prompt.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import PROMPT_PLAN from "../session/prompt/plan.txt"
2222
import BUILD_SWITCH from "../session/prompt/build-switch.txt"
2323
import MAX_STEPS from "../session/prompt/max-steps.txt"
2424
import { defer } from "../util/defer"
25-
import { clone } from "remeda"
2625
import { ToolRegistry } from "../tool/registry"
2726
import { MCP } from "../mcp"
2827
import { LSP } from "../lsp"
@@ -627,11 +626,9 @@ export namespace SessionPrompt {
627626
})
628627
}
629628

630-
const sessionMessages = clone(msgs)
631-
632629
// Ephemerally wrap queued user messages with a reminder to stay on track
633630
if (step > 1 && lastFinished) {
634-
for (const msg of sessionMessages) {
631+
for (const msg of msgs) {
635632
if (msg.info.role !== "user" || msg.info.id <= lastFinished.id) continue
636633
for (const part of msg.parts) {
637634
if (part.type !== "text" || part.ignored || part.synthetic) continue
@@ -648,7 +645,7 @@ export namespace SessionPrompt {
648645
}
649646
}
650647

651-
await Plugin.trigger("experimental.chat.messages.transform", {}, { messages: sessionMessages })
648+
await Plugin.trigger("experimental.chat.messages.transform", {}, { messages: msgs })
652649

653650
// Build system prompt, adding structured output instruction if needed
654651
const system = [...(await SystemPrompt.environment(model)), ...(await InstructionPrompt.system())]
@@ -664,7 +661,7 @@ export namespace SessionPrompt {
664661
sessionID,
665662
system,
666663
messages: [
667-
...MessageV2.toModelMessages(sessionMessages, model),
664+
...MessageV2.toModelMessages(msgs, model),
668665
...(isLastStep
669666
? [
670667
{

0 commit comments

Comments
 (0)