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:
parent
f52c46f6be
commit
9325608e5c
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue