Ë
    uPêj3  ã                   óŒ   — d Z ddlmZmZ ddlmZmZmZ ddlm	Z	 ddl
mZmZmZ ddlmZ erddlmZ ddlmZmZ  G d	„ d
«      Zy)a	  
Transformation handler for LiteLLM database-backed skills.

This module provides the SDK-level transformation layer that converts
API requests to database operations via LiteLLMSkillsHandler.

Pattern follows litellm/llms/litellm_proxy/responses/transformation.py
é    )Ú	CoroutineÚSequence)ÚTYPE_CHECKINGÚFinalÚOptional)Ú	JsonValue)ÚDeleteSkillResponseÚListSkillsResponseÚSkill)ÚLlmProviders)ÚLogging)ÚLiteLLM_SkillsTableÚUserAPIKeyAuthc            !       óÔ  — e Zd ZdZedefd„«       Z	 	 	 	 	 	 	 	 	 	 	 	 	 d"dedz  dedz  dedz  dee   dz  d	e	dz  d
edz  dedz  de
eef   dz  dedz  ded   deded   dedz  deeeeef   z  fd„Z	 	 	 	 	 	 	 	 	 d#dedz  dedz  dedz  d	e	dz  d
edz  dedz  de
eef   dz  dedz  ded   defd„Z	 	 	 	 	 	 d$dedededed   dedz  ded   deeeeef   z  fd„Z	 	 	 d%dededed   defd„Z	 	 	 	 d&dededed   dedz  ded   deeeeef   z  fd„Z	 d'deded   defd„Z	 	 	 	 d&dededed   dedz  ded   deeeeef   z  fd„Z	 d'deded   defd„Zdd defd!„Zy)(Ú"LiteLLMSkillsTransformationHandlerzô
    Transformation handler for skills API requests to LiteLLM database operations.

    This is used when custom_llm_provider="litellm_proxy" to store/retrieve skills
    from the LiteLLM proxy database instead of calling an external API.
    Úreturnc                 ó6   — t         j                  j                  S )z%Return the provider name for logging.)r   ÚLITELLM_PROXYÚvalue)Úselfs    úu/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/litellm_proxy/skills/transformation.pyÚcustom_llm_providerz6LiteLLMSkillsTransformationHandler.custom_llm_provider#   s   € ô ×)Ñ)×/Ñ/Ð/ó    NÚdisplay_titleÚdescriptionÚinstructionsÚfilesÚfile_contentÚ	file_nameÚ	file_typeÚmetadataÚuser_idÚuser_api_key_dictr   Ú	_is_asyncÚlogging_objÚLiteLLMLoggingObjÚlitellm_call_idc                 óÄ  — |r$|j                  |dd|id|i| j                  ¬«       |rb|s`t        |t        «      rPt	        |«      dkD  rB|d   }t        |t
        «      r-t	        |«      dk\  r|d   }|d   }t	        |«      dkD  r|d   nd}|r| j                  ||||||||	|
¬	«	      S ddl}|j                  «       j                  | j                  ||||||||	|
¬	«	      «      S )
aÚ  
        Create a skill in LiteLLM database.

        Args:
            display_title: Display title for the skill
            description: Description of the skill
            instructions: Instructions/prompt for the skill
            files: Files to upload - list of tuples (filename, content, content_type)
            file_content: Binary content of skill files (alternative to files)
            file_name: Original filename (alternative to files)
            file_type: MIME type (alternative to files)
            metadata: Additional metadata
            user_id: User ID for tracking
            _is_async: Whether to return a coroutine

        Returns:
            Skill object or coroutine that returns Skill
        Nr   r'   ©ÚkwargsÚmodelÚoptional_paramsÚlitellm_paramsr   r   é   é   zapplication/zip)	r   r   r   r   r   r    r!   r"   r#   )
Úupdate_from_kwargsr   Ú
isinstanceÚlistÚlenÚtupleÚ_async_create_skillÚasyncioÚget_event_loopÚrun_until_complete)r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r'   r*   Ú
first_filer6   s                    r   Úcreate_skill_handlerz7LiteLLMSkillsTransformationHandler.create_skill_handler(   s!  € ñH Ø×*Ñ*ØØØ!0°-Ð @Ø 1°?ÐCØ$(×$<Ñ$<ð +ô ñ ™Ü˜%¤Ô&¬3¨u«:¸ª>Ø$)¨!¡H�
Ü˜j¬%Ô0´S¸³_ÈÒ5IØ *¨1¡�IØ#-¨a¡=�LÜ14°Z³À1Ò1D 
¨1¢ÐJ[�IáØ×+Ñ+Ø+Ø'Ø)Ø)Ø#Ø#Ø!ØØ"3ð ,ó 
ð 
ó 	à×%Ñ%Ó'×:Ñ:Ø×$Ñ$Ø+Ø'Ø)Ø)Ø#Ø#Ø!ØØ"3ð %ó 
ó
ð 	
r   c
           	   ƒ   óž   K  — ddl m}
 ddlm}  ||||||||¬«      }|
j	                  |||	¬«      ƒ d{  –—† }| j                  |«      S 7 Œ­w)z%Async implementation of create_skill.r   ©ÚLiteLLMSkillsHandler)ÚNewSkillRequest)r   r   r   r   r   r    r!   )Údatar"   r#   N)Ú)litellm.llms.litellm_proxy.skills.handlerr=   Úlitellm.proxy._typesr>   Úcreate_skillÚ_db_skill_to_response)r   r   r   r   r   r   r    r!   r"   r#   r=   r>   Úskill_requestÚdb_skills                 r   r5   z6LiteLLMSkillsTransformationHandler._async_create_skill|   sl   è ø€ õ 	SÝ8á.Ø'Ø#Ø%Ø%ØØØô 
ˆð !5× AÑ AØØØ/ð !Bó !
÷ 
ˆð ×)Ñ)¨(Ó3Ð3ð
ús   ‚3AµA¶AÚlimitÚoffsetc                 óæ   — |r%|j                  |d||dœd|i| j                  ¬«       |r| j                  |||¬«      S ddl}|j	                  «       j                  | j                  |||¬«      «      S )aš  
        List skills from LiteLLM database.

        Args:
            limit: Maximum number of skills to return
            offset: Number of skills to skip
            _is_async: Whether to return a coroutine
            logging_obj: LiteLLM logging object
            litellm_call_id: Call ID for logging

        Returns:
            ListSkillsResponse or coroutine that returns ListSkillsResponse
        N)rF   rG   r'   r)   ©rF   rG   r#   r   )r0   r   Ú_async_list_skillsr6   r7   r8   )	r   rF   rG   r$   r%   r'   r#   r*   r6   s	            r   Úlist_skills_handlerz6LiteLLMSkillsTransformationHandler.list_skills_handlerŸ   sœ   € ñ0 Ø×*Ñ*ØØØ*/¸6Ñ BØ 1°?ÐCØ$(×$<Ñ$<ð +ô ñ Ø×*Ñ*ØØØ"3ð +ó ð ó 	à×%Ñ%Ó'×:Ñ:Ø×#Ñ#ØØØ"3ð $ó ó
ð 	
r   c              ƒ   óÌ   K  — ddl m} |j                  |||¬«      ƒ d{  –—† }|D �cg c]  }| j                  |«      ‘Œ }}t	        |t        |«      |k\  d¬«      S 7 Œ<c c}w ­w)z$Async implementation of list_skills.r   r<   rI   N)r?   Úhas_moreÚ	next_page)r@   r=   Úlist_skillsrC   r
   r3   )r   rF   rG   r#   r=   Ú	db_skillsÚsÚskillss           r   rJ   z5LiteLLMSkillsTransformationHandler._async_list_skillsÑ   s|   è ø€ õ 	Sà!5×!AÑ!AØØØ/ð "Bó "
