fix(opencode): use streamObject when using openai oauth in agent generation (#9231)
This commit is contained in:
@@ -1,10 +1,12 @@
|
|||||||
import { Config } from "../config/config"
|
import { Config } from "../config/config"
|
||||||
import z from "zod"
|
import z from "zod"
|
||||||
import { Provider } from "../provider/provider"
|
import { Provider } from "../provider/provider"
|
||||||
import { generateObject, type ModelMessage } from "ai"
|
import { generateObject, streamObject, type ModelMessage } from "ai"
|
||||||
import { SystemPrompt } from "../session/system"
|
import { SystemPrompt } from "../session/system"
|
||||||
import { Instance } from "../project/instance"
|
import { Instance } from "../project/instance"
|
||||||
import { Truncate } from "../tool/truncation"
|
import { Truncate } from "../tool/truncation"
|
||||||
|
import { Auth } from "../auth"
|
||||||
|
import { ProviderTransform } from "../provider/transform"
|
||||||
|
|
||||||
import PROMPT_GENERATE from "./generate.txt"
|
import PROMPT_GENERATE from "./generate.txt"
|
||||||
import PROMPT_COMPACTION from "./prompt/compaction.txt"
|
import PROMPT_COMPACTION from "./prompt/compaction.txt"
|
||||||
@@ -276,10 +278,12 @@ export namespace Agent {
|
|||||||
const defaultModel = input.model ?? (await Provider.defaultModel())
|
const defaultModel = input.model ?? (await Provider.defaultModel())
|
||||||
const model = await Provider.getModel(defaultModel.providerID, defaultModel.modelID)
|
const model = await Provider.getModel(defaultModel.providerID, defaultModel.modelID)
|
||||||
const language = await Provider.getLanguage(model)
|
const language = await Provider.getLanguage(model)
|
||||||
|
|
||||||
const system = SystemPrompt.header(defaultModel.providerID)
|
const system = SystemPrompt.header(defaultModel.providerID)
|
||||||
system.push(PROMPT_GENERATE)
|
system.push(PROMPT_GENERATE)
|
||||||
const existing = await list()
|
const existing = await list()
|
||||||
const result = await generateObject({
|
|
||||||
|
const params = {
|
||||||
experimental_telemetry: {
|
experimental_telemetry: {
|
||||||
isEnabled: cfg.experimental?.openTelemetry,
|
isEnabled: cfg.experimental?.openTelemetry,
|
||||||
metadata: {
|
metadata: {
|
||||||
@@ -305,7 +309,24 @@ export namespace Agent {
|
|||||||
whenToUse: z.string(),
|
whenToUse: z.string(),
|
||||||
systemPrompt: 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
|
return result.object
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user