Ë
    uPêj\  ã                   óÌ   — d Z ddlZddlmZ ddlmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZmZ ddlmZ dd	lmZ erdd
lmZ  G d„ de«      Z G d„ de«      Z G d„ dee
   «      Zy)zF
Model repository for database operations on LiteLLM_ProxyModelTable.
é    N)ÚMapping)ÚTYPE_CHECKINGÚAnyÚFinalÚProtocol©ÚLiteLLM_ProxyModelTable)Ú"wrap_table_actions_for_config_sync)Údecrypt_value_helperÚencrypt_value_helper)ÚBaseRepository)ÚTableActions)Úmodelsc                   ó(   — e Zd Zeded   fd„«       Zy)Ú_PrismaModelDbÚreturnú%prisma_models.LiteLLM_ProxyModelTablec                  ó   — y ©N© ©Úselfs    új/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/repositories/model_repository.pyÚlitellm_proxymodeltablez&_PrismaModelDb.litellm_proxymodeltable   s   € Ø`có    N)Ú__name__Ú
__module__Ú__qualname__Úpropertyr   r   r   r   r   r   r      s   „ ØØc¨Ð6]Ñ)^Òcó Ùcr   r   c                   ó"   — e Zd Zedefd„«       Zy)Ú_PrismaClientViewr   c                  ó   — y r   r   r   s    r   Údbz_PrismaClientView.db   s   € Ø$'r   N)r   r   r   r   r   r#   r   r   r   r!   r!      s   „ ØØ'�NÒ'ó Ù'r   r!   c                   ó4  ‡ — e Zd ZdZd!dededz  ddfˆ fd„Zeded   fd„«       Z	ede
e   fd	„«       Zd
eeef   deeef   fd„Zd
eeef   deeef   fd„Zdededz  fd„Zd"dedededz  fˆ fd„Zdedee   fd„Zdee   fd„Zdee   fd„Zdedee   fd„Z	 	 	 d#ded
eeef   dededz  deeef   dz  dedefd„Z	 	 	 	 d$dedededz  d
eeef   dz  deeef   dz  dedz  dedz  fd„Zdededz  fd„Zdedededz  fd„Zdedededz  fd „Zˆ xZS )%ÚModelRepositoryzGRepository for proxy model database operations with encryption support.NÚprisma_clientÚencryption_keyr   c                 ó2   •— t         ‰| �  |«       || _        y r   )ÚsuperÚ__init__Ú_encryption_key)r   r&   r'   Ú	__class__s      €r   r*   zModelRepository.__init__#   s   ø€ Ü‰Ñ˜Ô'Ø-ˆÕr   r   c                 ó\   — | j                   }t        |j                  j                  d¬«      S )Nr   )ÚactionsÚ
table_name)r&   r
   r#   r   )r   Úclients     r   ÚtablezModelRepository.table'   s*   € à+/×+=Ñ+=ˆÜ1Ø—I‘I×5Ñ5Ø0ô
ð 	
r   c                 ó   — t         S r   r   r   s    r   Úmodel_classzModelRepository.model_class/   s   € ä&Ð&r   Úlitellm_paramsc                 óš   — i }|j                  «       D ]5  \  }}t        |t        «      rt        || j                  ¬«      ||<   Œ1|||<   Œ7 |S )z+Encrypt sensitive values in litellm_params.)Únew_encryption_key)ÚitemsÚ
isinstanceÚstrr   r+   )r   r4   Ú	encryptedÚkeyÚvalues        r   Ú_encrypt_litellm_paramsz'ModelRepository._encrypt_litellm_params3   sU   € àˆ	Ø(×.Ñ.Ó0ò 	'‰JˆC�Ü˜%¤Ô%Ü!5°eÐPT×PdÑPdÔ!e�	˜#’à!&�	˜#’ð		'ð
 Ðr   c                 óŠ   — i }|j                  «       D ]-  \  }}t        |t        «      rt        ||dd¬«      ||<   Œ)|||<   Œ/ |S )z+Decrypt sensitive values in litellm_params.ÚdebugT)r;   Úexception_typeÚreturn_original_value)r7   r8   r9   r   )r   r4   Ú	decryptedr;   r<   s        r   Ú_decrypt_litellm_paramsz'ModelRepository._decrypt_litellm_params=   sX   € àˆ	Ø(×.Ñ.Ó0ò 	'‰JˆC�Ü˜%¤Ô%Ü!5Ø˜s°7ÐRVô"�	˜#’ð "'�	˜#’ð	'ð Ðr   Úrecordc                 ó¤  — |€yt        |d«      r|j                  «       n
