
    Zi@L                         d dl Z d dlZd dlmZmZmZmZmZ d dlm	Z	 d dl
mZ deeef         deeef         fdZdedeeef         fd	Zdefd
Zd Zd Zd ZdefdZdeeef         defdZdee         dededee         deeeef                  dedeeeef                  de	dedef         dedefdZdee         dededee         deeeef                  dedeeeef                  de	dedef         dedefdZdededefdZdS )    N)AnyCallableDictListOptional)URL)Clientkwargsreturnc                 B    i }dD ]}|| v r| |         | |         ||<   |S )z?
    Extracts model parameters from the kwargs dictionary.
    )
temperature
max_tokensmax_completion_tokenstop_pfrequency_penaltypresence_penaltynstopstream	streaming )r
   model_paramsparams      K/root/projects/butler/venv/lib/python3.11/site-packages/posthog/ai/utils.pyget_model_paramsr   
   sC     L 0 0 F??ve}8"(-L    providerc                    |dk    r/| j         j        | j         j        | j         j        | j         j        dS |dk    rSd}d}d}d}t          | j         d          r| j         j        }t          | j         d          r| j         j        }t          | j         d          r+t          | j         j        d          r| j         j        j        }t          | j         d	          r+t          | j         j        d
          r| j         j        j	        }t          | j         d          r| j         j
        }t          | j         d          r| j         j        }t          | j         d          r+t          | j         j        d          r| j         j        j        }||||dS |dk    rOd}d}t          | d          r3| j        r,t          | j        dd          }t          | j        dd          }||ddddS ddddddS )N	anthropic)input_tokensoutput_tokenscache_read_input_tokenscache_creation_input_tokensopenair   r    r!   input_tokens_detailscached_tokensoutput_tokens_detailsreasoning_tokensprompt_tokenscompletion_tokensprompt_tokens_details)r    r!   r"   r(   geminiusage_metadataprompt_token_countcandidates_token_count)r    r!   r"   r#   r(   )usager    r!   r"   r#   hasattrr%   r&   r'   r(   r)   r*   r+   r-   getattr)responser   r&   r    r!   r(   s         r   	get_usager4       sg   ;$N7%^9'/~'M+3>+U	
 
 	
 
X		 8>>22 	7#>6L8>?33 	9$N8M8>#9:: 	NwN/@
 @
 	N %N?MM8>#:;; 	UN02DA
 A
 	U  (~CT 8>?33 	8#>7L8>#677 	=$N<M8>#:;; 	ON0/A
 A
 	O %N@NM )*'4 0	
 
 	
 
X		8-.. 	83J 	"8#:<PRSTTL#')A1 M
 )*'(+, !
 
 	
 #$'(  r   c                     g }| |S |dk    rt          |           S |dk    rt          |           S |dk    rt          |           S |S )z4
    Format a regular (non-streaming) response.
    Nr   r$   r,   )format_response_anthropicformat_response_openaiformat_response_gemini)r3   r   outputs      r   format_responser:   f   sd     F;(222	X		%h///	X		%h///Mr   c                 f    g }| j         D ]&}|j        r|                    d|j        d           '|S )N	assistantrolecontent)r?   textappend)r3   r9   choices      r   r6   r6   v   sS    F"  ; 	MM'%{    Mr   c                    g }t          | d          rY| j        D ]Q}t          |d          r?|j        r8|j        j        r,|                    |j        j        |j        j        d           Rt          | d          rA| j        D ]8}|j        dk    r)t          |d          rt          |j        t                    r|j        D ]}t          |d          r>|j        dk    r3t          |d          r#|                    |j
        |j        d           Pt          |d          r#|                    |j
        |j        d           t          |d          r@|j        d	k    r5t          |d
          r%|                    d|j        d|j        d           Ԑ|                    |j        |j        d           :|S )Nchoicesmessage)r?   r>   r9   r?   typeoutput_textr@   input_image	image_urlimage)rF   rJ   )r1   rD   rE   r?   rA   r>   r9   rF   
