
    yj              	          d Z ddlZddlmZmZ ddlmZ ddlmZ ddl	m
Z
mZ  ej        e          Zdeeef         deeef         d	dfd
Zdeeef         d	eeef         fdZ	 dde
dz  dej        dz  dej        dz  d	efdZdS )z=Configuration resolution utilities for hierarchical settings.    N)Anycast)models)settings)MessageConfigurationResolvedConfigurationbaseupdatereturnc           	      t   |                                 D ]\  }}|t          |t                    r|| v r|t          | |         t                    rat          t	          t          t
          t          f         | |                   t	          t          t
          t          f         |                     || |<   dS )z[
    Recursive update of a dictionary.
    Skips None values in the update dictionary.
    N)items
isinstancedictdeep_updater   strr   )r	   r
   keyvalues       @/DATA/AppData/hermes/projects/honcho/src/utils/config_helpers.pyr   r      s    
 llnn  
U=eT"" 	sd{{z$s)T7R7R{T#s(^T#Y77d38ne9T9TUUUUDII     rawc                    t          |           }|                    d          }d|v }t          |t                     r5t          t          t           t          t
          f         |                    }ni }|                    d          du}|s|                    d          }t          |t                     r5t          t          t           t          t
          f         |                    }ni }|                    d          t          |d                   |d<   |s|                    d          du rd|d<   |s|r||d<   |                    dd           |                    dd           |S )a  
    Normalize a workspace/session/message configuration dict to match the current
    `ResolvedConfiguration` schema.

    This function exists to preserve backwards compatibility with older clients/tests
    that used legacy configuration keys (e.g. `deriver.enabled` or `skip_deriver`).

    Behavior:
    - If `reasoning.enabled` is not explicitly set, but `deriver.enabled` is present,
      `reasoning.enabled` is derived from `deriver.enabled`.
    - If `skip_deriver` is explicitly `True`, `reasoning.enabled` is forced to `False`
      unless `reasoning.enabled` was already explicitly set.
    - Legacy keys are removed from the returned dict to avoid polluting the resolved
      configuration with unused fields.
    	reasoningenabledNderiverskip_deriverTF)r   getr   r   r   r   boolpop)r   
normalizedreasoning_rawreasoning_presentr   reasoning_enabled_explicitderiver_rawr   s           r   normalize_configuration_dictr$      sc     "&cJNN;//M#z1-&& d38nm<<==			!*y!9!9!E% < nnY//k4(( 	4S#X<<==GGG;;y!!-#'	(:#;#;Ii % %*..*H*HD*P*P$	) ,I ,"+
;NN9d###NN>4(((r   message_configurationsession	workspacec                    t           j        j        ddt           j        j        t           j        j        dt           j        j        t           j        j        t           j        j        ddt           j        j        id}|"t          |t          |j
                             |"t          |t          |j
                             | 1t          |t          |                     d                               t          d	i |S )
a  
    Resolve session configuration with hierarchical fallback.

    Resolution hierarchy:
    1. Message configuration
    2. Session configuration
    3. Workspace configuration
    4. Global defaults from settings

    Args:
        message_configuration: Optional message configuration
        session: Optional session model
        workspace: Optional workspace model

    Returns:
        ResolvedConfiguration
    N)r   custom_instructions)usecreate)r   messages_per_short_summarymessages_per_long_summaryr   )r   	peer_cardsummarydreamT)exclude_none )r   DERIVERENABLED	PEER_CARDSUMMARYMESSAGES_PER_SHORT_SUMMARYMESSAGES_PER_LONG_SUMMARYDREAMr   r$   configuration
model_dumpr   )r%   r&   r'   config_dicts       r   get_configurationr=   P   s   2  '/#'
 

 %-(0
 

  '/*2*:*U)1)9)S
 

 X^34# #K( K!=i>U!V!VWWWK!=g>S!T!TUUU((%00d0CC 	
 	
 	
 !//;///r   )N)__doc__loggingtypingr   r   srcr   
src.configr   src.schemasr   r   	getLogger__name__loggerr   r   r   r$   Session	Workspacer=   r2   r   r   <module>rI      sX   C C                            
 
	8	$	$d38n d38n     .d38n .c3h . . . .h *.90 90/$690^d"90 $&90 	90 90 90 90 90 90r   