§
    Ÿ«j  ã                   ó"  — d 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mZmZ ddlmZ ddlmZ ddlmZ ddlmZ ej        d	e	fd
„¦   «         Zej        d	efd„¦   «         Zej        d	efd„¦   «         Z G d„ d¦  «        Z G d„ d¦  «        ZdS )zPTest suite for AI Agent Model Customization and Persona System Prompt Grounding.é    N)Ú
TestClient)Úbuild_persona_system_promptÚget_personaÚlist_persona_codes)Úget_settings)Ú
create_app)ÚAuthService)Ú	LLMClientÚreturnc                  ó<   — t          ¦   «         } t          | ¦  «        S )N)r   r   )Úapps    ú=C:\Projects\DSCons\tests\test_ai_agent_model_customization.pyÚclientr      s   € å
‰,Œ,€CÝ�c‰?Œ?Ðó    c                  ó^   — t          ¦   «         } |                      ddd¬¦  «        }|d         S )Nzsuperadmin@dscons.vnzSuperadmin TestÚ
superadmin©ÚemailÚnameÚroleÚaccess_token©r	   Úcreate_dev_user_session©Úauth_serviceÚsessions     r   Úsuperadmin_tokenr      s;   € å‘=”=€LØ×2Ò2Ø$ØØð 3ñ ô €Gð
 �>Ô"Ð"r   c                  ó^   — t          ¦   «         } |                      ddd¬¦  «        }|d         S )Nzviewer@dscons.vnzViewer TestÚviewerr   r   r   r   s     r   Úviewer_tokenr    "   s;   € å‘=”=€LØ×2Ò2Ø ØØð 3ñ ô €Gð
 �>Ô"Ð"r   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚTestAgentPersonaSystemPromptsue   Kiá»ƒm thá»­ tÃ­nh toÃ n váº¹n vÃ  ngá»¯ cáº£nh phong phÃº cá»§a System Prompt cho tá»«ng AI Persona.c           	      óè  — t          ¦   «         }t          |¦  «        }d}||k    }|sòt          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}}h d	£}|j
        }t          |¦  «        } ||¦  «        }	|	�s$d
dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        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  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}	d S )Né	   ©ú>=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sÚlenÚcodes)Úpy0Úpy1Úpy3Úpy6úassert %(py8)sÚpy8>	   ÚlanÚnamÚhungÚminhÚphucÚthaoÚthuyÚtungÚquynhzhassert %(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.issubset
}(%(py6)s
{%(py6)s = %(py3)s(%(py4)s)
})
}ÚexpectedÚset)r)   Úpy2r+   Úpy4r,   r.   )r   r'   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚissubsetr9   )
Úselfr(   Ú@py_assert2Ú@py_assert5Ú@py_assert4Ú@py_format7Ú@py_format9r8   Ú@py_assert1Ú@py_assert7s
             r   Útest_all_9_personas_registeredz<TestAgentPersonaSystemPrompts.test_all_9_personas_registered0   s�  € Ý"Ñ$Ô$ˆÝ�5‰zŒzÐ˜QÐˆz˜QŠÐÐÐÕÔÐÐÐÐˆz˜QÐÑÔÐÕÔÑÔÐÐÕÔ�sÑÔÐÕÔ�sÑÔÐÐÐÕÔÑÔÐÐÕÔ�5ÑÔÐÕÔ�5ÑÔÐÐÕÔˆzÑÔÕÔ˜QÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐð

ð 

ð 

ˆð Ô Ð,¥ U¡¤Ð,Ð Ð  Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆxÑ,Ô,Ð,Õ,Ô,ˆxÑ,Ô,Ð,Ð,Õ,Ô,Ð Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,¥Ñ,Ô,Ð,Õ,Ô,¥Ñ,Ô,Ð,Ð,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô, UÑ,Ô,Ð,Õ,Ô, UÑ,Ô,Ð,Ð,Õ,Ô, Ñ,Ô,Õ,Ô,Ð,Ñ,Ô,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,r   c                 óB  — t          ¦   «         D �]}t          |¦  «        }t          |d¬¦  «        }|d         }|j        } |¦   «         }||v }|s½t	          j        d|fd||f¦  «        t	          j        |¦  «        t	          j        |¦  «        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}x}x}}|d
         }
