From da10467df340f08e435b460692b1631d8ef949b5 Mon Sep 17 00:00:00 2001 From: mars Date: Wed, 7 Jan 2026 11:32:14 +0800 Subject: [PATCH] =?UTF-8?q?refactor(transformer):=20=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E8=A7=92=E8=89=B2=E8=AE=BE=E7=BD=AE=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E7=B1=BB=E5=9E=8B=E5=B9=B6=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根据消息角色动态设置内容类型,将assistant消息标记为output_text而非input_text 同时优化代码格式,包括多行导入和长行拆分,提高可读性 --- src/request/transformer.ts | 39 ++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/src/request/transformer.ts b/src/request/transformer.ts index 409456e..d867ddc 100644 --- a/src/request/transformer.ts +++ b/src/request/transformer.ts @@ -1,6 +1,16 @@ -import { ChatCompletionRequest, ResponsesRequest, InputItem, Message, Content } from "../types.js"; +import { + ChatCompletionRequest, + ResponsesRequest, + InputItem, + Message, + Content, +} from "../types.js"; import { getNormalizedModel } from "./model-map.js"; -import { getReasoningConfig, getTextVerbosity, getIncludeFields } from "./reasoning.js"; +import { + getReasoningConfig, + getTextVerbosity, + getIncludeFields, +} from "./reasoning.js"; import { getCodexInstructions } from "../prompts/index.js"; import { logDebug, logWarn } from "../logger.js"; @@ -8,12 +18,14 @@ export function messagesToInput(messages: Message[]): InputItem[] { return messages.map((msg) => { const content: Content[] = []; + const contentType = msg.role === "assistant" ? "output_text" : "input_text"; + if (typeof msg.content === "string") { - content.push({ type: "input_text", text: msg.content }); + content.push({ type: contentType, text: msg.content }); } else if (Array.isArray(msg.content)) { for (const item of msg.content) { if (item.type === "text") { - content.push({ type: "input_text", text: item.text || "" }); + content.push({ type: contentType, text: item.text || "" }); } else if (item.type === "image_url") { content.push({ type: "input_image", image_url: item.image_url }); } else { @@ -30,7 +42,9 @@ export function messagesToInput(messages: Message[]): InputItem[] { }); } -export function filterInput(input: InputItem[] | undefined): InputItem[] | undefined { +export function filterInput( + input: InputItem[] | undefined, +): InputItem[] | undefined { if (!Array.isArray(input)) { return input; } @@ -58,7 +72,10 @@ export async function transformChatCompletionRequest( ): Promise { const normalizedModel = getNormalizedModel(request.model) || request.model; - logDebug(null, `Transforming chat completion request: model=${request.model} -> ${normalizedModel}`); + logDebug( + null, + `Transforming chat completion request: model=${request.model} -> ${normalizedModel}`, + ); const codexInstructions = await getCodexInstructions(normalizedModel); const reasoningConfig = getReasoningConfig(normalizedModel); @@ -101,7 +118,10 @@ export async function transformResponsesRequest( ): Promise { const normalizedModel = getNormalizedModel(request.model) || request.model; - logDebug(null, `Transforming responses request: model=${request.model} -> ${normalizedModel}`); + logDebug( + null, + `Transforming responses request: model=${request.model} -> ${normalizedModel}`, + ); const codexInstructions = await getCodexInstructions(normalizedModel); const reasoningConfig = getReasoningConfig( @@ -116,7 +136,10 @@ export async function transformResponsesRequest( ...request, model: normalizedModel, input: filterInput( - request.input || (request.messages ? messagesToInput(request.messages as Message[]) : undefined), + request.input || + (request.messages + ? messagesToInput(request.messages as Message[]) + : undefined), ), stream: request.stream !== undefined ? request.stream : true, store: request.store !== undefined ? request.store : false,