Ë
    tPêjö7  ã                   óœ   — d Z ddlZddlmZmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ erdd	lmZ neZd
dlmZmZ  G d„ de«      Zy)z“
Dotprompt manager that integrates with LiteLLM's prompt management system.
Builds on top of PromptManagementBase to provide .prompt file support.
é    N)ÚTYPE_CHECKINGÚAnyÚFinal)ÚCustomPromptManagement)ÚPromptManagementClient)ÚAllMessageValues)Ú
PromptSpec)ÚStandardCallbackDynamicParams)ÚLoggingé   )ÚPromptManagerÚPromptTemplatec                    ó"  — e Zd ZdZ	 	 	 	 d,dedz  dedz  deez  dz  dedz  fd„Zedefd	„«       Zede	fd
„«       Z
dedz  dedz  dedefd„Z	 	 d-dedz  dedz  dedz  dededz  dedz  defd„Z	 	 	 d.dedz  dedz  dededz  dedz  dedz  defd„Z	 	 	 	 	 d/dedee   dededz  dedz  dededz  dedz  dedz  dedz  dedz  deeee   ef   fd„Z	 	 	 	 	 	 d0dedee   dededz  dedz  dedededz  dee   dz  dedz  dedz  dedz  dedz  deeee   ef   fd„Zdedee   fd„Zdededefd „Zd!edefd"„Zdeddfd#„Zd1d$„Zded%eeef   ddfd&„Z d'eeeeef   f   ddfd(„Z!deeeeef   f   fd)„Z"d*edeeef   fd+„Z#y)2ÚDotpromptManageran  
    Dotprompt manager that integrates with LiteLLM's prompt management system.

    This class enables using .prompt files with the litellm completion() function
    by implementing the PromptManagementBase interface.

    Usage:
        # Set global prompt directory
        litellm.prompt_directory = "path/to/prompts"

        # Use with completion
        response = litellm.completion(
            model="dotprompt/gpt-4",
            prompt_id="my_prompt",
            prompt_variables={"variable": "value"},
            messages=[{"role": "user", "content": "This will be combined with the prompt"}]
        )
    NÚprompt_directoryÚprompt_fileÚprompt_dataÚ	prompt_idc                 óÌ   — dd l }|xs |j                  | _        t        |t        «      rt        j                  |«      | _        n|xs i | _        d | _        || _	        || _
        y )Nr   )ÚlitellmÚglobal_prompt_directoryr   Ú
isinstanceÚstrÚjsonÚloadsr   Ú_prompt_managerr   r   )Úselfr   r   r   r   r   s         úu/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/integrations/dotprompt/dotprompt_manager.pyÚ__init__zDotpromptManager.__init__+   sY   € ó 	à 0Ò S°G×4SÑ4SˆÔä�k¤3Ô'Ü#Ÿz™z¨+Ó6ˆDÕà*Ò0¨bˆDÔà59ˆÔØ&ˆÔØ"ˆ�ó    Úreturnc                  ó   — y)z<Integration name used in model names like 'dotprompt/gpt-4'.Ú	dotprompt© ©r   s    r   Úintegration_namez!DotpromptManager.integration_name?   s   € ð r    c                 ó  — | j                   €k| j                  €#| j                  s| j                  st	        d«      ‚t        | j                  | j                  | j                  | j                  ¬«      | _         | j                   S )zLazy-load the prompt manager.z»Either prompt_directory or prompt_data must be set before using dotprompt manager. Set litellm.global_prompt_directory, initialize with prompt_directory parameter, or provide prompt_data.)r   r   r   r   )r   r   r   r   Ú
ValueErrorr   r   r%   s    r   Úprompt_managerzDotpromptManager.prompt_managerD   s~   € ð ×ÑÐ'Ø×$Ñ$Ð,°T×5EÒ5EÈd×N^ÒN^Ü ðóð ô $1Ø!%×!6Ñ!6Ø ×,Ñ,Ø ×,Ñ,ØŸ.™.ô	$ˆDÔ ð ×#Ñ#Ð#r    Úprompt_specÚdynamic_callback_paramsc                 ób   — |€y	 | j                   j                  |«      duS # t        $ r Y yw xY w)z˜
        Determine if prompt management should run based on the prompt_id.

        Returns True if the prompt_id exists in our prompt manager.
        NF)r)   Ú
get_promptÚ	Exception)r   r   r*   r+   s       r   Úshould_run_prompt_managementz-DotpromptManager.should_run_prompt_managementU   s@   € ð ÐØð	Ø×&Ñ&×1Ñ1°)Ó<ÀDÐHÐHøÜò 	áð	ús   …" ¢	.­.Úprompt_variablesÚprompt_labelÚprompt_versionc                 ó�  — |€t        d«      ‚	 | j                  j                  ||¬«      }|€|rd|› d�nd}t        d|› d|› d	�«      ‚| j                  j                  |||¬
«      }	| j	                  |	«      }
|j
                  }| j                  |«      }t        ||
||d¬«      S # t        $ r}t        d|› d|› �«      ‚d}~ww xY w)ae  
        Compile a .prompt file into a PromptManagementClient structure.

        This method:
        1. Loads the prompt template from the .prompt file (with optional version)
        2. Renders it with the provided variables
        3. Converts the rendered text into chat messages
        4. Extracts model and optional parameters from metadata
        Nú+prompt_id is required for dotprompt manager)r   Úversionz
 (version ú)Ú zPrompt 'ú'z not found in prompt directory)r   r0   r5   )r   Úprompt_templateÚprompt_template_modelÚprompt_template_optional_paramsÚcompleted_messageszError compiling prompt 'z': )	r(   r)   r-   ÚrenderÚ_convert_to_messagesÚmodelÚ_extract_optional_paramsr   r.   )r   r   r*   r0   r+   r1   r2   ÚtemplateÚversion_strÚrendered_contentÚmessagesÚtemplate_modelÚoptional_paramsÚes                 r   Ú_compile_prompt_helperz'DotpromptManager._compile_prompt_helperh   s  € ð& ÐÜÐJÓKÐKð 	Kà"×1Ñ1×<Ñ<ÀyÐZhÐ<ÓiˆHØÐÙGU z°.Ð1AÀÑ%CÐ[]�Ü  8¨I¨;°a¸°}ÐDbÐ!cÓdÐdð '+×&9Ñ&9×&@Ñ&@Ø#Ø!1Ø&ð 'Aó 'Ðð #×7Ñ7Ð8HÓIˆHð %-§N¡NˆNð &*×%BÑ%BÀ8Ó%LˆOä)Ø#Ø (Ø&4Ø0?Ø#'ôð øô ò 	KÜÐ7¸	°{À#ÀaÀSÐIÓJÐJûð	Kús   �BB& Â&	CÂ/C Ã Cc              ƒ   óR   K  — |€t        d«      ‚| j                  ||||||¬«      S ­w)z˜
        Async version of compile prompt helper. Since dotprompt operations are synchronous,
        this simply delegates to the sync version.
        r4   )r   r*   r0   r+   r1   r2   )r(   rH   )r   r   r0   r+   r*   r1   r2   s          r   Úasync_compile_prompt_helperz,DotpromptManager.async_compile_prompt_helper    sD   è ø€ ð ÐÜÐJÓKÐKà×*Ñ*ØØ#Ø-Ø$;Ø%Ø)ð +ó 
ð 	
ùs   ‚%'r?   rD   Únon_default_paramsÚignore_prompt_manager_modelÚ%ignore_prompt_manager_optional_paramsc                 óH   — ddl m} |j                  | |||||||||	|
|¬«      S )Nr   ©ÚPromptManagementBase)r*   r1   r2   rL   rM   )Ú+litellm.integrations.prompt_management_baserP   Úget_chat_completion_prompt)r   r?   rD   rK   r   r0   r+   r*   r1   r2   rL   rM   rP   s                r   rR   z+DotpromptManager.get_chat_completion_prompt¹   sD   € õ 	Uà#×>Ñ>ØØØØØØØ#Ø#Ø%Ø)Ø(CØ2Wð ?ó 
ð 	
r    Úlitellm_logging_objÚtoolsc              ƒ   óh   K  — ddl m} |j                  | |||||||||	|
|||¬«      ƒ d{  –—† S 7 Œ­w)zY
        Async version - delegates to PromptManagementBase async implementation.
        r   rO   )
r   r0   rS   r+   r*   rT   r1   r2   rL   rM   N)rQ   rP   Ú async_get_chat_completion_prompt)r   r?   rD   rK   r   r0   r+   rS   r*   rT   r1   r2   rL   rM   rP   s                  r   rV   z1DotpromptManager.async_get_chat_completion_promptØ   sY   è ø€ õ& 	Uà)×JÑJØØØØØØ-Ø 3Ø$;Ø#ØØ%Ø)Ø(CØ2Wð Kó 
÷ 
ð 	
ð 
ús   ‚)2«0¬2rC   c           	      ó  — |j                  «       }g }d}g }|j                  d«      }|D �]l  }|j                  «       }|j                  d«      rY|r@|r>|j                  | j	                  |dj                  |«      j                  «       «      «       d}|dd j                  «       g}Œ~|j                  d«      rY|r@|r>|j                  | j	                  |dj                  |«      j                  «       «      «       d}|dd j                  «       g}Œè|j                  d	«      rZ|r@|r>|j                  | j	                  |dj                  |«      j                  «       «      «       d
}|dd j                  «       g}�ŒS|r|j                  |«       �Œhd}|g}�Œo |rD|rBdj                  |«      j                  «       }|r!|j                  | j	                  ||«      «       |s#|r!|j                  | j	                  d|«      «       |S )a9  
        Convert rendered prompt content to chat messages.

        This method supports multiple formats:
        1. Simple text -> converted to user message
        2. Text with role prefixes (System:, User:, Assistant:) -> parsed into separate messages
        3. Already formatted as a single message
        Nú
zSystem:Úsystemé   zUser:Úuseré   z
Assistant:Ú	assistanté
   )ÚstripÚsplitÚ
startswithÚappendÚ_create_messageÚjoin)	r   rC   ÚcontentrD   Úcurrent_roleÚcurrent_contentÚlinesÚlineÚcontent_texts	            r   r>   z%DotpromptManager._convert_to_messagesþ   sÒ  € ð *×/Ñ/Ó1ˆð ˆØˆØˆà—}‘} TÓ*ˆàó 	-ˆDØ—:‘:“<ˆDð �‰˜yÔ)Ù¡OØ—O‘O D×$8Ñ$8¸ÀtÇyÁyÐQ`ÓGa×GgÑGgÓGiÓ$jÔkØ'�Ø#'¨¨ 8§>¡>Ó#3Ð"4‘Ø—‘ Ô)Ù¡OØ—O‘O D×$8Ñ$8¸ÀtÇyÁyÐQ`ÓGa×GgÑGgÓGiÓ$jÔkØ%�Ø#'¨¨ 8§>¡>Ó#3Ð"4‘Ø—‘ Ô.Ù¡OØ—O‘O D×$8Ñ$8¸ÀtÇyÁyÐQ`ÓGa×GgÑGgÓGiÓ$jÔkØ*�Ø#'¨¨ 9§?¡?Ó#4Ð"5’ñ  Ø#×*Ñ*¨4Ö0ð $*�LØ'+ f’Oð5	-ñ: ™OØ"&§)¡)¨OÓ"<×"BÑ"BÓ"DˆLÙØ—‘ × 4Ñ 4°\À<Ó PÔQñ ™GØ�O‰O˜D×0Ñ0°¸ÓAÔBàˆr    Úrolere   c                 ó   — ||dœS )z5Create a message with the specified role and content.)rk   re   r$   )r   rk   re   s      r   rc   z DotpromptManager._create_message9  s   € ð Øñ
ð 	
r    rA   c                 óX   — i }|j                   �|j                  |j                   «       |S )z�
        Extract optional parameters from the prompt template metadata.

        Includes parameters like temperature, max_tokens, etc.
        )rF   Úupdate)r   rA   rF   s      r   r@   z)DotpromptManager._extract_optional_params@  s1   € ð "$ˆð ×#Ñ#Ð/Ø×"Ñ" 8×#;Ñ#;Ô<àÐr    c                 ó    — || _         d| _        y)z,Set the prompt directory and reload prompts.N)r   r   )r   r   s     r   Úset_prompt_directoryz%DotpromptManager.set_prompt_directoryN  s   € à 0ˆÔØ#ˆÕr    c                 óR   — | j                   r| j                   j                  «        yy)z&Reload all prompts from the directory.N)r   Úreload_promptsr%   s    r   rr   zDotpromptManager.reload_promptsS  s"   € à×ÒØ× Ñ ×/Ñ/Õ1ð  r    Ú	json_datac                 ó†   — |j                  dd«      }|j                  di «      }| j                  j                  |||«       y)zAdd a prompt from JSON data.re   r7   ÚmetadataN)Úgetr)   Ú
