@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.
55 lines (47 loc) • 1.91 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-mini') ||
(modelId.startsWith('gpt-5') &&
!modelId.startsWith('gpt-5-nano') &&
!modelId.startsWith('gpt-5-chat')) ||
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('codex-mini') ||
modelId.startsWith('computer-use-preview') ||
(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 GPT-5.2 support temperature, topP, logProbs when reasoningEffort is none
const supportsNonReasoningParameters =
modelId.startsWith('gpt-5.1') || modelId.startsWith('gpt-5.2');
const systemMessageMode = isReasoningModel ? 'developer' : 'system';
return {
supportsFlexProcessing,
supportsPriorityProcessing,
isReasoningModel,
systemMessageMode,
supportsNonReasoningParameters,
};
}