
    g                         	 d dl Z d dlmZ d dlZd dlZd dlmZm	Z	m
Z
 d dlmZmZmZmZ d dlmZ  G d de j&                        Z G d	 d
e      Zy# e$ r	  ed      w xY w)    N)MessageszMPlease install the Anthropic SDK to use this feature: 'pip install anthropic')AnyDictOptional)call_llm_and_track_usageget_model_paramsmerge_system_promptwith_privacy_mode)Clientc                   4     e Zd ZU dZeed<   def fdZ xZS )	Anthropiczb
    A wrapper around the Anthropic SDK that automatically sends LLM usage events to PostHog.
    
_ph_clientposthog_clientc                 R    t        |   di | || _        t        |       | _        y)z
        Args:
            posthog_client: PostHog client for tracking usage
            **kwargs: Additional arguments passed to the Anthropic client
        N )super__init__r   WrappedMessagesmessages)selfr   kwargs	__class__s      S/var/www/openai/venv/lib/python3.12/site-packages/posthog/ai/anthropic/anthropic.pyr   zAnthropic.__init__   s(     	"6"('-    )__name__
__module____qualname____doc__PostHogClient__annotations__r   __classcell__r   s   @r   r   r      s!     .} . .r   r   c                       e Zd ZU eed<   	 	 	 	 	 ddee   dee   deeeef      de	deeeef      def fdZ
	 	 	 	 	 ddee   dee   deeeef      de	deeeef      defd	Zdee   dee   deeeef      de	deeeef      def fd
Zdee   dee   deeeef      de	deeeef      deeef   deeef   dedefdZ xZS )r   _clientposthog_distinct_idposthog_trace_idposthog_propertiesposthog_privacy_modeposthog_groupsr   c                 
   |t        j                         }|j                  dd      r | j                  |||||fi |S t	        || j
                  j                  d||||| j
                  j                  t        | $  f	i |S )a8  
        Create a message using Anthropic's API while tracking usage in PostHog.

        Args:
            posthog_distinct_id: Optional ID to associate with the usage event
            posthog_trace_id: Optional trace UUID for linking events
            posthog_properties: Optional dictionary of extra properties to include in the event
            posthog_privacy_mode: Whether to redact sensitive information in tracking
            posthog_groups: Optional group analytics properties
            **kwargs: Arguments passed to Anthropic's messages.create
        streamF	anthropic)
uuiduuid4get_create_streamingr   r$   r   base_urlr   create)r   r%   r&   r'   r(   r)   r   r   s          r   r2   zWrappedMessages.create$   s    ( ##zz|::h&)4))# "$   (LL## LL!!GN
 
 	
r   c                 \    |t        j                         } | j                  |||||fi |S )N)r-   r.   r0   )r   r%   r&   r'   r(   r)   r   s          r   r+   zWrappedMessages.streamR   sD     ##zz|%t%% 
 
 	
r   c                     	
 t        j                          
dddg t           di 		 
fd} |       S )Nr   input_tokensoutput_tokensc               3   *  K   	 D ]w  } t        | d      r2| j                  r&dD ci c]  }|t        | j                  |d       c}t        | d      r'| j                  rj	                  | j                         |  y 	 t        j
                         }|z
  }dj                        }j                  
	||	       y c c}w # t        j
                         }|z
  }dj                        }j                  
	||	       w xY ww)Nusager5   r   content )hasattrr9   getattrr:   appendtimejoin_capture_streaming_event)eventkend_timelatencyoutputaccumulated_contentr   r%   r)   r(   r'   r&   responser   
start_timeusage_statss        r   	generatorz4WrappedMessages._create_streaming.<locals>.generatoru   s(    %Eug.5;;&'& wu{{Aq99&' ui0U]]+225==AK &   99;"Z/!45--'$&("
%'  99;"Z/!45--'$&("
s/   D!C C<C ADC ADDr   )r?   r   r2   )r   r%   r&   r'   r(   r)   r   rK   rG   rH   rI   rJ   r   s   ``````` @@@@r   r0   z!WrappedMessages._create_streamingg   sG     YY[
781&M 7>+F+"	 "	H {r   rJ   rE   rF   c
                 D   |t        j                         }d|j                  d      t        |      t	        | j
                  j                  |t        |d            t	        | j
                  j                  ||	ddg      d|j                  dd      |j                  dd      ||t        | j
                  j                        d	|xs i }
|d
|
d<   t        | j
                  j                  d      r.| j
                  j                  j                  |xs |d|
|       y y )Nr,   model	assistant)r:   role   r6   r   r7   )z$ai_providerz	$ai_modelz$ai_model_parametersz	$ai_inputz$ai_output_choicesz$ai_http_statusz$ai_input_tokensz$ai_output_tokensz$ai_latencyz$ai_trace_idz$ai_base_urlFz$process_person_profilecapturez$ai_generation)distinct_idrB   
propertiesgroups)r-   r.   r/   r   r
   r$   r   r	   strr1   r<   rQ   )r   r%   r&   r'   r(   r)   r   rJ   rE   rF   event_propertiess              r   rA   z(WrappedMessages._capture_streaming_event   s"    ##zz| (G,$4V$<*''$#FK8
 #4''$#[9:#
  # + B!,!!D", 5 56'
( "'R)
. &:?674<<**I6LL##++/C3C&+%	 ,  7r   )NNNFN)r   r   r   r   r    r   rU   r   r   boolr2   r+   r0   intfloatrA   r!   r"   s   @r   r   r   !   s    .2*.7;%*37,
%c],
 #3-,
 %T#s(^4	,

 #,
 !c3h0,
 ,
` .2*.7;%*37
%c]
 #3-
 %T#s(^4	

 #
 !c3h0
 
*2%c]2 #3-2 %T#s(^4	2
 #2 !c3h02 2h/%c]/ #3-/ %T#s(^4	/
 #/ !c3h0/ S#X/ #s(^/ / /r   r   )r,   anthropic.resourcesr   ImportErrorModuleNotFoundErrorr?   r-   typingr   r   r   posthog.ai.utilsr   r   r	   r
   posthog.clientr   r   r   r   r   r   r   <module>r`      sg   o,   & & o o 2.	## .$ih i;  o
m
nnos   
A A