summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorThiago Malek <[email protected]>2026-01-19 02:22:31 -0300
committerGitHub <[email protected]>2026-01-18 23:22:31 -0600
commit6b481b5fb07134cac6f3df4fa2195aa56476295c (patch)
tree69c66f49f26dd045539fe29a6a7ab97c106110cf
parent2fc4ab9687219aae4cef5fba042264f7638c5ebc (diff)
downloadopencode-6b481b5fb07134cac6f3df4fa2195aa56476295c.tar.gz
opencode-6b481b5fb07134cac6f3df4fa2195aa56476295c.zip
fix(opencode): use streamObject when using openai oauth in agent generation (#9231)
-rw-r--r--packages/opencode/src/agent/agent.ts27
1 files changed, 24 insertions, 3 deletions
diff --git a/packages/opencode/src/agent/agent.ts b/packages/opencode/src/agent/agent.ts
index 0725933d7..2b44308f1 100644
--- a/packages/opencode/src/agent/agent.ts
+++ b/packages/opencode/src/agent/agent.ts
@@ -1,10 +1,12 @@
import { Config } from "../config/config"
import z from "zod"
import { Provider } from "../provider/provider"
-import { generateObject, type ModelMessage } from "ai"
+import { generateObject, streamObject, type ModelMessage } from "ai"
import { SystemPrompt } from "../session/system"
import { Instance } from "../project/instance"
import { Truncate } from "../tool/truncation"
+import { Auth } from "../auth"
+import { ProviderTransform } from "../provider/transform"
import PROMPT_GENERATE from "./generate.txt"
import PROMPT_COMPACTION from "./prompt/compaction.txt"
@@ -276,10 +278,12 @@ export namespace Agent {
const defaultModel = input.model ?? (await Provider.defaultModel())
const model = await Provider.getModel(defaultModel.providerID, defaultModel.modelID)
const language = await Provider.getLanguage(model)
+
const system = SystemPrompt.header(defaultModel.providerID)
system.push(PROMPT_GENERATE)
const existing = await list()
- const result = await generateObject({
+
+ const params = {
experimental_telemetry: {
isEnabled: cfg.experimental?.openTelemetry,
metadata: {
@@ -305,7 +309,24 @@ export namespace Agent {
whenToUse: z.string(),
systemPrompt: z.string(),
}),
- })
+ } satisfies Parameters<typeof generateObject>[0]
+
+ if (defaultModel.providerID === "openai" && (await Auth.get(defaultModel.providerID))?.type === "oauth") {
+ const result = streamObject({
+ ...params,
+ providerOptions: ProviderTransform.providerOptions(model, {
+ instructions: SystemPrompt.instructions(),
+ store: false,
+ }),
+ onError: () => {},
+ })
+ for await (const part of result.fullStream) {
+ if (part.type === "error") throw part.error
+ }
+ return result.object
+ }
+
+ const result = await generateObject(params)
return result.object
}
}