diff --git a/app/client/platforms/openai.ts b/app/client/platforms/openai.ts index c6f3fc425..cdfe9070c 100644 --- a/app/client/platforms/openai.ts +++ b/app/client/platforms/openai.ts @@ -56,7 +56,7 @@ export interface OpenAIListModelResponse { export interface RequestPayload { messages: { - role: "system" | "user" | "assistant"; + role: "developer" | "system" | "user" | "assistant"; content: string | MultimodalContent[]; }[]; stream?: boolean; @@ -237,8 +237,16 @@ export class ChatGPTApi implements LLMApi { // Please do not ask me why not send max_tokens, no reason, this param is just shit, I dont want to explain anymore. }; - // O1 使用 max_completion_tokens 控制token数 (https://platform.openai.com/docs/guides/reasoning#controlling-costs) if (isO1OrO3) { + // by default the o1/o3 models will not attempt to produce output that includes markdown formatting + // manually add "Formatting re-enabled" developer message to encourage markdown inclusion in model responses + // (https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/reasoning?tabs=python-secure#markdown-output) + requestPayload["messages"] = [ + { role: "developer", content: "Formatting re-enabled" }, + ...requestPayload["messages"], + ]; + + // O1 使用 max_completion_tokens 控制token数 (https://platform.openai.com/docs/guides/reasoning#controlling-costs) requestPayload["max_completion_tokens"] = modelConfig.max_tokens; }