refactor: move structured output tool injection outside resolveTools
parent
5572602ec4
commit
8d7b0f0235
|
|
@ -601,14 +601,20 @@ export namespace SessionPrompt {
|
|||
model,
|
||||
tools: lastUser.tools,
|
||||
processor,
|
||||
outputFormat: lastUser.format ?? { type: "text" },
|
||||
onStructuredOutputSuccess: (output) => {
|
||||
structuredOutput = output
|
||||
},
|
||||
bypassAgentCheck,
|
||||
messages: msgs,
|
||||
})
|
||||
|
||||
// Inject StructuredOutput tool if JSON schema mode enabled
|
||||
if (lastUser.format?.type === "json_schema") {
|
||||
tools["StructuredOutput"] = createStructuredOutputTool({
|
||||
schema: lastUser.format.schema,
|
||||
onSuccess(output) {
|
||||
structuredOutput = output
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
if (step === 1) {
|
||||
SessionSummary.summarize({
|
||||
sessionID: sessionID,
|
||||
|
|
@ -641,8 +647,8 @@ export namespace SessionPrompt {
|
|||
|
||||
// Build system prompt, adding structured output instruction if needed
|
||||
const system = [...(await SystemPrompt.environment(model)), ...(await InstructionPrompt.system())]
|
||||
const outputFormat = lastUser.format ?? { type: "text" }
|
||||
if (outputFormat.type === "json_schema") {
|
||||
const format = lastUser.format ?? { type: "text" }
|
||||
if (format.type === "json_schema") {
|
||||
system.push(STRUCTURED_OUTPUT_SYSTEM_PROMPT)
|
||||
}
|
||||
|
||||
|
|
@ -665,7 +671,7 @@ export namespace SessionPrompt {
|
|||
],
|
||||
tools,
|
||||
model,
|
||||
toolChoice: outputFormat.type === "json_schema" ? "required" : undefined,
|
||||
toolChoice: format.type === "json_schema" ? "required" : undefined,
|
||||
})
|
||||
|
||||
// If structured output was captured, save it and exit immediately
|
||||
|
|
@ -681,7 +687,7 @@ export namespace SessionPrompt {
|
|||
const modelFinished = processor.message.finish && !["tool-calls", "unknown"].includes(processor.message.finish)
|
||||
|
||||
if (modelFinished && !processor.message.error) {
|
||||
if (outputFormat.type === "json_schema") {
|
||||
if (format.type === "json_schema") {
|
||||
// Model stopped without calling StructuredOutput tool
|
||||
processor.message.error = new MessageV2.StructuredOutputError({
|
||||
message: "Model did not produce structured output",
|
||||
|
|
@ -729,8 +735,6 @@ export namespace SessionPrompt {
|
|||
session: Session.Info
|
||||
tools?: Record<string, boolean>
|
||||
processor: SessionProcessor.Info
|
||||
outputFormat: MessageV2.OutputFormat
|
||||
onStructuredOutputSuccess?: (output: unknown) => void
|
||||
bypassAgentCheck: boolean
|
||||
messages: MessageV2.WithParts[]
|
||||
}) {
|
||||
|
|
@ -902,14 +906,6 @@ export namespace SessionPrompt {
|
|||
tools[key] = item
|
||||
}
|
||||
|
||||
// Inject StructuredOutput tool if JSON schema mode enabled
|
||||
if (input.outputFormat.type === "json_schema" && input.onStructuredOutputSuccess) {
|
||||
tools["StructuredOutput"] = createStructuredOutputTool({
|
||||
schema: input.outputFormat.schema,
|
||||
onSuccess: input.onStructuredOutputSuccess,
|
||||
})
|
||||
}
|
||||
|
||||
return tools
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue