llms: update model context sizes for GPT-4o and GPT-4 Turbo (#1389)

llms: update OpenAI model context sizes

Add support for latest OpenAI models with accurate context windows:
- GPT-4o and GPT-4o-mini: 128K tokens
- GPT-4 Turbo variants: 128K tokens
- GPT-3.5 Turbo: 16K tokens (corrected from 4K)

Includes comprehensive test coverage for all model variants.

Reference: https://platform.openai.com/docs/models

Co-authored-by: paulnegz <paulnegz@example.com>
This commit is contained in:
Paul Negedu
2025-09-14 21:17:55 -05:00
committed by GitHub
parent 95afeb6e4e
commit 8c8b5e6084
2 changed files with 84 additions and 15 deletions
+37 -15
View File
@@ -11,25 +11,47 @@ const (
)
const (
_gpt35TurboContextSize = 4096
_gpt432KContextSize = 32768
_gpt4ContextSize = 8192
_textDavinci3ContextSize = 4097
_textBabbage1ContextSize = 2048
_textAda1ContextSize = 2048
_textCurie1ContextSize = 2048
_codeDavinci2ContextSize = 8000
_codeCushman1ContextSize = 2048
_textBisonContextSize = 2048
_chatBisonContextSize = 2048
_defaultContextSize = 2048
_gpt35TurboContextSize = 16385 // gpt-3.5-turbo default context
_gpt35Turbo16KContextSize = 16385 // gpt-3.5-turbo-16k
_gpt4ContextSize = 8192 // gpt-4
_gpt432KContextSize = 32768 // gpt-4-32k
_gpt4TurboContextSize = 128000 // gpt-4-turbo models
_gpt4oContextSize = 128000 // gpt-4o models
_gpt4oMiniContextSize = 128000 // gpt-4o-mini
_textDavinci3ContextSize = 4097
_textBabbage1ContextSize = 2048
_textAda1ContextSize = 2048
_textCurie1ContextSize = 2048
_codeDavinci2ContextSize = 8000
_codeCushman1ContextSize = 2048
_defaultContextSize = 2048
)
// nolint:gochecknoglobals
var modelToContextSize = map[string]int{
"gpt-3.5-turbo": _gpt35TurboContextSize,
"gpt-4-32k": _gpt432KContextSize,
"gpt-4": _gpt4ContextSize,
// GPT-3.5 models
"gpt-3.5-turbo": _gpt35TurboContextSize,
"gpt-3.5-turbo-16k": _gpt35Turbo16KContextSize,
"gpt-3.5-turbo-0125": _gpt35TurboContextSize,
"gpt-3.5-turbo-1106": _gpt35TurboContextSize,
// GPT-4 models
"gpt-4": _gpt4ContextSize,
"gpt-4-32k": _gpt432KContextSize,
"gpt-4-0613": _gpt4ContextSize,
"gpt-4-32k-0613": _gpt432KContextSize,
// GPT-4 Turbo models
"gpt-4-turbo": _gpt4TurboContextSize,
"gpt-4-turbo-preview": _gpt4TurboContextSize,
"gpt-4-turbo-2024-04-09": _gpt4TurboContextSize,
"gpt-4-1106-preview": _gpt4TurboContextSize,
"gpt-4-0125-preview": _gpt4TurboContextSize,
// GPT-4o models
"gpt-4o": _gpt4oContextSize,
"gpt-4o-2024-05-13": _gpt4oContextSize,
"gpt-4o-2024-08-06": _gpt4oContextSize,
"gpt-4o-mini": _gpt4oMiniContextSize,
"gpt-4o-mini-2024-07-18": _gpt4oMiniContextSize,
// Legacy models
"text-davinci-003": _textDavinci3ContextSize,
"text-curie-001": _textCurie1ContextSize,
"text-babbage-001": _textBabbage1ContextSize,
+47
View File
@@ -12,3 +12,50 @@ func TestCountTokens(t *testing.T) {
expectedNumTokens := 4
assert.Equal(t, expectedNumTokens, numTokens)
}
func TestGetModelContextSize(t *testing.T) {
t.Parallel()
tests := []struct {
model string
expectedSize int
}{
// GPT-3.5 models
{"gpt-3.5-turbo", 16385},
{"gpt-3.5-turbo-16k", 16385},
{"gpt-3.5-turbo-0125", 16385},
{"gpt-3.5-turbo-1106", 16385},
// GPT-4 models
{"gpt-4", 8192},
{"gpt-4-32k", 32768},
{"gpt-4-0613", 8192},
{"gpt-4-32k-0613", 32768},
// GPT-4 Turbo models
{"gpt-4-turbo", 128000},
{"gpt-4-turbo-preview", 128000},
{"gpt-4-turbo-2024-04-09", 128000},
{"gpt-4-1106-preview", 128000},
{"gpt-4-0125-preview", 128000},
// GPT-4o models
{"gpt-4o", 128000},
{"gpt-4o-2024-05-13", 128000},
{"gpt-4o-2024-08-06", 128000},
{"gpt-4o-mini", 128000},
{"gpt-4o-mini-2024-07-18", 128000},
// Legacy models
{"text-davinci-003", 4097},
{"text-curie-001", 2048},
{"text-babbage-001", 2048},
{"text-ada-001", 2048},
{"code-davinci-002", 8000},
{"code-cushman-001", 2048},
// Unknown model should return default
{"unknown-model", 2048},
}
for _, tt := range tests {
t.Run(tt.model, func(t *testing.T) {
size := GetModelContextSize(tt.model)
assert.Equal(t, tt.expectedSize, size, "Context size for model %s", tt.model)
})
}
}