Ë
    tPêj36  ã                   ó�  — U d Z ddlZddlZddlmZ ddlmZmZmZ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mZ dd
lmZ ddl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$ er!ddl m%Z% ddl&m'Z'm(Z( ddl)m*Z+ e%Z,e
e-d<   e(e'z  Z.neZ.eZ,eZ+ e«       Z/ee-d<    ed¬«      	 	 	 	 	 	 dde0de,fd„«       Z1 G d„ de!ee«      Z2y) zF
Call Hook for LiteLLM Proxy which allows Langfuse prompt management.
é    N)Ú	lru_cache)ÚTYPE_CHECKINGÚAnyÚFinalÚLiteralÚ	TypeAliasÚcast)ÚVersion)ÚCustomLogger)ÚPromptManagementClient)Úrun_async_function)ÚAllMessageValuesÚChatCompletionSystemMessage)Ú
PromptSpec)ÚStandardCallbackDynamicParamsÚStandardLoggingPayloadé   )ÚDynamicLoggingCacheé   )ÚPromptManagementBaseé   )ÚLangFuseLoggerÚresolve_langfuse_credentials)ÚLangFuseHandler©ÚLangfuse)ÚChatPromptClientÚTextPromptClient)ÚLoggingÚLangfuseClassÚin_memory_dynamic_logger_cacheé
   )ÚmaxsizeÚallow_env_credentialsÚreturnc                 ó6  — 	 ddl }ddl m} t        | ||||¬«      \  }	}
}|j	                  d«      s|j	                  d«      sd|z   }t        j                  d	«      }t        j                  d
«      }|	|
|||t        j                  |«      dœ}t        |j                  j                  «      t        d«      k\  rd|d<   t        |j                  j                  «      t        d«      k\  rGddl}ddl}ddlm} |j!                   |«       t        j                  d|j"                  «      ¬«      |d<   dt%        j&                  |j(                  «      j*                  v rt        j,                  «       |d<    |di |¤Ž}|S # t        $ r}t        d|› d�«      ‚d}~ww xY w)a9  
    Initialize Langfuse client with caching to prevent multiple initializations.

    Args:
        langfuse_public_key (str, optional): Public key for Langfuse. Defaults to None.
        langfuse_secret (str, optional): Secret key for Langfuse. Defaults to None.
        langfuse_host (str, optional): Host URL for Langfuse. Defaults to None.
        flush_interval (int, optional): Flush interval in seconds. Defaults to 1.

    Returns:
        Langfuse: Initialized Langfuse client instance

    Raises:
        Exception: If langfuse package is not installed
    r   Nr   zS[91mLangfuse not installed, try running 'pip install langfuse' to fix this error: z
[0m©Úlangfuse_public_keyÚlangfuse_secretÚlangfuse_secret_keyÚlangfuse_hostr$   zhttp://zhttps://ÚLANGFUSE_RELEASEÚLANGFUSE_DEBUG)Ú
public_keyÚ
secret_keyÚhostÚreleaseÚdebugÚflush_intervalz2.6.0ÚlitellmÚsdk_integrationz2.7.3r   )Úget_ssl_configurationÚSSL_CERTIFICATE)ÚverifyÚcertÚhttpx_clientÚenvironment© )Úlangfuser   Ú	Exceptionr   Ú
startswithÚosÚgetenvr   Ú_get_langfuse_flush_intervalr
   ÚversionÚ__version__Úhttpxr4   Úllms.custom_httpx.http_handlerr6   ÚClientÚssl_certificateÚinspectÚ	signatureÚ__init__Ú
