
    mhR"                        d Z ddlZddlmZmZ ddl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 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#m$Z$m%Z%  G d de          Z& G d de          Z' G d d          Z( G d de          Z) G d de)          Z* G d de)          Z+ee*e+f         Z,dS )z@private    N)ABCabstractmethod)AnyDictListOptionalTuple	TypedDictUnion)Dataset)DatasetItem)
DatasetRun)DatasetStatus)MapValue)Observation)TraceWithFullDetails)CreateDatasetItemRequest)CreateDatasetRunItemRequest)CreateDatasetRequest)ChatMessagePromptPrompt_ChatPrompt_Textc                       e Zd ZU ee         ed<   ee         ed<   ee         ed<   ee         ed<   ee         ed<   ee         ed<   ee         ed<   dS )	
ModelUsageunitinputoutputtotal
input_costoutput_cost
total_costN)__name__
__module____qualname__r   str__annotations__intfloat     9/usr/local/lib/python3.11/site-packages/langfuse/model.pyr   r   *   s         
3-C=SMC=%   r+   r   c                   $    e Zd ZU eed<   eed<   dS )ChatMessageDictrolecontentN)r#   r$   r%   r&   r'   r*   r+   r,   r.   r.   4   s"         
IIILLLLLr+   r.   c                       e Zd ZdZdZedededee	eeef                  fd            Z
ededee         fd            Zedded	eeeef                  defd
            ZdS )TemplateParserz{{z}}r0   	start_idxreturnc                 L   |                      t          j        |          }|dk    rdS |                      t          j        |          }|dk    rdS | |t	          t          j                  z   |                                         }|||t	          t          j                  z   fS )zHReturns (variable_name, start_pos, end_pos) or None if no variable foundN)findr2   OPENINGCLOSINGlenstrip)r0   r3   	var_startvar_endvariable_names        r,   _parse_next_variablez#TemplateParser._parse_next_variable=   s    
 LL!7CC	??4,,~5yAAb==4N2333g=

