Skip to content

Commit cafaf84

Browse files
authored
Release Candidate v4.6.0 (#256)
2 parents e0b8a8c + bc8f676 commit cafaf84

13 files changed

+273
-81
lines changed

.version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4.5.0
1+
4.6.0

Pipfile.lock

Lines changed: 45 additions & 45 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/di/di.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
from features.chat.currency_alert_service import CurrencyAlertService
3636
from features.chat.dev_announcements_service import DevAnnouncementsService
3737
from features.chat.llm_tools.llm_tool_library import LLMToolLibrary
38-
from features.chat.smart_stable_diffusion_generator import SmartStableDiffusionGenerator
3938
from features.chat.telegram.domain_langchain_mapper import DomainLangchainMapper
4039
from features.chat.telegram.sdk.telegram_bot_api import TelegramBotAPI
4140
from features.chat.telegram.sdk.telegram_bot_sdk import TelegramBotSDK
@@ -56,6 +55,7 @@
5655
from features.images.image_editor import ImageEditor
5756
from features.images.image_uploader import ImageUploader
5857
from features.images.simple_stable_diffusion_generator import SimpleStableDiffusionGenerator
58+
from features.images.smart_stable_diffusion_generator import SmartStableDiffusionGenerator
5959
from features.integrations.platform_bot_sdk import PlatformBotSDK
6060
from features.sponsorships.sponsorship_service import SponsorshipService
6161
from features.support.user_support_service import UserSupportService
@@ -555,18 +555,22 @@ def smart_stable_diffusion_generator(
555555
raw_prompt: str,
556556
configured_copywriter_tool: ConfiguredTool,
557557
configured_image_gen_tool: ConfiguredTool,
558+
aspect_ratio: str | None = None,
558559
) -> "SmartStableDiffusionGenerator":
559-
from features.chat.smart_stable_diffusion_generator import SmartStableDiffusionGenerator
560-
return SmartStableDiffusionGenerator(raw_prompt, configured_copywriter_tool, configured_image_gen_tool, self)
560+
from features.images.smart_stable_diffusion_generator import SmartStableDiffusionGenerator
561+
return SmartStableDiffusionGenerator(
562+
raw_prompt, configured_copywriter_tool, configured_image_gen_tool, self, aspect_ratio,
563+
)
561564

562565
# noinspection PyMethodMayBeStatic
563566
def simple_stable_diffusion_generator(
564567
self,
565568
prompt: str,
566569
configured_tool: ConfiguredTool,
570+
aspect_ratio: str | None = None,
567571
) -> "SimpleStableDiffusionGenerator":
568572
from features.images.simple_stable_diffusion_generator import SimpleStableDiffusionGenerator
569-
return SimpleStableDiffusionGenerator(prompt, configured_tool, self)
573+
return SimpleStableDiffusionGenerator(prompt, configured_tool, self, aspect_ratio)
570574

571575
# noinspection PyMethodMayBeStatic
572576
def image_uploader(
@@ -593,9 +597,10 @@ def chat_imaging_service(
593597
attachment_ids: list[str],
594598
operation_name: str,
595599
operation_guidance: str | None,
600+
aspect_ratio: str | None = None,
596601
) -> "ChatImagingService":
597602
from features.chat.chat_imaging_service import ChatImagingService
598-
return ChatImagingService(attachment_ids, operation_name, operation_guidance, self)
603+
return ChatImagingService(attachment_ids, operation_name, operation_guidance, aspect_ratio, self)
599604

600605
# noinspection PyMethodMayBeStatic
601606
def image_editor(
@@ -604,9 +609,10 @@ def image_editor(
604609
configured_tool: ConfiguredTool,
605610
context: str | None = None,
606611
mime_type: str | None = None,
612+
aspect_ratio: str | None = None,
607613
) -> "ImageEditor":
608614
from features.images.image_editor import ImageEditor
609-
return ImageEditor(image_url, configured_tool, context, mime_type)
615+
return ImageEditor(image_url, configured_tool, context, mime_type, aspect_ratio)
610616

611617
# noinspection PyMethodMayBeStatic
612618
def image_background_remover(

src/features/chat/chat_imaging_service.py

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from db.schema.chat_message_attachment import ChatMessageAttachment
44
from di.di import DI
5+
from features.images.aspect_ratio_utils import validate_aspect_ratio
56
from features.images.image_background_remover import ImageBackgroundRemover
67
from features.images.image_contents_restorer import ImageContentsRestorer
78
from features.images.image_editor import ImageEditor
@@ -37,13 +38,15 @@ def resolve(operation: str) -> "ChatImagingService.Operation":
3738
__attachments: list[ChatMessageAttachment]
3839
__operation: Operation
3940
__operation_guidance: str | None
41+
__aspect_ratio: str
4042
__di: DI
4143

4244
def __init__(
4345
self,
4446
attachment_ids: list[str],
4547
operation_name: str,
4648
operation_guidance: str | None,
49+
aspect_ratio: str | None,
4750
di: DI,
4851
):
4952
if not attachment_ids:
@@ -52,6 +55,7 @@ def __init__(
5255
self.__attachments = self.__di.platform_bot_sdk().refresh_attachments_by_ids(attachment_ids)
5356
self.__operation = ChatImagingService.Operation.resolve(operation_name)
5457
self.__operation_guidance = operation_guidance
58+
self.__aspect_ratio = validate_aspect_ratio(aspect_ratio, ImageEditor.DEFAULT_ASPECT_RATIO)
5559

5660
def __remove_background(self) -> tuple[Result, URLList, ErrorList]:
5761
log.t(f"Removing background from {len(self.__attachments)} images")
@@ -163,6 +167,7 @@ def __edit_image(self) -> tuple[Result, URLList, ErrorList]:
163167
configured_tool = configured_tool,
164168
context = self.__operation_guidance,
165169
mime_type = attachment.mime_type,
170+
aspect_ratio = self.__aspect_ratio,
166171
)
167172
editing_result = editor.execute()
168173
if editor.error:
@@ -194,50 +199,50 @@ def execute(self) -> tuple[Result, list[dict[str, str | None]]]:
194199
if self.__operation == ChatImagingService.Operation.remove_background:
195200
result, urls, errors = self.__remove_background()
196201
urls = self.__clean_urls(urls)
197-
output: list[dict[str, str | None]] = []
202+
output_removal_urls: list[dict[str, str | None]] = []
198203
for image_url, error in zip(urls, errors):
199204
if image_url is None:
200-
output.append({"url": None, "error": error})
205+
output_removal_urls.append({"url": None, "error": error})
201206
continue
202207
external_id = str(invoker_chat.external_id)
203208
log.t(f"Sending edited image to chat '{external_id}'")
204209
self.__di.platform_bot_sdk().send_document(external_id, image_url, thumbnail = image_url)
205210
self.__di.platform_bot_sdk().send_photo(external_id, image_url, caption = "📸")
206211
log.t("Image edited and sent successfully")
207-
output.append({"url": image_url, "error": None, "status": "delivered"})
208-
return result, output
212+
output_removal_urls.append({"url": image_url, "error": None, "status": "delivered"})
213+
return result, output_removal_urls
209214

210215
elif self.__operation == ChatImagingService.Operation.restore_image:
211216
result, urls, errors = self.__restore_image()
212217
urls = self.__clean_urls(urls)
213-
output: list[dict[str, str | None]] = []
218+
output_restoration_urls: list[dict[str, str | None]] = []
214219
for image_url, error in zip(urls, errors):
215220
if image_url is None:
216-
output.append({"url": None, "error": error})
221+
output_restoration_urls.append({"url": None, "error": error})
217222
continue
218223
external_id = str(invoker_chat.external_id)
219224
log.t(f"Sending restored image to chat '{external_id}': {image_url}")
220225
self.__di.platform_bot_sdk().send_document(external_id, image_url, thumbnail = image_url)
221226
self.__di.platform_bot_sdk().send_photo(external_id, image_url, caption = "📸")
222227
log.t("Image restored and sent successfully")
223-
output.append({"url": image_url, "error": None, "status": "delivered"})
224-
return result, output
228+
output_restoration_urls.append({"url": image_url, "error": None, "status": "delivered"})
229+
return result, output_restoration_urls
225230

226231
elif self.__operation == ChatImagingService.Operation.edit_image:
227232
result, urls, errors = self.__edit_image()
228233
urls = self.__clean_urls(urls)
229-
output: list[dict[str, str | None]] = []
234+
output_editing_urls: list[dict[str, str | None]] = []
230235
for image_url, error in zip(urls, errors):
231236
if image_url is None:
232-
output.append({"url": None, "error": error})
237+
output_editing_urls.append({"url": None, "error": error})
233238
continue
234239
external_id = str(invoker_chat.external_id)
235240
log.t(f"Sending edited image to chat '{external_id}': {image_url}")
236241
self.__di.platform_bot_sdk().send_document(external_id, image_url, thumbnail = image_url)
237242
self.__di.platform_bot_sdk().send_photo(external_id, image_url, caption = "📸")
238243
log.t("Image edited and sent successfully")
239-
output.append({"url": image_url, "error": None, "status": "delivered"})
240-
return result, output
244+
output_editing_urls.append({"url": image_url, "error": None, "status": "delivered"})
245+
return result, output_editing_urls
241246

242247
else:
243248
raise ValueError(f"Unknown operation '{self.__operation.value}'")

0 commit comments

Comments
 (0)