+
    5mj!  c                  <   ^ RI Ht ^ RIt^ RIHu Ht ^ RIt	^ RI
t
^ RIt^ RIt^ RIt^ RIHt ^ RIHtHt ^ RIHt ^ RIt]P,                  P/                  ^ ]! ]! ]4      P5                  4       P6                  ^,          4      4       ^ RIHtHt  ! R R]P>                  ]4      t  ! R	 R
]4      t!]PD                  R R l4       t#R R lt$]PJ                  PM                  R. R O4      R R l4       t'R R lt(R R lt)R R lt*R R lt+R R lt,R R lt-R R lt.R# )!    )annotationsN)Iterator)BaseHTTPRequestHandler
HTTPServer)Path)HybridRouterroute_targetc                  H   a  ] tR t^tRtR V 3R llt]R R l4       tRtV ;t	# )_StubUpstreamTc                    V ^8  d   QhRRRR/# )   labelstrreturnNone )formats   "d/home/user/overdeck-private-tests/workstation-ai-broad2/modules/systray/tests/test_claudex_router.py__annotate___StubUpstream.__annotate__   s     I Ic Id I    c                	   < \         SV `  R\        4       Wn        . V n        \
        P                  ! V P                  RR7      P                  4        R# )	127.0.0.1T)targetdaemonN)r   r   )	super__init___StubHandlerr   seen	threadingThreadserve_foreverstart)selfr   	__class__s   &&r   r   _StubUpstream.__init__   s>    )<8
-/	 2 24@FFHr   c                   V ^8  d   QhRR/# )r   r   intr   )r   s   "r   r   r      s     + +c +r   c                	:    \        V P                  ^,          4      # )   )r'   server_addressr#   s   &r   port_StubUpstream.port   s    4&&q)**r   )r   r   )
__name__
__module____qualname____firstlineno__daemon_threadsr   propertyr,   __static_attributes____classcell__)r$   s   @r   r
   r
      s(    NI I + +r   r
   c                  n    ] tR t^!t$ RtR]R&   R R ltR R ltR R	 ltR
 R lt	R R lt
R R ltRtR# )r   zHTTP/1.1r
   serverc                   V ^8  d   QhRR/# r   r   r   r   )r   s   "r   r   _StubHandler.__annotate__%   s     L L Lr   c                	    V P                  R 4       V P                  \        P                  ! RV P                  P
                  /4      P                  4       4       R# )r   upstreamN)_record_respondjsondumpsr7   r   encoder+   s   &r   do_GET_StubHandler.do_GET%   s;    Sdjj*dkk.?.?!@AHHJKr   c                   V ^8  d   QhRR/# r9   r   )r   s   "r   r   r:   )   s     

 

 

r   c           
     	   \        V P                  P                  R 4      ;'       g    ^ 4      pV P                  P	                  V4      pV P                  V4       V P                  P                  R4      '       d   V P                  4        R# \        P                  ! T;'       g    R4      pV P                  \        P                  ! RV P                  P                  RVP                  R4      /4      P                  4       4       R# )content-lengthstreamNs   {}r<   model)r'   headersgetrfilereadr=   pathendswith_respond_streamr?   loadsr>   r@   r7   r   rA   )r#   lengthbodypayloads   &   r   do_POST_StubHandler.do_POST)   s    T\\%%&67<<1=zzv&T99h''  "**T]]U+JJ
DKK$5$5wG@TUV]]_	
r   c                    V ^8  d   QhRRRR/# )r   rR   bytesr   r   r   )r   s   "r   r   r:   5   s     
 
E 
d 
r   c                	r    V'       d&   \         P                  ! V4      P                  R 4      MRpV P                  P
                  P                  RV P                  R VRV P                  P                  R4      RV P                  P                  R4      /4       R#   \         P                   d    Rp Li ; i)rH   Nz
