@@ -83,4 +83,4 @@ from ml_model.services.wan_lite import Wan_Lite from ml_model.services.whisper import Whisper from ml_model.services.image_test_model import Image_Test_Model from ml_model.services.video_test_model import Video_Test_Model -from ml_model.services.audio_test_model import Audio_Test_Model \ No newline at end of file +from ml_model.services.audio_test_model import Audio_Test_Model @@ -27,8 +27,12 @@ class Grok(StreamSimpleService): TOKENS_COST = { 'grok-4.3': { - 'input': {'default': Decimal('875'), 'high': Decimal('1750')}, - 'output': {'default': Decimal('1750'), 'high': Decimal('3500')}, + 'input': Decimal('875'), + 'output': Decimal('1750'), + }, + 'grok-4.5': { + 'input': Decimal('1000'), + 'output': Decimal('3000'), }, } @@ -44,13 +48,14 @@ class Grok(StreamSimpleService): ) -> Decimal: price_map = self.TOKENS_COST[version.split('/')[1]] price = ( - input_tokens * price_map['input']['default' if input_tokens <= 200_000 else 'high'] / 1_000_000 + input_tokens * price_map['input'] / 1_000_000 + output_tokens - * price_map['output']['default' if output_tokens <= 200_000 else 'high'] + * price_map['output'] / 1_000_000 ) if embedding_tokens: price += embedding_tokens * self.TOOLS_TOKEN_COSTS['text-embedding-3-small']['output'] + return price.quantize(Decimal('0.1'), rounding='ROUND_UP') def save_results(self, content: str, t: timedelta, save: bool = True) -> list[Message]: @@ -61,11 +66,12 @@ class Grok(StreamSimpleService): ) if save: msg.save() + return [msg] def make(self, input_message: Message, save: bool = True) -> list[Message]: start_time = time.time() - version = 'x-ai/grok-4.3' + version = input_message.info.get('version') or 'x-ai/grok-4.5' callback_data = {**input_message.info} messages, embedding_tokens = self._prepare_messages(input_message, version) @@ -83,7 +89,7 @@ class Grok(StreamSimpleService): def make_stream(self, input_message: Message, save: bool = True) -> Iterator[str]: start_time = time.time() - version = 'x-ai/grok-4.3' + version = input_message.info.get('version') or 'x-ai/grok-4.5' callback_data = {**input_message.info} messages, embedding_tokens = self._prepare_messages(input_message, version) content_parts: list[str] = [] @@ -1,3 +1,4 @@ +import json import logging from typing import Optional @@ -41,13 +42,15 @@ logger = logging.getLogger(__name__) def get_request_data(request: Request) -> dict: - data = request.data.copy() - - if isinstance(data, QueryDict): + if isinstance(request.data, QueryDict): # Form-data и multipart приходят как QueryDict, а JSON - как обычный словарь. - return data.dict() + data = request.data.dict() + if 'info' in data: + data['info'] = json.loads(data['info']) + + return data - return data + return request.data.copy() class GalleryAPIView(APIView):