
    Ki=                        d Z ddlmZ ddlZddlmZ ddlmZmZ ddl	m
Z
 dZdZh d	ZddZddZddZddZddZddZddZdS )z*Shared helpers for tool backend selection.    )annotationsN)Path)AnyDictenv_var_enabledlocalauto>   r
   directmanagedreturnboolc                      t          d          S )zGReturn True when the hidden Nous-managed tools feature flag is enabled. HERMES_ENABLE_NOUS_MANAGED_TOOLSr        7/home/ubuntu/hermes-agent/tools/tool_backend_helpers.pymanaged_nous_tools_enabledr      s    =>>>r   valueobject | Nonestrc                    t          | pt                                                                                    }|pt          S )z)Return a normalized browser provider key.)r   _DEFAULT_BROWSER_PROVIDERstriplower)r   providers     r    normalize_browser_cloud_providerr      s9    55566<<>>DDFFH000r   c                    t          | pt                                                                                    }|t          v r|S t          S )z=Return the requested modal mode when valid, else the default.)r   _DEFAULT_MODAL_MODEr   r   _VALID_MODAL_MODES)r   modes     r   coerce_modal_moder"      sD    u++,,2244::<<D!!!r   c                     t          |           S )z)Return a normalized modal execution mode.)r"   )r   s    r   normalize_modal_moder$   #   s    U###r   c                     t          t          j        d          rt          j        d          p't          j                    dz                                            S )z?Return True when direct Modal credentials/config are available.MODAL_TOKEN_IDMODAL_TOKEN_SECRETz.modal.toml)r   osgetenvr   homeexistsr   r   r   has_direct_modal_credentialsr,   (   sQ    	#	$	$	H3G)H)H 	2IKK-'//11  r   
modal_mode
has_directmanaged_readyDict[str, Any]c                   t          |           }t          |           }|dk    ot                       }|dk    rt                      r|rdnd}n%|dk    r|rdnd}nt                      r|rdn|rdnd}||||||dS )zResolve direct vs managed Modal backend selection.

    Semantics:
    - ``direct`` means direct-only
    - ``managed`` means managed-only
    - ``auto`` prefers managed when available, then falls back to direct
    r   Nr   )requested_moder!   r.   r/   managed_mode_blockedselected_backend)r"   r$   r   )r-   r.   r/   r2   normalized_moder3   r4   s          r   resolve_modal_backend_stater6   0   s     'z22N*:66O)#H,F,H,H(H  )##(B(D(D``99\`	H	$	$'1;88t(B(D(D||99hr\|\d\dx| ) & 4,  r   c                 z    t          j        dd          pt          j        dd                                          S )zCPrefer the voice-tools key, but fall back to the normal OpenAI key.VOICE_TOOLS_OPENAI_KEY OPENAI_API_KEY)r(   r)   r   r   r   r   resolve_openai_audio_api_keyr;   T   s7     		*B// 	+9%r**eggr   )r   r   )r   r   r   r   )r-   r   r.   r   r/   r   r   r0   )r   r   )__doc__
__future__r   r(   pathlibr   typingr   r   utilsr   r   r   r    r   r   r"   r$   r,   r6   r;   r   r   r   <module>rA      s   0 0 " " " " " " 				               ! ! ! ! ! !#  222 ? ? ? ?
1 1 1 1   $ $ $ $
   ! ! ! !H     r   