<unparsed>rM   hostauthorization)	r?   rP   rJ   JSONDecodeErrorr7   r   appendrM   rI   )r#   rR   rH   s   && r   r=   _StubHandler._record5   s    	!59DJJt$((1tE 	DIIUDLL$$V,T\\--o>	!
 	 ## 	! E	!s   B 'B B65B6c                    V ^8  d   QhRRRR/# )r   rS   rW   r   r   r   )r   s   "r   r   r:   A   s     " " "$ "r   c                	    V P                  ^4       V P                  RR4       V P                  R\        \        V4      4      4       V P	                  4        V P
                  P                  V4       R# )   Content-Typeapplication/jsonzContent-LengthN)send_responsesend_headerr   lenend_headerswfilewrite)r#   rS   s   &&r   r>   _StubHandler._respondA   sY    3);<)3s7|+<=

!r   c                   V ^8  d   QhRR/# r9   r   )r   s   "r   r   r:   H   s     
 
 
r   c                	   V P                  ^4       V P                  RR4       V P                  RR4       V P                  4        \        ^4       Fu  pRV R2P	                  4       pV P
                  P                  \        V4      R R2P	                  4       V,           R	,           4       V P
                  P                  4        Kw  	  V P
                  P                  R
4       V P
                  P                  4        R# )r`   ra   text/event-streamzTransfer-Encodingchunkedzdata: event-z

xz
s   
s   0

N)	rc   rd   rf   rangerA   rg   rh   re   flush)r#   indexchunks   &  r   rO   _StubHandler._respond_streamH   s    3)<=,i81XE"5'.557EJJE
1~T299;eCgMNJJ  	

&

r   c               $    V ^8  d   QhRRRRRR/# )r   r   r   argsobjectr   r   r   )r   s   "r   r   r:   T   s!      # f  r   c                	    R # )Nr   )r#   r   ru   s   &&*r   log_message_StubHandler.log_messageT   s    r   r   N)r.   r/   r0   r1   protocol_version__annotations__rB   rT   r=   r>   rO   rx   r4   r   r   r   r   r   !   s2    !L


"
 r   r   c                   V ^8  d   QhRR/# )r   r   z;Iterator[tuple[HybridRouter, _StubUpstream, _StubUpstream]]r   )r   s   "r   r   r   Y   s     ! !H !r   c               #    a"   \        R 4      p \        R4      o\        V P                  4      pV3R lVn        VP	                  4         WS3x  VP                  4        V P                  4        V P                  4        SP                  4        SP                  4        R#   TP                  4        T P                  4        T P                  4        SP                  4        SP                  4        i ; i5i)codex	anthropicc                 \   < \         P                  P                  R S P                  ^
R7      # )r   timeout)httpclientHTTPConnectionr,   )r   s   r   <lambda>rig.<locals>.<lambda>]   s%    t{{'A'AY^^R (B (r   N)r
   r   r,   connect_anthropicr"   stopshutdownserver_close)r~   routerr   s     @r   rigr   X   s     '"Ek*I%**%F F LLN!Y&& 	 	 s    AC8B# AC8#AC55C8c               (    V ^8  d   QhRRRRRRRR/# )	r   r   r   rM   r   rS   zdict[str, object]r   ztuple[int, bytes]r   )r   s   "r   r   r   k   s*       S 3D IZ r   c           	     t   \         P                  P                  R V P                  ^
R7      p VP	                  RV\
        P                  ! V4      P                  4       RRRR/R7       VP                  4       pVP                  VP                  4       3VP                  4        #   TP                  4        i ; i)r   r   POSTra   rb   AuthorizationBearer sk-ant-oat01-testrR   rI   )r   r   r   r,   requestr?   r@   rA   getresponsestatusrL   close)r   rM   rS   
connectionresponses   &&&  r   postr   k   s    ++Kb+QJG$++- 2!;	 	 	
 ))+/
