Add support for GPT-5.1 and GPT-5.2: update token limits and pricing
This commit is contained in:
@@ -239,8 +239,12 @@ class AICore:
|
||||
'temperature': temperature,
|
||||
}
|
||||
|
||||
# GPT-5.1 and GPT-5.2 use max_completion_tokens instead of max_tokens
|
||||
if max_tokens:
|
||||
body_data['max_tokens'] = max_tokens
|
||||
if active_model in ['gpt-5.1', 'gpt-5.2']:
|
||||
body_data['max_completion_tokens'] = max_tokens
|
||||
else:
|
||||
body_data['max_tokens'] = max_tokens
|
||||
|
||||
if response_format:
|
||||
body_data['response_format'] = response_format
|
||||
|
||||
@@ -6,6 +6,8 @@ MODEL_RATES = {
|
||||
'gpt-4.1': {'input': 2.00, 'output': 8.00},
|
||||
'gpt-4o-mini': {'input': 0.15, 'output': 0.60},
|
||||
'gpt-4o': {'input': 2.50, 'output': 10.00},
|
||||
'gpt-5.1': {'input': 1.25, 'output': 10.00},
|
||||
'gpt-5.2': {'input': 1.75, 'output': 14.00},
|
||||
}
|
||||
|
||||
# Image model pricing (per image) - EXACT from reference plugin
|
||||
@@ -33,7 +35,7 @@ VALID_SIZES_BY_MODEL = {
|
||||
DEFAULT_AI_MODEL = 'gpt-4.1'
|
||||
|
||||
# JSON mode supported models
|
||||
JSON_MODE_MODELS = ['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo-preview']
|
||||
JSON_MODE_MODELS = ['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo-preview', 'gpt-5.1', 'gpt-5.2']
|
||||
|
||||
# Debug mode - controls console logging
|
||||
# Set to False in production to disable verbose logging
|
||||
|
||||
@@ -99,8 +99,10 @@ def get_model_config(function_name: str, account) -> Dict[str, Any]:
|
||||
# MODEL_RATES not available - skip validation
|
||||
pass
|
||||
|
||||
# Get max_tokens and temperature from config (standardized to 8192)
|
||||
max_tokens = config.get('max_tokens', 8192) # Standardized across entire codebase
|
||||
# Get max_tokens and temperature from config (standardized to 8192, 16384 for GPT-5.x)
|
||||
# GPT-5.1 and GPT-5.2 use 16384 max_tokens by default
|
||||
default_max_tokens = 16384 if model in ['gpt-5.1', 'gpt-5.2'] else 8192
|
||||
max_tokens = config.get('max_tokens', default_max_tokens)
|
||||
temperature = config.get('temperature', 0.7) # Reasonable default
|
||||
|
||||
# Build response format based on model (JSON mode for supported models)
|
||||
|
||||
@@ -140,7 +140,7 @@ class GetModelConfigTestCase(TestCase):
|
||||
|
||||
def test_get_model_config_json_mode_models(self):
|
||||
"""Test get_model_config() sets response_format for JSON mode models"""
|
||||
json_models = ['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo-preview']
|
||||
json_models = ['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo-preview', 'gpt-5.1', 'gpt-5.2']
|
||||
|
||||
for model in json_models:
|
||||
IntegrationSettings.objects.filter(account=self.account).delete()
|
||||
|
||||
@@ -191,8 +191,10 @@ class IntegrationSettingsViewSet(viewsets.ViewSet):
|
||||
# Get model from config or use default (reference plugin: get_option('igny8_model', 'gpt-4.1'))
|
||||
model = (config or {}).get('model', 'gpt-4.1') if config else 'gpt-4.1'
|
||||
|
||||
# Get max_tokens from config or use default
|
||||
max_tokens = (config or {}).get('max_tokens', 8192) if config else 8192
|
||||
# Get max_tokens from config or use default based on model
|
||||
# GPT-5.1 and GPT-5.2 use 16384 max_tokens by default
|
||||
default_max_tokens = 16384 if model in ['gpt-5.1', 'gpt-5.2'] else 8192
|
||||
max_tokens = (config or {}).get('max_tokens', default_max_tokens) if config else default_max_tokens
|
||||
|
||||
# Check if test with response is requested (reference plugin: $with_response parameter)
|
||||
with_response = (config or {}).get('with_response', False) if config else False
|
||||
@@ -207,10 +209,15 @@ class IntegrationSettingsViewSet(viewsets.ViewSet):
|
||||
'content': 'Reply with exactly: OK! Ping Received'
|
||||
}
|
||||
],
|
||||
'max_tokens': max_tokens,
|
||||
'temperature': 0.7,
|
||||
}
|
||||
|
||||
# GPT-5.1 and GPT-5.2 use max_completion_tokens instead of max_tokens
|
||||
if model in ['gpt-5.1', 'gpt-5.2']:
|
||||
request_body['max_completion_tokens'] = max_tokens
|
||||
else:
|
||||
request_body['max_tokens'] = max_tokens
|
||||
|
||||
try:
|
||||
response = requests.post(
|
||||
'https://api.openai.com/v1/chat/completions',
|
||||
|
||||
@@ -174,8 +174,12 @@ class AIProcessor:
|
||||
}
|
||||
|
||||
# Add max_tokens if specified (reference plugin uses 4000 default)
|
||||
# GPT-5.1 and GPT-5.2 use max_completion_tokens instead of max_tokens
|
||||
if max_tokens:
|
||||
body_data['max_tokens'] = max_tokens
|
||||
if model in ['gpt-5.1', 'gpt-5.2']:
|
||||
body_data['max_completion_tokens'] = max_tokens
|
||||
else:
|
||||
body_data['max_tokens'] = max_tokens
|
||||
|
||||
# Add response_format if specified (for JSON mode)
|
||||
if response_format:
|
||||
@@ -1131,15 +1135,17 @@ Make sure each prompt is detailed enough for image generation, describing the vi
|
||||
# Call OpenAI with JSON response format - Steps 8-10 happen in _call_openai
|
||||
# Use the active model from integration settings (self.default_model)
|
||||
# Check if model supports JSON mode
|
||||
json_models = ['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo-preview']
|
||||
active_model = self.default_model # This is the active model from IntegrationSettings
|
||||
response_format = {'type': 'json_object'} if active_model in json_models else None
|
||||
response_format = {'type': 'json_object'} if active_model in JSON_MODE_MODELS else None
|
||||
|
||||
# GPT-5.1 and GPT-5.2 use 16384 max_tokens
|
||||
max_tokens = 16384 if active_model in ['gpt-5.1', 'gpt-5.2'] else 8192
|
||||
|
||||
try:
|
||||
result = self._call_openai(
|
||||
prompt,
|
||||
model=active_model, # Explicitly pass to ensure consistency
|
||||
max_tokens=8192,
|
||||
max_tokens=max_tokens,
|
||||
temperature=0.7,
|
||||
response_format=response_format,
|
||||
response_steps=response_steps
|
||||
@@ -1339,14 +1345,16 @@ Make sure each prompt is detailed enough for image generation, describing the vi
|
||||
|
||||
# Use the active model from integration settings (self.default_model)
|
||||
# Check if model supports JSON mode
|
||||
json_models = ['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo-preview']
|
||||
active_model = self.default_model # This is the active model from IntegrationSettings
|
||||
response_format = {'type': 'json_object'} if active_model in json_models else None
|
||||
response_format = {'type': 'json_object'} if active_model in JSON_MODE_MODELS else None
|
||||
|
||||
# GPT-5.1 and GPT-5.2 use 16384 max_tokens
|
||||
max_tokens = 16384 if active_model in ['gpt-5.1', 'gpt-5.2'] else 8192
|
||||
|
||||
result = self._call_openai(
|
||||
prompt,
|
||||
model=active_model, # Explicitly pass to ensure consistency
|
||||
max_tokens=8192,
|
||||
max_tokens=max_tokens,
|
||||
temperature=0.7,
|
||||
response_format=response_format
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user