diff options
| author | Thiago Malek <[email protected]> | 2026-01-19 02:22:31 -0300 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-01-18 23:22:31 -0600 |
| commit | 6b481b5fb07134cac6f3df4fa2195aa56476295c (patch) | |
| tree | 69c66f49f26dd045539fe29a6a7ab97c106110cf | |
| parent | 2fc4ab9687219aae4cef5fba042264f7638c5ebc (diff) | |
| download | opencode-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.ts | 27 |
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 } } |