s   A&B% %B7c               (    V ^8  d   QhRRRRRRRR/# )	r   rH   rv   r~   bool	rewrittenz
str | Noner   r   r   )r   s   "r   r   r      s,     % %%%+5%	%r   c           	     z   \        V 4      pVP                  qDVJ qU'       g   \        P                  ! R
V3RWA34      RR\        P
                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V4      RR\        P
                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MR/,          pRRV/,          p\        \        P                  ! V4      4      hR;rEVP                  qDV8H  qU'       g   \        P                  ! RV3RWB34      RR\        P
                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V4      RR	\        P
                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MR	/,          pRRV/,          p\        \        P                  ! V4      4      hR;rER# )ispy0r   py2py4r~   assert %(py6)spy6Nr   r   )z-%(py2)s
{%(py2)s = %(py0)s.codex
} is %(py4)s==)z-%(py2)s
{%(py2)s = %(py0)s.model
} == %(py4)s)r   r~   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationrH   )rH   r~   r   r   @py_assert1@py_assert3@py_format5@py_format7s   &&&     r   3test_route_target_selects_codex_only_for_gpt_modelsr   }   s    % F<< 5     <      6    6   <      5    5        <<$9$$$$$<$$$$$$6$$$$6$$$<$$$$$$9$$$$9$$$$$$$$r   c                    V ^8  d   QhRRRR/# r   r   z1tuple[HybridRouter, _StubUpstream, _StubUpstream]r   r   r   )r   s   "r   r   r      s        	: 	 r   c                ,
   V w  rp\        VR RR/4      w  rE^qdV8H  qw'       g   \        P                  ! RV3RWF34      RR\        P                  ! 4       9   g   \        P
                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V4      /,          pRRV/,          p	\        \        P                  ! V	4      4      hR;rv\        P                  qw! V4      p
R	R
RR/qV8H  q'       Eg3   \        P                  ! RV3RW34      RR\        P                  ! 4       9   g!   \        P
                  ! \        4      '       d   \        P                  ! \        4      MRR\        P                  ! V4      RR\        P                  ! 4       9   g   \        P
                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V
4      R\        P                  ! V4      /,          pRRV/,          p\        \        P                  ! V4      4      hR;p;p
;rVP                  ^ ,          R,          pRpVV8H  qf'       gz   \        P                  ! RV3RVV34      R\        P                  ! V4      R\        P                  ! V4      /,          pRRV/,          p\        \        P                  ! V4      4      hR;p;ppVP                  ^ ,          R,          pR pVV8H  qf'       gz   \        P                  ! RV3RVV34      R\        P                  ! V4      R\        P                  ! V4      /,          pRRV/,          p\        \        P                  ! V4      4      hR;p;ppVP                  ^ ,          R,          pRpVV8H  qf'       gz   \        P                  ! RV3RVV34      R\        P                  ! V4      R\        P                  ! V4      /,          pRRV/,          p\        \        P                  ! V4      4      hR;p;ppVP                  p. qV
8H  pV'       g   \        P                  ! RV3R Wz34      RR\        P                  ! 4       9   g   \        P
                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V4      R\        P                  ! V
4      /,          p	RRV	/,          p\        \        P                  ! V4      4      hR;p;pp
R# )!/v1/messages?beta=truerH   zanthropic.gpt-5.6-terrar   r   py3assert %(py5)spy5Nr<   r~   zgpt-5.6-terrar?   r   rR   py8assert %(py10)spy10py1r   r   r   rM   rZ   r   r   assert %(py7)spy7r   z%(py0)s == %(py3)szK%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.loads
}(%(py3)s)
} == %(py8)sz%(py1)s == %(py4)sz,%(py2)s
{%(py2)s = %(py0)s.seen
} == %(py5)sr   r   r   r   r   r   r   r   r   r?   rP   r   r   r   r~   r   r   rR   @py_assert2r   @py_format4@py_format6@py_assert4@py_assert7@py_assert6@py_format9@py_format11@py_assert0r   r   r   @py_format8s   &                   r   3test_gpt_request_reaches_codex_with_prefix_strippedr      s     #F9 87D]:^_LFS=666S::N:dN
GWoNNNNNNNNNNNNNN4NNNN4NNN:NNNNNNdNNNNdNNNNNNNNNNNNNNN::a=!4_4!_44444!_444!444_44444444::a= <$<< $<<<<<< $<<<< <<<$<<<<<<<<<::a=)G-GG)-GGGGGG)-GGGG)GGG-GGGGGGGGG>>RR>99>Rr   c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   r      s      	:	r   c                ,
   V w  rp\        VR RR/4      w  rE^qdV8H  qw'       g   \        P                  ! RV3RWF34      RR\        P                  ! 4       9   g   \        P
                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V4      /,          pRRV/,          p	\        \        P                  ! V	4      4      hR;rv\        P                  qw! V4      p
R	R
RR/qV8H  q'       Eg3   \        P                  ! RV3RW34      RR\        P                  ! 4       9   g!   \        P
                  ! \        4      '       d   \        P                  ! \        4      MRR\        P                  ! V4      RR\        P                  ! 4       9   g   \        P
                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V
4      R\        P                  ! V4      /,          pRRV/,          p\        \        P                  ! V4      4      hR;p;p
;rVP                  ^ ,          R,          pRpVV8H  qf'       gz   \        P                  ! RV3RVV34      R\        P                  ! V4      R\        P                  ! V4      /,          pRRV/,          p\        \        P                  ! V4      4      hR;p;ppVP                  ^ ,          R,          pRpVV8H  qf'       gz   \        P                  ! RV3RVV34      R\        P                  ! V4      R\        P                  ! V4      /,          pRRV/,          p\        \        P                  ! V4      4      hR;p;ppVP                  ^ ,          R,          pRpVV8H  qf'       gz   \        P                  ! RV3RVV34      R\        P                  ! V4      R\        P                  ! V4      /,          pRRV/,          p\        \        P                  ! V4      4      hR;p;ppVP                  p. qV
8H  pV'       g   \        P                  ! RV3R Wz34      RR\        P                  ! 4       9   g   \        P
                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V4      R\        P                  ! V
4      /,          p	RRV	/,          p\        \        P                  ! V4      4      hR;p;pp
R# )!/v1/messagesrH   zclaude-fable-5r   r   r   r   r   Nr<   r   r?   r   rR   r   r   r   r   r   r   r   rY   zapi.anthropic.comrZ   r   r~   r   r   r   r   r   r   r   r   r   s   &                   r   /test_claude_request_reaches_anthropic_untouchedr      s     #F9:J0KLLFS=666S::S:dS
KBRSSSSSSSSSSSSSS4SSSS4SSS:SSSSSSdSSSSdSSSSSSSSSSSSSSS>>!W%9)99%)999999%)9999%999)999999999>>!V$;(;;$(;;;;;;$(;;;;$;;;(;;;;;;;;;>>!_-K1KK-1KKKKKK-1KKKK-KKK1KKKKKKKKK:::55:r   c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   r      s      	:	r   c                   V w  rp\         P                  P                  R VP                  ^
R7      p VP	                  RR4       VP                  4       pVP                  4       pVP                  4        \        P                  qw! V4      pRR/qV	8H  q'       Eg3   \        P                  ! RV
3RW34      RR\        P                  ! 4       9   g!   \        P                  ! \        4      '       d   \        P                  ! \        4      MRR\        P                  ! V4      R	R
\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MR
R\        P                  ! V4      R\        P                  ! V	4      /,          pRRV/,          p\!        \        P"                  ! V4      4      hR;p;p;rVP$                  ^ ,          R,          pRqV8H  q'       gy   \        P                  ! RV3RW34      R\        P                  ! V4      R\        P                  ! V4      /,          pRRV/,          p\!        \        P"                  ! V4      4      hR;p;rVP$                  p. qV8H  q'       g   \        P                  ! RV3RWx34      RR\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V4      R\        P                  ! V4      /,          pRRV/,          p\!        \        P"                  ! V4      4      hR;p;rR#   TP                  4        i ; i)r   r   GETz
/v1/modelsr<   r   r   r?   r   r   rR   r   r   r   r   NrM   r   r   r   r   r~   r   r   r   r   r   r   )r   r   r   r,   r   r   rL   r   r?   rP   r   r   r   r   r   r   r   r   r   )r   r   r~   r   r   r   rR   r   r   r   r   r   r   r   r   r   r   r   r   r   s   &                   r   +test_bodyless_request_defaults_to_anthropicr      s     #F9++Kb+QJ5,/))+}}::8:d8
K88888888888888488884888:888888d8888d888888888888888>>!V$4444444$444$44444444444:::55:	 	s   2M M1c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   r      s      J J	:J	Jr   c                ^   V w  p p\         P                  P                  R VP                  ^
R7      p VP	                  RR\
        P                  ! RR/4      P                  4       RR/R7       VP                  4       pVP                  pR	qe! V4      pR
qV8H  q'       g   \        P                  ! RV	3RWx34      RR\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V4      /,          p
RRV
/,          p\!        \        P"                  ! V4      4      hR;p;p;p;rVP                  pRqe! V4      pRqVJ q'       g   \        P                  ! RV	3RWx34      RR\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V4      R\        P                  ! V4      /,          p
RRV
/,          p\!        \        P"                  ! V4      4      hR;p;p;p;rVP%                  4       pVP'                  4        RqV8H  qU'       g   \        P                  ! RV3RW34      RR\        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V4      /,          pRRV/,          p\!        \        P"                  ! V4      4      hR;r]R#   TP'                  4        i ; i)r   r   r   z/v1/messages/streamrH   zclaude-sonnet-5ra   rb   r   zcontent-typerl   r   r   r   r   r   py9zassert %(py11)spy11NrF   s-   data: event-0

data: event-1

data: event-2

rR   r   r   r   r   )zO%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.getheader
}(%(py4)s)
} == %(py9)sr   )zO%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.getheader
}(%(py4)s)
} is %(py9)sr   )r   r   r   r,   r   r?   r@   rA   r   	getheaderr   r   r   r   r   r   r   r   rL   r   )r   r   _r   r   r   r   @py_assert5@py_assert8r   @py_format10@py_format12rR   r   r   r   s   &               r   1test_streaming_response_is_relayed_chunk_by_chunkr      sG    LFAq++Kb+QJ!W&789@@B#%78	 	 	
 ))+!!H.H!.1H5HH5HHHHHH1HHHHHHxHHHHxHHH!HHH.HHH1HHH5HHHHHHHHH!!;"2;!"23;t;t;;;;;3;;;;;;x;;;;x;;;!;;;"2;;;3;;;t;;;;;;;;}}IIIIIIII4IIIIII4IIII4IIIIIIIIIIII 	s   B=N 2DN B:N N,c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   r      s     
