@@ -121,6 +121,10 @@ class Chatgpt(SimpleService): 'output': Decimal('0.0002'), 'code_interpreter': Decimal('15') }, + 'gpt-oss-120b': { + 'input': Decimal('0.0002'), + 'output': Decimal('0.0002') + } } TOOLS_TOKEN_COSTS = { @@ -303,6 +307,45 @@ class Chatgpt(SimpleService): endpoint='responses', json_data=json_data ) + elif model_name == 'gpt-oss-120b': + system = chat_history.messages.pop(0) + messages = [ + {'role': 'user' if isinstance(msg, HumanMessage) else 'assistant', 'content': msg.content} + for msg in chat_history.messages + ] + messages.insert(0, {'role': 'system', 'content': system.content}) + messages.insert(0, {'role': 'system', 'content': user_system_prompt}) + if file and not image: + if sum([len(chunk.content) for chunk in chunks]) > 20_000: + document_name = chunks[0].content.partition(f':{chr(10)}')[2].split(f'{chr(10)}')[0][:100] + embedding_tokens, file_data = self.get_large_file_data(chunks, proxy, input_message.content) + messages[-1]['content'] = self.make_embeddings_prompt( + document_name=document_name, section_texts=file_data, question=input_message.content + ) + else: + messages[-1]['content'] = (f'Используй системный промпт. Содержание файла: ' + f'{chunks}. Вопрос: {input_message.content}') + json_data = { + 'model': f'openai/{model_name}', + 'messages': messages + } + response = httpx.post( + url='https://openrouter.ai/api/v1/chat/completions', proxy=f'{proxy.protocol}://{proxy.address}', + headers={'Authorization': f'Bearer {settings.OPENROUTER_API_KEY}'}, timeout=600, json=json_data + ) + if ( + (data := response.json()) + and data.get('choices') + and ( + content := ','.join( + [choice['message']['content'] for choice in data.get('choices')]) + ) + ): + input_tokens = response.json()['usage']['prompt_tokens'] + output_tokens = response.json()['usage']['completion_tokens'] + response = AIMessage(content=content.replace('\\n', '\n')) + else: + raise Exception('GPT not answer correctly, please retry later') elif model_name in ('o3-mini', 'gpt-4.5-preview'): system = chat_history.messages.pop(0) messages = [ @@ -458,6 +501,7 @@ class Chatgpt(SimpleService): 'gpt-5': 200_000, 'gpt-5-mini': 200_000, 'gpt-5-nano': 200_000, + 'gpt-oss-120b': 65_500, } tokens = 0 history: List[BaseMessage] = []