parametersÚresolve_deployment_environment)r(   r)   r*   r+   r3   r$   r=   r   Úer.   r/   Úlangfuse_releaseÚlangfuse_debugrL   rE   r4   r6   Úclients                     ú}/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/integrations/langfuse/langfuse_prompt_management.pyÚlangfuse_client_initrS   *   s–  € ð0
ÛÝ%ô -IØ/Ø'Ø/Ø#Ø3ô-Ñ)€J�
˜Mð ×$Ñ$ YÔ/°=×3KÑ3KÈJÔ3Wà! MÑ1ˆä Ÿi™iÐ(:Ó;ÐÜŸI™IÐ&6Ó7€Nð !Ø ØØ#ØÜ(×EÑEÀnÓUñ€Jô ˆx×Ñ×+Ñ+Ó,´¸Ó0@Ò@Ø(1ˆ
Ð$Ñ%äˆx×Ñ×+Ñ+Ó,´¸Ó0@Ò@ÛãåKà%*§\¡\Ù(Ó*Ü—‘Ð,¨g×.EÑ.EÓFð &2ó &
ˆ
�>Ñ"ð
 œ×)Ñ)¨(×*;Ñ*;Ó<×GÑGÑGÜ$2×$QÑ$QÓ$Sˆ
�=Ñ!áÑ*˜zÑ*€Fà€Møôc ò 
ÜØdÐefÐdgÐgpÐqó
ð 	
ûð
ús   ‚
E; Å;	FÆFÆFc                    óþ  — e Zd Z	 	 	 	 d#d„Zed„ «       Z	 	 d$dedededz  dedz  de	f
d	„Z
d
e	dedz  ded   dee   fd„Zd
e	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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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„ Zd „ Zd!„ Zd"„ Zy)'ÚLangfusePromptManagementNc                 ój   — dd l }|j                  j                  | _        t	        ||||¬«      | _        y )Nr   )r(   r)   r+   r3   )r=   rC   rD   Úlangfuse_sdk_versionrS   r   )Úselfr(   r)   r+   r3   r=   s         rR   rK   z!LangfusePromptManagement.__init__z   s3   € ó 	à$,×$4Ñ$4×$@Ñ$@ˆÔ!Ü,Ø 3Ø+Ø'Ø)ô	
ˆ�ó    c                  ó   — y)Nr=   r<   )rX   s    rR   Úintegration_namez)LangfusePromptManagement.integration_name‹   s   € àrY   Úlangfuse_prompt_idÚlangfuse_clientÚprompt_labelÚprompt_versionr%   c                 ó.   — |j                  |||¬«      }|S )N)ÚlabelrC   )Ú
get_prompt)rX   r\   r]   r^   r_   Úprompt_clients         rR   Ú_get_prompt_from_idz,LangfusePromptManagement._get_prompt_from_id�   s#   € ð (×2Ñ2Ð3EÈ\ÐcqÐ2ÓrˆàÐrY   Úlangfuse_prompt_clientÚlangfuse_prompt_variablesÚ	call_type)Ú
completionÚtext_completionc                 ó¤   — d }|€i } |j                   di |¤Ž}t        |t        «      rt        d|¬«      g}|S t	        t
        t           |«      }|S )NÚsystem)ÚroleÚcontentr<   )ÚcompileÚ
isinstanceÚstrr   r	   Úlistr   )rX   re   rf   rg   Úcompiled_prompts        rR   Ú_compile_promptz(LangfusePromptManagement._compile_promptš   sh   € ð .2ˆà$Ð,Ø(*Ð%à8Ð0×8Ñ8ÑUÐ;TÑUˆä�o¤sÔ+Ü:ÀÐRaÔbÐcˆOð Ðô #¤4Ô(8Ñ#9¸?ÓKˆOàÐrY   c                 óh   — |j                   }i }|j                  «       D ]  \  }}|dk7  sŒ|||<   Œ |S )NÚmodel)ÚconfigÚitems)rX   re   rv   Úoptional_paramsÚkÚvs         rR   Ú"_get_optional_params_from_langfusez;LangfusePromptManagement._get_optional_params_from_langfuse®   sD   € Ø.×5Ñ5ˆØ!#ˆØ—L‘L“Nò 	'‰DˆAˆqØ�G‹|Ø%&� Ò"ð	'ð ÐrY   ru   ÚmessagesÚnon_default_paramsÚ	prompt_idÚprompt_variablesÚdynamic_callback_paramsÚlitellm_logging_objÚprompt_specÚtoolsÚignore_prompt_manager_modelÚ%ignore_prompt_manager_optional_paramsc              ƒ   óB   K  — | j                  ||||||||
|||¬«      S ­w)N)r‚   r^   r_   r„   r…   )Úget_chat_completion_prompt)rX   ru   r|   r}   r~   r   r€   r�   r‚   rƒ   r^   r_   r„   r…   s                 rR   Ú async_get_chat_completion_promptz9LangfusePromptManagement.async_get_chat_completion_prompt¶   sA   è ø€ ð( ×.Ñ.ØØØØØØ#Ø#Ø%Ø)Ø(CØ2Wð /ó 
ð 	
ùs   ‚c           	      óð   — |€yt        |j                  d«      |j                  d«      |j                  d«      |j                  d«      |j                  d«      d u ¬«      }| j                  ||¬«      }|d uS )NFr(   r)   r*   r+   r'   )r\   r]   )rS   Úgetrd   )rX   r~   r‚   r€   r]   re   s         rR   Úshould_run_prompt_managementz5LangfusePromptManagement.should_run_prompt_managementØ   s’   € ð ÐØÜ!5Ø 7× ;Ñ ;Ð<QÓ RØ3×7Ñ7Ð8IÓJØ 7× ;Ñ ;Ð<QÓ RØ1×5Ñ5°oÓFØ"9×"=Ñ"=¸oÓ"NÐRVÐ"Vô"
ˆð )-×(@Ñ(@Ø(Ø+ð )Aó )
Ðð &¨TÐ1Ð1rY   c           	      ó   — |€t        d«      ‚t        |j                  d«      |j                  d«      |j                  d«      |j                  d«      |j                  d«      d u ¬«      }| j                  ||||¬«      }| j	                  ||d¬	«      }	|j
                  j                  d