< 
<	:
<	
<r   c                N   V w  rpVP                  4        VP                  4        \        VR RR/4      w  rERqdV8H  qw'       g   \        P                  ! RV3RWF34      RR\
        P                  ! 4       9   g   \        P                  ! V4      '       d   \        P                  ! V4      MRR\        P                  ! V4      /,          pRRV/,          p	\        \        P                  ! V	4      4      hR	;rv\        P                  ! V4      R
,          R,          p
RqV8H  qf'       gy   \        P                  ! RV3RW34      R\        P                  ! V
4      R\        P                  ! V4      /,          pRRV/,          p\        \        P                  ! V4      4      hR	;p
;rkR	# )r   rH   anthropic.gpt-5.6-soli  r   r   r   r   r   Nerrortype	api_errorr   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r?   rP   )r   r   r~   r   r   rR   r   r   r   r   r   r   r   r   s   &             r   8test_unreachable_upstream_returns_anthropic_shaped_errorr      s     F1	NN	:Q0RSLFS=666S::dG$V,;;;;;;;,;;;,;;;;;;;;;;;r   c                   V ^8  d   QhRR/# r9   r   )r   s   "r   r   r      s     ! ! !r   c                    \        R 4      p \        R4      p\        V P                  RVP                   R2R7      pVP                  4         \	        VRRR/4      w  r4^qSV8H  qf'       g   \
        P                  ! R!V3R"W534      RR	\        P                  ! 4       9   g   \
        P                  ! V4      '       d   \
        P                  ! V4      MR	R
\
        P                  ! V4      /,          pRRV/,          p\        \
        P                  ! V4      4      hR;re\        P                  qf! V4      p	RRRR/qV
8H  q'       Eg3   \
        P                  ! R!V3R#W34      RR\        P                  ! 4       9   g!   \
        P                  ! \        4      '       d   \
        P                  ! \        4      MRR\
        P                  ! V4      R
