
    Ӄi~K                    l   d Z ddlm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mZ ddlmZ dd	lmZmZmZmZmZmZ d
diZ ed           G d d                      Z ed           G d d                      Zd4dZd5dZd6dZd7dZ d7dZ!d8d(Z"	 d9d:d+Z#d;d-Z$d<d/Z%d)d0d=d3Z&d)S )>z8Helpers for Nous subscription managed-tool capabilities.    )annotations)	dataclass)Path)DictIterableOptionalSet)get_nous_auth_status)get_env_valueload_config)is_managed_tool_gateway_ready)has_direct_modal_credentialsmanaged_nous_tools_enabled normalize_browser_cloud_providernormalize_modal_moderesolve_modal_backend_stateresolve_openai_audio_api_keycliz
hermes-cliT)frozenc                  |    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   dZded<   dZded<   dS )NousFeatureStatestrkeylabelboolincluded_by_default	availableactivemanaged_by_nousdirect_overridetoolset_enabled current_providerFexplicit_configuredN)__name__
__module____qualname____annotations__r#   r$        9/home/ubuntu/hermes-agent/hermes_cli/nous_subscription.pyr   r      s         HHHJJJOOOLLL %%%%%%%r*   r   c                      e Zd ZU ded<   ded<   ded<   ded<   edd	            Zedd
            Zedd            Zedd            Zedd            Z	ddZ
dS )NousSubscriptionFeaturesr   
subscribednous_auth_presentprovider_is_nouszDict[str, NousFeatureState]featuresreturnr   c                    | j         d         S )Nwebr1   selfs    r+   r4   zNousSubscriptionFeatures.web0       }U##r*   c                    | j         d         S )N	image_genr5   r6   s    r+   r:   z"NousSubscriptionFeatures.image_gen4   s    }[))r*   c                    | j         d         S )Nttsr5   r6   s    r+   r<   zNousSubscriptionFeatures.tts8   r8   r*   c                    | j         d         S )Nbrowserr5   r6   s    r+   r>   z NousSubscriptionFeatures.browser<   s    }Y''r*   c                    | j         d         S )Nmodalr5   r6   s    r+   r@   zNousSubscriptionFeatures.modal@   s    }W%%r*   Iterable[NousFeatureState]c              #  6   K   d}|D ]}| j         |         V  d S )Nr4   r:   r<   r>   r@   r5   )r7   orderedr   s      r+   itemszNousSubscriptionFeatures.itemsD   s:      A 	% 	%C-$$$$$	% 	%r*   N)r2   r   )r2   rA   )r%   r&   r'   r(   propertyr4   r:   r<   r>   r@   rE   r)   r*   r+   r-   r-   )   s         ))))$ $ $ X$ * * * X* $ $ $ X$ ( ( ( X( & & & X&% % % % % %r*   r-   configDict[str, object]r2   c                    |                      d          }t          |t                    rt          |          S t          |t                    r*|                                rd|                                iS i S )Nmodeldefault)get
isinstancedictr   strip)rG   	model_cfgs     r+   _model_config_dictrQ   J   sn    

7##I)T"" I)S!! .ioo&7&7 .9??,,--Ir*   toolset_keyr   r   c                   ddl m} |                     d          }t          |t                    r|sdt
          d         gi}t           ||                    }|sdS |                                D ]\  }}t          |t                    rt          |          }n!t
                              |          }|r|gng }|st
                              |          }|r|g}t                      }	|D ]I}
t          |
t                    r|
s	 |	
                     ||
                     :# t          $ r Y Fw xY w|r|                    |	          r dS dS )Nr   )resolve_toolsetplatform_toolsetsr   FT)toolsetsrT   rL   rM   rN   _DEFAULT_PLATFORM_TOOLSETSsetrE   listr   update	Exceptionissubset)rG   rR   rT   rU   target_toolsplatformraw_toolsetstoolset_namesdefault_toolsetavailable_toolstoolset_names              r+   _toolset_enabledrd   S   s   ((((((

#677'.. I6G I"%?%F$GH{3344L u"3"9"9";";  ,lD)) 	I ..MM8<<XFFO1@H_--bM 	28<<XFFO 2!0 1$'EE) 	 	LlC00  &&|'D'DEEEE     	L11/BB 	445s   
D))
D65D6c                     dd l } |                     d          }t          t                    j        j        dz  dz  dz  }t          |p|                                          S )Nr   zagent-browsernode_modulesz.bin)shutilwhichr   __file__parentr   exists)rg   agent_browser_bin	local_bins      r+   _has_agent_browserrn   x   sb    MMM_55X$~5>P  !7Y%5%5%7%7888r*   r#   c                F    dddddd}|                     | pd| pd          S )NBrowserbasezBrowser Use	FirecrawlCamofoxzLocal browser)browserbasebrowser-use	firecrawlcamofoxlocalrw   rL   r#   mappings     r+   _browser_labelr{      s?    $$   G ;;'274D4WXXXr*   c                D    ddddd}|                     | pd| pd          S )N
OpenAI TTS
ElevenLabszEdge TTSNeuTTS)openai
elevenlabsedgeneuttsr   rx   ry   s     r+   
_tts_labelr      s<    "	 G ;;'163C3QzRRRr*   browser_tool_enabledbrowser_providerbrowser_provider_explicitbrowser_local_availabledirect_camofoxdirect_browserbasedirect_browser_usedirect_firecrawlmanaged_browser_availabletuple[str, bool, bool, bool]c        	           |rddt          |           dfS |r|pd}	|	dk    r(t          |o|          }
t          | o|
          }|	|
|dfS |	dk    rB|p|}t          |o|          }
t          | o|o|o|           }t          | o|
          }|	|
||fS |	dk    r(t          |o|          }
t          | o|
          }|	|
|dfS |	dk    r|	dddfS d}	t          |          }
t          | o|
          }|	|
|dfS |s|r<t          |          }
t          | o|o|o|           }t          | o|
          }d|
||fS |r&t          |          }
t          | o|
          }d|
|dfS t          |          }
t          | o|
          }d|
|dfS )zBResolve browser availability using the same precedence as runtime.rv   TFrw   rs   rt   ru   )r   )r   r   r   r   r   r   r   r   r   r#   r   r   provider_availablemanageds                 r+   _resolve_browser_feature_stater      sa     B$%9 : :EAA  :+6w},,4K9KLLI.<9==F#Y==},,!:!P>P4K9KLLI$ +++-+ +*	 G .<9==F#Y??{**4I9IJJI.<9==F#Y==y((#UE588"011	*8y99FE99  	9$6 	9011	  ''')' '&	
 
 *8y99i88 7011	*8y99i66,--I&4955FIvu,,r*   NOptional[Dict[str, object]]c                   | t                      pi } t          |           } t          |           }t          |                    d          pd                                                                          dk    }	 t                      }n# t          $ r i }Y nw xY wt                      }t          |                    d                    }|p|}t          | d          }t          | d          }t          | d          }	t          | d          }
t          | d	          }t          |                     d          t                    r|                     d          ni }t          |                     d          t                    r|                     d          ni }t          |                     d          t                    r|                     d          ni }t          |                     d	          t                    r|                     d	          ni }t          |                    d
          pd                                                                          }t          |                    d          pd                                                                          }d|v }t          |r|                    d          nd           }t          |                    d
          pd                                                                          }t          |                    d                    }t          t          d                    }t          t          d          pt          d                    }t          t          d                    }t          t          d                    }t          t          d                    }t          t!                                }t          t          d                    }t          t          d                    }t          t          d          ot          d                    }t          t          d                    }t#                      } |o|ot%          d          }!|o|ot%          d          }"|o|ot%          d          }#|o|ot%          d          }$|o|ot%          d          }%t'          || |%          }&|dk    o|!o| }'t          |o!|'p|d k    o|p|dk    o|p|d!k    o|p|d"k    o|          }(t          |!p|p|p|p|          })|o|"o| }*t          |o|*p|          }+t          |"p|          },|pd}-|	o
