o
    1 iC$                     @   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	 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max_replicas_per_noderoute_prefixc                 C   sn   |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   compute_hashes)selfr   r   r   r   r   r   r    r   f/home/app/PaddleOCR-VL-test/.venv_paddleocr/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   )clsZdeployment_versionr   r   Zversion_copyr   r   r   from_deployment_version,   s
   z)DeploymentVersion.from_deployment_versionreturnc                 C   s   | j S r   )_hashr   r   r   r   __hash__6   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__9   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   Znew_versionr   r   r   requires_actor_restart>   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_reconfigureJ   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   Zmax_ongoing_requestsr*   r   r   r   requires_long_poll_broadcastP   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< t |}t|| _t | j}t|| t	j
g | _t| jd| | t| jd | | t	jt	j
g | _d S )NZbundlesZstrategyzutf-8)
_serializer   r   r(   r   r   r)   r   _get_serialized_optionsr
   ZNeedsActorReconfigurer,   r   encoder   r   ZNeedsReconfigurer#   )r   Zserialized_ray_actor_optionsZ combined_placement_group_optionsZ"serialized_placement_group_optionsZserialized_route_prefixr   r   r   r   Z   sH   






	

z DeploymentVersion.compute_hashesc                 C   s^   t | j| j t| j| jd urt| jnd| jd ur | jnd| j	d ur+| j	dS ddS )N r   )r   r   r   r   r   r   )
DeploymentVersionProtor   r   to_protojsondumpsr   r   r   r   r$   r   r   r   r4      s   



zDeploymentVersion.to_protoprotoc                 C   sT   t |jt|jt|j|jrt|jnd |j	r|j	nd |j
r&|j
dS d dS )N)r   placement_group_versionr   )r   r   r	   
from_protor   r5   loadsr   r   r8   r   )r    r7   r   r   r   r9      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_fieldsZupdate_typeZmetrics_interval_sZlook_back_period_s)includeZrequest_router_configZ_serialized_request_router_clsNuser_config)hasattrr   r<   Z
__fields__itemsZ
field_infoextragetgetattrr   r   dictr   popr>   bytesr/   )r   r;   Zreconfigure_dictfieldsZoption_namefieldZoption_weightr   r   r   r0      s8   

z)DeploymentVersion._get_serialized_options)NNNNr   )__name__
__module____qualname__r   r   r	   r   r   floatintr   classmethodr!   r%   r   boolr'   r+   r-   r.   r   rF   r4   r3   r9   r
   r0   r   r   r   r   r      sN    
	
*r   c                 C   s   t tj| ddS )NT)	sort_keys)r   r1   r5   r6   )Zjson_objectr   r   r   r/      s   r/   )r5   loggingcopyr   typingr   r   r   r   zlibr   Zray._common.pydantic_compatr   Zray.serve._private.configr	   Zray.serve._private.utilsr
   r   Zray.serve.configr   Zray.serve.generated.serve_pb2r   r3   	getLoggerloggerr/   r   r   r   r   <module>   s    
 I