
    &`ip                     z   d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	 d dl
mZ d dlZd dlmZ d dlmZmZ d dlmZmZmZ d dlmZ d d	lmZ d d
lmZmZ d dlmZ  ej        e          Z  G d de          Z!dddedede j"        de#de j$        f
dZ%de&de'de(defdZ)dej*        j+        j,        defdZ-defdZ.dS )    N)deepcopy)CallableListOptionalSequenceTuple)Mock)Server)RayActorErrorRayTaskError)DEFAULT_GRPC_SERVER_OPTIONS&RAY_SERVE_REQUEST_PROCESSING_TIMEOUT_SSERVE_LOGGER_NAME)ResponseStatus)gRPCOptions)BackPressureErrorDeploymentUnavailableError)(add_RayServeAPIServiceServicer_to_serverc            	            e Zd ZdZdddedeeeeef                           f fdZ	de
ej                 f fdZ xZS )	gRPCGenericServerzCustom gRPC server that will override all service method handlers.

    Original implementation see: https://github.com/grpc/grpc/blob/
        60c1701f87cacf359aa1ad785728549eeef1a4b0/src/python/grpcio/grpc/aio/_server.py
    Nextra_optionsservice_handler_factoryr   c          	          t                                          d ddd d t          |pg z              g | _        || _        d S )N )thread_poolgeneric_handlersinterceptorsmaximum_concurrent_rpcscompressionoptions)super__init__r   generic_rpc_handlersr   )selfr   r   	__class__s      p/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/serve/_private/grpc_util.pyr#   zgRPCGenericServer.__init__   sZ     	$(/=3FBG 	 	
 	
 	
 %'!'>$$$    r$   c           	      x   i }|d         }|j                                         D ]L\  }}|                    d|                     |d          |                     |d                    }|||<   M||d         _         | j                            |           t                                          |           dS )a   Override generic_rpc_handlers before adding to the gRPC server.

        This function will override all user defined handlers to have
            1. None `response_serializer` so the server can pass back the
            raw protobuf bytes to the user.
            2. `unary_unary` is always calling the unary function generated via
            `self.service_handler_factory`
            3. `unary_stream` is always calling the streaming function generated via
            `self.service_handler_factory`
        r   NF)service_methodstreamT)response_serializerunary_unaryunary_stream)_method_handlersitems_replacer   r$   appendr"   add_generic_rpc_handlers)r%   r$   serve_rpc_handlersrpc_handlerr*   method_handlerserve_method_handlerr&   s          r'   r3   z*gRPCGenericServer.add_generic_rpc_handlers0   s      *1-.9.J.P.P.R.R 	F 	F*NN#1#:#:$( 88#1  9   "99#1 :   $; 
$ 
$  2F~..3EQ0!(()=>>>(()=>>>>>r(   )__name__
__module____qualname____doc__r   r   r   r   strr#   r   grpcGenericRpcHandlerr3   __classcell__)r&   s   @r'   r   r      s          :>	? ? ?!)?  U38_ 56	? ? ? ? ? ?"?$,T-C$D? ? ? ? ? ? ? ? ? ?r(   r   F)enable_so_reuseportr   grpc_options
event_loopr@   returnc          	      r  K   ddl m} t          | dt          t	          |                    fg          } ||d|j                    t                      }t          g|j        z   D ]} |||           |	                                 d{V  |
                    |                                          S )zStart a gRPC server that handles requests with the service handler factory.

    Returns a task that blocks until the server exits (e.g., due to error).
    r   )add_grpc_addresszgrpc.so_reuseportr   z[::]:N)ray.serve._private.default_implrE   r   r<   intportr	   r   grpc_servicer_func_callablestartcreate_taskwait_for_termination)r   rA   rB   r@   rE   servermock_servicerservicer_fns           r'   start_grpc_serverrP   Q   s       A@@@@@+S5H1I1I-J-JKL  F V8\%688999
 FFM001 + + 	M6****
,,..!!&"="="?"?@@@r(   excrequest_timeout_s
request_idc                 `   t          | t                    r'd| d}t          t          j        j        d|          S t          | t          j                  r'd| d}t          t          j        j        d|          S t          | t                    r&t          t          j        j
        d| j                  S t          | t                    r\t          | t                    r!t                              d|  dd	i
           t          t          j        j        d| j                  S t          | t"          t          f          r"t                              d|  dd	i
           nt                              d           t          t          j        j        dt)          |                     S )NzRequest timed out after zs.T)codeis_errormessagezClient for request z disconnected.zRequest failed: log_to_stderrF)extraz'Request failed due to unexpected error.)
isinstanceTimeoutErrorr   r=   
StatusCodeDEADLINE_EXCEEDEDasyncioCancelledError	CANCELLEDr   RESOURCE_EXHAUSTEDrW   r   r   loggerwarningUNAVAILABLEr   	exceptionINTERNALr<   )rQ   rR   rS   rW   s       r'   get_grpc_response_statusrg   q   s    #|$$ %
B->BBB2
 
 
 	

 
C/	0	0 
B
BBB*
 
 
 	

 
C*	+	+ 
3K
 
 
 	

 
C3	4	4 
c<(( 	UNN3c33OU;SNTTT,K
 
 
 	
 cM<899 	HNN3c33OU;SNTTTTFGGG)HH
 
 
 	
r(   contextstatusc                     |                                  s|                     |j                    |                                 s|                     |j                   d S d S N)rU   set_codedetailsset_detailsrW   )rh   ri   s     r'   set_grpc_code_and_detailsro      sb     <<>> &%%%?? ,FN+++++, ,r(   c                     t          |           pt                      } | j        st          r| j        pt          | _        | S rk   )r   r   rR   r   )rA   s    r'   set_proxy_default_grpc_optionsrq      sG    L)):[]]L% 
)O 
*T.T 	& r(   )/r^   loggingcopyr   typingr   r   r   r   r   unittest.mockr	   r=   grpc.aio._serverr
   ray.exceptionsr   r   ray.serve._private.constantsr   r   r   )ray.serve._private.proxy_request_responser   ray.serve.configr   ray.serve.exceptionsr   r   "ray.serve.generated.serve_pb2_grpcr   	getLoggerrb   r   AbstractEventLoopboolTaskrP   BaseExceptionfloatr<   rg   _cythoncygrpc_ServicerContextro   rq   r   r(   r'   <module>r      sA           < < < < < < < < < < < < < <        # # # # # # 6 6 6 6 6 6 6 6         
 E D D D D D ( ( ( ( ( ( N N N N N N N N W W W W W W		,	-	-6? 6? 6? 6? 6? 6? 6? 6?| !&A A A%AA )	A
 A \A A A A@(
	(
+0(
>A(
(
 (
 (
 (
V,\ 1,;I, , , ,K      r(   