
    gX%                     b   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 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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# ddl$m%Z%m&Z& e#Z'ee(d<   ee&e%f   Z)neZ)eZ' e       Z* ed      	 	 	 	 dde'fd       Z+ G d de ee      Z,y)zF
Call Hook for LiteLLM Proxy which allows Langfuse prompt management.
    N)	lru_cache)TYPE_CHECKINGAnyListLiteralOptionalTupleUnioncast)Version)	TypeAlias)CustomLogger)PromptManagementClient)AllMessageValuesChatCompletionSystemMessage)StandardCallbackDynamicParamsStandardLoggingPayload   )DynamicLoggingCache   )PromptManagementBase   )LangFuseLogger)LangFuseHandlerLangfuse)ChatPromptClientTextPromptClientLangfuseClass
   )maxsizereturnc                 J   	 ddl }ddl m} |xs t        j                  d      }| xs t        j                  d      }|xs t        j                  dd	      }|j                  d
      s|j                  d      sd
|z   }t        j                  d      }	t        j                  d      }
t        j                  d      xs |}||||	|
|d}t        |j                  j                        t        d      k\  rd|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_SECRET_KEYLANGFUSE_PUBLIC_KEYLANGFUSE_HOSTzhttps://cloud.langfuse.comzhttp://zhttps://LANGFUSE_RELEASELANGFUSE_DEBUGLANGFUSE_FLUSH_INTERVAL)
public_key
secret_keyhostreleasedebugflush_intervalz2.6.0litellmsdk_integration )	langfuser   	Exceptionosgetenv
startswithr   version__version__)langfuse_public_keylangfuse_secretlangfuse_hostr/   r3   r   er+   r*   langfuse_releaselangfuse_debuglangfuse_flush_interval
parametersclients                 m/var/www/openai/venv/lib/python3.12/site-packages/litellm/integrations/langfuse/langfuse_prompt_management.pylangfuse_client_initrD   &   s6   ,
% !DBII.C$DJ$H		2G(HJ! RYY5&M
 	  +}/G/G
/S "M1yy!34YY/0N ii(ABTn ! #1J x++,0@@(1
$%#
#FMI  
defdggpq
 	

s   
D 	D"DD"c                   
   e Zd Z	 	 	 	 ddZed        ZdededefdZ	ded	e
e   d
eed   ed   f   dee   fdZdedefdZdedee   dedede
e   dedeeee   ef   fdZdededefdZdede
e   dedefdZd Zd Zy)LangfusePromptManagementNc                 ,    t        ||||      | _        y )N)r:   r;   r<   r/   )rD   r   )selfr:   r;   r<   r/   s        rC   __init__z!LangfusePromptManagement.__init__g   s     - 3+')	
    c                      y)Nr3   r2   )rH   s    rC   integration_namez)LangfusePromptManagement.integration_nameu   s    rJ   langfuse_prompt_idlangfuse_clientr"   c                 $    |j                  |      S N)
get_prompt)rH   rM   rN   s      rC   _get_prompt_from_idz,LangfusePromptManagement._get_prompt_from_idy   s     ))*<==rJ   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contentr2   )compile
isinstancestrr   r   r   r   )rH   rS   rT   rU   compiled_prompts        rC   _compile_promptz(LangfusePromptManagement._compile_prompt~   si     7;$,(*%8088U;TUos++?SO  #4(8#9?KOrJ   c                 h    |j                   }i }|j                         D ]  \  }}|dk7  s|||<    |S )Nmodel)configitems)rH   rS   rc   optional_paramskvs         rC   "_get_optional_params_from_langfusez;LangfusePromptManagement._get_optional_params_from_langfuse   sA     (..LLNDAqG|%&" # rJ   rb   messagesnon_default_params	prompt_idprompt_variablesdynamic_callback_paramsc                 6   K   | j                  ||||||      S wrP   )get_chat_completion_prompt)rH   rb   ri   rj   rk   rl   rm   s          rC    async_get_chat_completion_promptz9LangfusePromptManagement.async_get_chat_completion_prompt   s-      ..#
 	
s   c                     t        |j                  d      |j                  d      |j                  d            }| j                  ||      }|d uS )Nr:   r;   r<   r:   r;   r<   rM   rN   )rD   getrR   )rH   rk   rm   rN   rS   s        rC   should_run_prompt_managementz5LangfusePromptManagement.should_run_prompt_management   sd    
 / 7 ; ;<Q R3778IJ155oF

 "&!9!9(/ ": "
 &T11rJ   c                 >   t        |j                  d      |j                  d      |j                  d            }| j                  ||      }| j                  ||d      }|j                  j                  d      }| j                  |      }t        ||||d 	      S )