|-d#k    o|#o| }.t          |-d$v p|-d#k    o|#p|p|-d%k    o|          }/t          |	o|/          }0t)                      }1t+          |
|||1|||||$&	  	        \  }2}3}4}5|dk    rd'}6d(}7t          |          }8d'}9n|&d)         d*k    r#t          |          }6d(}7t          |          }8d'}9n~|&d)         d+k    r#d'}6d(}7t          |          }8t          |          }9nO|d*k    rd'}6t          |%          }7d'}8d'}9n3|d+k    rd'}6t          |           }7d'}8d'}9nd'}6t          |%p|           }7d'}8d'}9d'}:|                     d          };t          |;t                    rd|;v r|d,v}:t-          dd-d(|)|(|'|(o|' ||pdt          |          .
  
        t-          dd/d(|,|+|*|+o|* ||rd0n|*rd1nd|.
  
        t-          dd2d(|/|0|.|0o|. |	t/          |-          |:.
  
        t-          dd3d(|3|4|5|4o|5 |
t1          |2          |.
  
        t-          dd4d'|7|8|6|dk    o|9||dk    rd5n|pd|dk    .
  
        d6}<t3          ||||<7          S )8Nproviderr"   nous	logged_inr4   r:   r<   r>   terminalbackendr   cloud_providerrw   
modal_modeEXA_API_KEYFIRECRAWL_API_KEYFIRECRAWL_API_URLPARALLEL_API_KEYTAVILY_API_KEYFAL_KEYELEVENLABS_API_KEYCAMOFOX_URLBROWSERBASE_API_KEYBROWSERBASE_PROJECT_IDBROWSER_USE_API_KEYru   z	fal-queuezopenai-audiort   r@   )
has_directmanaged_readyexaparalleltavilyr   >   r   r   r   )	r   r   r   r   r   r   r   r   r   FTselected_backendr   direct>   r"   r   z	Web tools)
r   r   r   r   r   r   r    r!   r#   r$   zImage generationFALzNous Subscriptionr}   zBrowser automationzModal executionModalrC   )r.   r/   r0   r1   )r   rN   rQ   r   rL   rO   lowerr
   r[   r   r   rd   rM   r   r   r   r   r   r   r   rn   r   r   r   r{   r-   )=rG   rP   r0   nous_statusmanaged_tools_flagr/   r.   web_tool_enabledimage_tool_enabledtts_tool_enabledr   modal_tool_enabledweb_cfgtts_cfgbrowser_cfgterminal_cfgweb_backendtts_providerr   r   terminal_backendr   
direct_exar   direct_paralleldirect_tavily
direct_faldirect_openai_ttsdirect_elevenlabsr   r   r   direct_modalmanaged_web_availablemanaged_image_availablemanaged_tts_availabler   managed_modal_availablemodal_stateweb_managed
web_activeweb_availableimage_managedimage_activeimage_availabletts_current_providertts_managedtts_available
tts_activer   browser_current_providerbrowser_availablebrowser_activebrowser_managedmodal_managedmodal_availablemodal_activemodal_direct_overridetts_explicit_configuredraw_tts_cfgr1   s=                                                                r+   get_nous_subscription_featuresr      s^	    ~$"&\\F"6**I9==44:;;AACCIIKKvU*,,    455[__[99::!6%6J'66)&+>>'66+FI>>)&*==#-fjj.?.?#F#FNfjjBG#-fjj.?.?#F#FNfjjBG+5fjj6K6KT+R+RZ&**Y'''XZK-7

:8N8NPT-U-U]6::j)))[]Lgkk),,23399;;AACCKw{{:..8&99??AAGGIIL 0K ?7-FP()))D  	LY''273399;;AACC  &&& J mM2233JM*=>>d-PcBdBdee=);<<==O'78899MmI..//J9;;<<]+?@@AA-6677Nm,ABBn}UmGnGnoom,ABBCC/11L.s3DsIfgrIsIs0u5FuKhitKuKu.v3DvIfguIvIv 2 y7H yMjkxMyMy0q5FqKhipKqKq--  K ,_1F_O_K_K 	
 ;u$3;{*?/?; z)=o; x'9M	 	J cc/?c?cVc M 'U+BU:~M*L0KMML2@jAAO'16 	" H,	"!	" "!	   22 	H H,]2G2\K\	H L0F5F M
 &8=99J022 	'1)"; 7%--)";
	 
	 
	  7"".// %	'	(I	5	5/00.// %	'	(H	4	4.// $%7 8 8	y	 	 677 %	x		|,, %6F,GG %#**U##K+t$$ C{)B)B".l"B   $#'&:{?,(.B $[ 1 1
 
 
 &$ $%)(>->.&0dUUm7c7J7Jac *
 
 
   $#'&:{?,'(<== 7
 
 
 $& $'!+*B?/B0+,DEE 9
 
 
 "# %%),7Q<Q.(8G(C(CWWIYId]d 0G ;
 
 
c= =H~ $+)	   s   >B BB	list[str]c                 *    t                      sg S g dS )N)zmNous subscription enables managed web tools, image generation, OpenAI TTS, and browser automation by default.zvThose managed tools bill to your Nous subscription. Modal execution is optional and can bill to your subscription too.zUChange these later with: hermes setup tools, hermes setup terminal, or hermes status.)r   r)   r*   r+   %get_nous_subscription_explainer_linesr     s)    %'' 	   r*   set[str]c                   t                      st                      S t          |           }|j        st                      S |                     d          }t          |t                    si }|| d<   t          |                    d          pd                                          	                                }|dvrt                      S d|d<   dhS )zOApply provider-level Nous defaults shared by `hermes setup` and `hermes model`.r<   r   r   >   r"   r   r   )
r   rX   r   r0   rL   rM   rN   r   rO   r   )rG   r1   r   current_ttss       r+   apply_nous_provider_defaultsr     s    %'' uu-f55H$ uujjGgt$$  ugkk*--788>>@@FFHHK,&&uu"GJ7Nr*   )enabled_toolsetsr   Optional[Iterable[str]]c               $   t                      st                      S t          |           }|j        st                      S t          |pd          }t                      }|                     d          }t          |t                    si }|| d<   |                     d          }t          |t                    si }|| d<   |                     d          }t          |t                    si }|| d<   d|v rb|j        j        sVt          d          sGt          d          s8t          d          s)t          d          sd	|d
<   |
                    d           d|v rC|j        j        s7t                      s)t          d          sd|d<   |
                    d           d|v rD|j        j        s8t          d          s)t          d          sd|d<   |
                    d           d|v r$t          d          s|
                    d           |S )Nr)   r4   r<   r>   r   r   r   r   ru   r   r   r   r   r   r   rt   r   r:   r   )r   rX   r   r0   rL   rM   rN   r4   r$   r   addr<   r   r>   )rG   r   r1   selected_toolsetschangedr   r   r   s           r+   apply_nous_managed_defaultsr     sD   
 &'' uu-f55H$ uu,233GjjGgt$$  ujjGgt$$  u**Y''Kk4(( ('y!!!(,*J!()) ")** " ,-- " ,--	 " )	E!!!(,*J!$&& "-.. " '
E%%%h.>.R%+,, &.// & )6$%I'''i0H0H'K   Nr*   )rG   rH   r2   rH   )rG   rH   rR   r   r2   r   )r2   r   )r#   r   r2   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   r   )N)rG   r   r2   r-   )r2   r   )rG   rH   r2   r   )rG   rH   r   r   r2   r   )'__doc__
__future__r   dataclassesr   pathlibr   typingr   r   r   r	   hermes_cli.authr
   hermes_cli.configr   r   tools.managed_tool_gatewayr   tools.tool_backend_helpersr   r   r   r   r   r   rW   r   r-   rQ   rd   rn   r{   r   r   r   r   r   r   r)   r*   r+   <module>r      s   > > " " " " " " ! ! ! ! ! !       0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 8 8 8 8 8 8 8 D D D D D D                
< 
 $
& 
& 
& 
& 
& 
& 
& 
& $% % % % % % % %@   " " " "J9 9 9 9Y Y Y YS S S S?- ?- ?- ?-F +/\ \ \ \ \~      2 158 8 8 8 8 8 8 8r*   