@@ -18,43 +18,52 @@ class Openjourney(SimpleService): contains abstract method make, which makes a generation """ - title = 'OpenJourney' + title = 'Midjourney' description = 'Нейросеть, способная генерировать фотографии из вашего текста' - price = Decimal('1.518') + price = Decimal('2') category = ModelCategory(title='Изображения', slug='images') - versions = [] inputs = [ModelInput(type=ModelInput.TypeChoices.TEXT, required=True)] parameters = [ ModelParameter( - name='Количество изображений', - key='num_outputs', - type=ModelParameter.TypeChoices.INTRANGE, - values={'start': 1, 'end': 10, 'step': 1, 'default': 1}, + name='Соотношение сторон', + key='aspect_ratio', + type=ModelParameter.TypeChoices.LIST, + values={ + 'availables': [ + "1:1", + "16:9", + "4:3", + "3:2", + "2:3", + "3:4", + "9:16", + "21:9" + ], + 'default': '1:1', + }, ), ModelParameter( - name='Количество шагов', - key='num_inference_steps', + name='Количество изображений', + key='number_of_images', type=ModelParameter.TypeChoices.INTRANGE, - values={'start': 0, 'end': 100, 'step': 1, 'default': 10}, + values={'start': 1, 'end': 9, 'step': 1, 'default': 1}, ), ModelParameter( - name='Негативный промпт', - key='negative_prompt', - type=ModelParameter.TypeChoices.STR, + name='Оптимизация промпта', + key='prompt_optimizer', + type=ModelParameter.TypeChoices.BOOL, + values={'default': True}, ), ] - _CALLBACK = ( - 'prompthero/openjourney' - ':ad59ca21177f9e217b9075e7300cf6e14f7e5b4505b87b9689dbd866e9768969' - ) + _CALLBACK = 'minimax/image-01' def __init__(self, store): super().__init__(store) - def calculate_price(self, process_time: timedelta) -> Decimal: - price = Decimal(process_time.total_seconds()) * self.price - return price.quantize(Decimal('0.1'), rounding='ROUND_UP') + def calculate_price(self, input_message: Message) -> Decimal: + price = input_message.info.get('number_of_images', 1) * self.price + return price.quantize(Decimal('0.1'), rounding='ROUND_UP') def save_results( self, input_prompt: str, r: list[str], t: timedelta, save: bool = True @@ -78,10 +87,8 @@ class Openjourney(SimpleService): translated_prompt = self.translate_prompt(input_message.content) activation_prompt = f'mdjrny-v4 style a highly detailed {translated_prompt}' callback_data = dict(prompt=activation_prompt, **input_message.info) - if input_message.file: - callback_data.update({'image': BytesIO(input_message.file.read())}) results = replicate_run(self._CALLBACK, callback_data) process_time = timedelta(seconds=(time.time() - start_time)) - self.handle_invoice(input_message.content_object.model, process_time=process_time) + self.handle_invoice(input_message.content_object.model, input_message=input_message) msgs = self.save_results(input_message.content, results, process_time, save) return msgs