
    iݤ                       d Z ddlmZ ddlZddlZddlZddlmZmZm	Z	  ej
        e          ZddlmZ ddlmZmZmZmZ ddlmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z& dd	l'm(Z( d8dZ)d9dZ*d:dZ+d;dZ,d<d=dZ-d>dZ.h dZ/d?dZ0dddd@d&Z1d<dAd(Z2	 d<dBd+Z3dCd,Z4ddd-dDd0Z5ddd-dEd1Z6ddd-dFd2Z7dddd3dGd4Z8dHd7Z9dS )IzGShared runtime provider resolution for CLI, gateway, cron, and helpers.    )annotationsN)AnyDictOptional)auth)CredentialPoolPooledCredentialget_custom_provider_pool_key	load_pool)	AuthErrorDEFAULT_CODEX_BASE_URLDEFAULT_QWEN_BASE_URLPROVIDER_REGISTRY_agent_key_is_usableformat_auth_errorresolve_provider resolve_nous_runtime_credentials!resolve_codex_runtime_credentials resolve_qwen_runtime_credentials(resolve_gemini_oauth_runtime_credentials$resolve_api_key_provider_credentials-resolve_external_process_provider_credentialshas_usable_secret)get_compatible_custom_providersload_config)OPENROUTER_BASE_URLvaluestrreturnc                v    |                                                                                      dd          S )N -)striplowerreplace)r   s    C/home/agentuser/.hermes/hermes-agent/hermes_cli/runtime_provider.py_normalize_custom_provider_namer'   "   s,    ;;==  ((c222    base_urlOptional[str]c                    | pd                                                                                     d          }d|v rdS d|v rd|vrdS dS )zAuto-detect api_mode from the resolved base URL.

    Direct api.openai.com endpoints need the Responses API for GPT-5.x
    tool calls with reasoning (chat/completions returns 400).
     /zapi.x.aicodex_responseszapi.openai.com
openrouterN)r#   r$   rstrip)r)   
normalizeds     r&   _detect_api_mode_for_urlr2   &   sd     .b''))//1188==JZ  :%%,j*H*H  4r(   c                   | sdS 	 ddl }|                     d          }|                    d          s|dz  }|                    |dz   d          }|j        r[|                                                    d	g           }t          |          d
k    r |d                             dd          }|r|S n# t          $ r Y nw xY wdS )zFQuery a local server for its model name when only one model is loaded.r,   r   Nr-   z/v1z/models   )timeoutdata   id)requestsr0   endswithgetokjsonlen	Exception)r)   r9   urlrespmodelsmodel_ids         r&   _auto_detect_local_modelrD   4   s     rooc""||E"" 	5LC||C)OQ|777 	$YY[[__VR00F6{{a!!9==r22 $#O   2s   B.B6 6
CCDict[str, Any]c                 r   t                      } |                     d          }t          |t                    rt          |          }|                    d          s |                    d          r|d         |d<   |                    d          pd                                }|                    d          pd                                }d|v pd|v }| }|r|r|rt          |          }|r||d<   |S t          |t                    r*|                                rd|                                iS i S )Nmodeldefaultr,   r)   	localhostz	127.0.0.1)r   r;   
isinstancedictr#   rD   r   )config	model_cfgcfgrH   r)   is_localis_fallbackdetecteds           r&   _get_model_configrR   I   sB   ]]F

7##I)T"" 9oowwy!! 	*cggg&6&6 	* \C	N779%%+2244GGJ''-24466(*EkX.E!k 	* 	* 	*/99H *!)I
)S!! .ioo&7&7 .9??,,--Ir(   providerconfigured_providerboolc                    | pd                                                                 }|pd                                                                 }|sdS |dk    r|dk    p|                    d          S ||k    S )aT  Check whether a persisted api_mode should be honored for a given provider.

    Prevents stale api_mode from a previous provider leaking into a
    different one after a model/provider switch.  Only applies the
    persisted mode when the config's provider matches the runtime
    provider (or when no configured provider is recorded).
    r,   Tcustomcustom:)r#   r$   
