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);
|
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`, {
|
const response = await fetch(`${this.baseUrl}/chat/completions`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: this.buildHeaders(headers),
|
headers: this.buildHeaders(headers),
|
||||||
body: JSON.stringify({
|
body: JSON.stringify(requestBody),
|
||||||
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,
|
|
||||||
}),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue