
    iu4                        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r#d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!       Z2 ed      	 	 	 	 	 dde/fd       Z3 G d de%e#e      Z4y)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                 F   	 ddl }ddl m} |xs |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}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)
public_key
secret_keyhostreleasedebugflush_intervalz2.6.0litellmsdk_integration )langfuser   	Exceptionosgetenv
startswithr   _get_langfuse_flush_intervalr   version__version__)langfuse_public_keylangfuse_secretlangfuse_secret_keylangfuse_hostr2   r6   r   er.   r-   langfuse_releaselangfuse_debug
parametersclients                 /Users/manta/Documents/Projects/TheRoad-I1/.venv/lib/python3.12/site-packages/litellm/integrations/langfuse/langfuse_prompt_management.pylangfuse_client_initrH   *   s:   .
% 	R.R"))<Q2R  %H		2G(HJ! RYY5&M
 	  +}/G/G
/S "M1yy!34YY/0N ! #(EE
	J x++,0@@(1
$%#
#FMQ  
defdggpq
 	

s   
D 	D DD c                       e Zd Z	 	 	 	 d$dZed        Z	 	 d%dededee   de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&d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Zdee   dee   dedefdZ	 	 d%dee   dee   dee   dedee   dee	   defdZ	 	 	 d'dee   dee   dedee   dee   dee	   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?   rA   r2   )r6   r<   r=   langfuse_sdk_versionrH   r   )selfr>   r?   rA   r2   r6   s         rG   __init__z!LangfusePromptManagement.__init__p   s3     	$,$4$4$@$@!, 3+')	
    c                      y)Nr6   r5   )rM   s    rG   integration_namez)LangfusePromptManagement.integration_name   s    rO   langfuse_prompt_idlangfuse_clientprompt_labelprompt_versionr&   c                 .    |j                  |||      }|S )N)labelr<   )
get_prompt)rM   rR   rS   rT   rU   prompt_clients         rG   _get_prompt_from_idz,LangfusePromptManagement._get_prompt_from_id   s(     (22lN 3 
 rO   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contentr5   )compile
isinstancestrr   r   r   r   )rM   r[   r\   r]   compiled_prompts        rG   _compile_promptz(LangfusePromptManagement._compile_prompt   si     7;$,(*%8088U;TUos++?SO  #4(8#9?KOrO   c                 h    |j                   }i }|j                         D ]  \  }}|dk7  s|||<    |S )Nmodel)configitems)rM   r[   rk   optional_paramskvs         rG   "_get_optional_params_from_langfusez;LangfusePromptManagement._get_optional_params_from_langfuse   sA     (..LLNDAqG|%&" # rO   rj   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)rw   rT   rU   ry   rz   )get_chat_completion_prompt)rM   rj   rq   rr   rs   rt   ru   rv   rw   rx   rT   rU   ry   rz   s                 rG    async_get_chat_completion_promptz9LangfusePromptManagement.async_get_chat_completion_prompt   sA       ..##%)(C2W / 
 	
s   c                     |yt        |j                  d      |j                  d      |j                  d      |j                  d            }| j                  ||      }|d uS )NFr>   r?   r@   rA   r>   r?   r@   rA   )rR   rS   )rH   getrZ   )rM   rs   rw   ru   rS   r[   s         rG   should_run_prompt_managementz5LangfusePromptManagement.should_run_prompt_management   s}     . 7 ; ;<Q R3778IJ 7 ; ;<Q R155oF	
 "&!9!9(+ ": "
 &T11rO   c                 |   |t        d      t        |j                  d      |j                  d      |j                  d      |j                  d            }| j                  ||||      }| j	                  ||d	      }	|j
                  j                  d
      }
| j                  |      }t        ||	|
|d       S )Nz4prompt_id is required for Langfuse prompt managementr>   r?   r@   rA   r   )rR   rS   rT   rU   r^   )r[   r\   r]   rj   )rs   prompt_templateprompt_template_modelprompt_template_optional_paramscompleted_messages)
ValueErrorrH   r   rZ   rh   rk   rp   r   )rM   rs   rw   rt   ru   rT   rU   rS   r[   rg   template_modeltemplate_optional_paramss               rG   _compile_prompt_helperz/LangfusePromptManagement._compile_prompt_helper   s     STT. 7 ; ;<Q R3778IJ 7 ; ;<Q R155oF	
 "&!9!9(+%)	 ": "
 ..#9&6" / 
 066::7C#'#J#J"$
  &+"0,D#
 	
rO   c                 8   K   | j                  ||||||      S w)N)rs   rt   ru   rw   rT   rU   )r   )rM   rs   rt   ru   rw   rT   rU   s          rG   async_compile_prompt_helperz4LangfusePromptManagement.async_compile_prompt_helper  s2      **-$;#%) + 
 	
s   c                 4    t        | j                  ||||      S N)r   async_log_success_eventrM   kwargsresponse_obj
start_timeend_times        rG   log_success_eventz*LangfusePromptManagement.log_success_event$       !((&,
H
 	
rO   c                 4    t        | j                  ||||      S r   )r   async_log_failure_eventr   s        rG   log_failure_eventz*LangfusePromptManagement.log_failure_event)  r   rO   c           
      J  K   	 |j                  d      }t        j                  | |t              }|j	                  |||||j                  dd              y # t
        $ r?}ddlm} |j                  dt        |              | j                  d	       Y d }~y d }~ww xY ww)
N standard_callback_dynamic_paramsglobalLangfuseLoggerr   in_memory_dynamic_logger_cacheuser)r   r   r   r   user_idr   verbose_loggerzGLangfuse Layer Error - Exception occurred while logging success event: r6   callback_name)r   r   get_langfuse_logger_for_requestr   log_event_on_langfuser7   litellm._loggingr   	exceptionrf   handle_callback_failure)	rM   r   r   r   r   r   langfuse_logger_to_userB   r   s	            rG   r   z0LangfusePromptManagement.async_log_success_event.  s     	C/5zz20, &5%T%T%)1Q/M&"
 #88)%!

640 9   	C7$$YZ]^_Z`Yab ((z(BB	Cs/   B#AA B#	B !5BB#B  B#c           	        K   	 |j                  d      }t        j                  | |t              }t	        t
        t           |j                  dd             }t        |j                  dd            }||j                  dd       xs |}|j                  ||d |j                  dd       |d|	       y # t        $ r?}	d
dl
m}
 |
j                  dt        |	              | 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   zGLangfuse Layer Error - Exception occurred while logging failure event: r6   r   )r   r   r   r   r   r	   r   rf   r   r7   r   r   r   r   )rM   r   r   r   r   r   r   r   r   rB   r   s              rG   r   z0LangfusePromptManagement.async_log_failure_eventG  s    !	C/5zz20, &5%T%T%)1Q/M&"
 '+/0

4d;'# !K!IJN&2+//TBTn  #88%!!

640- 9   	C7$$YZ]^_Z`Yab ((z(BB	Cs/   C?B/B4 3C?4	C<=5C72C?7C<<C?)NNNr   )NN)NNNNFF)NNN)"__name__
__module____qualname__rN   propertyrQ   rf   r#   r	   intPROMPT_CLIENTrZ   dictr   r   r   r   rh   rp   r   LiteLLMLoggingObjr   r   boolr
   r}   r   r   r   r   r   r   r   r   r5   rO   rG   rJ   rJ   o   s    !
"   '+(, ' sm	
 ! 
 - $,D> .8I0JJK	
 
	,&3	& -1&*&*(,6;@E

 '(
 !	

 C=
 #4.
 "?
 /
 j)
 T
#
 sm
 !
 &.d^
 08~
 
sD)*D1	2
<2C=2 j)2 "?	2
 
24 '+(,,
C=,
 j),
 #4.	,

 "?,
 sm,
 !,
 
 ,
f -1&*(,
C=
 #4.
 "?	

 j)
 sm
 !
 
 
$



C2"CrO   rJ   )NNNNr   )5__doc__r8   	functoolsr   typingr   r   r   r   r   r	   r
   r   r   packaging.versionr   typing_extensionsr   "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   r6   r   langfuse_handlerr   r   langfuse.clientr    r!   *litellm.litellm_core_utils.litellm_loggingr"   r   r#   __annotations__r   r   rH   rJ   r5   rO   rG   <module>r      s    
  X X X % ' ; N B S 9 U : $ -!BW'M9'*,<<=MMM!4!6  2A A AHzC~/C\ zCrO   