add_prompt)r   r   rs   re   ru   s        r   Úadd_prompt_from_jsonz%DotpromptManager.add_prompt_from_jsonX  s:   € à"Ÿ™ y°"Ó5ˆØ#Ÿ-™-¨
°BÓ7ˆØ×Ñ×&Ñ& y°'¸8ÕDr    Úprompts_datac                 ó:   — | j                   j                  |«       y)z%Load multiple prompts from JSON data.N)r)   Úload_prompts_from_json_data)r   ry   s     r   Úload_prompts_from_jsonz'DotpromptManager.load_prompts_from_json^  s   € à×Ñ×7Ñ7¸ÕEr    c                 ó6   — | j                   j                  «       S )zGet all prompts in JSON format.)r)   Úget_all_prompts_as_jsonr%   s    r   Úget_prompts_as_jsonz$DotpromptManager.get_prompts_as_jsonb  s   € à×"Ñ"×:Ñ:Ó<Ð<r    Ú	file_pathc                 ó8   — | j                   j                  |«      S )z&Convert a .prompt file to JSON format.)r)   Úprompt_file_to_json)r   r€   s     r   Úconvert_prompt_file_to_jsonz,DotpromptManager.convert_prompt_file_to_jsonf  s   € à×"Ñ"×6Ñ6°yÓAÐAr    )NNNN)NN)NNN)NNNFF)NNNNFF)r!   N)$Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Údictr   Úpropertyr&   r   r)   r	   r
   Úboolr/   Úintr   rH   rJ   Úlistr   ÚtuplerR   ÚLiteLLMLoggingObjrV   r>   rc   r   r@   rp   rr   r   rx   r|   r   rƒ   r$   r    r   r   r      s(  „ ñð* (,Ø"&Ø)-Ø $ñ#à ™*ð#ð ˜4‘Zð#ð ˜C‘Z $Ñ&ð	#ð
 ˜‘:ó#ð( ð #ò ó ðð ð$ ò $ó ð$ð à˜‘:ðð   $Ñ&ðð "?ð	ð
 
óð2 $(Ø%)ñ6Kà˜‘:ð6Kð   $Ñ&ð6Kð  ™+ð	6Kð
 "?ð6Kð ˜D‘jð6Kð ˜d™
ð6Kð 
 ó6Kðz *.Ø#'Ø%)ñ
à˜‘:ð
ð  ™+ð
ð "?ð	
ð
   $Ñ&ð
ð ˜D‘jð
ð ˜d™
ð
ð 
 ó
ðB *.Ø#'Ø%)Ø38Ø=Bñ
àð
ð Ð'Ñ(ð
ð !ð	
ð
 ˜‘:ð
ð  ™+ð
ð "?ð
ð   $Ñ&ð
ð ˜D‘jð
ð ˜d™
ð
ð &*¨D¡[ð
ð 04°d©{ð
ð 
ˆs�DÐ)Ñ*¨DÐ0Ñ	1ó
ðP *.Ø#'Ø#'Ø%)Ø38Ø=Bñ$
àð$
ð Ð'Ñ(ð$
ð !ð	$
ð
 ˜‘:ð$
ð  ™+ð$
ð "?ð$
ð /ð$
ð   $Ñ&ð$
ð �D‰z˜DÑ ð$
ð ˜D‘jð$
ð ˜d™
ð$
ð &*¨D¡[ð$
ð 04°d©{ð$
ð 
ˆs�DÐ)Ñ*¨DÐ0Ñ	1ó$
ðL9°Sð 9¸TÐBRÑ=Só 9ðv
 Cð 
°#ð 
Ð:Jó 
ð°ð ÀDó ð$°Sð $¸Tó $ó
2ð
E¨cð E¸dÀ3ÈÀ8¹nð EÐQUó EðF°4¸¸TÀ#ÀsÀ(¹^Ð8KÑ3Lð FÐQUó Fð= T¨#¨t°C¸°H©~Ð*=Ñ%>ó =ðB°Sð B¸TÀ#ÀsÀ(¹^ô Br    r   )r‡   r   Útypingr   r   r   Ú-litellm.integrations.custom_prompt_managementr   rQ   r   Úlitellm.types.llms.openair   Ú"litellm.types.prompts.init_promptsr	   Úlitellm.types.utilsr
   Ú*litellm.litellm_core_utils.litellm_loggingr   rŽ   r)   r   r   r   r$   r    r   ú<module>r•      sD   ðñó
 ß ,Ñ ,å PÝ NÝ 6Ý 9Ý =áÞWàÐç 9ôQBÐ-õ QBr    