t        |«      }t        |j                  d«      t        «      rt        j                  |d   «      |d<   t        |j                  d«      t        «      rt        j                  |d   «      |d<   |j                  d«      r| j                  |d   «      |d<   t        di |¤ŽS )z5Convert a database record to a Model with decryption.NÚdictr4   Ú
model_infor   )	ÚhasattrrF   r8   Úgetr9   ÚjsonÚloadsrC   r	   )r   rD   Údatas      r   Ú	_to_modelzModelRepository._to_modelI   s´   € àˆ>Øä'.¨v°vÔ'>�f—k‘k”mÄDÈÃLˆä�d—h‘hÐ/Ó0´#Ô6Ü%)§Z¡Z°Ð5EÑ0FÓ%GˆDÐ!Ñ"Ü�d—h‘h˜|Ó,¬cÔ2Ü!%§¡¨D°Ñ,>Ó!?ˆD�Ñà�8‰8Ð$Ô%Ø%)×%AÑ%AÀ$ÐGWÑBXÓ%YˆDÐ!Ñ"ä&Ñ.¨Ñ.Ð.r   Úmodel_idÚid_fieldc              ƒ   ó@   •K  — t         ‰| �  ||«      ƒ d {  –—† S 7 Œ­wr   )r)   Ú
find_by_id)r   rN   rO   r,   s      €r   rQ   zModelRepository.find_by_idZ   s   øè ø€ Ü‘WÑ'¨°(Ó;×;Ð;Ð;ús   ƒ—˜Ú
model_namec              ƒ   ó|   K  — | j                   j                  d|i¬«      ƒ d{  –—† }| j                  |«      S 7 Œ­w)zFind models by name.rR   ©ÚwhereN©r1   Ú	find_manyÚ_to_model_list)r   rR   Úrecordss      r   Úfind_by_namezModelRepository.find_by_name]   s<   è ø€ à#Ÿz™z×3Ñ3¸<ÈÐ:TÐ3ÓU×UˆØ×"Ñ" 7Ó+Ð+ð Vúó   ‚"<¤:¥<c              ƒ   ót   K  — | j                   j                  «       ƒ d{  –—† }| j                  |«      S 7 Œ­w)zFind all models.NrV   ©r   rY   s     r   Úfind_allzModelRepository.find_allb   s1   è ø€ à#Ÿz™z×3Ñ3Ó5×5ˆØ×"Ñ" 7Ó+Ð+ð 6ús   ‚8 6¡8c              ƒ   ó|   K  — | j                   j                  ddi¬«      ƒ d{  –—† }| j                  |«      S 7 Œ­w)z%Find all models that are not blocked.ÚblockedFrT   NrV   r]   s     r   Úfind_unblockedzModelRepository.find_unblockedg   s<   è ø€ à#Ÿz™z×3Ñ3¸9ÀeÐ:LÐ3ÓM×MˆØ×"Ñ" 7Ó+Ð+ð Núr[   Úteam_idc              ƒ   óˆ   K  — | j                  «       ƒ d{  –—† }|D �cg c]  }|j                  |k(  sŒ|‘Œ c}S 7 Œ$c c}w ­w)a	  Find models associated with a specific team.

        Note: This filters in-memory since team_id is stored within litellm_params
        JSON. For large deployments with many models, consider adding a dedicated
        team_id column with a database index.
        N)r^   rb   )r   rb   Ú