t          |
¦  «        }||v }|sòt	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j	        t          ¦  «        rt	          j        t          ¦  «        ndt	          j        |
¦  «        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}
x}}|d         }||v }|s—t	          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 }|s—t	          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 }|s—t	          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 }|s—t	          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}}|j        }d}g } |||¦  «        }t          |¦  «        }d}||k    }|�s>t	          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        |¦  «        t	          j        |¦  «        t	          j        |¦  «        t	          j        |¦  «        t	          j        |¦  «        dœz  }dd |iz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}}|                     dg ¦  «        D ]Ì}||v }
|
sÂt	          j        d|
fd!||f¦  «        d"t          j        ¦   «         v st	          j	        |¦  «        rt	          j        |¦  «        nd"dt          j        ¦   «         v st	          j	        |¦  «        rt	          j        |¦  «        ndd#œz  }d$d%|iz  }t          t	          j        |¦  «        ¦  «        ‚d }
ŒÍ�Œd S )&NÚaudit_inspection)Ú	task_typeÚdisplay_name©Úin)zD%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.upper
}()
} in %(py7)sÚprompt)r*   r+   Úpy5Úpy7úassert %(py9)sÚpy9Úage)z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} in %(py6)sÚstr)r)   r:   r;   r,   r-   r.   Ú
role_title©z%(py1)s in %(py3)s©r*   r+   úassert %(py5)srU   u   Luáº­t XÃ¢y dá»±ng 2025u   Nghá»‹ Ä‘á»‹nh 123/2020/NÄ�-CPu   Ä�á»™ chÃ­nh xÃ¡c sá»‘ há»�cÚdutiesr   )ú>)zr%(py11)s
{%(py11)s = %(py0)s(%(py9)s
{%(py9)s = %(py3)s
{%(py3)s = %(py1)s.get
}(%(py5)s, %(py7)s)
})
} > %(py14)sr'   Úpersona)r)   r*   r+   rU   rV   rX   Úpy11Úpy14zassert %(py16)sÚpy16©z%(py0)s in %(py2)sÚduty©r)   r:   úassert %(py4)sr;   )r   r   r   Úupperr<   r=   rA   r>   r?   r@   rB   rC   rZ   Úgetr'   )rE   Úcodera   rT   Ú@py_assert0rF   rH   Ú@py_assert6Ú@py_format8Ú@py_format10rK   Ú@py_assert3rG   rI   rJ   Ú@py_format4Ú@py_format6Ú@py_assert8Ú@py_assert10Ú@py_assert13Ú@py_assert12Ú@py_format15Ú@py_format17rf   Ú@py_format3Ú@py_format5s                             r   Ú$test_persona_system_prompt_groundingzBTestAgentPersonaSystemPrompts.test_persona_system_prompt_grounding@   s'  € Ý&Ñ(Ô(ð 	&ñ 	&ˆDÝ! $Ñ'Ô'ˆGÝ0°ÐASÐTÑTÔTˆFð ˜>Ô*Ð<Ð*Ô0Ð<Ð0Ð0Ñ2Ô2Ð<Ð2°fÐ<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<Ð2°fÐ<Ñ<Ô<Õ<Ô<Ð*Ñ<Ô<Õ<Ô<Ð0Ñ<Ô<Õ<Ô<Ð2Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<°fÑ<Ô<Ð<Õ<Ô<°fÑ<Ô<Ð<Ð<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ø˜u”~Ð0•3�~Ñ&Ô&Ð0Ð&¨&Ð0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0Ð&¨&Ð0Ñ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0•3Ñ0Ô0Ð0Õ0Ô0•3Ñ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Ø˜<Ô(Ð2Ð(¨FÐ2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð(¨FÐ2Ñ2Ô2Õ2Ô2Ð(Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2¨FÑ2Ô2Ð2Õ2Ô2¨FÑ2Ô2Ð2Ð2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ø,Ð6Ð,°Ð6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6Ð,°Ð6Ñ6Ô6Õ6Ô6Ð,Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6°Ñ6Ô6Ð6Õ6Ô6°Ñ6Ô6Ð6Ð6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ø3Ð=Ð3°vÐ=Ð=Ð=Ð=Õ=Ô=Ð=Ð=Ð=Ð=Ð3°vÐ=Ñ=Ô=Õ=Ô=Ð3Ñ=Ô=Ð=Õ=Ô=Ñ=Ô=Ð=Ð=Õ=Ô=°vÑ=Ô=Ð=Õ=Ô=°vÑ=Ô=Ð=Ð=Ð=Ð=Ñ=Ð=Ð=Ð=Ð=Ð=Ñ=Ð=Õ=Õ=Ô=Ð=Ñ=Ô=Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ø1Ð;Ð1°VÐ;Ð;Ð;Ð;Õ;Ô;Ð;Ð;Ð;Ð;Ð1°VÐ;Ñ;Ô;Õ;Ô;Ð1Ñ;Ô;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;°VÑ;Ô;Ð;Õ;Ô;°VÑ;Ô;Ð;Ð;Ð;Ð;Ñ;Ð;Ð;Ð;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ø”{Ð5 8Ð5¨RÐ5�{�{ 8¨RÑ0Ô0Ð5•3Ð0Ñ1Ô1Ð5°AÐ5Ð1°AÒ5Ð5Ð5Ñ5Õ5Ô5Ð5Ð5Ð5Ð5Ð1°AÐ5Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5•3Ñ5Ô5Ð5Õ5Ô5•3Ñ5Ô5Ð5Ð5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5�wÑ5Ô5Ð5Õ5Ô5�wÑ5Ô5Ð5Ð5Õ5Ô5�{Ñ5Ô5Õ5Ô5 8Ñ5Ô5Õ5Ô5¨RÑ5Ô5Õ5Ô5Ð0Ñ5Ô5Õ5Ô5Ð1Ñ5Ô5Õ5Ô5°AÑ5Ô5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5ØŸš H¨bÑ1Ô1ð &ð &�Ø˜v�~Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%�t˜vÐ%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�tÑ%Ô%Ð%Õ%Ô%�tÑ%Ô%Ð%Ð%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%˜vÑ%Ô%Ð%Õ%Ô%˜vÑ%Ô%Ð%Ð%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%ñ&ð	&ð 	&r   c                 ó  — d}t          d|¬¦  «        }||v }|sÂt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚d }d}||v }|s—t          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 )Nuh   Æ¯u tiÃªn rÃ  soÃ¡t ká»¹ cÃ¡c hÃ³a Ä‘Æ¡n váº­t tÆ° trÃªn 500 triá»‡u VNÄ� trong Ä‘á»£t thanh toÃ¡n nÃ y.r7   )Úcustom_instructionrR   re   Úcustom_noterT   rg   rh   r;   u?   [CHá»ˆ Ä�áº O Ä�áº¶C BIá»†T Tá»ª BAN GIÃ�M Ä�á»�C / SUPERADMIN]r\   r]   r^   rU   )	r   r<   r=   r>   r?   r@   rA   rB   rC   )
rE   r~   rT   rK   ry   rz   rl   rF   rq   rr   s
             r   Ú,test_custom_superadmin_instruction_injectionzJTestAgentPersonaSystemPrompts.test_custom_superadmin_instruction_injectionP   sÎ  € ð AˆÝ,¨WÈÐUÑUÔUˆØ˜fÐ$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆ{˜fÐ$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆ{Ñ$Ô$Ð$Õ$Ô$ˆ{Ñ$Ô$Ð$Ð$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$˜fÑ$Ô$Ð$Õ$Ô$˜fÑ$Ô$Ð$Ð$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$ØPÐZÐPÐTZÐZÐZÐZÐZÕZÔZÐZÐZÐZÐZÐPÐTZÐZÑZÔZÕZÔZÐPÑZÔZÐZÕZÔZÑZÔZÐZÐZÕZÔZÐTZÑZÔZÐZÕZÔZÐTZÑZÔZÐZÐZÐZÐZÑZÐZÐZÐZÐZÐZÑZÐZÕZÕZÔZÐZÑZÔZÑZÔZÐZÐZÐZÐZÐZÐZÐZr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rM   r{   r   © r   r   r"   r"   -   sL   € € € € € ØoÐoð-ð -ð -ð &ð &ð &ð [ð [ð [ð [ð [r   r"   c                   óB   — e Zd ZdZdedefd„Zdedefd„Zdedefd„ZdS )	Ú"TestSuperadminAgentModelManagementuC   Kiá»ƒm thá»­ API quáº£n trá»‹ vÃ  tÃ¹y biáº¿n Model cho Superadmin.r   r   c                 óÞ  — |                      ddd|› �i¬¦  «        }|j        }d}||k    }|sªt          j        d|fd||f¦  «        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}
|
|	v }|s—t          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         }t          |¦  «        }d}||k    }|sÇt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}x}}|	d         }
d}|
|v }|slt          j        d|fd|
|f¦  «        t          j        |
¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}
x}}|	d         d          d!         }d"„ |D ¦   «         }d#}
|
|v }|s—t          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 }|s—t          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 )&Nú/v1/admin/agent-modelsÚAuthorizationúBearer ©ÚheaderséÈ   ©ú==©z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sÚresponse©r)   r:   rU   úassert %(py7)srV   ÚagentsrR   r\   Údatar]   r^   rU   r$   r%   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} >= %(py7)sr'   )r)   r:   r;   rV   rW   rX   Údefault_model)zgemini-3.8-flashústealth/ox-alpha)z%(py1)s in %(py4)s©r*   r;   úassert %(py6)sr,   r   Úavailable_presetsc                 ó   — g | ]
}|d          ‘ŒS )Úidr„   )Ú.0Úps     r   ú
<listcomp>zcTestSuperadminAgentModelManagement.test_list_agent_models_superadmin_authorized.<locals>.<listcomp>i   s   € Ð/Ð/Ð/ !�a˜”gÐ/Ð/Ð/r   r—   Ú
preset_idsz#nvidia/nemotron-3-nano-30b-a3b:free)rj   Ústatus_coder<   r=   r>   r?   r@   rA   rB   rC   Újsonr'   )rE   r   r   r‘   rK   rH   rp   rr   rn   r•   rl   rF   rq   rm   rG   ro   rz   rI   Úpresetsr    s                       r   Ú,test_list_agent_models_superadmin_authorizedzOTestSuperadminAgentModelManagement.test_list_agent_models_superadmin_authorizedZ   sL  € ð —:’:Ø$Ø$Ð&BÐ0@Ð&BÐ&BÐCð ñ 
ô 
ˆð Ô#Ð* sÐ*Ð# sÒ*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð# sÐ*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*ˆxÑ*Ô*Ð*Õ*Ô*ˆxÑ*Ô*Ð*Ð*Õ*Ô*Ð#Ñ*Ô*Õ*Ô* sÑ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø�}Š}‰ŒˆØÐˆx˜4ÐÐÐÐÕÔÐÐÐÐˆx˜4ÐÑÔÕÔˆxÑÔÐÕÔÑÔÐÐÕÔ˜4ÑÔÐÕÔ˜4ÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØ˜”>Ð'�s�>Ñ"Ô"Ð' aÐ'Ð" aÒ'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð" aÐ'Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'�sÑ'Ô'Ð'Õ'Ô'�sÑ'Ô'Ð'Ð'Õ'Ô'�>Ñ'Ô'Õ'Ô'Ð"Ñ'Ô'Õ'Ô' aÑ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ø�OÔ$ÐPÐ(PÐPÐ$Ð(PÐPÐPÐPÐPÕPÔPÐPÐPÐPÐPÐ$Ð(PÐPÑPÔPÕPÔPÐ$ÑPÔPÕPÔPÐ(PÑPÔPÐPÐPÑPÐPÐPÐPÐPÐPÑPÐPÕPÕPÔPÐPÑPÔPÑPÔPÐPÐPÐPÐPÐPÐPÐPð �x”. Ô#Ð$7Ô8ˆØ/Ð/ wÐ/Ñ/Ô/ˆ
Ø!Ð/Ð! ZÐ/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð! ZÐ/Ñ/Ô/Õ/Ô/Ð!Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ ZÑ/Ô/Ð/Õ/Ô/ ZÑ/Ô/Ð/Ð/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ø4ÐBÐ4¸
ÐBÐBÐBÐBÕBÔBÐBÐBÐBÐBÐ4¸
ÐBÑBÔBÕBÔBÐ4ÑBÔBÐBÕBÔBÑBÔBÐBÐBÕBÔB¸
ÑBÔBÐBÕBÔB¸
ÑBÔBÐBÐBÐBÐBÑBÐBÐBÐBÐBÐBÑBÐBÕBÕBÔBÐBÑBÔBÑBÔBÐBÐBÐBÐBÐBÐBÐBr   r    c                 óÀ  — |                      ddd|› �i¬¦  «        }|j        }d}||k    }|sªt          j        d|fd||f¦  «        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 )Nrˆ   r‰   rŠ   r‹   i“  rŽ   r�   r‘   r’   r“   rV   )
rj   r¡   r<   r=   r>   r?   r@   rA   rB   rC   )	rE   r   r    r‘   rK   rH   rp   rr   rn   s	            r   Ú'test_list_agent_models_viewer_forbiddenzJTestSuperadminAgentModelManagement.test_list_agent_models_viewer_forbiddenm   s  € ð —:’:Ø$Ø$Ð&>°Ð&>Ð&>Ð?ð ñ 
ô 
ˆð Ô#Ð* sÐ*Ð# sÒ*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð# sÐ*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*ˆxÑ*Ô*Ð*Õ*Ô*ˆxÑ*Ô*Ð*Ð*Õ*Ô*Ð#Ñ*Ô*Õ*Ô* sÑ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*r   c                 ó®  — ddddddœ}|                      d|dd	|› �i¬
¦  «        }|j        }d}||k    }|sªt          j        d|fd||f¦  «        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         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}|
d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}|
d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}|
d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}|
d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}|
d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}t          ¦   «         }t          |¦  «        }|                     d¦  «        }|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}d S )Nr—   Ú
openrouterg333333Ã?i¸  uB   Táº­p trung cao Ä‘á»™ vÃ o bÃ¡o cÃ¡o Ä‘iá»�u hÃ nh giao ban sÃ¡ng.)Ú
model_nameÚproviderÚtemperatureÚ
max_tokensÚsystem_prompt_customz/v1/admin/agent-models/thuyr‰   rŠ   )r¢   rŒ   r�   rŽ   r�   Úresr’   r“   rV   Ú
agent_coder5   )z%(py1)s == %(py4)sr˜   r™   r,   r©   rª   r«   r¬   r­   Úmodel)Úputr¡   r<   r=   r>   r?   r@   rA   rB   rC   r¢   r   r
   Úget_provider_for_agent)rE   r   r   Úpayloadr®   rK   rH   rp   rr   rn   Úupdatedrl   rF   rz   rI   ÚsettingsÚ
