
    Ui                        U d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
mZ ddlmZ  eddd	           ed
dd	           eddd	          dZded<    G d d          Z G d d          ZdS )z$Tests for automatic agent selection.    )annotationsN)auto_select_agents)AgentConfig	architectzSoftware ArchitectzYou are an architect.)namerolesystem_promptdevopszDevOps EngineerzYou are DevOps.business_analystzBusiness AnalystzYou analyze business.r   r
   r   zdict[str, AgentConfig]SAMPLE_AGENTSc                  "    e Zd ZdZddZdd
ZdS )MockLLMClientz,Mock LLM client returning a canned response.responsestrreturnNonec                "    || _         d| _        d S )Nr   )r   
call_count)selfr   s     @/root/projects/multi-agents-meeting/tests/test_agent_selector.py__init__zMockLLMClient.__init__   s         systemmessageslist[dict[str, str]]c                0    | xj         dz  c_         | j        S )N   )r   r   )r   r   r   s      r   chatzMockLLMClient.chat   s    1}r   N)r   r   r   r   r   r   r   r   r   r   )__name__
__module____qualname____doc__r   r    r   r   r   r      sB        66        r   r   c                  2    e Zd ZdZd	dZd	dZd	dZd	dZdS )
TestAutoSelectAgentsz&Tests for auto_select_agents function.r   r   c                   t          j        ddgdd          }t          |          }t          ddt          |          }t          |t                    }|sdd	t          j                    v st          j
        t
                    rt          j        t
                    nd	d
t          j                    v st          j
        |          rt          j        |          nd
dt          j                    v st          j
        t                    rt          j        t                    ndt          j        |          dz  }t          t          j        |                    d}d |D             }t          |          }|sddt          j                    v st          j
        t                    rt          j        t                    ndt          j        |          t          j        |          dz  }t          t          j        |                    dx}}d}||v }|st          j        d|fd||f          t          j        |          d
t          j                    v st          j
        |          rt          j        |          nd
dz  }	dd|	iz  }
t          t          j        |
                    dx}}d}||v }|st          j        d|fd||f          t          j        |          d
t          j                    v st          j
        |          rt          j        |          nd
dz  }	dd|	iz  }
t          t          j        |
                    dx}}dS )z:auto_select_agents returns agent names from the valid set.r   r
   z$Architecture and deployment are key.selected_agents	reasoningzDeploy new service topiccontext
all_agentsclientz5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstanceresultlist)py0py1py2py4Nc              3  (   K   | ]}|t           v V  d S )N)r   ).0r   s     r   	<genexpr>zFTestAutoSelectAgents.test_returns_valid_agent_names.<locals>.<genexpr>/   s'      <<T4=(<<<<<<r   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}all)r5   r7   r8   inz%(py1)s in %(py3)sr6   py3assert %(py5)spy5)jsondumpsr   r   r   r2   r4   @py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprAssertionError_format_explanationr<   _call_reprcompare)r   r   mock_clientr3   @py_assert3@py_format5@py_assert1@py_assert0@py_assert2@py_format4@py_format6s              r   test_returns_valid_agent_namesz3TestAutoSelectAgents.test_returns_valid_agent_names!   s   : +X6?
 
   $H--#&$	
 
 
 &$'''''''''''''''z'''''z'''''''''''''&'''''&'''''''''''''$'''''$''''''''''''''''''''''''<<V<<<<s<<<<<<<<<<<<<<<<s<<<<<s<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<${f$$$$$$$$$${f$$$$${$$$$$$$$$$$f$$$$$f$$$$$$$$$$$$$$$$$$$$$$$$$$$!x6!!!!!!!!!!x6!!!!!x!!!!!!!!!!!6!!!!!6!!!!!!!!!!!!!!!!!!!!!!!!!!!!!r   c                   t          j        g ddd          }t          |          }t          ddt          |d          }t          |          }d}||k    }|st          j        d|fd	||f          d
t          j	                    v st          j
        t
                    rt          j        t
                    nd
dt          j	                    v st          j
        |          rt          j        |          ndt          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    dx}x}}dS )z(auto_select_agents limits to max_agents.r   zAll relevant.r)   Testr,      )r.   r/   r0   r1   
