@ai-sdk/openai
Version:
The **[OpenAI provider](https://ai-sdk.dev/providers/ai-sdk-providers/openai)** for the [AI SDK](https://ai-sdk.dev/docs) contains language model support for the OpenAI chat and completion APIs and embedding model support for the OpenAI embeddings API.
58 lines (50 loc) • 1.99 kB
text/typescript
export type OpenAILanguageModelCapabilities = {
isReasoningModel: boolean;
systemMessageMode: 'remove' | 'system' | 'developer';
supportsFlexProcessing: boolean;
supportsPriorityProcessing: boolean;
/**
* Allow temperature, topP, logProbs when reasoningEffort is none.
*/
supportsNonReasoningParameters: boolean;
};
export function getOpenAILanguageModelCapabilities(
modelId: string,
): OpenAILanguageModelCapabilities {
const supportsFlexProcessing =
modelId.startsWith('o3') ||
modelId.startsWith('o4-mini') ||
(modelId.startsWith('gpt-5') && !modelId.startsWith('gpt-5-chat'));
const supportsPriorityProcessing =
modelId.startsWith('gpt-4') ||
(modelId.startsWith('gpt-5') &&
!modelId.startsWith('gpt-5-nano') &&
!modelId.startsWith('gpt-5-chat') &&
!modelId.startsWith('gpt-5.4-nano')) ||
modelId.startsWith('o3') ||
modelId.startsWith('o4-mini');
// Use allowlist approach: only known reasoning models should use 'developer' role
// This prevents issues with fine-tuned models, third-party models, and custom models
const isReasoningModel =
modelId.startsWith('o1') ||
modelId.startsWith('o3') ||
modelId.startsWith('o4-mini') ||
(modelId.startsWith('gpt-5') && !modelId.startsWith('gpt-5-chat'));
// https://platform.openai.com/docs/guides/latest-model#gpt-5-1-parameter-compatibility
// GPT-5.1 and later model families support temperature, topP, logProbs when reasoningEffort is none.
const supportsNonReasoningParameters =
modelId.startsWith('gpt-5.1') ||
modelId.startsWith('gpt-5.2') ||
modelId.startsWith('gpt-5.3') ||
modelId.startsWith('gpt-5.4') ||
modelId.startsWith('gpt-5.5') ||
modelId.startsWith('gpt-5.6');
const systemMessageMode = isReasoningModel ? 'developer' : 'system';
return {
supportsFlexProcessing,
supportsPriorityProcessing,
isReasoningModel,
systemMessageMode,
supportsNonReasoningParameters,
};
}