startswith)rS   rT   normalized_providernormalized_configureds       r&   $_provider_supports_explicit_api_moder\   _   s     $>r002288::06B==??EEGG  th&&$0_4I4T4TU^4_4__ $777r(   rM   api_keyc                   t          |                     d          pd                                                                          }t	          |                     d                    }|rt          d|          r|S t          |                     d          pd                                          }|sdS 	 ddlm}  |||	          S # t          $ r Y dS w xY w)
NrS   r,   api_modecopilotrH   chat_completionsr   )copilot_model_api_mode)r]   )	r   r;   r#   r$   _parse_api_moder\   hermes_cli.modelsrb   r?   )rM   r]   rT   configured_mode
model_namerb   s         r&   _copilot_runtime_api_moderg   p   s    immJ77=2>>DDFFLLNN%immJ&?&?@@O ?	K^__ Y]]9--344::<<J "!!"<<<<<<%%j'BBBB " " "!!!"s   :C 
CC>   r.   bedrock_conversera   anthropic_messagesrawr   c                    t          | t                    r1|                                                                 }|t          v r|S dS )z@Validate an api_mode value from config. Returns None if invalid.N)rJ   r   r#   r$   _VALID_API_MODES)rj   r1   s     r&   rc   rc      sD    #s YY[[&&((
)))4r(   )rM   poolentryr	   requested_providerOptional[Dict[str, Any]]rm   Optional[CredentialPool]c           	        |pt                      }t          |dd           pt          |dd           pd                    d          }t          |dd           pt          |dd          }d}| dk    rd	}|pt          }n| d
k    rd}|pt          }n| dk    rd}|pd}ny| dk    rd}t          |                    d          pd                                                                          }d}	|dk    rIt          |                    d          pd                                                              d          }	|	p|pd}n| dk    r|pt          }n| dk    rd	}n| dk    rd}n| dk    r5t          |t          |dd                    }|pt          d         j        }npt          |                    d          pd                                                                          }
t          j        |           }|o0|                    d          |j                            d          k    }|
| k    rO|rMt          |                    d          pd                                                              d          }	|	r|	}t          |                    d                    }|rt          | |
          r|}nU| dv r'ddlm}  || |                    dd                    }n*|                    d                              d          rd}|dk    r| dv rt%          j        dd|          }| |||t          |dd          ||dS )Nruntime_base_urlr)   r,   r-   runtime_api_keyaccess_tokenra   openai-codexr.   
