
    .cjG                        d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	m
Z
 ddlmZmZ dddZddZd d!dZd"dZd#dZd$dZdS )%z.CLI helpers for configuring Mixture of Agents.    )annotations)Any)load_configsave_config)build_models_payloadload_picker_context)DEFAULT_MOA_PRESET_NAMEnormalize_moa_configtitlestrrows	list[str]defaultintreturnc           
        	 ddl m}  || |||          S # t          $ r t          |d          D ]\  }}t	          | d|            t          |  d|dz    d                                          }|s|cY S 	 t          dt          t          |          dz
  t          |          dz
                      cY S # t          $ r |cY cY S w xY ww xY w)	Nr   )curses_radiolist)selectedcancel_returns   start. z [z]: )hermes_cli.curses_uir   	Exception	enumerateprintinputstripmaxminlenr   
ValueError)r   r   r   r   idxrowraws          4/home/ice/.hermes/hermes-agent/hermes_cli/moa_cmd.py_prompt_choicer(      s)   999999tggVVVV 	 	 	!$a000 	# 	#HCS//C//""""u00!000117799 	NNN	q#c$ii!mSXX\::;;;;; 	 	 	NNNNN		s.    A#C==B=:C=C	CCClist[dict[str, Any]]c            	         t          t                      dddddd          } |                     d          pg }d |D             S )NFT   )include_unconfiguredpicker_hintscanonical_orderpricingcapabilities
max_models	providersc                    g | ]x}|                     d           rat          |                     d                                                                                     dk    a|                     d          v|yS )slugmoamodels)getr   r   lower.0ps     r'   
<listcomp>z"_model_options.<locals>.<listcomp>+   s       55== f$$&&,,..%77EE(OO 8 	
 877    )r   r   r7   )payloadr2   s     r'   _model_optionsr?      sl    " #  G K((.BI    r=   Ncurrentdict[str, str] | Nonedict[str, str]c                  	 t                      }|st          d          | pi                     dd          	t          	fdt	          |          D             d          }d |D             }|t          d||                   }t          |                    d          pg           }|s&t          d	|                    d
           d          | pi                     dd          }||v r|                    |          nd}|t          d|                    d
           ||                   }t          |                    d
          pd          t          |          dS )Nz>No configured model providers found. Run `hermes model` first.provider c              3  T   K   | ]"\  }}|                     d           k    |V  #dS )r4   Nr7   )r:   r$   r;   current_providers      r'   	<genexpr>z_pick_slot.<locals>.<genexpr>:   s<      UUa155==DT3T3T3T3T3T3TUUr=   r   c                    g | ]E}|                     d           p|                     d           d|                     d           dFS )namer4   z  ()rG   r9   s     r'   r<   z_pick_slot.<locals>.<listcomp>=   sM    ___PQf6vKK155==KKK___r=   zSelect providerr6   z	Provider r4   z has no selectable modelsmodelzSelect model for )rD   rM   )	r?   RuntimeErrorr7   nextr   r(   listindexr   )
r@   r2   provider_defaultprovider_rowsrD   r6   current_modelmodel_defaultrM   rH   s
            @r'   
_pick_slotrV   4   s     I ][\\\2**:r::UUUU9Y//UUU	  `_U^___M(9=JZ[[\H(,,x((.B//F XVx||F';';VVVWWW]''44M3@F3J3JFLL///PQM>"Lhll66J6J"L"LfVcddeEHLL006B77#e**MMMr=   slotdict[str, Any]c                    | d          d| d          }t          |                     d          pd                                          }|r| d| dn|S )NrD   :rM   reasoning_effortrE   z [reasoning=])r   r7   r   )rW   labelefforts      r'   _format_slotr_   H   sj    J11$w-11E,--344::<<F.4?e******%?r=   configNonec           
        t          t          | t                    r|                     d          ni           }t	          d           t	          d|d                     |                    d          pd}t	          d|            |d                                         D ]\  }}||d         k    rd	nd
}t	          d| d
|            t	          d           t          |d         d          D ]'\  }}t	          d| dt          |                      (|d         }t	          dt          |                      d S )Nr5   zMixture of Agents presetsz	Default: default_presetactive_presetz(off)zActive in config: presets* 
z  Reference models:reference_modelsr   r   z    r   
aggregatorz  Aggregator: )r
   