llm_clientÚprovider_infos                     r   Ú#test_update_agent_model_persistencezFTestSuperadminAgentModelManagement.test_update_agent_model_persistencev   su  € ð
 -Ø$ØØØ$hð
ð 
ˆð �jŠjØ)ØØ$Ð&BÐ0@Ð&BÐ&BÐCð ñ 
ô 
ˆð
 ŒÐ% #Ð%ˆ #Ò%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%ˆ #Ð%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%ˆsÑ%Ô%Ð%Õ%Ô%ˆsÑ%Ô%Ð%Ð%Õ%Ô%ˆÑ%Ô%Õ%Ô% #Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ø—(’(‘*”*ˆØ�|Ô$Ð.¨Ð.Ð$¨Ò.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð$¨Ð.Ñ.Ô.Õ.Ô.Ð$Ñ.Ô.Õ.Ô.¨Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ø�|Ô$Ð:Ð(:Ð:Ð$Ð(:Ò:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð$Ð(:Ð:Ñ:Ô:Õ:Ô:Ð$Ñ:Ô:Õ:Ô:Ð(:Ñ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ø�zÔ"Ð2 lÐ2Ð" lÒ2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð" lÐ2Ñ2Ô2Õ2Ô2Ð"Ñ2Ô2Õ2Ô2 lÑ2Ô2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ø�}Ô%Ð-¨Ð-Ð%¨Ò-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð%¨Ð-Ñ-Ô-Õ-Ô-Ð%Ñ-Ô-Õ-Ô-¨Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø�|Ô$Ð,¨Ð,Ð$¨Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð$¨Ð,Ñ,Ô,Õ,Ô,Ð$Ñ,Ô,Õ,Ô,¨Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,àÐ*Ô+ð	