qwen-oauthgoogle-gemini-clizcloudcode-pa://google	anthropicri   rS   https://api.anthropic.comr/   xainousr`   r_   zopencode-zenzopencode-gor   opencode_model_api_moderH   
/anthropic/v1/?$sourcerm   )rS   r_   r)   r]   r   credential_poolro   )rR   getattrr0   r   r   r   r;   r#   r$   r   rg   r   inference_base_urlrc   r\   rd   r   r:   resub)rS   rn   ro   rM   rm   r)   r]   r_   cfg_providercfg_base_urlrT   pconfigpool_url_is_defaultre   r   s                  r&    _resolve_runtime_from_pool_entryr      s    0.00I1488bGE:W[<\<\b`bjjknooHe.55[XZ9[9[G!H>!!$55	\	!	!%44	(	(	(%66	[	 	 '9==44:;;AACCIIKK;&&y}}Z88>B??EEGGNNsSSLJ8J/J	\	!	!22	U		$	V		%	Y		,YGXZ\8]8]^^N0;N!)--
";";"ArBBHHJJPPRR
 $'11%h(//#*>*>'B\BcBcdgBhBh*h(**/B*y}}Z88>B??EEGGNNsSSL ('))--
*C*CDD 	,CHNabb 	,&HH888AAAAAA..xyRT9U9UVVHH__S!!**<88 	,+H '''H8W,W,W6)R22 %6220  r(   	requestedc                   | r:|                                  r&|                                                                  S t                      }|                    d          }t	          |t
                    r:|                                 r&|                                                                 S t          j        dd                                                                           }|r|S dS )z=Resolve provider request from explicit arg, config, then env.rS   HERMES_INFERENCE_PROVIDERr,   auto)r#   r$   rR   r;   rJ   r   osgetenv)r   rM   r   env_providers       r&   resolve_requested_providerr      s     )Y__&& )  &&(((!##I==,,L,$$ ,););)=)= ,!!##))+++ 98"==CCEEKKMML 6r(   provider_labelapi_mode_overridec                L   t          |           }|sdS 	 t          |          }|                                sdS |                                }|dS t	          |dd          pt	          |dd          }|sdS ||pt          |           pd| |d| |dS # t          $ r Y dS w xY w)zXCheck if a credential pool exists for a custom endpoint and return a runtime dict if so.Nrt   ru   r,   ra   zpool:)rS   r_   r)   r]   r   r   )r
   r   has_credentialsselectr   r2   r?   )r)   r   r   pool_keyrm   rn   pool_api_keys          r&   _try_resolve_from_custom_poolr      s     ,H55H t""##%% 	4=4u&7>>d'%Q_acBdBd 	4&)e-Eh-O-OeSe #(h((#
 
 	
    tts"   #B B $B 8B 
B#"B#c           	     	   t          | pd          }|r|dk    rd S |dk    rd S |                    d          s'	 t          j        |           d S # t          $ r Y nw xY wt                      }|                    d          }t          |t                    r|	                                D ]\  }}t          |t                    st          |          }t          |                    dd          pd                                          }|r't          j        |d                                          nd}|s7t          |                    dd          pd                                          }|||d| hv r|                    d          p+|                    d	          p|                    d
          pd}	|	rC|                    d|          |	                                ||                    dd          dc S |                    dd          }
|
rt          |
          }||
|d| hv rr|                    d          p+|                    d	          p|                    d
          pd}	|	r/|
|	                                ||                    dd          dc S |                    d          }t          |t                    rt                              d           d S t!          |          }|sd S |D ]}t          |t                    s|                    d          }|                    d
          }	t          |t                    rt          |	t                    snt          |          }d| }t          |                    dd          pd                                          }|rt          |          nd}|rd| nd}|||||hvr|                                |	                                t          |                    dd          pd                                          d}t          |                    dd          pd                                          }|r||d<   |r||d<   t#          |                    d                    }|r||d<   t          |                    dd          pd                                          }|r||d<   |c S d S )Nr,   rW   r   rX   	providerskey_envr]   apir@   r)   namedefault_model)r   r)   r]   rG   custom_providerszcustom_providers in config.yaml is a dict, not a list. Each entry must be prefixed with '-' in YAML. Run 'hermes doctor' for details.provider_key)r   r)   r]   r_   rG   )r'   rY   auth_modr   r   r   r;   rJ   rK   itemsr   r#   r   r   loggerwarningr   rc   )ro   requested_normrL   r   ep_namern   	name_normr   resolved_api_keyr)   display_namedisplay_normr   r   menu_keyr   provider_key_normprovider_menu_keyresultr_   rf   s                        r&   _get_named_custom_providerr     ss   45G5M2NNN ^x77t
 t$$Y// 	%n555 4  	 	 	D	
 ]]F 

;''I)T"" $'oo// #	 #	NGUeT** 7@@I%))Ir228b99??AAGAHPry"55;;===b# O#&uyyB'?'?'E2#F#F#L#L#N#N '96K	6K6K!LLL 99U++^uyy/?/?^599ZCXCX^\^  %		&' : :$,NN$4$4#3!&?B!?!?	     !99VR00L >|LL!lLBZLBZBZ%[[[$yy//b599U3C3CbuyyQ[G\G\b`bH $0(0(8(8'7%*YY%C%C	       zz"455"D)) /	
 	
 	

 t6v>> t!  %&& 	yy  99Z(($$$ 	Jx,E,E 	3D99	(Y((599^R88>B??EEGGMYa;LIII_a=NV9&7999TV)X7HJ[!\\\JJLL ((599Y339r::@@BB
 

 eii	2..4"55;;== 	( 'F9 	2%1F>""599Z#8#899 	*!)F:7B//5266<<>>
 	)(F7O4s   A 
AAexplicit_api_keyexplicit_base_urlr   r   c           
         t          |           }|sd S |pd                                p|                    dd                              d          }|sd S t	          |d|                    d                    }|r|                    d          }|r||d<   |S |pd                                t          |                    dd          pd                                          t          j        t          |                    dd          pd                                          d                                          t          j        d	d                                          t          j        d
d                                          g}t          d |D             d          }d|                    d          pt          |          pd||pdd|                    d|            d}	|                    d          r|d         |	d<   |	S )Nr,   r)   r-   rW   r_   rG   r]   r   OPENAI_API_KEYOPENROUTER_API_KEYc              3  8   K   | ]}t          |          |V  d S N)r   .0	candidates     r&   	<genexpr>z0_resolve_named_custom_runtime.<locals>.<genexpr>  s1      bb)EVW`EaEabIbbbbbbr(   ra   no-key-requiredzcustom_provider:r   rS   r_   r)   r]   r   )
r   r#   r;   r0   r   r   r   r   nextr2   )
ro   r   r   custom_providerr)   pool_resultrf   api_key_candidatesr]   r   s
             r&   _resolve_named_custom_runtimer   y  s8    11CDDO t 
	 b'')) 	/z2..fSkk   t 0(ODWDWXbDcDcddK  %((11
 	.#-K  
	R&&((O	2..4"55;;==
	#o)))R88>B??EEGGLLRRTT
	"B''--//
	&++1133 bb/AbbbdfggG #''
33 #H--//V_%8%8AS%T%TVV F 7## 3)'2wMr(   c           	     .   t                      }t          |                    d          t                    r|                    d          nd}t          |                    d          t                    r|                    d          nd}d}dD ]V}|                    |          }t          |t                    r*|                                r|                                } nW| pd                                                                }	|                                                                }t          j        dd                                          }
d}|                                r!|s|	dk    r|r|dk    rd}n|	d	k    r|d	k    rd}|pd                                p |r|                                ndp|
pt          	                    d
          }d|v }|r*|t          j        d          t          j        d          g}n[d|                                v }||r|nd|rt          j        d          ndt          j        d          t          j        d          g}t          d |D             d          }|s|rdnd}|	d	k    rd	nd}|d	k    r7|r5t          ||t          |                    d                              }|r|S |d	k    r|s|sd}|t          |                    d                    pt          |          pd|||dS )Nr)   r,   rS   )r]   r   r   Fr   TrW   r-   zopenrouter.air   r   z
ollama.comOLLAMA_API_KEYc              3  z   K   | ]6}t          |          t          |pd                                           V  7dS )r,   N)r   r   r#   r   s     r&   r   z._resolve_openrouter_runtime.<locals>.<genexpr>  sI      jj)M^_hMiMijY_"			#	#	%	%jjjjjjr(   explicitz
env/configr/   r_   r   ra   r   )rR   rJ   r;   r   r#   r$   r   r   r   r0   r   r   rc   r2   )ro   r   r   rM   r   r   cfg_api_keykvr   env_openrouter_base_urluse_config_base_urlr)   _is_openrouter_urlr   _is_ollama_urlr]   r   effective_providerr   s                       r&   _resolve_openrouter_runtimer     s    "##I0:9==;T;TVY0Z0Zb9==,,,`bL0:9==;T;TVY0Z0Zb9==,,,`bLK  MM!a 	!'')) 	''))KE(.B5577==??N%%''--//L i(=rBBHHJJ
   '$5 'V## +<6#9#9&*#x''LH,D,D"& 
	 b'')) 	$7?L   R	"	 fSkk  )H4 
I*++I&''
 &)9)99/7[[R,:BRY'(((I&''I*++
 jj7Ijjj
 G
 -T0ATZZF &4x%?%?\ X%%(%3(/)--
:S:S*T*T
 
  	X%%g%>P%# '#IMM*$=$=>> #H--  r(   c                	   t          |pd                                          }t          |pd                                                              d          }|s|sd S | dk    rt          |                    d          pd                                                                          }d}|dk    rIt          |                    d          pd                                                              d          }|p|pd}|}|s!ddlm}	  |	            }|st          d	          dd
||d|dS | dk    r|pt          }|}d }
|sft                      }|                    dd          }|                    d          }
|s+|                    dd                              d          p|}dd||d|
|dS | dk    rt          j        d          pi }|pRt          |                    d          pt          j                                                                      d          }|p5t          |                    d          pd                                          }|                    d          p|                    d          }|st          t          dt          t!          j        dd                              t%          t!          j        dd                              }|                    dd          }|                    d          }|s+|                    dd                              d          p|}dd||d||dS t'          j        |           }|r|j        dk    rud}|j        r?t!          j        |j        d                                                              d          }|}|sF| dv r9t-          |           }|                    dd                              d          }n	|p|j        }|}|sPt-          |           }|                    dd          }|s)|                    dd                              d          }d}| d k    rt1          ||          }nZ| d!k    rd}nQt3          |                    d"                    }|r|}n*|                    d                              d#          rd
}| ||                    d          |d|dS d S )$Nr,   r-   ry   rS   r)   rz   r   resolve_anthropic_tokenNo Anthropic credentials found. Set ANTHROPIC_TOKEN or ANTHROPIC_API_KEY, run 'claude setup-token', or authenticate with 'claude /login'.ri   r   rS   r_   r)   r]   r   ro   rv   r]   last_refreshr.   rS   r_   r)   r]   r   r   ro   r|   r   	agent_keyagent_key_expires_at
expires_at<   HERMES_NOUS_MIN_KEY_TTL_SECONDS1800HERMES_NOUS_TIMEOUT_SECONDS15min_key_ttl_secondstimeout_secondsra   rS   r_   r)   r]   r   r   ro   )zkimi-codingzkimi-coding-cnr`   r{   r_   r   )r   r#   r0   r;   r$   agent.anthropic_adapterr   r   r   r   r   get_provider_auth_stateDEFAULT_NOUS_INFERENCE_URLr   maxintr   r   floatr   	auth_typebase_url_env_varr   r   rg   rc   r:   )rS   ro   rM   r   r   r   r   r)   r]   r   r   credsstater   r   env_urlr_   re   s                     r&   _resolve_explicit_runtimer     sz    +1r2288::-344::<<CCCHH $5 t;9==44:;;AACCIIKK;&&y}}Z88>B??EEGGNNsSSL$SS8S" 	GGGGGG--//G V  
 $,  "4
 
 	
 >!!$>(>" 	M577Eii	2..G 99^44L$ M 99Z44;;C@@LH&)  ("4
 
 	
 6088>B o599122Yh6YZZ``bbiijmnn 	 #Oc%))K*@*@*FB&G&G&M&M&O&OYY566Q%))L:Q:Q
 	M4$'C	:[]c0d0d,e,e$f$f %bi0Mt&T&T U U  E ii	2..G<00J$ M 99Z44;;C@@LH*  $"4
 
 	
  #H--G '
7$	11# 	Ri 8"==CCEELLSQQG$ 	A<<<<XFF 99Z44;;C@@"@g&@" 	A8BBEii	2..G A 99Z44;;C@@%y  0GDDHH(HH-immJ.G.GHHO 0*%%..|<< 0/ !  ,, "4
 
 	
 4r(   )r   r   r   c                   t          |           }t          |||          }|r||d<   |S t          |||          }t                      }t	          |||||          }|r|S |dk    }|dk    rt          |                    d          pd                                                                          }	t          |                    d          pd                                          }
t          j
        d	d                                          }t          j
        d
d                                          }t          |p|p|          }|
r|	dv rd}t          |p|          }|dv o| o| }	 |rt          |          nd}n# t          $ r d}Y nw xY w|r|                                r|                                }d}|"t!          |dd          pt!          |dd          }|dk    r||rt#          dt%          t          j
        dd                              }t!          |dd          t!          |dd          d}t'          ||          st(                              d           d}||rt-          |||||          S |dk    r	 t/          t#          dt%          t          j
        dd                              t1          t          j
        dd                              }dd|                    dd                              d          |                    dd          |                    d d!          |                    d"          |d#S # t4          $ r$ |d$k    r t(                              d%           Y nw xY w|d&k    r	 t9                      }d&d'|                    dd                              d          |                    dd          |                    d d(          |                    d)          |d*S # t4          $ r$ |d$k    r t(                              d+           Y nw xY w|d,k    r	 t;                      }d,d|                    dd                              d          |                    dd          |                    d d-          |                    d.          |d/S # t4          $ r$ |d$k    r t(                              d0           Y nw xY w|d1k    r	 t=                      }d1d|                    dd          |                    dd          |                    d d2          |                    d.          |                    d3d          |                    d4d          |d5	S # t4          $ r$ |d$k    r t(                              d6           Y nw xY w|d7k    rt?          |          }d7d|                    dd                              d          |                    dd          |                    d8d          tA          |                    d9          pg           |                    d d:          |d;S |d<k    rd=d>l!m"}  |            }|st5          d?          t          |                    d          pd                                                                          }	d}
|	d<k    r<|                    d          pd                                                    d          }
|
pd@}d<dA||dB|dCS |dDk    rd=dEl#m$}m%}m&}m'} |dFv }|s |            st5          dGdHI          d=dJl(m)}  |                                dDi           }|                    dK          pd                                p	 |            } |            pdL} |                    dMi           }!d}"|!                    dN          rf|!                    dO          rQ|!dN         |!dO         dP}"|!                    dQ          r|!dQ         |"dR<   |!                    dS          r|!dS         |"dS<   t          |                    dT          pd                                          }# ||#          rdDdAdU| dVdW| |d|dX}$ndDdYdU| dVdW| ||dZ}$|"r|"|$d[<   |$S tU          j        |          }%|%r-|%j+        dk    r!tY          |          }t          |                    d          pd                                                                          }	d}
|	|k    r<|                    d          pd                                                    d          }
|
p(|                    dd                              d          }d}&|d\k    r%t[          ||                    dd                    }&n|d]k    rd'}&nt          |                    d          pd                                                                          }'t]          |                    d^                    }(|(rt_          ||'          r|(}&nU|d_v r'd=d`l0m1})  |)||                    dTd                    }&n*|                    d          2                    da          rdA}&|&dAk    r|d_v rtg          j4        dbd|          }||&||                    dd          |                    d dB          |dCS tk          |||          }$||$d<   |$S )cz9Resolve runtime provider credentials for agent execution.)ro   r   r   ro   r   )rS   ro   rM   r   r   r/   rS   r,   r)   OPENAI_BASE_URLr   >   r   rW   T>   r   r/   Nrt   ru   r|   r   r   r   r   r   )r   r   zPNous pool entry agent_key expired/missing, falling through to runtime resolution)rS   rn   ro   rM   rm   r   r   r   ra   r-   r]   r   portalr   r   r   zUAuto-detected Nous provider but credentials failed; falling through to next provider.rv   r.   zhermes-auth-storer   r   zVAuto-detected Codex provider but credentials failed; falling through to next provider.rw   zqwen-cliexpires_at_ms)rS   r_   r)   r]   r   r   ro   z@Qwen OAuth credentials failed; falling through to next provider.rx   zgoogle-oauthemail
project_id)	rS   r_   r)   r]   r   r   r   r   ro   zIGoogle Gemini OAuth credentials failed; falling through to next provider.zcopilot-acpcommandargsprocess)rS   r_   r)   r]   r   r   r   ro   ry   r   r   r   rz   ri   envr   bedrock)has_aws_credentialsresolve_aws_auth_env_varresolve_bedrock_regionis_anthropic_bedrock_model)r   awszaws-bedrockzamazon-bedrockamazonzNo AWS credentials found for Bedrock. Configure one of:
  - AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY
  - AWS_PROFILE (for SSO / named profiles)
  - IAM instance role (EC2, ECS, Lambda)
Or run 'aws configure' to set up credentials.no_aws_credentials)code)r   regionzaws-sdk-default-chain	guardrailguardrail_identifierguardrail_version)guardrailIdentifierguardrailVersionstream_processing_modestreamProcessingModetracerH   zhttps://bedrock-runtime.z.amazonaws.comzaws-sdk)rS   r_   r)   r]   r   r  bedrock_anthropicro   rh   )rS   r_   r)   r]   r   r  ro   guardrail_configr`   r{   r_   r}   r~   r   r   )6r   r   r   rR   r   r   r;   r#   r$   r   r   rU   r   r?   r   r   r   r   r   r   r   debugr   r   r   r0   r   infor   r   r   r   listr   r   agent.bedrock_adapterr   r   r   r  hermes_cli.configr   r   r   r   rg   rc   r\   rd   r   r:   r   r   r   )*r   r   r   ro   custom_runtimerS   rM   explicit_runtimeshould_use_poolr   r   env_openai_base_urlr   has_custom_endpointhas_runtime_overriderm   rn   r   min_ttl
nous_stater   r   tokenr)   r   r   r   r  is_explicit_load_bedrock_config_bedrock_cfgr  auth_source_grr  _current_modelruntimer   r_   rT   re   r   s*                                             r&   resolve_runtime_providerr&    su    4I>>2-)+  N
  /A+,)+  H
 "##I0-)+     ,.O<9==44:;;AACCIIKK9==44:;;AACC i(92>>DDFF"$),A2"F"F"L"L"N"N" '"'&
 

  	'L,>>>"&#$4$I8IJJ"88 )'')(( 	&5?y"""4    $$&& 0$77 65."55  v%"3"3"c"),Mv"V"VWWXXG$UK>>(/7Mt(T(T J (
G<< "oppp!3!#5#    6	=4$'C	:[]c0d0d,e,e$f$f %bi0Mt&T&T U U  E
 #.!IIj"55<<SAA 99Y33))Hh77#ii55&8    	= 	= 	=!V++ KK < = = = = =	= >!!	=577E*-!IIj"55<<SAA 99Y33))H.ABB %		. 9 9&8    	= 	= 	=!V++ KK < = = = = =	= <	=466E(.!IIj"55<<SAA 99Y33))Hj99!&?!;!;&8    	= 	= 	=!V++KK < = = = = =	= &&&	=<>>E/.!IIj"55 99Y33))Hn==!&?!;!;7B//#iib99&8
 
 
  	= 	= 	=!V++KK < = = = = =	= =  =hGG%*		*b1188==yyB//yyB//6**0b11ii)44"4	
 	
 		
 ;CCCCCC'')) 	R   9==44:;;AACCIIKK;&&%MM*55;BBDDKKCPPL>#>#, "4
 
 	
 9	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 ),ii 	#6#6#8#8 	@
 *    	JIIIII++--11)R@@""8,,299;;W?U?U?W?W..00K4K{B//77)** 	9sww7J/K/K 	9'*+A'B$'(;$<    ww/00 Y;>?W;X !78www 9,/L ) Y]]955;<<BBDD%%n55 	 &0MvMMM$% %)&8	 	GG &.MvMMM$% &8 G  	;*:G&'  #H--G '
7$	114X>>
 9==44:;;AACCIIKK8##%MM*55;BBDDKKCPPLH599Z#<#<#C#CC#H#H%y  0EIIiQS<T<TUUHH(HH"%immJ&?&?&E2"F"F"L"L"N"N"T"T"V"V-immJ.G.GHHO 0#GRe#f#f 0*<<<EEEEEE228Y]]9VX=Y=YZZ %%..|<< 0/+++<[0[0[viX66H   yyB//ii%00"4
 
 	
 *-)+  G
 %7G !Ns^   3F FFC
M +N
	N
A9P +P<;P<A9S   +S.-S.8BV	 	+V76V7errorr?   c                h    t          | t                    rt          |           S t          |           S r   )rJ   r   r   r   )r'  s    r&   format_runtime_provider_errorr)    s.    %## ( '''u::r(   )r   r   r   r   )r)   r   r   r*   )r)   r   r   r   )r   rE   r   )rS   r*   rT   r*   r   rU   )rM   rE   r]   r   r   r   )rj   r   r   r*   )rS   r   rn   r	   ro   r   rM   rp   rm   rq   r   rE   )r   r*   r   r   )r)   r   r   r   r   r*   r   rp   )ro   r   r   rp   )ro   r   r   r*   r   r*   r   rp   )ro   r   r   r*   r   r*   r   rE   )rS   r   ro   r   rM   rE   r   r*   r   r*   r   rp   )r   r*   r   r*   r   r*   r   rE   )r'  r?   r   r   ):__doc__
__future__r   loggingr   r   typingr   r   r   	getLogger__name__r   
hermes_clir   r   agent.credential_poolr   r	   r
   r   hermes_cli.authr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   hermes_constantsr   r'   r2   rD   rR   r\   rg   rl   rc   r   r   r   r   r   r   r   r&  r)   r(   r&   <module>r5     sW   M M " " " " " "  				 				 & & & & & & & & & &		8	$	$ ' ' ' ' ' ' k k k k k k k k k k k k                                 K J J J J J J J 0 0 0 0 0 03 3 3 3      *   ,8 8 8 8 8"" " " "$ edd     +/%)I I I I I IX    , (,    >j j j j` '+'+	1 1 1 1 1 1n '+'+	^ ^ ^ ^ ^ ^L '+'+C C C C C CP  $&*'+	J J J J J JZ
     r(   