Spaces:
Sleeping
Sleeping
| from loguru import logger | |
| from pathlib import Path | |
| from typing import Annotated | |
| from fastapi import ( | |
| APIRouter, | |
| HTTPException, | |
| Depends | |
| ) | |
| from fastapi.responses import FileResponse | |
| from src.models.requests import ImageGenerationRequest | |
| from src.models.response import ImageResult | |
| from src.service.imagen_service import get_imagen_service, ImageService | |
| from src.config import settings | |
| from src.utils.helpers import generate_request_id | |
| router = APIRouter(prefix=settings.API_V1_PREFIX, tags=["Image Generation"]) | |
| async def generate_image( | |
| request: ImageGenerationRequest, | |
| imagen_service: Annotated[ImageService, Depends(get_imagen_service)], | |
| ): | |
| """ | |
| Generate an image based on the provided product details. | |
| Parameters: | |
| - request: ImageGenerationRequest containing product details. | |
| Returns: | |
| - ImageResult with generated image URL and metadata. | |
| """ | |
| try: | |
| result = imagen_service.generate_image(request) | |
| if result is None: | |
| raise HTTPException(status_code=500, detail="Image generation failed") | |
| return result | |
| except HTTPException: | |
| raise | |
| except Exception as e: | |
| raise HTTPException( | |
| status_code=500, | |
| detail={ | |
| "error": "image_generation_failed", | |
| "message": str(e), | |
| "request_id": generate_request_id() | |
| } | |
| ) | |
| from pathlib import Path | |
| async def get_image(file_name: str): | |
| """ | |
| Retrieve an image by its file name. | |
| Parameters: | |
| - file_name: Name of the image file to retrieve. | |
| Returns: | |
| - Image file if found, otherwise raises HTTP 404 error. | |
| """ | |
| logger.info(f"Retrieving image: {file_name}") | |
| try: | |
| upload_dir = Path(settings.UPLOAD_DIR) | |
| file_path = upload_dir / file_name | |
| if not file_path.exists(): | |
| logger.warning(f"Image not found: {file_name}") | |
| raise HTTPException(status_code=404, detail="Image not found") | |
| logger.info(f"Image retrieved successfully: {file_name}") | |
| return FileResponse( | |
| path=file_path, | |
| media_type="image/png", | |
| filename=file_name | |
| ) | |
| except Exception as e: | |
| logger.critical(f"Critical error during image retrieval: {e}") | |
| raise HTTPException( | |
| status_code=500, | |
| detail={ | |
| "error": "image_retrieval_failed", | |
| "message": str(e), | |
| "request_id": generate_request_id() | |
| } | |
| ) |