
    2pi                         d dl Z d dlZd dlZd dlZd dlmZmZ d dlZd dlm	Z	  G d de          Z
 ej        d          d             Zd	 Zd
 Zd Zd ZdS )    N)
HTTPServerBaseHTTPRequestHandler)RemoteLLMClientc                   "    e Zd ZdZdZd Zd ZdS )TestHandlerokr   c                     |                      d           |                     dd           |                                  | j                            d           d S )N   Content-Typez
text/plains   OK)send_responsesend_headerend_headerswfilewrite)selfs    8/home/asher/github/pulse/tests/test_remote_llm_client.pydo_GETzTestHandler.do_GET   sZ    3666
    c                    t          | j                            dd                    }|r| j                            |          nd}t
          xj        dz  c_        | j                            d          r| 	                    d           | 
                    dd           |                                  | j                            d	           | j                                         t          j        d
           | j                            d           | j                            d           | j                                         d S t
          j        dk    r| 	                    d           | 
                    dd           |                                  ddd}| j                            t%          j        |                              d                     d S t
          j        dk    rt
          j        dk    rE| 	                    d           |                                  | j                            d           d S | 	                    d           | 
                    dd           |                                  ddd}| j                            t%          j        |                              d                     d S t
          j        dk    rE| 	                    d           |                                  | j                            d           d S t
          j        dk    rt          j        d           | 	                    d           | 
                    dd           |                                  ddd}| j                            t%          j        |                              d                     d S d S )NzContent-Lengthr   r      z	?stream=1r
   r   ztext/event-streams   data: chunk1

g{Gz?s   data: chunk2

s   data: [DONE]

r   zapplication/jsontest)responseproviderzutf-8500_then_oki  s   Internal Errorok_after_retrystreamslowg?slow_ok)intheadersgetrfilereadr   counterpathendswithr   r   r   r   r   flushtimesleepmodejsondumpsencode)r   lengthbodyresps       r   do_POSTzTestHandler.do_POST   s   T\%%&6::;;*09tzv&&&cq 9k** 	s###^-@AAAJ0111JJtJ0111J0111JFt##s###^-?@@@ $&99DJTZ--44W==>>>F},,"a''""3'''  """
  !2333""3'''  1CDDD  """$4&II
  D!1!1!8!8!A!ABBBx''s###J.///Fv%%JsOOOs###^-?@@@ )v>>DJTZ--44W==>>>F &%r   N)__name__
__module____qualname__r*   r$   r   r1    r   r   r   r   
   s<        DG     6 6 6 6 6r   r   module)scopec               #   X  K   d } t          dd          D ]+}	 t          d|ft                    }  n# t          $ r Y (w xY w| J t	          j        | j        d          }|                                 d| j         V  | 	                                 |
                    d           d S )	Ni  i   z	127.0.0.1T)targetdaemonzhttp://127.0.0.1:r   )timeout)ranger   r   OSError	threadingThreadserve_foreverstartserver_portshutdownjoin)serverportthreads      r   http_serverrH   O   s       FdD!!  	d 3[AAFE 	 	 	H	V%9$GGGF
LLNNN
2f0
2
2222
OO
KKKs   1
>>c                     dt           _        t          | dz             }|j        du sJ |                    d          }|dk    sJ d S )Nr   /askThello)r   r*   r   	availableaskrH   monkeypatchcrs       r   test_direct_json_responserR   a   sO    Kf,--A;$	gA999999r   c                     dt           _        dt           _        |                    dd           t	          | dz             }|                    d          }|dk    sJ d S )Nr   r   LLM_RETRY_COUNT2rJ   rK   r   )r   r*   r$   setenvr   rM   rN   s       r   test_retry_on_500_then_successrW   i   sb    $KK(#...f,--A	gA       r   c                     dt           _        dt           _        t          | dz             }|                    d          }d|v rd|v sJ d S )Nr   r   rJ   rK   chunk1chunk2)r   r*   r$   r   rM   rN   s       r   test_streaming_fallback_on_500r[   r   sL    KKf,--A	gAq==X]]]]]]r   c                    dt           _        dt           _        g fd}|                     d|           |                     dd           |                     dd           t          |d	z             }|                    d
          }|dk    sJ t                    dk    sJ t          j	        d         d          dk    sJ d S )Nr   r   c                 2                         |            d S )N)append)ssleepss    r   
fake_sleepz,test_retry_backoff_sleep.<locals>.fake_sleep   s    ar   z
time.sleeprT   rU   LLM_RETRY_BACKOFFz0.1rJ   rK   r   r   g?)rel)
r   r*   r$   setattrrV   r   rM   lenpytestapprox)rO   rH   ra   rP   rQ   r`   s        @r   test_retry_backoff_sleeprh   {   s    $KKF     j111(#...*E222f,--A	gA     v;;!=,,,333333r   )r>   r(   r+   sockethttp.serverr   r   rf   pulser   r   fixturerH   rR   rW   r[   rh   r5   r   r   <module>rm      s          : : : : : : : :  ! ! ! ! ! !B B B B B( B B BJ h   "  ! ! !+ + +4 4 4 4 4r   