
    i
                         d Z ddlZddlm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  ed	d	
       G d d             Z ed	       G d d             Z G d d      Zy)z:Resource coordination helpers for workflow node execution.    N)contextmanager)	dataclass)DictIterableListTuple)Node)get_node_registration)
LogManagerT)frozenslotsc                   &    e Zd ZU dZeed<   eed<   y)ResourceRequestz)Represents a single resource requirement.keylimitN)__name__
__module____qualname____doc__str__annotations__int     O/Users/bowang/.openclaw/workspace/ChatDev/workflow/executor/resource_manager.pyr   r      s    3	HJr   r   )r   c                   6    e Zd ZU ej                  ed<   eed<   y)_ResourceSlot	semaphorer   N)r   r   r   	threading	Semaphorer   r   r   r   r   r   r      s    """Jr   r   c                       e Zd ZdZddedz  fdZedefd       Zdede	e
   fdZed	ee
   fd
       Zde
dej                  fdZdeddfdZy)ResourceManagerz/Coordinates shared resource usage across nodes.Nlog_managerc                 R    || _         t        j                         | _        i | _        y N)r#   r   Lock_lock
_resources)selfr#   s     r   __init__zResourceManager.__init__   s    &^^%
46r   nodec              #      K   | j                  |      }| j                  |      5  d ddd       y# 1 sw Y   yxY ww)z1Acquire all resources required by the given node.N)_resolve_node_requests_acquire_resources)r)   r+   requestss      r   
guard_nodezResourceManager.guard_node#   s4      ..t4$$X. /..s   #?3	?<?returnc                     t        |j                        }|j                  }g }|j                  }|j                  }|r#|r!|dkD  r|j                  t        ||             |S )Nr   )r   r   )r
   	node_typecapabilitiesresource_keyresource_limitappendr   )r)   r+   registrationcapsr/   r   r   s          r   r-   z&ResourceManager._resolve_node_requests*   sY    ,T^^<((*,##5UQYOOO5ABr   r/   c              #     K   g }	 t        |d       D ]^  }| j                  |      }| j                  d|j                          |j	                          |j                  |j                  |f       ` d  t        |      D ])  \  }}|j                          | j                  d|        + y # t        |      D ])  \  }}|j                          | j                  d|        + w xY ww)Nc                     | j                   S r%   r   )items    r   <lambda>z4ResourceManager._acquire_resources.<locals>.<lambda>8   s    TXXr   r<   zAcquiring resource zReleased resource )sorted_get_or_create_resource
_log_debugr   acquirer7   reversedrelease)r)   r/   acquiredrequestr   r   s         r   r.   z"ResourceManager._acquire_resources4   s     :<
	<!(0EF 88A	"5gkk] CD!!#i 89	 G
 "*8"4Y!!#"4SE :; #5(8"4Y!!#"4SE :; #5s   C-A3B1 98C-19C**C-rF   c                    | j                   5  | j                  j                  |j                        }|r|j                  |j                  k7  rd }|sMt        t        j                  |j                        |j                        }|| j                  |j                  <   |j                  cd d d        S # 1 sw Y   y xY w)N)r   r   )	r'   r(   getr   r   r   r   r    r   )r)   rF   slots      r   r@   z'ResourceManager._get_or_create_resourceC   s    ZZ??&&w{{3D

gmm3$'11'--@!-- 04,>> ZZs   BB44B=messagec                 T    | j                   r| j                   j                  |       y y r%   )r#   debug)r)   rJ   s     r   rA   zResourceManager._log_debugP   s$    ""7+ r   r%   )r   r   r   r   r   r*   r   r	   r0   r   r   r-   r   r.   r   r    r@   r   rA   r   r   r   r"   r"      s    97J$5 7
 t  4 D4I  <8O+D < <" "9CVCV ",# ,$ ,r   r"   )r   r   
contextlibr   dataclassesr   typingr   r   r   r   entity.configsr	   runtime.node.registryr
   utils.log_managerr   r   r   r"   r   r   r   <module>rS      sh    @  % ! . .  7 ( $d#  $   
7, 7,r   