o
    ưi3                     @   sr  U d 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
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 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% ddl&m'Z' erddl$m(Z( ddl)m*Z*m+Z+ ddl,m-Z. e(Z/ee0d< ee+e*f Z1neZ1eZ/eZ.e! Z2edd					dde/fddZ3G dd de%e#eZ4dS ) zF
Call Hook for LiteLLM Proxy which allows Langfuse prompt management.
    N)	lru_cache)	TYPE_CHECKINGAnyDictListLiteralOptionalTupleUnioncast)Version)	TypeAlias)CustomLogger)PromptManagementClient)run_async_function)AllMessageValuesChatCompletionSystemMessage)
PromptSpec)StandardCallbackDynamicParamsStandardLoggingPayload   )DynamicLoggingCache   )PromptManagementBase   )LangFuseLogger)LangFuseHandlerLangfuse)ChatPromptClientTextPromptClient)LoggingLangfuseClass
   )maxsizereturnc              
   C   s   zddl }ddl m} W n ty  } ztd| dd}~ww |p)|p)td}| p0td}	|p8tdd	}|d
sG|dsGd
| }td}
td}|	|||
|t|d}t|j	j
tdkrkd|d< |di |}|S )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
[0mZLANGFUSE_SECRET_KEYZLANGFUSE_PUBLIC_KEYZLANGFUSE_HOSTzhttps://cloud.langfuse.comzhttp://zhttps://ZLANGFUSE_RELEASEZLANGFUSE_DEBUG)
public_key
secret_keyhostreleasedebugflush_intervalz2.6.0ZlitellmZsdk_integration )langfuser   	Exceptionosgetenv
startswithr   Z_get_langfuse_flush_intervalr   version__version__)langfuse_public_keylangfuse_secretlangfuse_secret_keylangfuse_hostr+   r-   r   er'   r&   Zlangfuse_releaseZlangfuse_debug
parametersclientr,   r,   o/home/app/Keep/.python/lib/python3.10/site-packages/litellm/integrations/langfuse/langfuse_prompt_management.pylangfuse_client_init*   sF   


r<   c                    @   s  e Zd Z				d3ddZedd Z		d4deded	ee d
ee	 de
f
ddZde
dee deed ed f dee fddZde
defddZ						d5dedee dedee dee dededee d eee  d	ee d
ee	 d!ee d"ee deeee ef fd#d$Zdee dee dedefd%d&Z		d4dee dee dee ded	ee d
ee	 defd'd(Z			d6dee dee dedee d	ee d
ee	 defd)d*Zd+d, Zd-d. Zd/d0 Z d1d2 Z!dS )7LangfusePromptManagementNr   c                 C   s(   dd l }|jj| _t||||d| _d S )Nr   )r4   r5   r7   r+   )r-   r2   r3   Zlangfuse_sdk_versionr<   r   )selfr4   r5   r7   r+   r-   r,   r,   r;   __init__p   s   
z!LangfusePromptManagement.__init__c                 C   s   dS )Nr-   r,   )r>   r,   r,   r;   integration_name   s   z)LangfusePromptManagement.integration_namelangfuse_prompt_idlangfuse_clientprompt_labelprompt_versionr%   c                 C   s   |j |||d}|S )N)labelr2   )Z
get_prompt)r>   rA   rB   rC   rD   Zprompt_clientr,   r,   r;   _get_prompt_from_id   s   z,LangfusePromptManagement._get_prompt_from_idlangfuse_prompt_clientlangfuse_prompt_variables	call_type
completionZtext_completionc                 C   sN   d }|d u ri }|j di |}t|trtd|dg}|S ttt |}|S )Nsystem)Zrolecontentr,   )compile
isinstancestrr   r   r   r   )r>   rG   rH   rI   compiled_promptr,   r,   r;   _compile_prompt   s   