àSð	
Ø+ØSòTð	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
Ø+ØSð	
ñ 	
ô 	
õ 	
ô 
ð ,ñ	
ô 	
õ 	
ô 
ð Tñ	
ô 	
ð 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
õ  ‘>”>ˆÝ˜xÑ(Ô(ˆ
Ø"×9Ò9¸&ÑAÔAˆØ˜WÔ%Ð;Ð);Ð;Ð%Ð);Ò;Ð;Ð;Ð;Õ;Ô;Ð;Ð;Ð;Ð;Ð%Ð);Ð;Ñ;Ô;Õ;Ô;Ð%Ñ;Ô;Õ;Ô;Ð);Ñ;Ô;Ð;Ð;Ñ;Ð;Ð;Ð;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ø˜ZÔ(Ð8¨LÐ8Ð(¨LÒ8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8Ð(¨LÐ8Ñ8Ô8Õ8Ô8Ð(Ñ8Ô8Õ8Ô8¨LÑ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ø˜]Ô+Ð3¨tÐ3Ð+¨tÒ3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð+¨tÐ3Ñ3Ô3Õ3Ô3Ð+Ñ3Ô3Õ3Ô3¨tÑ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ø˜\Ô*Ð2¨dÐ2Ð*¨dÒ2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð*¨dÐ2Ñ2Ô2Õ2Ô2Ð*Ñ2Ô2Õ2Ô2¨dÑ2Ô2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2r   N)	r€   r�   r‚   rƒ   r   rZ   r¤   r¦   r¸   r„   r   r   r†   r†   W   sŒ   € € € € € ØMÐMðCØ ðCØ47ðCð Cð Cð Cð&+Ø ð+Ø03ð+ð +ð +ð +ð#3Ø ð#3Ø47ð#3ð #3ð #3ð #3ð #3ð #3r   r†   )rƒ   Úbuiltinsr>   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter<   ÚpytestÚfastapi.testclientr   Úapp.agents.personasr   r   r   Úapp.core.settingsr   Úapp.mainr   Ú)app.modules.auth.application.auth_servicer	   Ú)app.modules.agents.application.llm_clientr
   Úfixturer   rZ   r   r    r"   r†   r„   r   r   ú<module>rÅ      s¤  ðØ VÐ Và  € € € € € € € € € € € € €€€€Ø )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð
 +Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AØ ?Ð ?Ð ?Ð ?Ð ?Ð ?ð „ð�
ð ð ð ñ „ðð
 „ð#˜#ð #ð #ð #ñ „ð#ð „ð#�cð #ð #ð #ñ „ð#ð'[ð '[ð '[ð '[ð '[ñ '[ô '[ð '[ðTB3ð B3ð B3ð B3ð B3ñ B3ô B3ð B3ð B3ð B3r   