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,
|
'temperature': temperature,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# GPT-5.1 and GPT-5.2 use max_completion_tokens instead of max_tokens
|
||||||
if 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:
|
if response_format:
|
||||||
body_data['response_format'] = response_format
|
body_data['response_format'] = response_format
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ MODEL_RATES = {
|
|||||||
'gpt-4.1': {'input': 2.00, 'output': 8.00},
|
'gpt-4.1': {'input': 2.00, 'output': 8.00},
|
||||||
'gpt-4o-mini': {'input': 0.15, 'output': 0.60},
|
'gpt-4o-mini': {'input': 0.15, 'output': 0.60},
|
||||||
'gpt-4o': {'input': 2.50, 'output': 10.00},
|
'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
|
# Image model pricing (per image) - EXACT from reference plugin
|
||||||
@@ -33,7 +35,7 @@ VALID_SIZES_BY_MODEL = {
|
|||||||
DEFAULT_AI_MODEL = 'gpt-4.1'
|
DEFAULT_AI_MODEL = 'gpt-4.1'
|
||||||
|
|
||||||
# JSON mode supported models
|
# 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
|
# Debug mode - controls console logging
|
||||||
# Set to False in production to disable verbose 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
|
# MODEL_RATES not available - skip validation
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Get max_tokens and temperature from config (standardized to 8192)
|
# Get max_tokens and temperature from config (standardized to 8192, 16384 for GPT-5.x)
|
||||||
max_tokens = config.get('max_tokens', 8192) # Standardized across entire codebase
|
# 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
|
temperature = config.get('temperature', 0.7) # Reasonable default
|
||||||
|
|
||||||
# Build response format based on model (JSON mode for supported models)
|
# 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):
|
def test_get_model_config_json_mode_models(self):
|
||||||
"""Test get_model_config() sets response_format for JSON mode models"""
|
"""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:
|
for model in json_models:
|
||||||
IntegrationSettings.objects.filter(account=self.account).delete()
|
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'))
|
# 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'
|
model = (config or {}).get('model', 'gpt-4.1') if config else 'gpt-4.1'
|
||||||
|
|
||||||
# Get max_tokens from config or use default
|
# Get max_tokens from config or use default based on model
|
||||||
max_tokens = (config or {}).get('max_tokens', 8192) if config else 8192
|
# 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)
|
# Check if test with response is requested (reference plugin: $with_response parameter)
|
||||||
with_response = (config or {}).get('with_response', False) if config else False
|
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'
|
'content': 'Reply with exactly: OK! Ping Received'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
'max_tokens': max_tokens,
|
|
||||||
'temperature': 0.7,
|
'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:
|
try:
|
||||||
response = requests.post(
|
response = requests.post(
|
||||||
'https://api.openai.com/v1/chat/completions',
|
'https://api.openai.com/v1/chat/completions',
|
||||||
|
|||||||
@@ -174,8 +174,12 @@ class AIProcessor:
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Add max_tokens if specified (reference plugin uses 4000 default)
|
# 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:
|
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)
|
# Add response_format if specified (for JSON mode)
|
||||||
if response_format:
|
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
|
# Call OpenAI with JSON response format - Steps 8-10 happen in _call_openai
|
||||||
# Use the active model from integration settings (self.default_model)
|
# Use the active model from integration settings (self.default_model)
|
||||||
# Check if model supports JSON mode
|
# 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
|
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:
|
try:
|
||||||
result = self._call_openai(
|
result = self._call_openai(
|
||||||
prompt,
|
prompt,
|
||||||
model=active_model, # Explicitly pass to ensure consistency
|
model=active_model, # Explicitly pass to ensure consistency
|
||||||
max_tokens=8192,
|
max_tokens=max_tokens,
|
||||||
temperature=0.7,
|
temperature=0.7,
|
||||||
response_format=response_format,
|
response_format=response_format,
|
||||||
response_steps=response_steps
|
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)
|
# Use the active model from integration settings (self.default_model)
|
||||||
# Check if model supports JSON mode
|
# 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
|
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(
|
result = self._call_openai(
|
||||||
prompt,
|
prompt,
|
||||||
model=active_model, # Explicitly pass to ensure consistency
|
model=active_model, # Explicitly pass to ensure consistency
|
||||||
max_tokens=8192,
|
max_tokens=max_tokens,
|
||||||
temperature=0.7,
|
temperature=0.7,
|
||||||
response_format=response_format
|
response_format=response_format
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -506,6 +506,8 @@ export default function Integration() {
|
|||||||
{ value: 'gpt-4.1', label: 'GPT-4.1 - $2.00 / $8.00 per 1M tokens' },
|
{ value: 'gpt-4.1', label: 'GPT-4.1 - $2.00 / $8.00 per 1M tokens' },
|
||||||
{ value: 'gpt-4o-mini', label: 'GPT-4o mini - $0.15 / $0.60 per 1M tokens' },
|
{ value: 'gpt-4o-mini', label: 'GPT-4o mini - $0.15 / $0.60 per 1M tokens' },
|
||||||
{ value: 'gpt-4o', label: 'GPT-4o - $2.50 / $10.00 per 1M tokens' },
|
{ value: 'gpt-4o', label: 'GPT-4o - $2.50 / $10.00 per 1M tokens' },
|
||||||
|
{ value: 'gpt-5.1', label: 'GPT-5.1 - $1.25 / $10.00 per 1M tokens (16K)' },
|
||||||
|
{ value: 'gpt-5.2', label: 'GPT-5.2 - $1.75 / $14.00 per 1M tokens (16K)' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user