z(LangfusePromptManagement._compile_promptc                 C   s0   |j }i }| D ]\}}|dkr|||< q	|S )Nmodel)configitems)r>   rG   rS   Zoptional_paramskvr,   r,   r;   "_get_optional_params_from_langfuse   s   z;LangfusePromptManagement._get_optional_params_from_langfuseFrR   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                    s"   | j ||||||||
|||dS )N)r^   rC   rD   r`   ra   )Zget_chat_completion_prompt)r>   rR   rX   rY   rZ   r[   r\   r]   r^   r_   rC   rD   r`   ra   r,   r,   r;    async_get_chat_completion_prompt   s   z9LangfusePromptManagement.async_get_chat_completion_promptc                 C   sJ   |d u rdS t |d|d|d|dd}| j||d}|d uS )NFr4   r5   r6   r7   r4   r5   r6   r7   )rA   rB   )r<   getrF   )r>   rZ   r^   r\   rB   rG   r,   r,   r;   should_run_prompt_management   s   z5LangfusePromptManagement.should_run_prompt_managementc                 C   s   |d u rt dt|d|d|d|dd}| j||||d}| j||dd	}	|jd
}
| |}t||	|
|d dS )Nz4prompt_id is required for Langfuse prompt managementr4   r5   r6   r7   rc   )rA   rB   rC   rD   rJ   )rG   rH   rI   rR   )rZ   Zprompt_templateZprompt_template_modelZprompt_template_optional_paramsZcompleted_messages)
ValueErrorr<   rd   rF   rQ   rS   rW   r   )r>   rZ   r^   r[   r\   rC   rD   rB   rG   rP   Ztemplate_modelZtemplate_optional_paramsr,   r,   r;   _compile_prompt_helper   s<   	z/LangfusePromptManagement._compile_prompt_helperc                    s   | j ||||||dS )N)rZ   r[   r\   r^   rC   rD   )rg   )r>   rZ   r[   r\   r^   rC   rD   r,   r,   r;   async_compile_prompt_helper  s   	z4LangfusePromptManagement.async_compile_prompt_helperc                 C      t | j||||S N)r   async_log_success_eventr>   kwargsresponse_obj
start_timeend_timer,   r,   r;   log_success_event$     z*LangfusePromptManagement.log_success_eventc                 C   ri   rj   )r   async_log_failure_eventrl   r,   r,   r;   log_failure_event)  rr   z*LangfusePromptManagement.log_failure_eventc           	   
      s   z| d}tj| |td}|j||||| dd d W d S  tyH } zddlm} |dt	|  | j
dd	 W Y d }~d S d }~ww )
N standard_callback_dynamic_paramsZglobalLangfuseLoggerru   in_memory_dynamic_logger_cacheuser)rm   rn   ro   rp   user_idr   verbose_loggerzGLangfuse Layer Error - Exception occurred while logging success event: r-   Zcallback_name)rd   r   get_langfuse_logger_for_requestrw   log_event_on_langfuser.   litellm._loggingr{   	exceptionrO   handle_callback_failure)	r>   rm   rn   ro   rp   ru   langfuse_logger_to_user8   r{   r,   r,   r;   rk   .  s2   
z0LangfusePromptManagement.async_log_success_eventc           
   
      s   z4| d}tj| |td}ttt | dd }|d u r!W d S |j||d | dd |d d|d W d S  ty^ } zdd	l	m
}	 |	d
t|  | jdd W Y d }~d S d }~ww )Nru   rv   standard_logging_objectrx   Z	error_strERROR)ro   rp   rn   ry   Zstatus_messagelevelrm   r   rz   zGLangfuse Layer Error - Exception occurred while logging failure event: r-   r|   )rd   r   r}   rw   r   r   r   r~   r.   r   r{   r   rO   r   )
r>   rm   rn   ro   rp   ru   r   r   r8   r{   r,   r,   r;   rs   G  sB   

	z0LangfusePromptManagement.async_log_failure_event)NNNr   )NN)NNNNFF)NNN)"__name__
__module____qualname__r?   propertyr@   rO   r"   r   intPROMPT_CLIENTrF   dictr
   r   r   r   rQ   rW   r   LiteLLMLoggingObjr   r   boolr	   rb   re   r   rg   rh   rq   rt   rk   rs   r,   r,   r,   r;   r=   o   s    




	




3
r=   )NNNNr   )5__doc__r/   	functoolsr   typingr   r   r   r   r   r   r	   r
   r   Zpackaging.versionr   Ztyping_extensionsr   Z"litellm.integrations.custom_loggerr   Z+litellm.integrations.prompt_management_baser   Z#litellm.litellm_core_utils.asyncifyr   Zlitellm.types.llms.openair   r   Z"litellm.types.prompts.init_promptsr   Zlitellm.types.utilsr   r   Z9litellm_core_utils.specialty_caches.dynamic_logging_cacher   Zprompt_management_baser   r-   r   Zlangfuse_handlerr   r   Zlangfuse.clientr   r    Z*litellm.litellm_core_utils.litellm_loggingr!   r   r"   __annotations__r   rw   r<   r=   r,   r,   r,   r;   <module>   sH    ,D