÷ 
ˆ	ð AJÖJ¸1˜×3Ñ3°AÕ6ÐJˆÐJÜ!ØÜ˜“[ EÑ)Øô
ð 	
ð
úò Kùs    ‚A$ A¡A$©AÁA$ÁA$Úskill_idc                 óà   — |r$|j                  |dd|id|i| j                  ¬«       |r| j                  ||¬«      S ddl}|j	                  «       j                  | j                  ||¬«      «      S )aL  
        Get a skill from LiteLLM database.

        Args:
            skill_id: The skill ID to retrieve
            _is_async: Whether to return a coroutine
            logging_obj: LiteLLM logging object
            litellm_call_id: Call ID for logging

        Returns:
            Skill or coroutine that returns Skill
        NrS   r'   r)   ©rS   r#   r   )r0   r   Ú_async_get_skillr6   r7   r8   ©r   rS   r$   r%   r'   r#   r*   r6   s           r   Úget_skill_handlerz4LiteLLMSkillsTransformationHandler.get_skill_handlerè   s–   € ñ, Ø×*Ñ*ØØØ!+¨XÐ 6Ø 1°?ÐCØ$(×$<Ñ$<ð +ô ñ Ø×(Ñ(Ø!Ø"3ð )ó ð ó
 	à×%Ñ%Ó'×:Ñ:Ø×!Ñ!Ø!Ø"3ð "ó ó
ð 	
r   c              ƒ   ór   K  — ddl m} |j                  ||¬«      ƒ d{  –—† }| j                  |«      S 7 Œ­w)z"Async implementation of get_skill.r   r<   rU   N)r@   r=   Ú	get_skillrC   )r   rS   r#   r=   rE   s        r   rV   z3LiteLLMSkillsTransformationHandler._async_get_skill  sD   è ø€ õ 	Sà 4× >Ñ >ØØ/ð !?ó !
÷ 
ˆð ×)Ñ)¨(Ó3Ð3ð	
ús   ‚7Ÿ5 7c                 óà   — |r$|j                  |dd|id|i| j                  ¬«       |r| j                  ||¬«      S ddl}|j	                  «       j                  | j                  ||¬«      «      S )ai  
        Delete a skill from LiteLLM database.

        Args:
            skill_id: The skill ID to delete
            _is_async: Whether to return a coroutine
            logging_obj: LiteLLM logging object
            litellm_call_id: Call ID for logging

        Returns:
            DeleteSkillResponse or coroutine that returns DeleteSkillResponse
        NrS   r'   r)   rU   r   )r0   r   Ú_async_delete_skillr6   r7   r8   rW   s           r   Údelete_skill_handlerz7LiteLLMSkillsTransformationHandler.delete_skill_handler%  s–   € ñ, Ø×*Ñ*ØØØ!+¨XÐ 6Ø 1°?ÐCØ$(×$<Ñ$<ð +ô ñ Ø×+Ñ+Ø!Ø"3ð ,ó ð ó
 	à×%Ñ%Ó'×:Ñ:Ø×$Ñ$Ø!Ø"3ð %ó ó
