fix: 恢复 isOpenAIThinkingEnabled 和 buildOpenAIRequestBody 导出
thinking.test.ts 引用了两个已被删除的函数,导致模块加载失败 (1 fail + 1 error)。恢复了完整的 OpenAI thinking mode 支持: - isOpenAIThinkingEnabled: env var OPENAI_ENABLE_THINKING 优先级最高, 其次自动检测 deepseek 系列模型名 - buildOpenAIRequestBody: 构建请求体,同时注入三种 thinking 格式 (OpenAI official / vLLM / chat_template),thinking 开启时排除 temperature 测试:3591 pass, 4 skip, 0 fail, 0 error(首次全绿)
This commit is contained in:
parent
f6488bce8f
commit
05cb6b0a7a
|
|
@ -271,3 +271,92 @@ export async function* queryModelOpenAI(
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether OpenAI thinking/reasoning mode is enabled for a given model.
|
||||
*
|
||||
* Priority:
|
||||
* 1. OPENAI_ENABLE_THINKING env var — if set to a truthy value (1/true/yes/on,
|
||||
* case-insensitive), thinking is forced ON for all models. If set to a falsy
|
||||
* value (0/false/empty), thinking is forced OFF for all models.
|
||||
* 2. Model name auto-detect — if the env var is unset, any model whose name
|
||||
* contains "deepseek" (case-insensitive) gets thinking enabled.
|
||||
* 3. Default: false.
|
||||
*/
|
||||
export function isOpenAIThinkingEnabled(model: string): boolean {
|
||||
const env = process.env.OPENAI_ENABLE_THINKING
|
||||
if (env !== undefined) {
|
||||
const trimmed = env.trim().toLowerCase()
|
||||
if (
|
||||
trimmed === '1' ||
|
||||
trimmed === 'true' ||
|
||||
trimmed === 'yes' ||
|
||||
trimmed === 'on'
|
||||
) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
return model.toLowerCase().includes('deepseek')
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds an OpenAI-compatible chat completions request body.
|
||||
*
|
||||
* Injects thinking params for all three known formats simultaneously when
|
||||
* enableThinking is true:
|
||||
* - thinking: { type: 'enabled' } — official OpenAI/DeepSeek API
|
||||
* - enable_thinking: true — vLLM / self-hosted
|
||||
* - chat_template_kwargs: { thinking: true } — vLLM chat template
|
||||
*
|
||||
* Temperature is excluded when thinking is on (thinking models reject it).
|
||||
*/
|
||||
export function buildOpenAIRequestBody(params: {
|
||||
model: string
|
||||
messages: unknown[]
|
||||
tools: unknown[]
|
||||
toolChoice: unknown
|
||||
enableThinking?: boolean
|
||||
temperatureOverride?: number
|
||||
maxTokens?: number
|
||||
systemPrompt?: unknown
|
||||
}): Record<string, unknown> {
|
||||
const {
|
||||
model,
|
||||
messages,
|
||||
tools,
|
||||
toolChoice,
|
||||
enableThinking = false,
|
||||
temperatureOverride,
|
||||
maxTokens,
|
||||
systemPrompt,
|
||||
} = params
|
||||
|
||||
const body: Record<string, unknown> = {
|
||||
model,
|
||||
messages,
|
||||
stream: true,
|
||||
stream_options: { include_usage: true },
|
||||
}
|
||||
|
||||
if (tools.length > 0) {
|
||||
body.tools = tools
|
||||
if (toolChoice !== undefined) {
|
||||
body.tool_choice = toolChoice
|
||||
}
|
||||
}
|
||||
|
||||
if (enableThinking) {
|
||||
body.thinking = { type: 'enabled' }
|
||||
body.enable_thinking = true
|
||||
body.chat_template_kwargs = { thinking: true }
|
||||
} else if (temperatureOverride !== undefined) {
|
||||
body.temperature = temperatureOverride
|
||||
}
|
||||
|
||||
if (maxTokens !== undefined) {
|
||||
body.max_completion_tokens = maxTokens
|
||||
}
|
||||
|
||||
return body
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user