isinstancelistr@   rI   )r3   r9   rB   itemcontent_items        r   r7   r7      sB   Fx## 	& 	 	Fvy)) fn AW #)>#9 & 3    x"" ,O +	 +	DyI%%4++ (
4<0N0N ((,    #L&99 , 1] B B 'f = = !C #MM/;/@,0I!" !"    %\6:: "MM/;/@,0I!" !"    $L&99 , 1] B B 'k B B !C #MM 181=1G0& 0& -1I!" !"  1 D MM'+|$(I    Mr   c                 (   g }t          | d          r| j        r| j        D ]}t          |d          ru|j        rnd}t          |j        d          r<|j        j        r0|j        j        D ]#}t          |d          r|j        r
||j        z  }$|r|                    d|d           t          |d          r$|j        r|                    d|j        d           n4t          | d          r$| j        r|                    d| j        d           |S )N
candidatesr?    partsr@   r<   r=   )r1   rP   r?   rR   r@   rA   )r3   r9   	candidatecontent_textparts        r   r8   r8      s{   Fx&& 
8+> 
!, 	 	Iy),, 1B !9,g66 69;L;R 6 ) 1 7 6 6"400 6TY 6(DI5L MM$/'3    F++ 	  +#,>   	* 
6	"	" 
x} 
##= 	
 	
 	
 Mr   c                 
   |dk    r7t          | d          r&| j        rt          | j                  dk    r| j        S n|dk    rt          | d          r| j        rt          | j        d         d          rNt          | j        d         j        d          r.| j        d         j        j        r| j        d         j        j        S t          | j        d         d          r$| j        d         j        r| j        d         j        S d S )Nr   toolsr   r$   rD   rE   
tool_calls)r1   rW   lenrD   rE   rX   )r3   r   s     r   format_tool_callsrZ      s   ;8W%% 	"(. 	"S=P=PST=T=T>!	X		8Y'' 	6H,< 	6 (+Y77>H,Q/7FF> $Q'/:>
  '*2== (+\::6$Q'26  '*554r   c                    g }|dk    rJ|                      d          pg }|                      d          |S d|                      d          dg|z   S |dk    r|                      dg           }t          |t                    rd|dgS t          |t                    rg }|D ]}t          |t                    r|                    d|d           0t          |d          r|                    d|j        d           ^|                    dt          |          d           |S dt          |          dgS |                      d          #t          |                      dg                     }|                      d	          X|                      d	          }t          |t                    r|                    |           n|                    d|d           |                      d          7t          d
 |D                       }|sd|                      d          dg|z   }|                      d          t          d t          |          D             d           }|@||                              dd          }	|	 d|                      d           ||         d<   nd|                      d          dg|z   }|S )Nr   messagessystemr=   r,   contentsuserr@   inputc              3   H   K   | ]}|                     d           dk    V  dS r>   r]   Nget).0msgs     r   	<genexpr>z&merge_system_prompt.<locals>.<genexpr>  s1      IIH4IIIIIIr   instructionsc              3   R   K   | ]"\  }}|                     d           dk    |V  #dS rb   rc   )re   irf   s      r   rg   z&merge_system_prompt.<locals>.<genexpr>'  s:      PP61cCGGFOOx4O4OQ4O4O4O4OPPr   r?   rQ   z

)rd   rK   strrL   rA   r1   r@   extendanynext	enumerate)
r
   r   r\   r^   	formattedrM   
input_data
has_system
system_idxsystem_contents
             r   merge_system_promptru      s!   %'H;::j))/R::h'O!fjj.B.BCCDxOO	X		::j"--h$$ 	@#99::$'' 	@I  M MdC(( M$$f%F%FGGGGT6** M$$f%K%KLLLL$$fT%K%KLLLL#H>>?? zz*)