ð 	
r   c              ƒ   ó�   K  — ddl m} |j                  ||¬«      ƒ d{  –—† }t        |d   |j	                  dd«      ¬«      S 7 Œ$­w)	z%Async implementation of delete_skill.r   r<   rU   NÚidÚtypeÚskill_deleted)r_   r`   )r@   r=   Údelete_skillr	   Úget)r   rS   r#   r=   Úresults        r   r\   z6LiteLLMSkillsTransformationHandler._async_delete_skillS  sV   è ø€ õ 	Sà2×?Ñ?ØØ/ð @ó 
÷ 
ˆô #Ø�d‰|Ø—‘˜F OÓ4ô
ð 	
ð	
ús   ‚AŸA %ArE   r   c           	      ó  — |j                   r|j                   j                  «       nd}|j                  r|j                  j                  «       nd}t        |j                  |||j
                  |j                  |j                  xs dd¬«      S )zÄ
        Convert a database skill record to Anthropic-compatible Skill response.

        Args:
            db_skill: LiteLLM_SkillsTable record

        Returns:
            Skill object
        Ú ÚcustomÚskill)r_   Ú
created_atÚ
updated_atr   Úlatest_versionÚsourcer`   )ri   Ú	isoformatrj   r   rS   r   rk   rl   )r   rE   ri   rj   s       r   rC   z8LiteLLMSkillsTransformationHandler._db_skill_to_responsee  s�   € ð @H×?RÒ?R˜H×/Ñ/×9Ñ9Ô;ÐXZˆ
Ø?G×?RÒ?R˜H×/Ñ/×9Ñ9Ô;ÐXZˆ
äØ× Ñ Ø!Ø!Ø"×0Ñ0Ø#×2Ñ2Ø—?‘?Ò. hØô
ð 	
r   )NNNNNNNNNNFNN)	NNNNNNNNN)é   r   FNNN)rn   r   N)FNNN)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚpropertyÚstrr   r   ÚobjectÚbytesÚdictr   r   Úboolr   r   r:   r5   Úintr
   rK   rJ   rX   rV   r	   r]   r\   rC   © r   r   r   r      sû  „ ñð ð0 Sò 0ó ð0ð %)Ø"&Ø#'Ø)-Ø%)Ø $Ø $Ø04Ø"Ø8<ØØ59Ø&*ñR
à˜T‘zðR
ð ˜4‘ZðR
ð ˜D‘jð	R
ð
 ˜Ñ $Ñ&ðR
ð ˜d‘lðR
ð ˜‘:ðR
ð ˜‘:ðR
ð �s˜I�~Ñ&¨Ñ-ðR
ð �t‘ðR
ð $Ð$4Ñ5ðR
ð ðR
ð Ð1Ñ2ðR
ð ˜t™ðR
ð  
�˜6 6¨5Ð0Ñ1Ñ	1ó!R
ðl %)Ø"&Ø#'Ø%)Ø $Ø $Ø04Ø"Ø8<ñ!4à˜T‘zð!4ð ˜4‘Zð!4ð ˜D‘jð	!4ð
 ˜d‘lð!4ð ˜‘:ð!4ð ˜‘:ð!4ð �s˜I�~Ñ&¨Ñ-ð!4ð �t‘ð!4ð $Ð$4Ñ5ð!4ð 
ó!4ðJ ØØØ59Ø&*Ø8<ñ0
àð0
ð ð0
ð ð	0
ð
 Ð1Ñ2ð0
ð ˜t™ð0
ð $Ð$4Ñ5ð0
ð 
˜i¨°Ð8JÐ(JÑKÑ	Kó0
ðh ØØ8<ñ	
àð
ð ð
ð $Ð$4Ñ5ð	
ð
 
ó
ð4  Ø59Ø&*Ø8<ñ,
àð,
ð ð,
ð Ð1Ñ2ð	,
ð
 ˜t™ð,
ð $Ð$4Ñ5ð,
ð 
�˜6 6¨5Ð0Ñ1Ñ	1ó,
ðb 9=ñ4àð4ð $Ð$4Ñ5ð4ð 
ó	4ð$  Ø59Ø&*Ø8<ñ,
àð,
ð ð,
ð Ð1Ñ2ð	,
ð
 ˜t™ð,
ð $Ð$4Ñ5ð,
ð 
˜y¨°Ð9LÐ)LÑMÑ	Mó,
ðb 9=ñ
àð
ð $Ð$4Ñ5ð
ð 
ó	
ð$
Ð.Cð 
Èô 
r   r   N)rr   Úcollections.abcr   r   Útypingr   r   r   Úpydanticr   Ú#litellm.types.llms.anthropic_skillsr	   r
   r   Úlitellm.types.utilsr   Ú*litellm.litellm_core_utils.litellm_loggingr   r&   rA   r   r   r   rz   r   r   ú<module>r�      s<   ðñ÷ 0ß 1Ñ 1å ÷ñ õ
 -áÝWßH÷_
ò _
r   