«      }
| j                  |«      }t        ||	|
|d ¬«      S )Nz4prompt_id is required for Langfuse prompt managementr(   r)   r*   r+   r'   )r\   r]   r^   r_   rh   )re   rf   rg   ru   )r~   Úprompt_templateÚprompt_template_modelÚprompt_template_optional_paramsÚcompleted_messages)Ú
ValueErrorrS   rŠ   rd   rs   rv   r{   r   )rX   r~   r‚   r   r€   r^   r_   r]   re   rr   Útemplate_modelÚtemplate_optional_paramss               rR   Ú_compile_prompt_helperz/LangfusePromptManagement._compile_prompt_helperí   sú   € ð ÐÜÐSÓTÐTä!5Ø 7× ;Ñ ;Ð<QÓ RØ3×7Ñ7Ð8IÓJØ 7× ;Ñ ;Ð<QÓ RØ1×5Ñ5°oÓFØ"9×"=Ñ"=¸oÓ"NÐRVÐ"Vô"
ˆð )-×(@Ñ(@Ø(Ø+Ø%Ø)ð	 )Aó )
Ðð "&×!5Ñ!5Ø#9Ø&6Ø"ð "6ó "
ˆð !7× =Ñ =× AÑ AÀ'Ó Jˆà*.×*QÑ*QÐRhÓ*iÐ ä%ØØ+Ø"0Ø,DØ#ô
ð 	
rY   c              ƒ   ó8   K  — | j                  ||||||¬«      S ­w)N)r~   r   r€   r‚   r^   r_   )r”   )rX   r~   r   r€   r‚   r^   r_   s          rR   Úasync_compile_prompt_helperz4LangfusePromptManagement.async_compile_prompt_helper  s2   è ø€ ð ×*Ñ*ØØ-Ø$;Ø#Ø%Ø)ð +ó 
ð 	
ùs   ‚c                 ó4   — t        | j                  ||||«      S ©N)r   Úasync_log_success_event©rX   ÚkwargsÚresponse_objÚ
start_timeÚend_times        rR   Úlog_success_eventz*LangfusePromptManagement.log_success_event,  ó   € Ü! $×">Ñ">ÀÈÐV`ÐbjÓkÐkrY   c                 ó4   — t        | j                  ||||«      S r˜   )r   Úasync_log_failure_eventrš   s        rR   Úlog_failure_eventz*LangfusePromptManagement.log_failure_event/  r    rY   c           
   ƒ   ó4  K  — 	 |j                  d«      }t        j                  | |t        ¬«      }|j	                  |||||j                  dd «      ¬«       y # t
        $ r4}ddlm} |j                  d|«       | j                  d¬	«       Y d }~y d }~ww xY w­w)
NÚ standard_callback_dynamic_params©ÚglobalLangfuseLoggerr¥   r!   Úuser)r›   rœ   r�   rž   Úuser_idr   ©Úverbose_loggerzILangfuse Layer Error - Exception occurred while logging success event: %sr=   ©Úcallback_name)
rŠ   r   Úget_langfuse_logger_for_requestr!   Úlog_event_on_langfuser>   Úlitellm._loggingr«   Ú	exceptionÚhandle_callback_failure)	rX   r›   rœ   r�   rž   r¥   Úlangfuse_logger_to_userN   r«   s	            rR   r™   z0LangfusePromptManagement.async_log_success_event2  s¡   è ø€ ð	CØ6<·j±jÐAcÓ6dÐ,Ü,;×,[Ñ,[Ø%)Ø1QÜ/Mô-Ð"ð
 #×8Ñ8ØØ)Ø%Ø!ØŸ
™
 6¨4Ó0ð 9õ øô ò 	CÝ7à×$Ñ$Ð%pÐrsÔtØ×(Ñ(°zÐ(×BÑBûð		Cüs/   ‚B„AA ÁBÁ	BÁ!*BÂBÂBÂBc           	   ƒ   óä  K  — 	 |j                  d«      }t        j                  | |t        ¬«      }t	        t
        d z  |j                  dd «      «      }t        |j                  dd«      «      }|�|j                  dd «      xs |}|j                  ||d |j                  dd «      |d|¬	«       y # t        $ r4}	d
dl	m
}
 |
j                  d|	«       | j                  d¬«       Y d }	~	y d }	~	ww xY w­w)Nr¥   r¦   Ústandard_logging_objectr±   zUnknown errorÚ	error_strr¨   ÚERROR)r�   rž   rœ   r©   Ústatus_messageÚlevelr›   r   rª   zILangfuse Layer Error - Exception occurred while logging failure event: %sr=   r¬   )rŠ   r   r®   r!   r	   r   rp   r¯   r>   r°   r«   r±   r²   )rX   r›   rœ   r�   rž   r¥   r³   rµ   r¸   rN   r«   s              rR   r¢   z0LangfusePromptManagement.async_log_failure_eventG  sþ   è ø€ ð	CØ6<·j±jÐAcÓ6dÐ,Ü,;×,[Ñ,[Ø%)Ø1QÜ/Mô-Ð"ô
 .2Ü&¨Ñ-Ø—
‘
Ð4°dÓ;ó.Ð#ô ! §¡¨K¸Ó!IÓJˆNØ&Ð2Ø!8×!<Ñ!<¸[È$Ó!OÒ!aÐSa�Ø"×8Ñ8Ø%Ø!Ø!ØŸ
™
 6¨4Ó0Ø-ØØð 9õ øô ò 	CÝ7à×$Ñ$Ð%pÐrsÔtØ×(Ñ(°zÐ(×BÑBûð		Cüs/   ‚C0„B+B0 Â/C0Â0	C-Â9*C(Ã#C0Ã(C-Ã-C0)NNNr   )NN)NNNNFF)NNN)Ú__name__Ú
__module__Ú__qualname__rK   Úpropertyr[   rp   r    ÚintÚPROMPT_CLIENTrd   Údictr   rq   r   rs   r{   r   ÚLiteLLMLoggingObjr   ÚboolÚtuplerˆ   r‹   r   r”   r–   rŸ   r£   r™   r¢   r<   rY   rR   rU   rU   y   sÂ  „ ð !ØØØó
ð" ñó ðð $(Ø%)ñ	àð	ð 'ð	ð ˜D‘jð		ð
 ˜d™
ð	ð 
ó	ðà -ðð $(¨$¡;ðð Ð:Ñ;ð	ð
 
ÐÑ	óð(Èð Ð[_ó ð" *.Ø#'Ø#'Ø%)Ø38Ø=Bñ 
àð 
ð Ð'Ñ(ð 
ð !ð	 
ð
 ˜‘:ð 
ð  ™+ð 
ð "?ð 
ð /ð 
ð   $Ñ&ð 
ð �D‰z˜DÑ ð 
ð ˜D‘jð 
ð ˜d™
ð 
ð &*¨D¡[ð 
ð 04°d©{ð 
ð 
ØØÐÑØð	ñ
ó 
ðD2à˜‘:ð2ð   $Ñ&ð2ð "?ð	2ð
 
ó2ð6 $(Ø%)ñ+
à˜‘:ð+
ð   $Ñ&ð+
ð  ™+ð	+
ð
 "?ð+
ð ˜D‘jð+
ð ˜d™
ð+
ð 
 ó+
ðd *.Ø#'Ø%)ñ
à˜‘:ð
ð  ™+ð
ð "?ð	
ð
   $Ñ&ð
ð ˜D‘jð
ð ˜d™
ð
ð 
 ó
ò$lòlòCó*CrY   rU   )NNNNr   T)3Ú__doc__rI   r@   Ú	functoolsr   Útypingr   r   r   r   r   r	   Úpackaging.versionr
   Ú"litellm.integrations.custom_loggerr   Ú+litellm.integrations.prompt_management_baser   Ú#litellm.litellm_core_utils.asyncifyr   Úlitellm.types.llms.openair   r   Ú"litellm.types.prompts.init_promptsr   Úlitellm.types.utilsr   r   Ú9litellm_core_utils.specialty_caches.dynamic_logging_cacher   Úprompt_management_baser   r=   r   r   Úlangfuse_handlerr   r   Úlangfuse.clientr   r   Ú*litellm.litellm_core_utils.litellm_loggingr   rÁ   r    Ú__annotations__r¿   r!   rÂ   rS   rU   r<   rY   rR   ú<module>rÔ      sØ   ðòó Û 	Ý ß F× Få %å ;Ý NÝ Bß SÝ 9ß Uõõ :ß BÝ -áÝ!ßBåWà'€M�9Ó'à$Ð'7Ñ7�Mà€MØ€MØÐÙ(;Ó(=Ð  Ó =ñ �2ÔàØØØØØ"&ñKð  ðKð òKó ðKô\jC˜~Ð/CÀ\õ jCrY   