o
    ci                     @   s  d dl mZmZmZ d dlZd dlmZ d dlmZ d dl	m
Z
mZ d dlmZmZmZmZmZmZ d dlmZmZmZmZmZ d dlmZmZ d d	lmZ d d
lmZm Z  d dl!m"Z"m#Z# d dl$m%Z%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+ dede
fddZ,eege+f Z-dede+fddZ.		d6de
dee/ dee- defddZ0dd Z1dd Z2dd Z3d d! Z4d"d# Z5dee/ee/ f fd$d%Z6ee/ee ge"f Z7	d7d&e/d'ed(e d)ee de"f
d*d+Z8d,ed-e/fd.d/Z9d0ed1efd2d3Z:d4d5 Z;dS )8    )CallableOptionalTupleN)HEAD_NODE_RESOURCE_NAME)	GcsClient)ClusterNodeInfoCacheDefaultClusterNodeInfoCache)CreatePlacementGroupRequestDeploymentHandleSourceDeploymentIDEndpointInfoRequestMetadataRequestProtocol)CONTROLLER_MAX_CONCURRENCYRAY_SERVE_ENABLE_TASK_EVENTS)RAY_SERVE_PROXY_PREFER_LOCAL_NODE_ROUTINGSERVE_CONTROLLER_NAMESERVE_NAMESPACE)DefaultDeploymentSchedulerDeploymentScheduler)gRPCGenericServer)DynamicHandleOptionsInitHandleOptions)RouterSingletonThreadRouter)generate_request_idget_current_actor_idget_head_node_idinside_ray_client_contextresolve_deployment_response)PlacementGroup
gcs_clientreturnc                 C   s   t | S N)r   )r!    r$   S/home/ubuntu/.local/lib/python3.10/site-packages/ray/serve/_private/default_impl.pycreate_cluster_node_info_cache0   s   r&   requestc                 C   s   t jj| j| j| j| jddS )Ndetached)_soft_target_node_idnamelifetime)rayutilplacement_groupbundlesstrategytarget_node_idr*   )r'   r$   r$   r%   _default_create_placement_group7   s   r2   cluster_node_info_cachehead_node_id_override"create_placement_group_fn_overridec                 C   s   |pt  }t| ||ptdS )N)create_placement_group_fn)r   r   r2   )r3   r4   r5   head_node_idr$   r$   r%   create_deployment_schedulerC   s   
r8   c                  K      ddl m} |di | S )Nr   )Replicar$   )ray.serve._private.replicar:   )kwargsr:   r$   r$   r%   create_replica_implQ      r=   c                  K   r9   )Nr   )ReplicaMetricsManagerr$   )r;   r?   )r<   r?   r$   r$   r%   create_replica_metrics_managerW   r>   r@   c                  K   s   t di | S Nr$   )r   r<   r$   r$   r%   create_dynamic_handle_options]   s   rC   c                  K   s   t jdi | S rA   )r   createrB   r$   r$   r%   create_init_handle_optionsa   s   rE   c                 C   s   t jj }tj}| r| jtjkr|j	rtj
}n|jrtj}t|jr%|jnt |jr-|jnt |j|j|j|j|j||jdd
S )NT)

request_idinternal_request_idcall_methodrouteapp_namemultiplexed_model_idis_streaming_request_protocolgrpc_context_by_reference)r,   servecontext_get_serve_request_contextr   	UNDEFINED_sourcer
   PROXYis_http_requestHTTPrN   GRPCr   rF   r   _internal_request_idmethod_namerI   rJ   rK   stream)init_optionshandle_options_request_contextrequest_protocolr$   r$   r%   get_request_metadatae   s.   r`   c                  C   sZ   t   } zttt  jd}|  || }W | |fS  ty,   d }Y | |fS w )N)address)	r,   get_runtime_contextget_node_idr&   r   gcs_addressupdateget_node_az	Exception)node_idr3   azr$   r$   r%   _get_node_id_and_az   s   rj   	handle_iddeployment_idr]   request_router_classc           
      C   sN   ddl m} t }t \}}| j}t }	t||| ||j||	 t|||j	dS )Nr   _get_global_client)controller_handlerl   rk   self_actor_idhandle_sourcerm   "enable_strict_max_ongoing_requestsresolve_request_arg_funcrh   availability_zoneprefer_local_node_routing)
ray.serve.contextro   r   rj   _controllerr   r   rT   r   _prefer_local_routing)
rk   rl   r]   rm   ro   actor_idrh   ru   rp   is_inside_ray_client_contextr$   r$   r%   create_router   s$   
r|   grpc_serverserver_addressc                 C   s   |  | dS )z3Helper function to add an address to a gRPC server.N)add_insecure_port)r}   r~   r$   r$   r%   add_grpc_address   s   r   endpointinfoc                 C   sL   ddl m} | }|j| j| jdd}|js|jttj	d |j
|j dS )Nr   rn   T)check_exists)ry   rT   )r[   )rw   ro   
get_handler*   rJ   is_initialized_initr   r
   rU   optionsapp_is_cross_language)r   r   ro   clienthandler$   r$   r%   get_proxy_handle   s   r   c                  C   s4   ddl m}  tjttddddtdittd	| }|S )Nr   )ServeControllerr(   gMbP?)	r*   	namespacenum_cpusr+   max_restartsmax_task_retries	resourcesmax_concurrencyenable_task_events)	ray.serve._private.controllerr   r,   remoter   r   r   r   r   )r   controller_implr$   r$   r%   get_controller_impl   s   
r   )NNr#   )<typingr   r   r   r,   ray._private.resource_specr   ray._rayletr   *ray.serve._private.cluster_node_info_cacher   r   ray.serve._private.commonr	   r
   r   r   r   r   ray.serve._private.constantsr   r   r   r   r   'ray.serve._private.deployment_schedulerr   r   ray.serve._private.grpc_utilr   !ray.serve._private.handle_optionsr   r   ray.serve._private.routerr   r   ray.serve._private.utilsr   r   r   r   r   ray.util.placement_groupr    r&   CreatePlacementGroupFnr2   strr8   r=   r@   rC   rE   r`   rj   CreateRouterCallabler|   r   r   r   r$   r$   r$   r%   <module>   sj     	


