
    5i                        U d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	 ddl
mZ ddlmZ  ej                  e      Zi Zded	<   i Zded
<   i Zded<   ddZddZddZ G d d      Z	 d	 	 	 ddZy)u  
Provider registry — creates and caches provider instances.

Usage:
    from providers.registry import get_provider_registry

    db_settings = await get_all_settings()
    registry = get_provider_registry(db_settings)
    provider = registry.get_image_provider()   # Returns active image provider
    provider = registry.get_video_provider()   # Returns active video provider
    provider = registry.get_tts_provider()     # Returns active TTS provider
    )annotationsN)Any)ImageProviderVideoProviderTTSProvider)ProviderSettings)ProviderUnavailableErrorzdict[str, type]_IMAGE_FACTORIES_VIDEO_FACTORIES_TTS_FACTORIESc                    | dk(  rddl m} |S | dk(  rddlm} |S | dk(  rddlm} |S | dk(  rdd	lm} |S t        | d
|        )z6Lazy-import and instantiate an image provider by name.google_flowr   )GoogleFlowBrowserAdaptergoogle_flow_v2)GoogleFlowV2ImageProviderdalle3)DallE3ImageProviderpollinations)PollinationsImageProviderzUnknown image provider: )	providers.google_flow_adapterr   !providers.google_flow_v2_providerr   providers.image_providerr   %providers.pollinations_image_providerr   r	   )namer   r   r   r   s        ;/root/.openclaw/workspace/visionaryfx/providers/registry.py_lazy_import_imager       s\    }J''	!	!O((		@""		S((&t/Gv-NOO    c                    | dk(  rddl m} |S | dk(  rddlm} |S | dk(  rddlm} |S | dk(  rdd	lm} |S | d
k(  rddlm	} |S t        | d|        )z+Lazy-import a video provider class by name.grokr   )GrokVideoProviderleonardo)LeonardoVideoProviderr   )PollinationsVideoProviderrunway)RunwayVideoProvider
google_veo)GoogleVeoVideoProviderzUnknown video provider: )providers.grok_video_providerr    !providers.leonardo_video_providerr"   %providers.pollinations_video_providerr#   providers.video_providerr%   providers.google_veo_providerr'   r	   )r   r    r"   r#   r%   r'   s         r   _lazy_import_videor-   6   sk    v~C  		K$$		S((		@""		H%%&t/Gv-NOOr   c                n    | dk(  rddl m} |S | dk(  rddlm} |S | dk(  rddlm} |S t        | d|        )	z)Lazy-import a TTS provider class by name.
chatterboxr   )ChatterBoxTTSProvider
elevenlabs)ElevenLabsTTSProviderr   )PollinationsTTSProviderzUnknown TTS provider: )providers.chatterbox_providerr0   providers.tts_providerr2   #providers.pollinations_tts_providerr3   r	   )r   r0   r2   r3   s       r   _lazy_import_ttsr7   P   sJ    |G$$		@$$		O&&&t/EdV-LMMr   c                  X    e Zd ZdZd
dZdddZdddZdddZddZddZ	e
dd	       Zy)ProviderRegistryzCreates and caches provider instances based on DB settings.

    Instances are cached per registry lifetime. Create a new registry
    (or call invalidate()) when settings change.
    c                     || _         i | _        y N)	_settings_cache)selfsettingss     r   __init__zProviderRegistry.__init__i   s    !24r   Nc                d    |xs | j                   j                  d      }| j                  d|      S )z:Get the active image provider (or a specific one by name).imager<   get_active_provider_get_or_creater>   r   s     r   get_image_providerz#ProviderRegistry.get_image_providerm   .    Bt~~99'B""7D11r   c                d    |xs | j                   j                  d      }| j                  d|      S )z:Get the active video provider (or a specific one by name).videorC   rF   s     r   get_video_providerz#ProviderRegistry.get_video_providerr   rH   r   c                d    |xs | j                   j                  d      }| j                  d|      S )z8Get the active TTS provider (or a specific one by name).ttsrC   rF   s     r   get_tts_providerz!ProviderRegistry.get_tts_providerw   s.    @t~~99%@""5$//r   c                8    | j                   j                          y)z3Clear cached providers (call when settings change).N)r=   clear)r>   s    r   
invalidatezProviderRegistry.invalidate|   s    r   c                T   ||f}|| j                   vrd| j                  j                  ||      }| j                  ||      }	 |r |di |n |       | j                   |<   t        j                  d||       | j                   |   S # t        $ r}t        |d| d|       |d }~ww xY w)NzFailed to create z provider: zCreated %s provider: %s )r=   r<   get_provider_config_resolve_class	Exceptionr	   loggerinfo)r>   provider_typer   keyconfigclsexcs          r   rE   zProviderRegistry._get_or_create   s    d#dkk!^^77tLF%%mT:C4:3==C 
 KK1=$G{{3  .-m_KuMs   B 	B'B""B'c                ~    | dk(  rt        |      S | dk(  rt        |      S | dk(  rt        |      S t        d|        )NrB   rJ   rM   zUnknown provider type: )r   r-   r7   
ValueError)rY   r   s     r   rU   zProviderRegistry._resolve_class   sN    G#%d++g%%d++e##D))2=/BCCr   )r?   r   returnNoner;   )r   
str | Noner`   r   )r   rb   r`   r   )r   rb   r`   r   )r`   ra   )rY   strr   rc   r`   r   )rY   rc   r   rc   r`   type)__name__
__module____qualname____doc__r@   rG   rK   rN   rQ   rE   staticmethodrU   rS   r   r   r9   r9   b   s;    52
2
0
  D Dr   r9   c                *    t        t        |             S )zAConvenience: create a ProviderRegistry from raw DB settings dict.)r9   r   )db_settingss    r   get_provider_registryrl      s     ,[9::r   )r   rc   r`   ztype[ImageProvider])r   rc   r`   ztype[VideoProvider])r   rc   r`   ztype[TTSProvider]r;   )rk   zdict[str, str] | Noner`   r9   )rh   
__future__r   loggingtypingr   providers.portsr   r   r   providers.settingsr   providers.errorsr	   	getLoggerre   rW   r
   __annotations__r   r   r   r-   r7   r9   rl   rS   r   r   <module>ru      s    #   E E / 5			8	$ %' / &$& / &"$ $P,P4N$4D 4Dp *.;&;;r   