
    5io                        d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlZddlmZ  ej                  e      ZdZg d	Z G d
 de      Zy)uo  
Pollinations Image Provider – generates images from text prompts via Pollinations.ai API.

Supports multiple models: flux, zimage, gptimage, seedream, nanobanana, etc.

Env vars:
  POLLINATIONS_API_KEY - API key from enter.pollinations.ai (optional for limited use)
  POLLINATIONS_IMAGE_MODEL - Model to use (default: flux)

Docs: https://gen.pollinations.ai/docs
    )annotationsN)Path)Any)quote)ImageProviderzhttps://gen.pollinations.ai)fluxzimagekontext
nanobananaznanobanana-proseedreamzseedream-progptimagegptimage-largekleinzklein-largec                      e Zd ZdZdZdd	dZ	 	 	 	 	 	 	 	 	 d
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZedd       Z	y)PollinationsImageProviderz3Wraps the Pollinations.ai API for image generation.pollinationsNc                   |xs t        j                  dd      | _        t        | _        t        j                  dd      | _        t        t        j                  dd            | _        t        t        j                  dd            | _        | j
                  t        vr-t        j                  d| j
                  t               d| _        y	y	)
zInitialize the Pollinations image provider.

        Args:
            api_key: Optional API key. If not provided, uses POLLINATIONS_API_KEY env var.
                    Can work without key for limited usage.
        POLLINATIONS_API_KEY POLLINATIONS_IMAGE_MODELr   POLLINATIONS_IMAGE_WIDTH1024POLLINATIONS_IMAGE_HEIGHTz5Unknown image model '%s', using 'flux'. Available: %sN)osgetenvapi_keyPOLLINATIONS_BASE_URLbase_urlmodelintwidthheightIMAGE_MODELSloggerwarning)selfr   s     N/root/.openclaw/workspace/visionaryfx/providers/pollinations_image_provider.py__init__z"PollinationsImageProvider.__init__3   s     G")),BB"G-YY96B
#=vFG
"))$?HI::\)NNG


  DJ *    c           	        t        |      }|j                  j                  dd       |xs | j                  }|xs | j                  }|xs | j
                  }t        |d      }| j                   d| }||||t        |      j                         |t        |	      j                         d}|dv r!|
|d<   t        |      j                         |d	<   | j                  r| j                  |d
<   ddi}| j                  rd| j                   |d<   t        j                  d||||       t        j                  d|dd        t        j                  d      5 }|j!                  |||      }|j#                          |j%                  |j&                         ddd       t        j                  d|t)        j&                               |S # 1 sw Y   5xY w)a.  Generate an image from prompt and save to output_path.

        Args:
            prompt: Text description of the image to generate
            output_path: Where to save the generated image
            width: Image width in pixels (default: 1024)
            height: Image height in pixels (default: 1024)
            model: AI model to use (default: from env or 'flux')
            seed: Random seed for reproducibility (-1 for random)
            enhance: Let AI improve the prompt
            negative_prompt: What to avoid in the image
            safe: Enable safety content filters
            quality: Image quality level (gptimage only): low, medium, high, hd
            transparent: Generate with transparent background (gptimage only)

        Returns:
            Path to the saved image file
        T)parentsexist_okr   )safez/image/)r   r!   r"   seedenhancenegative_promptr-   )r   r   qualitytransparentkeyAcceptzimage/*zBearer Authorizationu=   Generating image via Pollinations: model=%s size=%dx%d → %sz
Prompt: %sNd      )timeout)paramsheaderszImage saved: %s (%d bytes))r   parentmkdirr!   r"   r   r   r   strlowerr   r$   infodebughttpxClientgetraise_for_statuswrite_bytescontentlen)r&   promptoutput_pathr!   r"   r   r.   r/   r0   r-   r1   r2   encoded_prompturlr9   r:   clientresponses                     r'   _generate_syncz(PollinationsImageProvider._generate_syncH   s   @ ;'   = #&4;;# vB/ w~&67 7|))+.IOO%
 22 'F9$'$4$:$:$<F=! << LLF5M Y'<<)0'?GO$K	
 	\6$3<0 \\#& 	6&zz#fgzFH%%' ##H$4$45	6 	0+s8CSCS?TU	6 	6s   A GGc                b   K   t        j                  | j                  ||fi | d{   S 7 w)z!Generate an image asynchronously.N)asyncio	to_threadrN   )r&   rH   rI   kwargss       r'   generatez"PollinationsImageProvider.generate   s:      &&
8>
 
 	
 
s   &/-/c                 *    t         j                         S )z&Return list of available image models.)r#   copy r)   r'   list_modelsz%PollinationsImageProvider.list_models   s       ""r)   )N)r   
str | None)	NNNFzworst quality, blurryFmediumF)rH   r=   rI   z
str | Pathr!   
int | Noner"   r[   r   rX   r.   r    r/   boolr0   r=   r-   r\   r1   r=   r2   r\   returnr   )rH   r=   rI   r   rR   r   r]   r   )r]   z	list[str])
__name__
__module____qualname____doc__namer(   rN   rS   staticmethodrW   rV   r)   r'   r   r   .   s    =D 2 !! 6!XX  X 	X
 X X X X X X X X 
Xt	
	
 	
 		

 
	
 # #r)   r   )ra   
__future__r   rP   loggingr   pathlibr   typingr   urllib.parser   rA   providers.portsr   	getLoggerr^   r$   r   r#   r   rV   r)   r'   <module>rk      sT   
 #   	     )			8	$5 B# B#r)   