From 9f8d33e6d23ede02af852ace7a6e7d7a7cfb8ab0 Mon Sep 17 00:00:00 2001 From: Mariano Date: Thu, 7 May 2026 16:28:18 +0100 Subject: [PATCH] fix(questionnaire): add additionalProperties false for OpenAI strict mode The gpt-5-mini parser was failing with "additionalProperties is required to be supplied and to be false" because OpenAI's Responses API enforces strict structured outputs, which requires additionalProperties: false on every object schema and every property listed in required. Also fix the same latent bug in content-extractor's shared schema, which would break if any of its callers swapped to a strict-mode OpenAI model. Co-Authored-By: Claude Opus 4.7 (1M context) --- apps/api/src/questionnaire/utils/content-extractor.ts | 4 +++- apps/api/src/questionnaire/utils/question-parser.ts | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/api/src/questionnaire/utils/content-extractor.ts b/apps/api/src/questionnaire/utils/content-extractor.ts index 635e0740a1..201d59b67f 100644 --- a/apps/api/src/questionnaire/utils/content-extractor.ts +++ b/apps/api/src/questionnaire/utils/content-extractor.ts @@ -37,11 +37,13 @@ const questionExtractionSchema = jsonSchema<{ description: 'The answer/response if provided, null if empty', }, }, - required: ['question'], + required: ['question', 'answer'], + additionalProperties: false, }, }, }, required: ['questions'], + additionalProperties: false, }); export interface ContentExtractionLogger { diff --git a/apps/api/src/questionnaire/utils/question-parser.ts b/apps/api/src/questionnaire/utils/question-parser.ts index 05e64eac7e..4108aec160 100644 --- a/apps/api/src/questionnaire/utils/question-parser.ts +++ b/apps/api/src/questionnaire/utils/question-parser.ts @@ -135,11 +135,13 @@ export async function parseChunkQuestionsAndAnswers( 'The answer to the question. Use null if no answer is provided.', }, }, - required: ['question'], + required: ['question', 'answer'], + additionalProperties: false, }, }, }, required: ['questionsAndAnswers'], + additionalProperties: false, }), system: QUESTION_PARSING_SYSTEM_PROMPT, prompt: buildParsingPrompt(chunk, chunkIndex, totalChunks),