
    jKj                        d dl Z d dlZd dlmZmZmZmZ ej                  j                  de      d        Z	ej                  j                  dg d      d        Z
ej                  j                  dg d	      d
        Zej                  j                  dg d      d        Zej                  j                  dg d      d        Zd Zd Zd Zej                  j                  dg d      d        Zej                  j                  ddddifdddifg      d        Zd Zej                  j                  ddd i fd!dd"ifg      d#        Zy)$    N)POSTHOG_AI_GATEWAY_HOSTSis_posthog_ai_gateway_urlwarn_if_posthog_ai_gateway*warn_if_posthog_ai_gateway_otel_attributeshostc                 *    t        d|  d      du sJ y )Nzhttps://z/v1Tr   )r   s    m/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/posthog/test/ai/test_gateway.pytest_detects_every_gateway_hostr      s    $xvS%9:dBBB    url)!https://gateway.us.posthog.com/v1z)https://gateway.us.posthog.com/signals/v1z(https://gateway.us.posthog.com/anthropicc                 "    t        |       du sJ y NTr	   )r   s    r
   (test_detects_live_host_with_route_prefixr      s     %S)T111r   z	label,url))zhttp schemez http://gateway.us.posthog.com/v1)zuppercase hostz!https://GATEWAY.US.POSTHOG.COM/v1)zmissing schemezgateway.us.posthog.com/v1)portz+http://gateway.us.posthog.com:443/anthropicc                 "    t        |      du sJ y r   r	   labelr   s     r
   "test_matches_gateway_host_variantsr      s     %S)T111r   ))zingestion hostzhttps://us.i.posthog.com)zapp hostzhttps://eu.posthog.com)openaihttps://api.openai.com/v1)	anthropiczhttps://api.anthropic.com)zlook-alike domainz.https://gateway.us.posthog.com.evil.example/v1c                 "    t        |      du sJ y NFr	   r   s     r
   #test_does_not_match_non_gateway_urlr   +   s     %S)U222r   zlabel,value))zempty string noneN)	malformedz::::not a urlc                 "    t        |      du sJ y r   r	   )r   values     r
   &test_does_not_match_empty_or_malformedr#   9   s     %U+u444r   c                 |    | j                   D cg c]"  }|j                  t        j                  k(  s!|$ c}S c c}w )N)recordslevelnologgingWARNING)caplogrs     r
   	_warningsr+   E   s-    ~~F~!goo)EA~FFFs   "99c                    | j                  t        j                  d      5  t        d       d d d        t	        |       }t        |      dk(  sJ |d   j                         }d|v sJ d|v sJ d|v sJ d	|v sJ d
|v sJ y # 1 sw Y   VxY w)Nposthogloggerr      r   z	[PostHog]PostHog AI Gatewayz$ai_generationz double-counted and double-billedz)https://posthog.com/docs/ai-observability)at_levelr'   r(   r   r+   len
getMessage)r)   warningsmessages      r
   'test_warns_with_double_counting_messager7   I   s    		;"#FG 
<  Hx=Aqk$$&G'!!!7***w&&&-8886'AAA 
<	;s   BBc                     | j                  t        j                  d      5  t        d      D ]  }t	        d        	 d d d        t        t        |             dk(  sJ y # 1 sw Y   #xY w)Nr-   r.      r   )r2   r'   r(   ranger   r3   r+   )r)   _s     r
    test_warns_on_every_gateway_callr<   W   sU    		;qA&'JK  
< y !Q&&&	 
<	;s   A!!A*base_url)r   Nr   c                     |j                  t        j                  d      5  t        |        d d d        t	        |      g k(  sJ y # 1 sw Y   xY wNr-   r.   )r2   r'   r(   r   r+   )r=   r)   s     r
   "test_does_not_warn_for_non_gatewayr@   _   sC    
 
	;"8, 
< V""" 
<	;   AAzlabel,attributeszserver.address bare hostserver.addressgateway.us.posthog.comzurl.full full URLurl.fullz2https://gateway.us.posthog.com/v1/chat/completionsc                     |j                  t        j                  d      5  t        |       d d d        t	        t        |            dk(  sJ dt        |      d   j                         v sJ y # 1 sw Y   CxY w)Nr-   r.   r0   r1   r   )r2   r'   r(   r   r3   r+   r4   r   
attributesr)   s      r
   /test_otel_attributes_warn_when_gateway_detectedrH   j   si     
	;2:> 
< y !Q&&&9V#4Q#7#B#B#DDDD	 
<	;s   A00A9c                     | j                  t        j                  d      5  t        ddd       d d d        t	        t        |             dk(  sJ y # 1 sw Y   #xY w)Nr-   r.   rC   r   )rB   rD   r0   )r2   r'   r(   r   r3   r+   )r)   s    r
   /test_otel_attributes_warn_at_most_once_per_spanrJ   |   sQ    		;2":?	
 
< y !Q&&& 
<	;s   AAr   emptyznon-gatewayzapi.openai.comc                     |j                  t        j                  d      5  t        |       d d d        t	        |      g k(  sJ y # 1 sw Y   xY wr?   )r2   r'   r(   r   r+   rF   s      r
   +test_otel_attributes_silent_for_non_gatewayrM      sC     
	;2:> 
< V""" 
<	;rA   )r'   pytestposthog.ai.gatewayr   r   r   r   markparametrizer   r   r   r   r#   r+   r7   r<   r@   rH   rJ   rM    r   r
   <module>rS      s      !9:C ;C 	22 22 	3	3 55GB' +#	# 	#&68P%QRMN	
	E	E	' 	"	)+;<=##r   