%'' 	 y'C8N4O4O*OPPr+   c                     g }d}|t          |           k     rTt                              | |          }|sn6|                    |d                    |d         }|t          |           k     T|S )Nr      )r:   r2   r?   append)r0   namescurr_idxresults       r,   find_variable_namesz"TemplateParser.find_variable_namesO   sv    W%%#88(KKF LL###ayH W%% r+   Ndatac                    || S g }d}|t          |           k     rt                              | |          }|s|                    | |d                     n|\  }}}|                    | ||                    ||v r3|                    ||         t	          ||                   nd           n|                    | ||                    |}|t          |           k     d                    |          S )Nr    )r:   r2   r?   rB   r&   join)r0   rG   result_listrD   rE   r>   r<   r=   s           r,   compile_templatezTemplateParser.compile_template]   s"   <NW%%#88(KKF ""7899#566606-M9gwx	'9:;;;$$""04]0C0OC]+,,,UW    ""79W+<#=>>>H# W%%& ww{###r+   N)r#   r$   r%   r8   r9   staticmethodr&   r(   r   r	   r?   r   rF   r   r   rL   r*   r+   r,   r2   r2   9   s        GGQQ!$Q	%S#&	'Q Q Q \Q" S T#Y    \ $ $# $Xd38n-E $QT $ $ $ \$ $ $r+   r2   c                   J   e Zd ZU eed<   eed<   eeef         ed<   ee         ed<   ee         ed<   e	e         ed<   dde
d	efd
Zedeeee         f         fd            Zeedee         fd                        Zed             Zed             Zedefd            ZdS )BasePromptClientnameversionconfiglabelstagscommit_messageFpromptis_fallbackc                     |j         | _         |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        || _        d S rM   )rQ   rR   rS   rT   rU   rV   rX   )selfrW   rX   s      r,   __init__zBasePromptClient.__init__   sH    K	~mmK	$3&r+   r4   c                     d S rM   r*   rZ   kwargss     r,   compilezBasePromptClient.compile       r+   c                     d S rM   r*   rZ   s    r,   	variableszBasePromptClient.variables   s	     	r+   c                     d S rM   r*   rZ   others     r,   __eq__zBasePromptClient.__eq__   r`   r+   c                     d S rM   r*   rb   s    r,   get_langchain_promptz%BasePromptClient.get_langchain_prompt   r`   r+   r0   c                 .    t          j        dd|           S )Nz{{\s*(\w+)\s*}}z{\g<1>})resubr0   s    r,   _get_langchain_prompt_stringz-BasePromptClient._get_langchain_prompt_string   s    v(*g>>>r+   NF)r#   r$   r%   r&   r'   r(   r   r   r   r   r   boolr[   r   r   r   r_   propertyrc   rg   ri   rN   rn   r*   r+   r,   rP   rP   {   sX        
IIILLLcNI
s)OOOSM!!!' 'v 'D ' ' ' ' 5d;.?)?#@    ^ 49    ^ X   ^   ^ ?c ? ? ? \? ? ?r+   rP   c                   p     e Zd Zd
dedef fdZdefdZede	e         fd            Z
d Zdefd	Z xZS )TextPromptClientFrW   rX   c                 d    t                                          ||           |j        | _        d S rM   superr[   rW   rZ   rW   rX   	__class__s      r,   r[   zTextPromptClient.__init__   s*    ---mr+   r4   c                 B    t                               | j        |          S rM   )r2   rL   rW   r]   s     r,   r_   zTextPromptClient.compile   s    ..t{FCCCr+   c                 @    t                               | j                  S )z5Return all the variable names in the prompt template.)r2   rF   rW   rb   s    r,   rc   zTextPromptClient.variables   s     11$+>>>r+   c                     t          | |j                  r@| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S dS )NF)
isinstancerx   rQ   rR   rW   rS   re   s     r,   rg   zTextPromptClient.__eq__   sc    dEO,, 		UZ' 0LEM10K5</0 K5</	 ur+   c                 ~    |r t                               | j        |          n| j        }|                     |          S )af  Convert Langfuse prompt into string compatible with Langchain PromptTemplate.

        This method adapts the mustache-style double curly braces {{variable}} used in Langfuse
        to the single curly brace {variable} format expected by Langchain.

        kwargs: Optional keyword arguments to precompile the template string. Variables that match
                the provided keyword arguments will be precompiled. Remaining variables must then be
                handled by Langchain's prompt template.

        Returns:
            str: The string that can be plugged into Langchain's PromptTemplate.
        )r2   rL   rW   rn   )rZ   r^   rW   s      r,   ri   z%TextPromptClient.get_langchain_prompt   sC     N++DK@@@ 	 00888r+   ro   )r#   r$   r%   r   rp   r[   r&   r_   rq   r   rc   rg   ri   __classcell__rx   s   @r,   rs   rs      s        $ ${ $ $ $ $ $ $ $D3 D D D D ?49 ? ? ? X?	 	 	9 9 9 9 9 9 9 9 9r+   rs   c                   v     e Zd Zd
dedef fdZdee         fdZe	dee
         fd            Zd Zd	 Z xZS )ChatPromptClientFrW   rX   c                 x    t                                          ||           d |j        D             | _        d S )Nc                 D    g | ]}t          |j        |j                   S )r/   r0   )r.   r/   r0   ).0ps     r,   
<listcomp>z-ChatPromptClient.__init__.<locals>.<listcomp>   s6     
 
 
@AO;;;
 
 
r+   ru   rw   s      r,   r[   zChatPromptClient.__init__   sC    ---
 
EK]
 
 
r+   r4   c                 *    fd| j         D             S )Nc                 |    g | ]8}t          t                              |d                    |d                   9S )r0   r/   )r0   r/   )r.   r2   rL   )r   chat_messager^   s     r,   r   z,ChatPromptClient.compile.<locals>.<listcomp>   sa     
 
 
  &77 +V  "&)	  
 
 
