@@ -105,7 +105,22 @@ class Chatgpt(SimpleService): 'high': Decimal('5') # 1 call }, 'code_interpreter': Decimal('15') - } + }, + 'gpt-5-mini': { + 'input': Decimal('0.000125'), + 'output': Decimal('0.001'), + 'web_search': { + 'low': Decimal('5'), # 1 call + 'medium': Decimal('5'), # 1 call + 'high': Decimal('5') # 1 call + }, + 'code_interpreter': Decimal('15') + }, + 'gpt-5-nano': { + 'input': Decimal('0.000025'), + 'output': Decimal('0.0002'), + 'code_interpreter': Decimal('15') + }, } TOOLS_TOKEN_COSTS = { @@ -214,7 +229,7 @@ class Chatgpt(SimpleService): self.assert_enough_balance( input_tokens, image_size, model=self.llm.model_name, embedding_tokens=input_embedding_tokens ) - if model_name == 'gpt-5': + if model_name in ('gpt-5', 'gpt-5-mini', 'gpt-5-nano'): system = chat_history.messages.pop(0) messages = [ {'role': 'user' if isinstance(msg, HumanMessage) else 'assistant', 'content': msg.content} @@ -248,8 +263,10 @@ class Chatgpt(SimpleService): json_data['reasoning']['effort'] = reasoning_data[info['reasoning']] json_data['reasoning']['summary'] = 'auto' if info.get('reasoning') == 'Минимальный': - info.pop('web_search') - info.pop('code_interpreter') + info.pop('web_search', None) + info.pop('code_interpreter', None) + if model_name == 'gpt-5-nano': + info.pop('web_search', None) if info.get('web_search', 'Отключено') != 'Отключено': search_context_size, json_data = self.get_web_search_data( info.get('web_search', 'Средний контекст'), @@ -422,6 +439,8 @@ class Chatgpt(SimpleService): 'gpt-4o': 64_000, 'gpt-4.5-preview': 64_000, 'gpt-5': 200_000, + 'gpt-5-mini': 200_000, + 'gpt-5-nano': 200_000, } tokens = 0 history: List[BaseMessage] = []