isinstancedictr7   r   itemsr   r_   )	r`   cfgactiverK   presetmarkerr$   rW   aggs	            r'   _print_configrs   N   sy   
Jvt4L4LTvzz%000RT
U
UC	
%&&&	
-c*+
-
-...WW_%%0F	
'v
'
'(((I,,.. 4 4f$4 5553"6""D""####$$$"6*<#=QGGG 	6 	6IC444T 2 2445555\"2|C002233334 4r=   c                v   t                      }t          | dd          pd}|dv rt          |           dS |dv r&t          t	          |t
                    r|                    d          ni           }t          | dd          p|                    d          pt                                          }|d	                             ||d	         |d                            }t          d
|            t          d           g }t          |                    d          pg           }d}	 |t          |          k     r||         nd}	t          |	          }
t          |	pi                     dd                    |
d<   |                    |
           |dz  }t          dddgd          }|dk    rnt          d           t          |          }||d<   t          |                    d                    |d<   ||d	         |<   |                    d|           t          |          |d<   t#          |           t          d|            t          |           dS |dk    r@t          t	          |t
                    r|                    d          ni           }t          | dd          pd                                }|st%          d          ||d	         vrt%          d|           t          |d	                   dk    rt%          d          |d	         |= |d         |k    r%t'          t)          |d	                             |d<   |                    d          |k    rd|d<   t          |          |d<   t#          |           t          d|            dS t%          d|           )z'Manage Mixture of Agents model presets.moa_commandNrP   >   lsrP   >   r`   	configurer5   rK   rc   re   zConfigure MoA preset: z=Pick at least one reference model; choose Done when finished.ri   r   Tenabledr   zAdd another reference model?zAdd anotherDonezConfigure aggregator model.rj   zSaved MoA preset: deleterE   zUsage: hermes moa delete <name>zUnknown MoA preset: z!Cannot delete the only MoA presetrd   zDeleted MoA preset: zUnknown moa subcommand: )r   getattrrs   r
   rk   rl   r7   r	   r   r   rP   r"   rV   boolappendr(   
setdefaultr   
SystemExitrO   iter)argsrn   subr5   preset_namer@   refsexistingr$   basepickedchoices               r'   cmd_moar   ^   s   
--C
$t
,
,
6C
nc
%%%"ZT5J5J#R3775>>>PRSStVT22jcgg>N6O6OjSjqqssi.$$[#i.EUAV2WXX4{44555MNNN%'$677=2>>	$'#h--$7$78C==TD%%F $djb%5%5i%F%F G GF9KK1HC#$B]TZD[]^__F{{	 	+,,,w--&*"# *7;;|+D+D E E&-I{#'555)#..E
C0;00111c
h"ZT5J5J#R3775>>>PRSStVT228b??AA 	@>???c)n,,AKAABBBs9~!##@AAA	N;' K//$(c)n)=)=$>$>C !77?##{22#%C )#..E
C2[22333
555
6
66r=   )r   )r   r   r   r   r   r   r   r   )r   r)   )N)r@   rA   r   rB   )rW   rX   r   r   )r`   rX   r   ra   )r   ra   )__doc__
__future__r   typingr   hermes_cli.configr   r   hermes_cli.inventoryr   r   hermes_cli.moa_configr	   r
   r(   r?   rV   r_   rs   r    r=   r'   <module>r      s   4 4 " " " " " "       6 6 6 6 6 6 6 6 J J J J J J J J O O O O O O O O    "   .N N N N N(@ @ @ @4 4 4 4 :7 :7 :7 :7 :7 :7r=   