:r2233zz'&ZZ((
j$'' 	EOOJ''''OOV
CCDDD zz('IIIIIII
 	X!)fjj6J6JKKLxWH zz.!!-PPYx00PPPRV
 

 !%j155iDDN!CCvzz.'A'ACC Z ++ "fjj.H.HIIH Or   posthog_distinct_id	ph_clientposthog_trace_idposthog_propertiesposthog_privacy_modeposthog_groupsbase_urlcall_method.c	                 l   t          j                     }
d}d}d}i }i }	  |di |	}nA# t          $ r4}|}t          |dd          }d|                                d}Y d}~nd}~ww xY wt          j                     }||
z
  }| t	          t          j                              }|r6t          |d          s|dk    r t          |d	          rt          ||          }t          |	|          }||	
                    d
          t          |	          t          |||          t          ||t          ||                    ||
                    dd          |
                    dd          ||t	          |          d|pi |pi }t          ||          }|rt          |||          |d<   |
                    d          3|
                    dd          dk    r|
                    dd          |d<   |
                    d          3|
                    dd          dk    r|
                    dd          |d<   |
                    d          3|
                    dd          dk    r|
                    dd          |d<   | d|d<   |dk    r<|	
                    d          't          |||	
                    d                    |d<   t          |d          r/t          |j                  r|                    | p|d||           n# t          j                     }||
z
  }| t	          t          j                              }|r6t          |d          s|dk    r t          |d	          rt          ||          }t          |	|          }||	
                    d
          t          |	          t          |||          t          ||t          ||                    ||
                    dd          |
                    dd          ||t	          |          d|pi |pi }t          ||          }|rt          |||          |d<   |
                    d          3|
                    dd          dk    r|
                    dd          |d<   |
                    d          3|
                    dd          dk    r|
                    dd          |d<   |
                    d          3|
                    dd          dk    r|
                    dd          |d<   | d|d<   |dk    r<|	
                    d          't          |||	
                    d                    |d<   t          |d          r0t          |j                  r|                    | p|d||           w w w xY w|r||S )z
    Common usage-tracking logic for both sync and async calls.
    call_method: the llm call method (e.g. openai.chat.completions.create)
    N   status_coder   Tz$ai_is_errorz	$ai_errorr0   r,   r-   modelr    r!   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_url	$ai_toolsr"   $ai_cache_read_input_tokensr#   $ai_cache_creation_input_tokensr(   z$ai_reasoning_tokensF$process_person_profiler$   rh   $ai_instructionscapture$ai_generationdistinct_idevent
propertiesgroupsr   time	Exceptionr2   __str__rk   uuiduuid4r1   r4   ru   rd   r   with_privacy_moder:   rZ   callabler   )rv   rw   r   rx   ry   rz   r{   r|   r}   r
   
start_timer3   errorhttp_statusr0   error_paramsexcend_timelatencyr\   event_propertiesrX   s                         r   call_llm_and_track_usager   9  s     JHEKE#%LX;(((( 
 
 

 
 !
 

 9;;Z'#"4:<<00 	2Hg&&	2H$$;K)L)L$h11E&vx88 %G,,$4V$<$<*96JHUU"3/81T1T# #  + %		.! < <!&?A!>!>",MM
 
 "'R
 !r
$ 'x::
 	,=/- -[)
 II/00<		3Q77!;;>Cii)1? ?:;
 II344@		7;;a??BG))-qC C>?
 II())5		,a001447<yyASUV7W7W34&:?67 xFJJ~$>$>$J3D/N1K1K4 4/0
 9i(( 	Xi6G-H-H 	/C3C&+%	    O 9;;Z'#"4:<<00 	2Hg&&	2H$$;K)L)L$h11E&vx88 %G,,$4V$<$<*96JHUU"3/81T1T# #  + %		.! < <!&?A!>!>",MM
 
 "'R
 !r
$ 'x::
 	,=/- -[)
 II/00<		3Q77!;;>Cii)1? ?:;
 II344@		7;;a??BG))-qC C>?
 II())5		,a001447<yyASUV7W7W34&:?67 xFJJ~$>$>$J3D/N1K1K4 4/0
 9i(( 	Xi6G-H-H 	/C3C&+%	     	 	  Os,   ( L
 
A&*A!L
 !A&&L
 
J#V-call_async_methodc	                 \
  K   t          j                     }
d }d }d}i }i }	  |di |	 d {V }nA# t          $ r4}|}t          |dd          }d|                                d}Y d }~nd }~ww xY wt          j                     }||
z
  }| t	          t          j                              }|r6t          |d          s|dk    r t          |d          rt          ||          }t          |	|          }||	
                    d	          t          |	          t          |||          t          ||t          ||                    ||
                    d
d          |
                    dd          ||t	          |          d|pi |pi }t          ||          }|rt          |||          |d<   |
                    d          3|
                    dd          dk    r|
                    dd          |d<   |
                    d          3|
                    dd          dk    r|
                    dd          |d<   | d|d<   |dk    r<|	
                    d          't          |||	
                    d                    |d<   t          |d          r/t          |j                  r|                    | p|d||           n^# t          j                     }||
z
  }| t	          t          j                              }|r6t          |d          s|dk    r t          |d          rt          ||          }t          |	|          }||	
                    d	          t          |	          t          |||          t          ||t          ||                    ||
                    d
d          |
                    dd          ||t	          |          d|pi |pi }t          ||          }|rt          |||          |d<   |
                    d          3|
                    dd          dk    r|
                    dd          |d<   |
                    d          3|
                    dd          dk    r|
                    dd          |d<   | d|d<   |dk    r<|	
                    d          't          |||	
                    d                    |d<   t          |d          r0t          |j                  r|                    | p|d||           w w w xY w|r||S )Nr   r   r   Tr   r0   r,   r-   r   r    r!   r   r   r"   r   r#   r   Fr   r$   rh   r   r   r   r   r   r   )rv   rw   r   rx   ry   rz   r{   r|   r   r
   r   r3   r   r   r0   r   r   r   r   r\   r   rX   s                         r   call_llm_and_track_usage_asyncr     sU      JHEKE#%LR**44V44444444 
 
 

 
 !
 

 9;;Z'#"4:<<00 	2Hg&&	2H$$;K)L)L$h11E&vx88 %G,,$4V$<$<*96JHUU"3/81T1T# #  + %		.! < <!&?A!>!>",MM
 
 "'R
 !r
$ 'x::
 	,=/- -[)
 II/00<		3Q77!;;>Cii)1? ?:;
 II344@		7;;a??BG))-qC C>? &:?67 xFJJ~$>$>$J3D/N1K1K4 4/0
 9i(( 	Xi6G-H-H 	/C3C&+%	    C 9;;Z'#"4:<<00 	2Hg&&	2H$$;K)L)L$h11E&vx88 %G,,$4V$<$<*96JHUU"3/81T1T# #  + %		.! < <!&?A!>!>",MM
 
 "'R
 !r
$ 'x::
 	,=/- -[)
 II/00<		3Q77!;;>Cii)1? ?:;
 II344@		7;;a??BG))-qC C>? &:?67 xFJJ~$>$>$J3D/N1K1K4 4/0
 9i(( 	Xi6G-H-H 	/C3C&+%	     	 	  Os,   0 K
 
A.*A)$K
 )A..K
 
IT%privacy_modevaluec                     | j         s|rd S |S )N)r   )rw   r   r   s      r   r   r     s      tLr   )r   r   typingr   r   r   r   r   httpxr   posthog.clientr	   PostHogClientrk   r   r4   r:   r6   r7   r8   rZ   ru   boolr   r   r   r   r   r   <module>r      s     6 6 6 6 6 6 6 6 6 6 6 6 6 6       2 2 2 2 2 2T#s(^ S#X    ,C# C$sCx. C C C CL     
 
 
: : :z  D#    0<S#X <# < < < <~t!#tt t sm	t
 !c3h0t t T#s(^,t t #s(#t t 	t t t tnj!#jj j sm	j
 !c3h0j j T#s(^,j j  S)j j 	j j j jZ d 3      r   