
    5i                        U d Z ddlmZ ddlZddlZddlmZ  ej                  e      Z	ddddZ
d	ed
<   i dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3Zd	ed4<    G d5 d6      Zy)7uC  
ProviderSettings — single source of truth for provider configuration.

Priority: DB settings → environment variables → hardcoded defaults.
Credentials: env → DB (12-factor app standard).

The caller passes a DB settings dict; this module never imports from web/
or database modules to avoid circular dependencies.
    )annotationsN)Anygoogle_flowgrok
chatterbox)imagevideottszdict[str, str]PROVIDER_DEFAULTSimage_providerIMAGE_PROVIDERvideo_providerVIDEO_PROVIDERtts_providerTTS_PROVIDERpollinations_api_keyPOLLINATIONS_API_KEYpollinations_image_modelPOLLINATIONS_IMAGE_MODELpollinations_image_widthPOLLINATIONS_IMAGE_WIDTHpollinations_image_heightPOLLINATIONS_IMAGE_HEIGHTpollinations_video_modelPOLLINATIONS_VIDEO_MODELpollinations_video_durationPOLLINATIONS_VIDEO_DURATIONpollinations_video_aspectPOLLINATIONS_VIDEO_ASPECTpollinations_tts_modelPOLLINATIONS_TTS_MODELpollinations_tts_voicePOLLINATIONS_TTS_VOICEpollinations_tts_speedPOLLINATIONS_TTS_SPEEDpollinations_tts_formatPOLLINATIONS_TTS_FORMATleonardo_api_keyLEONARDO_API_KEYleonardo_resolutionLEONARDO_RESOLUTIONimage_modelIMAGE_MODEL
IMAGE_SIZEIMAGE_QUALITYIMAGE_STYLEGOOGLE_FLOW_ASPECT_RATIOCHATTERBOX_LANGUAGECHATTERBOX_VOICE_REF)
image_sizeimage_qualityimage_stylegoogle_flow_aspect_ratiochatterbox_languagechatterbox_voice_refENV_FALLBACKSc                  J    e Zd ZdZdd	dZd
dZdddZdddZ	 	 	 	 	 	 ddZy)ProviderSettingsu   Single source of truth for provider configuration.

    Priority: DB settings → environment variables → hardcoded defaults.
    Credentials: env → DB (12-factor app standard).
    Nc                    |xs i | _         y N)_db)selfdb_settingss     ;/root/.openclaw/workspace/visionaryfx/providers/settings.py__init__zProviderSettings.__init__=   s    $"    c                   | d}t         j                  ||j                          d      }t        j                  |d      }| j                  j                  |      xs$ t
        j                  j                  |d      xs |S )z;Return active provider name for 'image', 'video', or 'tts'.	_provider	_PROVIDER )r:   getupperr   r?   osenviron)r@   provider_typedb_keyenv_keydefaults        rB   get_active_providerz$ProviderSettings.get_active_provider@   so    !?),##F}/B/B/D.EY,OP#''r:xx||F#Mrzz~~gr'BMgMrD   c                    t         j                  ||j                               }| j                  j                  |      xs$ t        j
                  j                  |d      xs |S )u9   Get a setting value with DB → env → default priority.rH   )r:   rI   rJ   r?   rK   rL   r@   keyrP   rO   s       rB   rI   zProviderSettings.getG   sF    ##C5xx||C JBJJNN7B$?J7JrD   c                    t         j                  ||j                               }t        j                  j                  |d      xs  | j
                  j                  |d      xs |S )u:   Get a credential with env → DB priority (12-factor app).rH   )r:   rI   rJ   rK   rL   r?   rS   s       rB   get_credentialzProviderSettings.get_credentialL   sH    ##C5zz~~gr*Ndhhll3.CNwNrD   c                   | j                  d      | j                  dd      t        | j                  dd            t        | j                  dd            d| j                  dd	      | j                  d
d      | j                  dd      | j                  dd      dd| j                  dd      id| j                  dd      ii | j                  d      | j                  dd      d| j                  d      | j                  dd      t        | j                  dd            | j                  dd      di i | j                  dd       | j                  d!      xs d"d#i | j                  d      | j                  d$d%      | j                  d&d'      t        | j                  d(d)            | j                  d*d+      d,d-}|j                  ||fi       S ).z1Get all config for a specific provider as a dict.r   r   fluxr   1024r   )api_keymodelwidthheightr,   zdall-e-3r4   	1792x1024r5   hdr6   natural)r[   sizequalitystyleaspect_ratior7   portraitr(   r*   720)rZ   
resolutionr   seedancer   5r   z16:9)rZ   r[   durationrd   r8   ptr9   N)language	voice_refr    openair"   novar$   z1.0r&   mp3)rZ   r[   voicespeedaudio_format))r   pollinations)r   dalle3)r   r   )r   google_flow_v2)r	   r   )r	   leonardo)r	   rt   )r	   
google_veo)r	   runway)r
   r   )r
   
elevenlabs)r
   rt   )rV   rI   intfloat)r@   rM   provider_nameconfigss       rB   get_provider_configz$ProviderSettings.get_provider_configQ   s     ../EF"<fETXX&@&IJdhh'BFKL	( -<{;88OT:-;	" )CZ P' )CZ P*  "../AB"hh'<eD$
  ../EF"<jI)F LM $)Df M	( &(!# HH%:DA!XX&<=E$ $&../EF":HE":FCtxx(@%HI $)BE J&K,:
Z {{M=92>>rD   r>   )rA   zdict[str, str] | None)rM   strreturnr   )rH   )rT   r   rP   r   r   r   )rM   r   r}   r   r   zdict[str, Any])	__name__
__module____qualname____doc__rC   rQ   rI   rV   r    rD   rB   r<   r<   6   s;    %NK
O
1? 1?141?	1?rD   r<   )r   
__future__r   loggingrK   typingr   	getLoggerr   loggerr   __annotations__r:   r<   r   rD   rB   <module>r      sN   #  	 			8	$ % > !&!&! N! 2	!
  :!  :!  !<!  :! "#@!  !<! 6! 6! 6! 8! *!  0!!" =#!$ $  :02/!~ 6L? L?rD   