models + refactor
This commit is contained in:
@@ -12,7 +12,7 @@ from aiogram.types import BufferedInputFile
|
||||
|
||||
from adapters.Exception import GoogleGenerationException
|
||||
from adapters.google_adapter import GoogleAdapter
|
||||
from adapters.ai_proxy_adapter import AIProxyAdapter
|
||||
from adapters.ai_proxy_adapter import AIProxyAdapter, AIProxyException
|
||||
from adapters.s3_adapter import S3Adapter
|
||||
from api.models import (
|
||||
FinancialReport, UsageStats, UsageByEntity,
|
||||
@@ -180,13 +180,21 @@ class GenerationService:
|
||||
settings = await self.dao.settings.get_settings()
|
||||
if settings.use_ai_proxy:
|
||||
asset_urls = await self._prepare_asset_urls(asset_ids) if asset_ids else None
|
||||
generated_images_io, metrics = await self.ai_proxy.generate_image(
|
||||
prompt=generation_prompt,
|
||||
aspect_ratio=generation.aspect_ratio,
|
||||
quality=generation.quality,
|
||||
model=generation.model or "gemini-3-pro-image-preview",
|
||||
asset_urls=asset_urls
|
||||
)
|
||||
try:
|
||||
generated_images_io, metrics = await self.ai_proxy.generate_image(
|
||||
prompt=generation_prompt,
|
||||
aspect_ratio=generation.aspect_ratio,
|
||||
quality=generation.quality,
|
||||
model=generation.model or "gemini-3-pro-image-preview",
|
||||
asset_urls=asset_urls
|
||||
)
|
||||
except AIProxyException as e:
|
||||
await self._handle_generation_failure(generation, e)
|
||||
raise
|
||||
except Exception as e:
|
||||
await self._handle_generation_failure(generation, e)
|
||||
raise
|
||||
|
||||
generated_bytes_list = []
|
||||
for img_io in generated_images_io:
|
||||
img_io.seek(0)
|
||||
@@ -402,11 +410,16 @@ class GenerationService:
|
||||
generation.input_token_usage = metrics.get("input_token_usage")
|
||||
generation.output_token_usage = metrics.get("output_token_usage")
|
||||
|
||||
async def _handle_generation_failure(self, generation: Generation, error: Optional[Exception]):
|
||||
async def _handle_generation_failure(self, generation: Generation, error: Optional[Exception], error_code: Optional[str] = None):
|
||||
logger.error(f"Generation {generation.id} failed: {error}")
|
||||
generation.status = GenerationStatus.FAILED
|
||||
# Don't overwrite if reason is already set, unless a new error is provided
|
||||
if error:
|
||||
|
||||
# Priority: explicit error_code, then AIProxyException's code, then exception message
|
||||
if error_code:
|
||||
generation.failed_reason = error_code
|
||||
elif isinstance(error, AIProxyException) and error.error_code:
|
||||
generation.failed_reason = error.error_code
|
||||
elif error:
|
||||
generation.failed_reason = str(error)
|
||||
elif not generation.failed_reason:
|
||||
generation.failed_reason = "Unknown error"
|
||||
|
||||
Reference in New Issue
Block a user