all_modelsÚms       r   Úfind_by_team_idzModelRepository.find_by_team_idl   s:   è ø€ ð #'§-¡-£/×1ˆ
Ø%Ö>�a¨¯©°gÓ)=’Ò>Ð>ð 2úÚ>ùs    ‚A–;—AŸ=´=¸A½AÚ
created_byrG   r`   c              ƒ   ó  K  — | j                  |«      }|t        j                  |«      |||dœ}|�||d<   |�t        j                  |«      |d<   | j                  j	                  |¬«      ƒ d{  –—† }	| j                  |	«      }
|
€J ‚|
S 7 Œ­w)z#Create a new model with encryption.)rR   r4   rg   Ú
updated_byr`   NrN   rG   )rL   )r=   rJ   Údumpsr1   ÚcreaterM   )r   rR   r4   rg   rN   rG   r`   Úencrypted_paramsrL   rD   Úmodels              r   Úcreate_modelzModelRepository.create_modelv   s¤   è ø€ ð #'×">Ñ">¸~Ó"NÐð %Ü"Ÿj™jÐ)9Ó:Ø$Ø$Øñ.
ˆð ÐØ'ˆD�ÑØÐ!Ü!%§¡¨JÓ!7ˆD�Ñà"Ÿj™j×/Ñ/°TÐ/Ó:×:ˆØ—~‘~ fÓ-ˆØÐ Ð Ð Øˆð ;ús   ‚A-BÁ/BÁ0Bri   c              ƒ   ó,  K  — d|i}|�||d<   |�)| j                  |«      }t        j                  |«      |d<   |�t        j                  |«      |d<   |�||d<   | j                  j	                  d|i|¬«      ƒ d{  –—† }	| j                  |	«      S 7 Œ­w)	zUpdate a model with encryption.ri   NrR   r4   rG   r`   rN   )rU   rL   )r=   rJ   rj   r1   ÚupdaterM   )
r   rN   ri   rR   r4   rG   r`   rL   rl   rD   s
             r   Úupdate_modelzModelRepository.update_model“   s­   è ø€ ð /;¸JÐ-GˆØÐ!Ø!+ˆD�ÑØÐ%Ø&*×&BÑ&BÀ>Ó&RÐÜ%)§Z¡ZÐ0@Ó%AˆDÐ!Ñ"ØÐ!Ü!%§¡¨JÓ!7ˆD�ÑØÐØ%ˆD�‰Oà"Ÿj™j×/Ñ/°zÀ8Ð6LÐSWÐ/ÓX×XˆØ�~‰~˜fÓ%Ð%ð Yús   ‚A:BÁ<BÁ=Bc              ƒ   óD   K  — | j                  |d¬«      ƒ d{  –—† S 7 Œ­w)zDelete a model.rN   )rO   N)Údelete)r   rN   s     r   Údelete_modelzModelRepository.delete_model«   s   è ø€ à—[‘[ °J�[Ó?×?Ð?Ð?ús   ‚ ™š c              ƒ   óF   K  — | j                  ||d¬«      ƒ d{  –—† S 7 Œ­w)zBlock a model.T©r`   N©rq   ©r   rN   ri   s      r   Úblock_modelzModelRepository.block_model¯   s$   è ø€ à×&Ñ& x°ÀTÐ&ÓJ×JÐJÐJúó   ‚!š›!c              ƒ   óF   K  — | j                  ||d¬«      ƒ d{  –—† S 7 Œ­w)zUnblock a model.Frv   Nrw   rx   s      r   Úunblock_modelzModelRepository.unblock_model³   s$   è ø€ à×&Ñ& x°ÀUÐ&ÓK×KÐKÐKúrz   r   )rN   )NNF)NNNN)r   r   r   Ú__doc__Úobjectr9   r*   r   r   r1   Útyper	   r3   r   r=   rC   r   rM   rQ   ÚlistrZ   r^   ra   rf   Úboolrn   rq   rt   ry   r|   Ú__classcell__)r,   s   @r   r%   r%       s�  ø„ ÙQñ. fð .¸cÀD¹jð .ÐTXõ .ð ð
�|Ð$KÑLò 
ó ð
ð ð'˜TÐ"9Ñ:ò 'ó ð'ð°g¸cÀ6¸kÑ6Jð ÈwÐWZÐ\bÐWbÑOcó ð
°g¸cÀ6¸kÑ6Jð 
ÈwÐWZÐ\bÐWbÑOcó 
ð/ ð /Ð(?À$Ñ(Fó /ñ"<¨ð <¸ð <ÐMdÐgkÑMkõ <ð,¨Sð ,°TÐ:QÑ5Ró ,ð
, Ð%<Ñ =ó ,ð
, dÐ+BÑ&Có ,ð
?¨Sð ?°TÐ:QÑ5Ró ?ð  $Ø26Øñàðð    V Ñ,ðð ð	ð
 ˜‘*ðð ˜C ˜KÑ(¨4Ñ/ðð ðð 
!óðB "&Ø6:Ø26Ø#ñ&àð&ð ð&ð ˜$‘Jð	&ð
    V Ñ,¨tÑ3ð&ð ˜C ˜KÑ(¨4Ñ/ð&ð ˜‘ð&ð 
! 4Ñ	'ó&ð0@¨3ð @Ð3JÈTÑ3Qó @ðK¨#ð K¸3ð KÐCZÐ]aÑCaó KðL¨Cð L¸Sð LÐE\Ð_cÑEc÷ Lr   r%   )r}   rJ   Úcollections.abcr   Útypingr   r   r   r   Úlitellm.models.modelr	   Ú-litellm.proxy.common_utils.config_sync_pubsubr
   Ú0litellm.proxy.common_utils.encrypt_decrypt_utilsr   r   Ú$litellm.repositories.base_repositoryr   Ú%litellm.repositories.prisma_protocolsr   Úprismar   Úprisma_modelsr   r!   r%   r   r   r   ú<module>rŒ      sb   ðñó Ý #ß 6Ó 6å 8Ý \÷õ @Ý >áÝ.ôd�Xô dô
(˜ô (ô
UL�nÐ%<Ñ=õ ULr   