max_agents)<=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} <= %(py6)slenr3   )r5   r6   rA   py6zassert %(py8)spy8N)rD   rE   r   r   r   r\   rH   rM   rF   rG   rI   rJ   rK   rL   )	r   r   rN   r3   rS   @py_assert5@py_assert4@py_format7@py_format9s	            r   test_respects_max_agentsz-TestAutoSelectAgents.test_respects_max_agents3   s~   :JJJ(
 
   $H--#$
 
 
 6{{a{a{ass66{ar   c                    d G fdd          }t          ddt           |                      }dg}||k    }|st          j        d|fd	||f          d
t	          j                    v st          j        |          rt          j        |          nd
t          j        |          dz  }dd|iz  }t          t          j	        |                    dx}}d}|k    }|st          j        d|fd	|f          dt	          j                    v st          j                  rt          j                  ndt          j        |          dz  }dd|iz  }t          t          j	        |                    dx}}dS )z9auto_select_agents retries when LLM returns invalid JSON.r   c                      e Zd Zd fdZdS )	JTestAutoSelectAgents.test_retries_on_invalid_json.<locals>.RetryMockClientr   r   r   r   r   c                N    dz  dk     rdS t          j        dgdd          S )Nr   rY   znot jsonr   zOK.r)   )rD   rE   )r   r   r   r   s      r   r   zOTestAutoSelectAgents.test_retries_on_invalid_json.<locals>.RetryMockClient.chatH   s@    a
>>%:z(3}!&# #   r   Nr    )r!   r"   r#   r   )r   s   r   RetryMockClientrf   G   s3               r   rh   rX   r,   r-   r   )==)z%(py0)s == %(py3)sr3   )r5   rA   rB   rC   NrY   r   )
r   r   rH   rM   rF   rG   rI   rJ   rK   rL   )r   rh   r3   rS   rQ   rT   rU   r   s          @r   test_retries_on_invalid_jsonz1TestAutoSelectAgents.test_retries_on_invalid_jsonC   s   
		 		 		 		 		 		 		 		 		 		 $$"?$$	
 
 
 &&v&&&&&&&&&&v&&&&&&&&&&&&v&&&&&v&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&zQzQzzQr   c                   t          j        ddgdd          }t          |          }t          ddt          |          }d}||v }|st          j        d|fd	||f          t          j        |          d
t          j	                    v st          j
        |          rt          j        |          nd
dz  }dd|iz  }t          t          j        |                    dx}}d}||v}|st          j        d|fd||f          t          j        |          d
t          j	                    v st          j
        |          rt          j        |          nd
dz  }dd|iz  }t          t          j        |                    dx}}dS )z@auto_select_agents filters out agent names not in available set.r   nonexistent_agentzMixed.r)   rX   r,   r-   r=   r?   r3   r@   rB   rC   N)not in)z%(py1)s not in %(py3)s)rD   rE   r   r   r   rH   rM   rJ   rF   rG   rI   rK   rL   )r   r   rN   r3   rR   rS   rT   rU   s           r    test_filters_invalid_agent_namesz5TestAutoSelectAgents.test_filters_invalid_agent_names[   s   : +-@A!
 
   $H--#$	
 
 
 ${f$$$$$$$$$${f$$$$${$$$$$$$$$$$f$$$$$f$$$$$$$$$$$$$$$$$$$$$$$$$$$"0"&0000000000"&00000"00000000000&00000&00000000000000000000000000000r   N)r   r   )r!   r"   r#   r$   rV   rc   rj   rn   r%   r   r   r'   r'      sj        00" " " "$           01 1 1 1 1 1r   r'   )r$   
__future__r   builtinsrF   _pytest.assertion.rewrite	assertionrewriterH   rD   src.agent_selectorr   
src.modelsr   r   __annotations__r   r'   r%   r   r   <module>rw      s0   * * * " " " " " "               1 1 1 1 1 1 " " " " " " +4HXopppkx.?O`aaa#);BTd{|||) )    	 	 	 	 	 	 	 	K1 K1 K1 K1 K1 K1 K1 K1 K1 K1r   