R\        P                  ! 4       9   g   \
        P                  ! V4      '       d   \
        P                  ! V4      MRR\
        P                  ! V	4      R\
        P                  ! V
4      /,          pRRV/,          p\        \
        P                  ! V4      4      hR;p;p	;rVP                  ^ ,          R,          pRqV8H  qU'       gy   \
        P                  ! R!V3R$W34      R\
        P                  ! V4      R\
        P                  ! V4      /,          pRRV/,          p\        \
        P                  ! V4      4      hR;p;r_VP                  ^ ,          R,          pRVP                   2qV8H  qU'       gy   \
        P                  ! R!V3R$W34      R\
        P                  ! V4      R\
        P                  ! V4      /,          pRRV/,          p\        \
        P                  ! V4      4      hR;p;r_VP                  ^ ,          R,          pRqV8H  qU'       gy   \
        P                  ! R!V3R$W34      R\
        P                  ! V4      R\
        P                  ! V4      /,          pRRV/,          p\        \
        P                  ! V4      4      hR;p;r_V P                  p. qV	8H  q'       g   \
        P                  ! R!V3R%Wi34      RR \        P                  ! 4       9   g   \
        P                  ! V 4      '       d   \
        P                  ! V 4      MR R\
        P                  ! V4      R\
        P                  ! V	4      /,          pRR V/,          p\        \
        P                  ! V4      4      hR;p;rVP!                  4        V P#                  4        V P%                  4        VP#                  4        VP%                  4        R#   TP!                  4        T P#                  4        T P%                  4        TP#                  4        TP%                  4        i ; i)&r~   zsubrouter-claudezhttp://127.0.0.1:z/r/routefixture1234567890anthropic_base_urlr   rH   claude-opus-5r   r   r   r   r   Nr<   r?   r   rR   r   r   r   rM   z//r/routefixture1234567890/v1/messages?beta=truer   r   r   r   rY   z
127.0.0.1:rZ   r   r   r   r   r   r   r   r   )r
   r   r,   r"   r   r   r   r   r   r   r   r   r   r?   rP   r   r   r   r   )r~   r   r   r   rR   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s                      r   >test_custom_anthropic_base_url_preserves_route_prefix_and_hostr      s   '"E01I

.y~~.>>WXF LLN!F$<w>XY}vvvzz]z$]J0BG_#]]#]]]]]]]]]]]]t]]]]t]]]z]]]]]]$]]]]$]]]]]]#]]]]]]]]]~~a (],]],]]]]]](]]](]]],]]]]]]]]]~~a (Ij8H,II,IIIIII(III(III,IIIIIIIII~~a 1O5OO5OOOOOO1OOO1OOO5OOOOOOOOOzzRRzuuzR 	 	 s*   A.V/ <CV/ A'V/ KV/ #A:V/ /AXc                   V ^8  d   QhRR/# r9   r   )r   s   "r   r   r      s     [ [D [r   c                     \         P                  ! \        R R7      ;_uu_ 4        \        RRR7       RRR4       R#   + '       g   i     R# ; i)zinvalid Anthropic upstream)matchi90  z(http://user:pass@127.0.0.1:31415/r/router   N)pytestraises
ValueErrorr   r   r   r   2test_custom_anthropic_base_url_rejects_credentialsr      s/    	z)E	F	FU/YZ 
G	F	F	Fs	   =A	)rH   r~   r   ))r   Tzgpt-5.6-sol)gpt-5.6-lunaTr   )r   FN)fableFN)NFN)/
__future__r   builtinsr   _pytest.assertion.rewrite	assertionrewriter   http.clientr   r?   socketserversysr   collections.abcr   http.serverr   r   pathlibr   r   rM   insertr   __file__resolveparentsclaudex_routerr   r   ThreadingMixInr
   r   fixturer   r   markparametrizer   r   r   r   r   r   r   r   r   r   r   <module>r     s    "       
  $ :   3tH~--/77:; < 5+L// +4) 4n ! !$$ #	%	% "J,
<!0[r   