feat: enhance OpenAIAdapter to support reasoning models

- Added detection for reasoning models (GPT-5 and o1 series) to adjust request body accordingly.
- Implemented conditional logic to use max_completion_tokens for reasoning models and max_tokens for others.
- Refactored request body construction for improved clarity and maintainability.
This commit is contained in:
lintsinghua 2025-10-27 17:39:41 +08:00
parent f52c46f6be
commit 9325608e5c
1 changed files with 23 additions and 9 deletions

View File

@ -36,18 +36,32 @@ export class OpenAIAdapter extends BaseLLMAdapter {
Object.assign(headers, this.config.customHeaders);
}
// 检测是否为推理模型GPT-5 或 o1 系列,但排除 gpt-5-chat 等非推理模型)
const modelName = this.config.model.toLowerCase();
const isReasoningModel = (modelName.includes('o1') || modelName.includes('o3')) ||
(modelName.includes('gpt-5') && !modelName.includes('chat'));
// 构建请求体
const requestBody: any = {
model: this.config.model,
messages: request.messages,
temperature: request.temperature ?? this.config.temperature,
top_p: request.topP ?? this.config.topP,
frequency_penalty: this.config.frequencyPenalty,
presence_penalty: this.config.presencePenalty,
};
// GPT-5 推理模型使用 max_completion_tokens其他模型使用 max_tokens
if (isReasoningModel) {
requestBody.max_completion_tokens = request.maxTokens ?? this.config.maxTokens;
} else {
requestBody.max_tokens = request.maxTokens ?? this.config.maxTokens;
}
const response = await fetch(`${this.baseUrl}/chat/completions`, {
method: 'POST',
headers: this.buildHeaders(headers),
body: JSON.stringify({
model: this.config.model,
messages: request.messages,
temperature: request.temperature ?? this.config.temperature,
max_tokens: request.maxTokens ?? this.config.maxTokens,
top_p: request.topP ?? this.config.topP,
frequency_penalty: this.config.frequencyPenalty,
presence_penalty: this.config.presencePenalty,
}),
body: JSON.stringify(requestBody),
});
if (!response.ok) {