@@ -55,7 +55,7 @@ from ml_model.services.prunaai import Prunaai from ml_model.services.pulid import Pulid from ml_model.services.qwen import Qwen from ml_model.services.qwen_235B import Qwen_235B -from ml_model.services.qwen_3_5 import Qwen_3_5 +from ml_model.services.qwen_3_6 import Qwen_3_6 from ml_model.services.qwen_3_max_thinking import Qwen_3_Max_Thinking from ml_model.services.raifgpt import Raifgpt from ml_model.services.ray import Ray @@ -124,7 +124,7 @@ class Chatgpt(SimpleService): raise FileUploadUnsupported file_service = FileProcessingService file_bytes = input_message.file.read() - kind = filetype.guess(file_bytes[:20]) + kind = filetype.guess(file_bytes[:550]) if not kind: raise CorruptedFileError raw_file_extension = kind.extension @@ -109,7 +109,7 @@ class Chatgpt_5(Chatgpt): if file: file_service = FileProcessingService file_bytes = input_message.file.read() - kind = filetype.guess(file_bytes[:20]) + kind = filetype.guess(file_bytes[:550]) if not kind: raise CorruptedFileError raw_file_extension = kind.extension @@ -124,7 +124,7 @@ class Chatgpt_5_4(Chatgpt): if file: file_service = FileProcessingService file_bytes = input_message.file.read() - kind = filetype.guess(file_bytes[:20]) + kind = filetype.guess(file_bytes[:550]) if not kind: raise CorruptedFileError raw_file_extension = kind.extension @@ -79,7 +79,7 @@ class Claude(SimpleService): file_service = FileProcessingService try: file_bytes = input_message.file.read() - kind = filetype.guess(file_bytes[:20]) + kind = filetype.guess(file_bytes[:550]) raw_file_extension = kind.extension file_extension = file_service.get_file_extension(raw_file_extension, file_bytes) if file_extension in ('pdf', 'doc', 'docx', 'xlsx'): @@ -136,7 +136,7 @@ class Gemini(SimpleService): if file: file_service = FileProcessingService file_bytes = input_message.file.read() - kind = filetype.guess(file_bytes[:20]) + kind = filetype.guess(file_bytes[:550]) raw_file_extension = kind.extension file_extension = file_service.get_file_extension(raw_file_extension, file_bytes) if file_extension in ('pdf', 'doc', 'docx', 'xlsx'): @@ -86,7 +86,7 @@ class Gemini_3_1(SimpleService): if input_message.file: file_service = FileProcessingService file_bytes = input_message.file.read() - kind = filetype.guess(file_bytes[:20]) + kind = filetype.guess(file_bytes[:550]) raw_file_extension = kind.extension file_extension = file_service.get_file_extension(raw_file_extension, file_bytes) if file_extension in ('pdf', 'doc', 'docx', 'xlsx'): @@ -57,7 +57,7 @@ class Grok_4_1_Fast(SimpleService): if input_message.file: file_service = FileProcessingService file_bytes = input_message.file.read() - kind = filetype.guess(file_bytes[:20]) + kind = filetype.guess(file_bytes[:550]) if not kind: raise CorruptedFileError raw_file_extension = kind.extension @@ -19,25 +19,21 @@ from tools.copywrite.models import Copywrite from tools.public_api.models import APIStore -class Qwen_3_5(SimpleService): - TOKENS_COST = { - 'qwen3.5-9b': {'input': Decimal('30'), 'output': Decimal('45')}, - 'qwen3.5-flash-02-23': {'input': Decimal('30'), 'output': Decimal('120')}, - 'qwen3.5-35b-a3b': {'input': Decimal('48.75'), 'output': Decimal('390')}, - 'qwen3.5-27b': {'input': Decimal('58.5'), 'output': Decimal('468')}, - 'qwen3.5-122b-a10b': {'input': Decimal('78'), 'output': Decimal('624')}, - 'qwen3.5-397b-a17b': {'input': Decimal('117'), 'output': Decimal('702')}, +class Qwen_3_6(SimpleService): + MODELS_LINKS = { + 'qwen3.6-flash': 'qwen3.6-flash', + 'qwen3.6-max': 'qwen3.6-35b-a3b', + 'qwen3.6-plus': 'qwen3.6-plus', } - PROVIDERS = { - 'qwen3.5-9b': 'together', - 'qwen3.5-flash-02-23': 'alibaba', - 'qwen3.5-35b-a3b': 'alibaba', - 'qwen3.5-27b': 'alibaba', - 'qwen3.5-122b-a10b': 'alibaba', - 'qwen3.5-397b-a17b': 'alibaba', + TOKENS_COST = { + 'qwen3.6-flash': {'input': Decimal('125'), 'output': Decimal('750')}, + 'qwen3.6-35b-a3b': {'input': Decimal('115'), 'output': Decimal('900')}, + 'qwen3.6-plus': {'input': Decimal('250'), 'output': Decimal('1500')}, } + MAX_OUTPUT_TOKENS = 30_000 + TOOLS_TOKEN_COSTS = {'text-embedding-3-small': {'output': Decimal('0.00001')}} def calculate_price( @@ -66,15 +62,15 @@ class Qwen_3_5(SimpleService): def make(self, input_message: Message, save: bool = True) -> list[Message]: start_time = time.time() - version = input_message.info.get('version', 'qwen3.5-9b') - callback_data = {'provider': {'order': [self.PROVIDERS[version]]}, **input_message.info} + version = self.MODELS_LINKS[input_message.info.get('version', 'qwen3.6-flash')] + callback_data = {'max_tokens': self.MAX_OUTPUT_TOKENS, **input_message.info} messages = self.get_chat_history() messages.append({'role': 'user', 'content': input_message.content}) embedding_tokens = 0 if input_message.file: file_service = FileProcessingService file_bytes = input_message.file.read() - kind = filetype.guess(file_bytes[:20]) + kind = filetype.guess(file_bytes[:550]) raw_file_extension = kind.extension file_extension = file_service.get_file_extension(raw_file_extension, file_bytes) if file_extension in ('pdf', 'doc', 'docx', 'xlsx'): @@ -116,8 +112,8 @@ class Qwen_3_5(SimpleService): ] else: raise FileExtensionNotSupported(['PDF', 'DOC', 'DOCX', 'XLSX', 'JPG', 'JPEG', 'PNG', 'WEBP']) - model_slug = f'qwen/{version}:online' if self.PROVIDERS[version] == 'alibaba' else f'qwen/{version}' - result = openrouter_run(model_slug, messages, callback_data, 'Qwen 3.5') + model_slug = f'qwen/{version}:online' + result = openrouter_run(model_slug, messages, callback_data, 'Qwen 3.6') process_time = timedelta(seconds=(time.time() - start_time)) self.handle_invoice( input_message.content_object.model, @@ -80,7 +80,7 @@ class Raifgpt(Chatgpt): if file: file_service = FileProcessingService file_bytes = file.read() - kind = filetype.guess(file_bytes[:20]) + kind = filetype.guess(file_bytes[:550]) if not kind: raise CorruptedFileError raw_file_extension = kind.extension @@ -14,7 +14,6 @@ from yookassa.domain.response import PaymentResponse as YookassaPaymentResponse from authentication.models import CustomUserModel from lib.unleash.client import web_client -from payments.exceptions.full_balance import FullBalanceException from payments.models.payment import Payment as PaymentModel from payments.models.payment_plan import PaymentPlan, PaymentPlanUserInfo from payments.services.payment_method_service import PaymentMethodService @@ -49,7 +48,6 @@ class PaymentService: ) payment_data = { 'amount': {'value': f'{plan.price}', 'currency': 'RUB'}, - 'payment_method_data': {'type': 'bank_card'}, 'receipt': receipt_data, 'confirmation': { 'type': 'redirect',