Nr:   r;   r<   rr   rs   rV   )rS   rT   rU   rb   )rk   prompt_templateprompt_template_modelprompt_template_optional_paramscompleted_messages)rD   rt   rR   r`   rc   rh   r   )	rH   rk   rl   rm   rN   rS   r_   template_modeltemplate_optional_paramss	            rC   _compile_prompt_helperz/LangfusePromptManagement._compile_prompt_helper   s     / 7 ; ;<Q R3778IJ155oF

 "&!9!9(/ ": "

 ..#9&6" / 
 066::7C#'#J#J"$
  &+"0,D#
 	
rJ   c           
         K   |j                  d      }t        j                  | |t              }|j	                  |||||j                  dd       d        y w)N standard_callback_dynamic_paramsglobalLangfuseLoggerr   in_memory_dynamic_logger_cacheuser)kwargsresponse_obj
start_timeend_timeuser_idprint_verbose)rt   r   get_langfuse_logger_for_requestr   _old_log_event)rH   r   r   r   r   r   langfuse_logger_to_uses          rC   async_log_success_eventz0LangfusePromptManagement.async_log_success_event   sf     +1::.,
( "1!P!P!%-M+I"

 	--%!JJvt, 	. 	
s   AAc           
        K   |j                  d      }t        j                  | |t              }t	        t
        t           |j                  dd             }|y |j                  ||d |j                  dd       d |d   d|       y w)Nr   r   standard_logging_objectr   	error_strERROR)r   r   r   r   r   status_messagelevelr   )rt   r   r   r   r   r   r   r   )rH   r   r   r   r   r   r   r   s           rC   async_log_failure_eventz0LangfusePromptManagement.async_log_failure_event   s     +1::.,
( "1!P!P!%-M+I"

 #'+,JJ0$7#
 #*--!JJvt,2;? 	. 		
s   BBNNNr   )__name__
__module____qualname__rI   propertyrL   r^   r   PROMPT_CLIENTrR   r   dictr
   r   r   r   r`   rh   r   r	   rp   boolru   r   r}   r   r   r2   rJ   rC   rF   rF   f   sl    !
  >"%>8E>	>
 - $,D> .8I0JJK	
 
	,&3	

 '(
 !	

 
 #4.
 "?
 
	

,22 "?2 
	2"
"
 #4."
 "?	"

 
 "
H
$
rJ   rF   r   )-__doc__r5   	functoolsr   typingr   r   r   r   r   r	   r
   r   packaging.versionr   typing_extensionsr   "litellm.integrations.custom_loggerr   +litellm.integrations.prompt_management_baser   litellm.types.llms.openair   r   litellm.types.utilsr   r   9litellm_core_utils.specialty_caches.dynamic_logging_cacher   prompt_management_baser   r3   r   langfuse_handlerr   r   langfuse.clientr   r   r   __annotations__r   r   rD   rF   r2   rJ   rC   <module>r      s    
  R R R % ' ; N S U : $ -!B'M9'*,<<=MMM!4!6  2	<
 < <~k
~/C\ k
rJ   