
    ik
                     v   U d 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  ee      j                         j                   d   Zedz  j                         Zi Zeeeeef   f   ed	<   d
ededz  dee   fdZdee   defdZdedeeef   fdZddd
ededz  de	eeef   eeef   ef   fdZdgZy)z9Utilities for loading reusable subgraph YAML definitions.    )deepcopy)Path)AnyDictListTuple)ConfigError)	read_yaml   yaml_instance_SUBGRAPH_CACHE	file_pathparent_sourceNreturnc                 |   t        |       }|j                         r|gS g }t        |z  j                         }|j	                  |       |rKt        |      }|j                         r|j                  n|}|j	                  ||z  j                                |j	                  t        |z  j                                |S )N)r   is_absolute_DEFAULT_SUBGRAPH_ROOTresolveappendis_fileparent
_REPO_ROOT)r   r   path
candidatesdefault_candidater   
parent_dirs          E/Users/bowang/.openclaw/workspace/ChatDev/workflow/subgraph_loader.py_resolve_candidate_pathsr      s    	?DvJ/$6??A'(m$&,nn&6V]]F
:,5578 zD(1134    r   c                     g }| D ]0  }|j                  t        |             |j                         s.|c S  t        ddj	                  |       |r
|d         d       )Nz subgraph YAML not found; tried: z, r   )r   strexistsr	   join)r   checked	candidates      r   _resolve_existing_pathr(   "   sl    G	s9~&   
*499W+=*>?#WR[ )- r   r   c                 <   t        |       }t        |t              st        dt	        |             |j                  d      }||}t        |t              st        d|  d      t        |j                  d      t              r|j                  d      ni }||dS )Nz$subgraph YAML root must be a mappingr"   graphz(subgraph graph section must be a mappingz.graphvars)r*   r+   )r
   
isinstancedictr	   r#   get)r   datagraph_block
vars_blocks       r   _load_graph_dictr2   .   s    T?DdD!@s4yQQ((7#Kk4(DdVSY?[[%/0@$%G&!RJ *55r   )r   c                    t        | |      }t        |      j                         }|t        vrt	        |      t        |<   t        |   }t        |d         }t        |d         }||t        |      fS )z_Load a subgraph definition from disk.

    Returns a tuple of (graph_dict, resolved_path).
    r*   r+   )r   r(   r   r   r2   r   r-   r#   )r   r   r   resolved_pathpayload
graph_dict	vars_dicts          r   load_subgraph_configr8   ?   ss     *)]CJ*:6>>@MO+)9-)H&m,G''*+JWV_%Iy#m"444r   r8   )__doc__copyr   pathlibr   typingr   r   r   r   entity.configsr	   utils.io_utilsr
   __file__r   parentsr   r   r   r#   __annotations__r   r(   r2   r8   __all__ r   r   <module>rD      s   ?   ) ) & $(^##%--a0
$6??A .0dDcN*+ 0 C$J 4PT: &	tDz 	d 	64 6DcN 6" IM 5C 53: 5QVW[\_ad\dWegkloqtltguwzWzQ{ 5$ "
"r   