
    (Gj                    ~    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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          8/home/rurouni/.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 )NT   )include_unconfiguredpicker_hintscanonical_orderpricingcapabilities
max_models	providersc                f    g | ].}|                     d           |                     d          ,|/S )slugmodelsget.0ps     r'   
<listcomp>z"_model_options.<locals>.<listcomp>(   s6    FFF!AEE&MMFaeeHooFAFFF    )r   r   r7   )payloadr2   s     r'   _model_optionsr>      s]    "!  G K((.BIFFyFFFFr<   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   Nr6   )r9   r$   r:   current_providers      r'   	<genexpr>z_pick_slot.<locals>.<genexpr>1   s<      UUa155==DT3T3T3T3T3T3TUUr<   r   c                    g | ]E}|                     d           p|                     d           d|                     d           dFS )namer4   z  ()r6   r8   s     r'   r;   z_pick_slot.<locals>.<listcomp>4   sM    ___PQf6vKK155==KKK___r<   zSelect providerr5   z	Provider r4   z has no selectable modelsmodelzSelect model for )rC   rK   )	r>   RuntimeErrorr7   nextr   r(   listindexr   )
r?   r2   provider_defaultprovider_rowsrC   r5   current_modelmodel_defaultrK   rF   s
            @r'   
_pick_slotrT   +   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<   configdict[str, Any]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|d          d|d                     *|d         }t	          d|d          d|d                     d S )NmoazMixture of Agents presetsz	Default: default_presetactive_presetz(off)zActive in config: presets* 
z  Reference models:reference_modelsr   r   z    r   rC   :rK   
aggregatorz  Aggregator: )r
   
isinstancedictr7   r   itemsr   )	rU   cfgactiverI   presetmarkerr$   slotaggs	            r'   _print_configrl   ?   s   
Jvt4L4LTvzz%000RT
U
UC	
%&&&	
-c*+
-
-...WW_%%0F	
'v
'
'(((I,,.. A Af$4 5553"6""D""####$$$"6*<#=QGGG 	D 	DICBBBZ 0BB4=BBCCCC\"?s:??W??@@@@A Ar<   c                "   t                      }t          | dd          pd}|dv rt          |           dS |dv rt          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          |	                     |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_commandNrN   >   lsrN   >   rU   	configurerY   rI   rZ   r\   zConfigure MoA preset: z=Pick at least one reference model; choose Done when finished.r`   r   Tr   zAdd another reference model?zAdd anotherDonezConfigure aggregator model.rb   zSaved MoA preset: deleterD   zUsage: hermes moa delete <name>zUnknown MoA preset: z!Cannot delete the only MoA presetr[   zDeleted MoA preset: zUnknown moa subcommand: )r   getattrrl   r
   rc   rd   r7   r	   r   r   rN   r"   appendrT   r(   
setdefaultr   
SystemExitrM   iter)argsrf   subrY   preset_namer?   refsexistingr$   basechoices              r'   cmd_moar   O   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KK
4(()))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?   r@   r   rA   )rU   rV   r   rW   )r   rW   )__doc__
__future__r   typingr   hermes_cli.configr   r   hermes_cli.inventoryr   r   hermes_cli.moa_configr	   r
   r(   r>   rT   rl   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    "G G G GN N N N N(A A A A 87 87 87 87 87 87r<   