
    Ki@L                        S SK r S SKrS SKJrJrJrJrJr  S SKJ	r	  S SK
Jr  S\\\4   S\\\4   4S jrS\S\\\4   4S	 jrS\4S
 jrS rS rS rS\4S jrS\\\4   S\4S jrS\\   S\S\S\\   S\\\\4      S\S\\\\4      S\	S\S\4   S\S\4S jrS\\   S\S\S\\   S\\\\4      S\S\\\\4      S\	S\S\4   S\S\4S jrS\S\S\4S jrg)    N)AnyCallableDictListOptional)URL)Clientkwargsreturnc                 D    0 nS H  nX ;   d  M
  X   c  M  X   X'   M     U$ )z7
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      R/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/posthog/ai/utils.pyget_model_paramsr   
   s5     L ?v}8"(-L     providerc                    US:X  aW  U R                   R                  U R                   R                  U R                   R                  U R                   R                  S.$ US:X  Ga  SnSnSnSn[        U R                   S5      (       a  U R                   R                  n[        U R                   S5      (       a  U R                   R                  n[        U R                   S5      (       aE  [        U R                   R                  S5      (       a   U R                   R                  R                  n[        U R                   S	5      (       aE  [        U R                   R                  S
5      (       a   U R                   R                  R                  n[        U R                   S5      (       a  U R                   R                  n[        U R                   S5      (       a  U R                   R                  n[        U R                   S5      (       aE  [        U R                   R                  S5      (       a   U R                   R                  R                  nUUUUS.$ US:X  a\  SnSn[        U S5      (       a?  U R                  (       a.  [        U R                  SS5      n[        U R                  SS5      nUUSSSS.$ SSSSS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       sf   ;$NN77%^^99'/~~'M'M+3>>+U+U	
 	
 
X	 8>>>22#>>66L8>>?33$NN88M8>>#9::wNN//@
 @
 %NN??MMM8>>#:;;NN002DA
 A
  (~~CCTT 8>>?33#>>77L8>>#677$NN<<M8>>#:;;NN00/A
 A
 %NN@@NNM )*'4 0	
 	
 
X	8-..83J3J"8#:#:<PRSTL#'')A1M
 )*'(+, !
 	
 #$'( r   c                 z    / nU c  U$ US:X  a  [        U 5      $ US:X  a  [        U 5      $ US:X  a  [        U 5      $ U$ )z,
Format a regular (non-streaming) response.
r   r$   r,   )format_response_anthropicformat_response_openaiformat_response_gemini)r3   r   outputs      r   format_responser:   f   sR     F;(22	X	%h//	X	%h//Mr   c                     / nU R                    H4  nUR                  (       d  M  UR                  SUR                  S.5        M6     U$ )N	assistantrolecontent)r?   textappend)r3   r9   choices      r   r6   r6   v   sB    F"";;;MM'%{{ # Mr   c                    / n[        U S5      (       a  U R                   H  n[        US5      (       d  M  UR                  (       d  M)  UR                  R                  (       d  MF  UR	                  UR                  R                  UR                  R
                  S.5        M     [        U S5      (       Ga  U R                   GH  nUR                  S:X  d  M  [        US5      (       Ga0  [        UR                  [        5      (       Ga  UR                   H  n[        US5      (       aK  UR                  S:X  a;  [        US5      (       a*  UR	                  UR                  UR
                  S.5        M_  [        US5      (       a*  UR	                  UR                  UR
                  S.5        M  [        US5      (       d  M  UR                  S	:X  d  M  [        US
5      (       d  M  UR	                  SUR                  S.UR
                  S.5        M     GMX  UR	                  UR                  UR
                  S.5        GM     U$ )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      s   Fx##&&Fvy))fnnnAWAWAW#)>>#9#9 & 3 3 ' x""OODyyI%4++
4<<0N0N(,#L&99 , 1 1] B 'f = ="MM/;/@/@,0II!" %\6::"MM/;/@/@,0II!" $L&99 , 1 1] B 'k B B"MM 181=1G1G0& -1II!"1 )5D MM'+||$(IIM $X Mr   c                    / n[        U S5      (       Ga7  U R                  (       Ga%  U R                   GH  n[        US5      (       a  UR                  (       a  Sn[        UR                  S5      (       al  UR                  R                  (       aQ  UR                  R                   H7  n[        US5      (       d  M  UR                  (       d  M)  X4R                  -  nM9     U(       a  UR                  SUS.5        M  M  [        US5      (       d  M  UR                  (       d  M  UR                  SUR                  S.5        GM     U$ [        U S5      (       a/  U R                  (       a  UR                  SU R                  S.5        U$ )N
candidatesr?    partsr@   r<   r=   )r1   rP   r?   rR   r@   rA   )r3   r9   	candidatecontent_textparts        r   r8   r8      s2   Fx&&8+>+>+>!,,Iy),,1B1B!9,,g669;L;L;R;R ) 1 1 7 7"400TYYY(II5L !8  MM$/'3   F++	 +#,>> -8 M 
6	"	"x}}##==	
 Mr   c                    US:X  aH  [        U S5      (       a6  U R                  (       a%  [        U R                  5      S:  a  U R                  $ g US:X  Ga  [        U S5      (       a  U R                  (       a  [        U R                  S   S5      (       as  [        U R                  S   R                  S5      (       aK  U R                  S   R                  R
                  (       a#  U R                  S   R                  R
                  $ [        U R                  S   S5      (       a7  U R                  S   R
                  (       a  U R                  S   R
                  $ g )Nr   toolsr   r$   rD   rE   
tool_calls)r1   rW   lenrD   rE   rX   )r3   r   s     r   format_tool_callsrZ      s   ;8W%%(..S=PST=T>>!$ # 
X	8Y''H,<,< ((+Y77H,,Q/77FF$$Q'//::''*22=== ((+\::$$Q'22''*555r   c                    / nUS:X  aF  U R                  S5      =(       d    / nU R                  S5      c  U$ SU R                  S5      S./U-   $ US:X  a  U R                  S/ 5      n[        U[        5      (       a  SUS./$ [        U[        5      (       a  / nU H|  n[        U[        5      (       a  UR	                  SUS.5        M.  [        US5      (       a   UR	                  SUR                  S.5        M_  UR	                  S[        U5      S.5        M~     U$ S[        U5      S./$ U R                  S5      b  [        U R                  S/ 5      5      nU R                  S	5      bL  U R                  S	5      n[        U[        5      (       a  UR                  U5        OUR	                  SUS.5        U R                  S5      b1  [        S
 U 5       5      nU(       d  SU R                  S5      S./U-   nU R                  S5      bh  [        S [        U5       5       S 5      nUb1  X(   R                  SS5      n	U	 SU R                  S5       3X(   S'   U$ SU R                  S5      S./U-   nU$ )Nr   messagessystemr=   r,   contentsuserr@   inputc              3   H   #    U  H  oR                  S 5      S:H  v   M     g7fr>   r]   Nget).0msgs     r   	<genexpr>&merge_system_prompt.<locals>.<genexpr>  s     IH4s    "instructionsc              3   X   #    U  H   u  pUR                  S 5      S:X  d  M  Uv   M"     g7frb   rc   )re   irf   s      r   rg   rh   '  s%     P061CGGFOx4OQQ0s   *	*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_promptrv      s`   %'H;::j)/R::h'O!fjj.BCDxOO	X	::j"-h$$#9::$''I dC(($$f%FGT6**$$f%KL$$fT%KL ! #H>?? zz*)

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

 !%155iDN!"$vzz.'A&BC  + O "fjj.HIH Or   posthog_distinct_id	ph_clientposthog_trace_idposthog_propertiesposthog_privacy_modeposthog_groupsbase_urlcall_method.c	                 b
   [         R                   " 5       n
SnSnSn0 n0 n U" S0 U	D6n[         R                   " 5       nUU
-
  nUc  [	        [
        R                  " 5       5      nU(       a3  [        US5      (       d  US:X  a  [        US	5      (       a  [        X5      n[        X5      nUU	R                  S
5      [        U	5      [        XU5      [        X[        X5      5      UUR                  SS5      UR                  SS5      UU[	        U5      S.U=(       d    0 EU=(       d    0 En[        X5      nU(       a  [        XU5      US'   UR                  S5      b+  UR                  SS5      S:  a  UR                  SS5      US'   UR                  S5      b+  UR                  SS5      S:  a  UR                  SS5      US'   UR                  S5      b+  UR                  SS5      S:  a  UR                  SS5      US'   U c  SUS'   US:X  a0  U	R                  S5      b  [        XU	R                  S5      5      US'   [        US5      (       a5  [        UR                   5      (       a  UR!                  U =(       d    USUUS9  U(       a  UeU$ ! [         a-  nUn[        USS5      nSUR                  5       S.n SnAGNSnAff = f! [         R                   " 5       nUU
-
  nUc  [	        [
        R                  " 5       5      nU(       a3  [        US5      (       d  US:X  a  [        US	5      (       a  [        X5      n[        X5      nUU	R                  S
5      [        U	5      [        XU5      [        X[        X5      5      UUR                  SS5      UR                  SS5      UU[	        U5      S.U=(       d    0 EU=(       d    0 En[        X5      nU(       a  [        XU5      US'   UR                  S5      b+  UR                  SS5      S:  a  UR                  SS5      US'   UR                  S5      b+  UR                  SS5      S:  a  UR                  SS5      US'   UR                  S5      b+  UR                  SS5      S:  a  UR                  SS5      US'   U c  SUS'   US:X  a0  U	R                  S5      b  [        XU	R                  S5      5      US'   [        US5      (       a7  [        UR                   5      (       a  UR!                  U =(       d    USUUS9  f f f = f)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$   ri   $ai_instructionscapture$ai_generationdistinct_idevent
propertiesgroupsr   time	Exceptionr2   __str__rl   uuiduuid4r1   r4   rv   rd   r   with_privacy_moder:   rZ   callabler   )rw   rx   r   ry   rz   r{   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  sT     JHEKE#%LX(( 99;Z'#"4::<0Hg&&H$;K)L)Lh1E&v8 %G,$4V$<*9HU"31T#  + %		.! <!&?A!>",M
 "'R
 !r
$ 'x:
,=-[)
 II/0<		3Q7!;>Cii)1?:;
 II34@		7;a?BG))-qC>?
 II()5		,a0147<yyASUV7W34&:?67 xFJJ~$>$J3DN1K4/0
 9i((Xi6G6G-H-H/C3C&+%	   Ow  

 !

 99;Z'#"4::<0Hg&&H$;K)L)Lh1E&v8 %G,$4V$<*9HU"31T#  + %		.! <!&?A!>",M
 "'R
 !r
$ 'x:
,=-[)
 II/0<		3Q7!;>Cii)1?:;
 II34@		7;a?BG))-qC>?
 II()5		,a0147<yyASUV7W34&:?67 xFJJ~$>$J3DN1K4/0
 9i((Xi6G6G-H-H/C3C&+%	   .I(s*   J 
K	"K>K K		K I"T.call_async_methodc	                 	  #    [         R                   " 5       n
S nS nSn0 n0 n U" S0 U	D6I S h  vN n[         R                   " 5       nUU
-
  nUc  [	        [
        R                  " 5       5      nU(       a3  [        US5      (       d  US:X  a  [        US5      (       a  [        X5      n[        X5      nUU	R                  S	5      [        U	5      [        XU5      [        X[        X5      5      UUR                  S
S5      UR                  SS5      UU[	        U5      S.U=(       d    0 EU=(       d    0 En[        X5      nU(       a  [        XU5      US'   UR                  S5      b+  UR                  SS5      S:  a  UR                  SS5      US'   UR                  S5      b+  UR                  SS5      S:  a  UR                  SS5      US'   U c  SUS'   US:X  a0  U	R                  S5      b  [        XU	R                  S5      5      US'   [        US5      (       a5  [        UR                   5      (       a  UR!                  U =(       d    USUUS9  U(       a  UeU$  GN1! [         a-  nUn[        USS5      nSUR                  5       S.n S nAGNaS nAff = f! [         R                   " 5       nUU
-
  nUc  [	        [
        R                  " 5       5      nU(       a3  [        US5      (       d  US:X  a  [        US5      (       a  [        X5      n[        X5      nUU	R                  S	5      [        U	5      [        XU5      [        X[        X5      5      UUR                  S
S5      UR                  SS5      UU[	        U5      S.U=(       d    0 EU=(       d    0 En[        X5      nU(       a  [        XU5      US'   UR                  S5      b+  UR                  SS5      S:  a  UR                  SS5      US'   UR                  S5      b+  UR                  SS5      S:  a  UR                  SS5      US'   U c  SUS'   US:X  a0  U	R                  S5      b  [        XU	R                  S5      5      US'   [        US5      (       a7  [        UR                   5      (       a  UR!                  U =(       d    USUUS9  f f f = f7f)Nr   r   r   Tr   r0   r,   r-   r   r    r!   r   r   r"   r   r#   r   Fr   r$   ri   r   r   r   r   r   r   )rw   rx   r   ry   rz   r{   r|   r}   r   r
   r   r3   r   r   r0   r   r   r   r   r\   r   rX   s                         r   call_llm_and_track_usage_asyncr     s     JHEKE#%LR*4V44 99;Z'#"4::<0Hg&&H$;K)L)Lh1E&v8 %G,$4V$<*9HU"31T#  + %		.! <!&?A!>",M
 "'R
 !r
$ 'x:
,=-[)
 II/0<		3Q7!;>Cii)1?:;
 II34@		7;a?BG))-qC>? &:?67 xFJJ~$>$J3DN1K4/0
 9i((Xi6G6G-H-H/C3C&+%	   Om 5 

 !

 99;Z'#"4::<0Hg&&H$;K)L)Lh1E&v8 %G,$4V$<*9HU"31T#  + %		.! <!&?A!>",M
 "'R
 !r
$ 'x:
,=-[)
 II/0<		3Q7!;>Cii)1?:;
 II34@		7;a?BG))-qC>? &:?67 xFJJ~$>$J3DN1K4/0
 9i((Xi6G6G-H-H/C3C&+%	   .I(sK    SI" II" H,SI" "
J,"JJ JJ H%SSprivacy_modevaluec                 8    U R                   (       d  U(       a  g U$ )N)r   )rx   r   r   s      r   r   r     s    Lr   )r   r   typingr   r   r   r   r   httpxr   posthog.clientr	   PostHogClientrl   r   r4   r:   r6   r7   r8   rZ   rv   boolr   r   r   r   r   r   <module>r      s     6 6  2T#s(^ S#X ,C# C$sCx. 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nj!#jj j sm	j
 !c3h0j j T#s(^,j j  S)j j 	jZ d 3 r   