o
    Z_h<                     @   sx   d dl mZmZ d dlmZmZmZ d dlmZ d dl	Z	eddddZ
G d	d
 d
eZe Ze
ddefddZdS )    )FastAPIHTTPException)	BaseModelField	validator)ProfessionalImageGeneratorNzImage Generation APIzJAPI for generating images using Pollinations.ai - All Categories Supportedz3.0.0)titledescriptionversionc                   @   s   e Zd ZU edddZeed< edddZeed< edddZeed< ed	d
dZ	e
ed< edddZe
ed< edddZe
ed< eddd Zeddd Zedddd ZG dd dZdS )ImageRequest.z$The text prompt for image generation)r	   promptzCategory/style for the imagecategoryz'Model name: flux, nano-banana, or turbo
model_name  zImage width in pixelswidth8  zImage height in pixelsheight   z$Number of images to generate (max 3)image_countc                 C   s(   g d}||vrt dd| |S )N)fluxznano-bananaturbozmodel_name must be one of: z, )
ValueErrorjoin)clsvallowed_models r   H/var/www/eduai.edurigo.com/generate_image/production/image_generation.pyvalidate_model_name   s   z ImageRequest.validate_model_namec                 C   s(   d|  krdkst d t d|S )Nr      z#image_count must be between 1 and 3r   r   r   r   r   r   validate_image_count   s
   z!ImageRequest.validate_image_countc                 C   s   |dkrt d|S )Nr   z*width and height must be positive integersr    r!   r   r   r   validate_dimensions!   s   z ImageRequest.validate_dimensionsc                   @   s"   e Zd ZddddddddiZd	S )
zImageRequest.ConfigexampleziGenerate a professional online training session with diverse learners interacting through virtual screens	realisticr   r   r   r   r   r   r   r   r   r   N)__name__
__module____qualname__json_schema_extrar   r   r   r   Config'   s    r+   N)r'   r(   r)   r   r   str__annotations__r   r   r   intr   r   r   r   r"   r#   r+   r   r   r   r   r      s   
 


r   z/generate-imagerequestc              
      s   z"t j| j| j  | j| j| j| j	d}|st
dddd|iW S  t
y+     tyA } zt
ddt| dd}~ww )a  
    Generate images based on the provided parameters.

    - **prompt**: The text prompt for image generation
    - **category**: Category/style for the image (accepts any category type)
    - **model_name**: Model to use (flux, nano-banana, turbo)
    - **width**: Image width in pixels
    - **height**: Image height in pixels
    - **image_count**: Number of images to generate (1-3)

    Returns a list of generated images with names and base64 data.
    r&   i  zImage generation failed)status_codedetailimageszError generating image: N)	generatorgenerate_multiple_imagesr   r   lowerstripr   r   r   r   r   	Exceptionr,   )r/   r2   er   r   r   generate_image6   s&   	
r9   )fastapir   r   pydanticr   r   r   pollinations_image_generatorr   base64appr   r3   postr9   r   r   r   r   <module>   s    (