r+   rW   r]   s    `r,   r_   zChatPromptClient.compile   s2    
 
 
 
 !%
 
 
 	
r+   c                 $    d | j         D             S )z:Return all the variable names in the chat prompt template.c                 X    g | ]'}t                               |d                    D ]}|(S rm   )r2   rF   )r   r   variables      r,   r   z.ChatPromptClient.variables.<locals>.<listcomp>   sR     
 
 
*>>|I?VWW
 
  
 
 
 
r+   r   rb   s    r,   rc   zChatPromptClient.variables   s%    
 
 $
 
 
 	
r+   c                     t          | |j                  ra| j        |j        k    oP| j        |j        k    o@t	          d t          | j        |j                  D                       o| j        |j        k    S dS )Nc              3   d   K   | ]+\  }}|d          |d          k    o|d         |d         k    V  ,dS )r/   r0   Nr*   )r   m1m2s      r,   	<genexpr>z*ChatPromptClient.__eq__.<locals>.<genexpr>   sY        B vJ"V*,OI"Y-1O     r+   F)r|   rx   rQ   rR   allziprW   rS   re   s     r,   rg   zChatPromptClient.__eq__   s    dEO,, 			UZ' 0LEM10  "%dk5<"@"@    0 K5</ ur+   c                 .      fd j         D             S )a  Convert Langfuse prompt into string compatible with Langchain ChatPromptTemplate.

        It specifically adapts the mustache-style double curly braces {{variable}} used in Langfuse
        to the single curly brace {variable} format expected by Langchain.

        kwargs: Optional keyword arguments to precompile the template string. Variables that match
                the provided keyword arguments will be precompiled. Remaining variables must then be
                handled by Langchain's prompt template.

        Returns:
            List of messages in the format expected by Langchain's ChatPromptTemplate: (role, content) tuple.
        c           	          g | ]H}|d                               r!t                              |d                   n|d                   fIS r   )rn   r2   rL   )r   msgr^   rZ   s     r,   r   z9ChatPromptClient.get_langchain_prompt.<locals>.<listcomp>  so     

 

 

  F11(N33C	NFKKKY 

 

 

r+   r   r]   s   ``r,   ri   z%ChatPromptClient.get_langchain_prompt   s8    

 

 

 

 

 {

 

 

 
	
r+   ro   )r#   r$   r%   r   rp   r[   r   r.   r_   rq   r&   rc   rg   ri   r~   r   s   @r,   r   r      s        
 
{ 
 
 
 
 
 
 
	
4#8 	
 	
 	
 	
 
49 
 
 
 X
  
 
 
 
 
 
 
r+   r   )-__doc__rk   abcr   r   typingr   r   r   r   r	   r
   r   ,langfuse.api.resources.commons.types.datasetr   1langfuse.api.resources.commons.types.dataset_itemr   0langfuse.api.resources.commons.types.dataset_runr   3langfuse.api.resources.commons.types.dataset_statusr   .langfuse.api.resources.commons.types.map_valuer   0langfuse.api.resources.commons.types.observationr   <langfuse.api.resources.commons.types.trace_with_full_detailsr   Flangfuse.api.resources.dataset_items.types.create_dataset_item_requestr   Nlangfuse.api.resources.dataset_run_items.types.create_dataset_run_item_requestr   <langfuse.api.resources.datasets.types.create_dataset_requestr   langfuse.api.resources.promptsr   r   r   r   r   r.   r2   rP   rs   r   PromptClientr*   r+   r,   <module>r      s    				 # # # # # # # # E E E E E E E E E E E E E E E E E E     
 J I I I I I H G G G G G      D C C C C C H H H H H H     
          
      Y X X X X X X X X X X X                   i   
?$ ?$ ?$ ?$ ?$ ?$ ?$ ?$D$? $? $? $? $?s $? $? $?N+9 +9 +9 +9 +9' +9 +9 +9\@
 @
 @
 @
 @
' @
 @
 @
F %'778r+   