Ë
    Ã½Ùj2	  ã                   ó<   — d Z ddlZdZdZd„ Zd„ Zd„ Zd„ Zd	„ Zd
„ Z	y)u¨  
AI Room Designer â€” Stage 3 runtime config (env-driven, secrets stay server-side).

Nothing here hardcodes a credential. The key is read from the environment at
runtime and never logged, returned to the client, or written into job files.

Env vars:
  ROOM_DESIGNER_PROVIDER      gemini | mock | standin
                              (unset = auto: gemini if a key is present,
                               otherwise mock â€” and every response states
                               which provider actually ran + dry_run flag)
  ROOM_DESIGNER_API_KEY       Gemini API key (falls back to GEMINI_API_KEY)
  ROOM_DESIGNER_GEMINI_MODEL  default gemini-nano-banana-2.1 (Nano Banana 2.1,
                              the current successor to gemini-2.5-flash-image;
                              gemini-3.1-flash-image / gemini-2.5-flash-image
                              remain selectable here with no code change)
  ROOM_DESIGNER_IMAGE_SIZE    1K (default) | 2K | 4K
  ROOM_DESIGNER_MAX_RETRIES   QC-gate retries after a failed attempt (default 2)
  ROOM_DESIGNER_MOCK_SCRIPT   rig-test only: comma list of mock behaviours
                              cycled per call, e.g. "reframe,grade"
é    Nzgemini-nano-banana-2.1zOhttps://generativelanguage.googleapis.com/v1beta/models/{model}:generateContentc                  óŠ   — t         j                  j                  d«      xs# t         j                  j                  d«      xs dS )NÚROOM_DESIGNER_API_KEYÚGEMINI_API_KEYÚ ©ÚosÚenvironÚget© ó    ú)/var/www/room-designer/pipeline/config.pyÚapi_keyr      s/   € Ü�:‰:�>‰>Ð1Ó2Ò\´b·j±j·n±nÐEUÓ6VÒ\ÐZ\Ð\r   c                  ó¨   — t         j                  j                  d«      xs dj                  «       j	                  «       } | dv r| S t        «       rdS dS )NÚROOM_DESIGNER_PROVIDERr   )ÚgeminiÚmockÚstandinr   r   )r   r	   r
   ÚstripÚlowerr   ©Úps    r   Úproviderr       sI   € Ü	�‰�‰Ð0Ó	1Ò	7°R×>Ñ>Ó@×FÑFÓH€AØÐ)Ñ)ØˆÜ”yˆ8Ð, fÐ,r   c                  óP   — t         j                  j                  d«      xs t        S )NÚROOM_DESIGNER_GEMINI_MODEL)r   r	   r
   ÚDEFAULT_MODELr   r   r   Úmodelr   '   s   € Ü�:‰:�>‰>Ð6Ó7ÒH¼=ÐHr   c                  óH   — t         j                  j                  d«      xs dS )NÚROOM_DESIGNER_IMAGE_SIZEÚ1Kr   r   r   r   Ú
image_sizer    +   s   € Ü�:‰:�>‰>Ð4Ó5Ò=¸Ð=r   c                  óœ   — 	 t        dt        dt        t        j                  j                  dd«      «      «      «      S # t        $ r Y yw xY w)Nr   é   ÚROOM_DESIGNER_MAX_RETRIESÚ2é   )ÚmaxÚminÚintr   r	   r
   Ú
ValueErrorr   r   r   Úmax_retriesr*   /   sB   € ðÜ�1”c˜!œS¤§¡§¡Ð0KÈSÓ!QÓRÓSÓTÐTøÜò Ùðús   ‚<? ¿	AÁ
Ac                  óŠ   — t        «       } | | dk(  r
t        «       nd| dk(  xr t        t        «       «      | dk7  t	        «       dœS )zeWhat the app may know: provider + whether live generation is real.
    NEVER includes the key itself.r   N)r   r   ÚliveÚdry_runr*   )r   r   Úboolr   r*   r   s    r   Úpublic_statusr/   6   sC   € ô 	‹
€AàØ šM””¨tØ�X‘Ò1¤$¤w£y£/Ø˜‘=Ü"“}ñð r   )
Ú__doc__r   r   ÚGEMINI_ENDPOINTr   r   r   r    r*   r/   r   r   r   ú<module>r2      s9   ðñó* 
à(€Øc€ò]ò-òIò>òó
r   