o
    `۷i],                     @   s   d dl Z d dlZd dlmZ d dlmZmZmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ ed
ZG dd dZdd ZdS )    N)deepcopy)AnyDictListOptional)crc32)	BaseModel)DeploymentConfig)DeploymentOptionUpdateTypeget_random_string)AutoscalingConfig)DeploymentVersionz	ray.servec                   @   s  e Zd Z						d%dee dedee deeeeef   dee deeeeef   deeeee	f   d	ee
 d
ee fddZe	d&d
ee fddZde
fddZde	defddZdd Zdd Zdd Zdd ZdefddZedefd d!Zd"ee defd#d$ZdS )'r   Ncode_versiondeployment_configray_actor_optionsplacement_group_bundlesplacement_group_strategy%placement_group_bundle_label_selector!placement_group_fallback_strategymax_replicas_per_noderoute_prefixc
           
      C   sz   |d urt |tstdt| d|d u rt | _n|| _|| _|| _|| _|| _	|| _
|| _|| _|	| _|   d S )Nzcode_version must be str, got .)
isinstancestr	TypeErrortyper   r   r   r   r   r   r   r   r   r   compute_hashes)
selfr   r   r   r   r   r   r   r   r    r   P/home/ubuntu/vllm_env/lib/python3.10/site-packages/ray/serve/_private/version.py__init__   s   
zDeploymentVersion.__init__c                 C   s    t |}||_||_|  |S N)r   r   r   r   )clsdeployment_versionr   r   version_copyr   r   r   from_deployment_version2   s
   z)DeploymentVersion.from_deployment_versionreturnc                 C   s   | j S r!   )_hash)r   r   r   r   __hash__<   s   zDeploymentVersion.__hash__otherc                 C   s   t |tsdS | j|jkS )NF)r   r   r'   )r   r)   r   r   r   __eq__?   s   
zDeploymentVersion.__eq__c                 C   s0   | j |j kp| j|jkp| j|jkp| j|jkS )zkDetermines whether the new version requires actors of the current version to
        be restarted.
        )r   ray_actor_options_hashplacement_group_options_hashr   r   new_versionr   r   r   requires_actor_restartD   s   

z(DeploymentVersion.requires_actor_restartc                 C   s   | j |j kS )zhDetermines whether the new version requires calling reconfigure() on the
        replica actor.
        )reconfigure_actor_hashr-   r   r   r   requires_actor_reconfigureP   s   z,DeploymentVersion.requires_actor_reconfigurec                 C   s   | j j|j jkS )zDetermines whether lightweightly updating an existing replica to the new
        version requires broadcasting through long poll that the running replicas has
        changed.
        )r   max_ongoing_requestsr-   r   r   r   requires_long_poll_broadcastV   s   z.DeploymentVersion.requires_long_poll_broadcastc                 C   s   t | jpi }t|| _i }| jd ur| j|d< | jd ur"| j|d< | jd ur,| j|d< | jd ur6| j|d< t |}t|| _t | j	}t|| 
tjg | _t| jd| | t| jd | | 
tjtjg | _d S )Nbundlesstrategybundle_label_selectorfallback_strategyzutf-8)
_serializer   r   r+   r   r   r   r   r,   r   _get_serialized_optionsr
   NeedsActorReconfigurer0   r   encoder   r   NeedsReconfigurer'   )r   serialized_ray_actor_options combined_placement_group_options"serialized_placement_group_optionsserialized_route_prefixr   r   r   r   `   s\   








	

z DeploymentVersion.compute_hashesc              
   C   s   | j d urt| j nd}| jd urt| jnd}| jd ur%t| jnd}| jd ur/| jnd}| jd ur9| jnd}t| j| j	
 t| j|||||dS )N r   )r   r   r   r   r   r   r   r   )r   jsondumpsr   r   r   r   DeploymentVersionProtor   r   to_protor   )r   r   r   r   r   r   r   r   r   rE      s8   




zDeploymentVersion.to_protoprotoc              
   C   s|   t |jt|jt|j|jrt|jnd |j	r t|j	nd |j
r*t|j
nd |jr1|jnd |jr:|jdS d dS )N)r   r   r   r   r   )r   r   r	   
from_protor   rB   loadsr   r   r   r   r   r   )r"   rF   r   r   r   rG      s(   


zDeploymentVersion.from_protoupdate_typesc                 C   s   i }t | jdr| jjn| jj}| D ]:\}}|jjd}||v rNt| j|||< t	|| t
r?|| jddhd||< qt	|| trN||  ||< qd|v r[|d dd t	| jjtrqd	|v rq|d	= | jjt| S t|S )
zReturns a serialized dictionary containing fields of a deployment config that
        should prompt a deployment version update.
        model_fieldsupdate_typemetrics_interval_slook_back_period_s)includerequest_router_config_serialized_request_router_clsNuser_config)hasattrr   rJ   
__fields__items
field_infoextragetgetattrr   r   dictr   poprQ   bytesr8   )r   rI   reconfigure_dictfieldsoption_namefieldoption_weightr   r   r   r9      s8   

z)DeploymentVersion._get_serialized_options)NNNNNNr!   )__name__
__module____qualname__r   r   r	   r   r   floatr   intr    classmethodr%   r(   boolr*   r/   r1   r3   r   r[   rE   rD   rG   r
   r9   r   r   r   r   r      sZ    	

!	
2)r   c                 C   s   t tj| ddS )NT)	sort_keys)r   r;   rB   rC   )json_objectr   r   r   r8   
  s   r8   )rB   loggingcopyr   typingr   r   r   r   zlibr   ray._common.pydantic_compatr   ray.serve._private.configr	   ray.serve._private.utilsr
   r   ray.serve.configr   ray.serve.generated.serve_pb2r   rD   	getLoggerloggerr8   r   r   r   r   <module>   s    
 {