ó
    'xáh#  ã                   ó²  • S r SSKrSSKJs  Jr  SSKrSSKJ	r	  SSK
JrJrJr  S rS rS rS rS	 rS
 rS r\	R*                  " \R,                  0 SS9S 5       r\	R*                  " \R,                  SS05      S 5       r\	R*                  " \R,                  SS0SS9S 5       r\	R*                  " \R,                  SSS.5      S 5       rS rS rS rS rS rS r S r!S r"\	R*                  " \R,                  0 SS9S  5       r#\	R*                  " \R,                  SS05      S! 5       r$\	R*                  " \R,                  SSS.5      S" 5       r%S# r&S$ r'S% r(g)&zBTests for quber.agents.factory module (non-PydanticAI components).é    N)Úpatch)ÚAgentFactoryÚModelConfigÚModelProviderc                  óT  • [         R                  o R                  nSo!U:H  o3(       d×  [        R                  " SU4SX45      S[
        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U 5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n =n=p2[         R                  o R                  nS	o!U:H  o3(       d×  [        R                  " SU4S
X45      S[
        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U 5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n =n=p2[         R                  o R                  nSo!U:H  o3(       d×  [        R                  " SU4SX45      S[
        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U 5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n =n=p2[         R                  o R                  nSo!U:H  o3(       d×  [        R                  " SU4SX45      S[
        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U 5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n =n=p2[         R                  o R                  nSo!U:H  o3(       d×  [        R                  " SU4SX45      S[
        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U 5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n =n=p2[         R                  o R                  nSo!U:H  o3(       d×  [        R                  " SU4SX45      S[
        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U 5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n =n=p2[         R                   o R                  nSo!U:H  o3(       d×  [        R                  " SU4SX45      S[
        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U 5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n =n=p2[         R"                  o R                  nSo!U:H  o3(       d×  [        R                  " SU4SX45      S[
        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U 5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n =n=p2g)z,Test ModelProvider enum has expected values.Ú	anthropic©ú==)zL%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.ANTHROPIC
}.value
} == %(py7)sr   ©Úpy0Úpy2Úpy4Úpy7úassert %(py9)sÚpy9NÚopenai)zI%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.OPENAI
}.value
} == %(py7)sÚgroq)zG%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.GROQ
}.value
} == %(py7)sÚgemini)zI%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.GEMINI
}.value
} == %(py7)sÚvertexai)zK%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.VERTEXAI
}.value
} == %(py7)sÚbedrock)zJ%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.BEDROCK
}.value
} == %(py7)sÚmistral)zJ%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.MISTRAL
}.value
} == %(py7)sÚollama)zI%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.OLLAMA
}.value
} == %(py7)s)r   Ú	ANTHROPICÚvalueÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚOPENAIÚGROQÚGEMINIÚVERTEXAIÚBEDROCKÚMISTRALÚOLLAMA)Ú@py_assert1Ú@py_assert3Ú@py_assert6Ú@py_assert5Ú@py_format8Ú@py_format10s         Ú'/workspace/tests/agents/test_factory.pyÚtest_model_provider_enum_valuesr1   	   sB  € ä×"Ñ"Ð7×(Ñ(Ð7¨KÐ7¨KÑ7×7×7×7Ò7Ð(×7×7×7×7×7Õ7Œ=×7×7×7Ñ7Œ=×7×7Õ7Ð"×7×7Ó7Ð(×7×7Ó7¨K×7×7×7×7×7×7Õ7Ü×ÑÐ1×%Ñ%Ð1¨Ð1¨Ñ1×1×1×1Ò1Ð%×1×1×1×1×1Õ1Œ=×1×1×1Ñ1Œ=×1×1Õ1Ð×1×1Ó1Ð%×1×1Ó1¨×1×1×1×1×1×1Õ1Ü×ÑÐ-×#Ñ#Ð- vÐ- vÑ-×-×-×-Ò-Ð#×-×-×-×-×-Õ-Œ=×-×-×-Ñ-Œ=×-×-Õ-Ð×-×-Ó-Ð#×-×-Ó- v×-×-×-×-×-×-Õ-Ü×ÑÐ1×%Ñ%Ð1¨Ð1¨Ñ1×1×1×1Ò1Ð%×1×1×1×1×1Õ1Œ=×1×1×1Ñ1Œ=×1×1Õ1Ð×1×1Ó1Ð%×1×1Ó1¨×1×1×1×1×1×1Õ1Ü×!Ñ!Ð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Ü× Ñ Ð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¨)×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Õ3Ð ×3×3Ó3Ð&×3×3Ó3¨)×3×3×3×3×3×3Õ3Ü×ÑÐ1×%Ñ%Ð1¨Ð1¨Ñ1×1×1×1Ò1Ð%×1×1×1×1×1Õ1Œ=×1×1×1Ñ1Œ=×1×1Õ1Ð×1×1Ó1Ð%×1×1Ó1¨×1×1×1×1×1×1Ö1ó    c                  ó°  • [         R                  n [        R                  oU;   o"(       Gd  [        R
                  " SU4SX45      S[        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U 5      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n =p![         R                  n [        R                  oU;   o"(       Gd  [        R
                  " SU4S	X45      S[        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U 5      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n =p![         R                  n [        R                  oU;   o"(       Gd  [        R
                  " SU4S
X45      S[        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U 5      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n =p![         R                  n [        R                  oU;   o"(       Gd  [        R
                  " SU4SX45      S[        R                  " 5       ;   d  [        R                  " [         5      (       a  [        R                  " [         5      OS[        R                  " U 5      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n =p![        R                  [         R                     nSo%U:H  of(       do  [        R
                  " SU4SXR45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=pb[        R                  [         R                     nSo%U:H  of(       do  [        R
                  " SU4SXR45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=pbg)z6Test ModelConfig has default models for each provider.©Úin)zU%(py2)s
{%(py2)s = %(py0)s.ANTHROPIC
} in %(py6)s
{%(py6)s = %(py4)s.DEFAULT_MODELS
}r   r   ©r   r   r   Úpy6úassert %(py8)sÚpy8N)zR%(py2)s
{%(py2)s = %(py0)s.OPENAI
} in %(py6)s
{%(py6)s = %(py4)s.DEFAULT_MODELS
})zP%(py2)s
{%(py2)s = %(py0)s.GROQ
} in %(py6)s
{%(py6)s = %(py4)s.DEFAULT_MODELS
})zR%(py2)s
{%(py2)s = %(py0)s.GEMINI
} in %(py6)s
{%(py6)s = %(py4)s.DEFAULT_MODELS
}úclaude-3-5-haiku-latestr	   ©z%(py1)s == %(py4)s©Úpy1r   úassert %(py6)sr7   úgpt-4o-mini)r   r   r   ÚDEFAULT_MODELSr   r   r   r   r   r    r!   r"   r#   r$   r%   )r*   r-   r+   Ú@py_format7Ú@py_format9Ú@py_assert0Ú@py_assert2Ú@py_format5s           r0   Ú test_model_config_default_modelsrF      s1  € ä×"Ñ"Ð@¤k×&@Ñ&@Ð@Ð&@Ñ@×@×@×@Ó@Ð"×@×@×@×@×@Õ@Œ=×@×@×@Ñ@Œ=×@×@Õ@Ð"×@×@×@×@×@Ô@¤k×@×@×@Ñ@¤k×@×@Õ@Ð&@×@×@×@×@×@×@Ó@Ü×ÑÐ=¤;×#=Ñ#=Ð=Ð#=Ñ=×=×=×=Ó=Ð×=×=×=×=×=Õ=Œ=×=×=×=Ñ=Œ=×=×=Õ=Ð×=×=×=×=×=Ô=¤;×=×=×=Ñ=¤;×=×=Õ=Ð#=×=×=×=×=×=×=Ó=Ü×ÑÐ;¤×!;Ñ!;Ð;Ð!;Ñ;×;×;×;Ó;Ð×;×;×;×;×;Õ;Œ=×;×;×;Ñ;Œ=×;×;Õ;Ð×;×;×;×;×;Ô;¤×;×;×;Ñ;¤×;×;Õ;Ð!;×;×;×;×;×;×;Ó;Ü×ÑÐ=¤;×#=Ñ#=Ð=Ð#=Ñ=×=×=×=Ó=Ð×=×=×=×=×=Õ=Œ=×=×=×=Ñ=Œ=×=×=Õ=Ð×=×=×=×=×=Ô=¤;×=×=×=Ñ=¤;×=×=Õ=Ð#=×=×=×=×=×=×=Ó=ä×%Ñ%¤m×&=Ñ&=Ñ>Ð[ÐB[Ð[ÐB[Ñ[×[×[×[Ò[Ð>×[×[Ô[Ð>×[×[Ó[ÐB[×[×[×[×[×[×[Ó[Ü×%Ñ%¤m×&:Ñ&:Ñ;ÐL¸}ÐL¸}ÑL×L×L×LÒLÐ;×L×LÔLÐ;×L×LÓL¸}×L×L×L×L×L×LÔLr2   c                  ó
  • [         R                  [        R                     n SoU:H  o"(       do  [        R
                  " SU4SX45      [        R                  " U 5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n =p![         R                  [        R                     n SoU:H  o"(       do  [        R
                  " SU4SX45      [        R                  " U 5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n =p![         R                  [        R                     n S	oU:H  o"(       do  [        R
                  " SU4SX45      [        R                  " U 5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n =p![         R                  [        R                     n SoUL o"(       do  [        R
                  " S
U4SX45      [        R                  " U 5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n =p!g)z8Test ModelConfig has API key environment variable names.ÚANTHROPIC_API_KEYr	   r;   r<   r>   r7   NÚOPENAI_API_KEYÚGROQ_API_KEY©Úis)z%(py1)s is %(py4)s)r   ÚAPI_KEY_VARSr   r   r   r   r    r!   r"   r#   r$   r)   )rC   r+   rD   rE   rA   s        r0   Útest_model_config_api_key_varsrN       sx  € ä×#Ñ#¤M×$;Ñ$;Ñ<ÐSÐ@SÐSÐ@SÑS×S×S×SÒSÐ<×S×SÔSÐ<×S×SÓSÐ@S×S×S×S×S×S×SÓSÜ×#Ñ#¤M×$8Ñ$8Ñ9ÐMÐ=MÐMÐ=MÑM×M×M×MÒMÐ9×M×MÔMÐ9×M×MÓMÐ=M×M×M×M×M×M×MÓMÜ×#Ñ#¤M×$6Ñ$6Ñ7ÐI¸>ÐI¸>ÑI×I×I×IÒIÐ7×I×IÔIÐ7×I×IÓI¸>×I×I×I×I×I×IÓIÜ×#Ñ#¤M×$8Ñ$8Ñ9ÐA¸TÐA¸TÐA×A×A×AÒAÐ9×A×AÔAÐ9×A×AÓA¸T×A×A×A×A×A×AÔAr2   c                  óÞ  • [        SSS9   [        R                  " 5       n 0 oU:H  o"(       d¥  [        R                  " SU4SX45      S[
        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=p!S
S
S
5        g
! , (       d  f       g
= f)zATest get_known_models returns empty dict when file doesn't exist.úpathlib.Path.existsF©Úreturn_valuer	   ©z%(py0)s == %(py3)sÚmodels©r   Úpy3úassert %(py5)sÚpy5N)r   r   Úget_known_modelsr   r   r   r   r   r    r!   r"   ©rT   rD   r*   Ú@py_format4Ú@py_format6s        r0   Ú*test_model_config_get_known_models_no_filer]   (   s�   € ä	Ð$°5Ó	9Ü×-Ò-Ó/ˆàÐ˜‰|×××Òˆv×××××Õˆv×××Ñˆv××Õ˜××××××Ñ÷ 
:×	9Ö	9ús   ‹C
CÃ
C,c                  óð  • [        S[        S5      S9   [        R                  " 5       n 0 oU:H  o"(       d¥  [        R
                  " SU4SX45      S[        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=p!S
S
S
5        g
! , (       d  f       g
= f)z4Test get_known_models handles exceptions gracefully.rP   z
Test error)Úside_effectr	   rS   rT   rU   rW   rX   N)r   Ú	Exceptionr   rY   r   r   r   r   r   r    r!   r"   rZ   s        r0   Ú,test_model_config_get_known_models_exceptionra   0   s‡   € ä	Ð$´)¸LÓ2IÓ	JÜ×-Ò-Ó/ˆàÐ˜‰|×××Òˆv×××××Õˆv×××Ñˆv××Õ˜××××××Ñ÷ 
K×	JÖ	Jús   ”C
C'Ã'
C5c                  óê  • [         R                  " [        R                  0 SS9   [	        SS9n U R
                  nSo!UL o3(       dº  [        R                  " SU4SX45      S[        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=p2U R                  nSo!UL o3(       dº  [        R                  " SU4SX45      S[        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=p2SSS5        g! , (       d  f       g= f)z/Test AgentFactory initialization with defaults.T©ÚclearF©Úenable_logfirerK   )z6%(py2)s
{%(py2)s = %(py0)s.enable_logfire
} is %(py5)sÚfactory©r   r   rX   úassert %(py7)sr   N©z:%(py2)s
{%(py2)s = %(py0)s.logfire_configured
} is %(py5)s)r   ÚdictÚosÚenvironr   rf   r   r   r   r   r   r    r!   r"   Úlogfire_configured©rg   r*   Ú@py_assert4r+   r\   r.   s         r0   Ú test_agent_factory_init_defaultsrq   8   s  € ä	�Š”B—J‘J ¨$Ó	/Ü¨eÑ4ˆà×%Ñ%Ð.¨Ð.¨Ð.×.×.×.Ò.Ð%×.×.×.×.×.Õ.ˆw×.×.×.Ñ.ˆw×.×.Õ.Ð%×.×.Ó.¨×.×.×.×.×.×.Ó.Ø×)Ñ)Ð2¨UÐ2¨UÐ2×2×2×2Ò2Ð)×2×2×2×2×2Õ2ˆw×2×2×2Ñ2ˆw×2×2Õ2Ð)×2×2Ó2¨U×2×2×2×2×2×2Ó2÷	 
0×	/Ö	/ús   ¥F6G$Ç$
G2c                  óÂ  • [        SS9n U R                  nSo!UL o3(       dº  [        R                  " SU4SX45      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=p2g	)
z1Test AgentFactory initialization without logfire.Fre   rK   rj   rg   rh   ri   r   N)
r   rn   r   r   r   r   r   r    r!   r"   ro   s         r0   Ú'test_agent_factory_init_without_logfirers   A   s   € ä¨%Ñ0€Gà×%Ñ%Ð.¨Ð.¨Ð.×.×.×.Ò.Ð%×.×.×.×.×.Õ.ˆ7×.×.×.Ñ.ˆ7×.×.Õ.Ð%×.×.Ó.¨×.×.×.×.×.×.Ô.r2   Trc   c                  óœ  • [        SS9n U R                  5       nSo!UL o3(       d¥  [        R                  " SU4SX45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS=p2g)
z)Test provider detection with no API keys.Fre   NrK   )z%(py0)s is %(py3)sÚproviderrU   rW   rX   )
r   Ú_detect_providerr   r   r   r   r   r    r!   r"   )rg   ru   rD   r*   r[   r\   s         r0   Ú*test_agent_factory_detect_provider_no_keysrw   H   sw   € ô ¨%Ñ0€Gà×'Ñ'Ó)€HàÐ�tÐ×××Òˆ8×××××Õˆ8×××Ñˆ8××Õ�t××××××Òr2   rH   ztest-keyc                  ó`  • [        SS9n U R                  5       n[        R                  o!U:H  o3(       dø  [        R
                  " SU4SX45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=p2g
)z+Test provider detection with Anthropic key.Fre   r	   ©z1%(py0)s == %(py4)s
{%(py4)s = %(py2)s.ANTHROPIC
}ru   r   ©r   r   r   r>   r7   N©r   rv   r   r   r   r   r   r   r   r    r!   r"   ©rg   ru   r+   r*   rE   rA   s         r0   Ú,test_agent_factory_detect_provider_anthropicr}   R   ó¡   € ô ¨%Ñ0€Gà×'Ñ'Ó)€Hä$×.Ñ.Ð.Ð.Ñ.×.×.×.Ò.ˆ8×.×.×.×.×.Õ.ˆ8×.×.×.Ñ.ˆ8×.×.×.×.×.Ö.”}×.×.×.Ñ.”}×.×.Õ.Ð.×.×.×.×.×.×.Ò.r2   rI   c                  ó`  • [        SS9n U R                  5       n[        R                  o!U:H  o3(       dø  [        R
                  " SU4SX45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=p2g
)z(Test provider detection with OpenAI key.Fre   r	   )z.%(py0)s == %(py4)s
{%(py4)s = %(py2)s.OPENAI
}ru   r   rz   r>   r7   N)r   rv   r   r#   r   r   r   r   r   r    r!   r"   r|   s         r0   Ú)test_agent_factory_detect_provider_openair€   \   s¡   € ô ¨%Ñ0€Gà×'Ñ'Ó)€Hä$×+Ñ+Ð+Ð+Ñ+×+×+×+Ò+ˆ8×+×+×+×+×+Õ+ˆ8×+×+×+Ñ+ˆ8×+×+×+×+×+Ö+”}×+×+×+Ñ+”}×+×+Õ+Ð+×+×+×+×+×+×+Ò+r2   Úkey1Úkey2)rH   rI   c                  ó`  • [        SS9n U R                  5       n[        R                  o!U:H  o3(       dø  [        R
                  " SU4SX45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=p2g
)z0Test provider detection respects priority order.Fre   r	   ry   ru   r   rz   r>   r7   Nr{   r|   s         r0   Ú+test_agent_factory_detect_provider_priorityr„   f   r~   r2   c                  ó¾  • [        SS9n U R                  [        R                  S5      nSo!U:H  o3(       d¥  [        R
                  " SU4SX45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=p2g
)z+Test formatting model string for Anthropic.Fre   úclaude-3-5-sonnet-latestr	   rS   ÚresultrU   rW   rX   N©r   Ú_format_model_stringr   r   r   r   r   r   r   r    r!   r"   ©rg   r‡   rD   r*   r[   r\   s         r0   Ú0test_agent_factory_format_model_string_anthropicr‹   p   s‚   € ä¨%Ñ0€Gà×)Ñ)¬-×*AÑ*AÐC]Ó^€Fà/Ð/Ð/Ñ/×/×/×/Ò/ˆ6×/×/×/×/×/Õ/ˆ6×/×/×/Ñ/ˆ6×/×/Õ/Ð/×/×/×/×/×/×/Ò/r2   c                  ó¾  • [        SS9n U R                  [        R                  S5      nSo!U:H  o3(       d¥  [        R
                  " SU4SX45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=p2g
)z@Test formatting model string for Anthropic with existing prefix.Fre   z"anthropic:claude-3-5-sonnet-latestr	   rS   r‡   rU   rW   rX   Nrˆ   rŠ   s         r0   Ú<test_agent_factory_format_model_string_anthropic_with_prefixr�   y   s‚   € ä¨%Ñ0€Gà×)Ñ)¬-×*AÑ*AÐCgÓh€Fà9Ð9Ð9Ñ9×9×9×9Ò9ˆ6×9×9×9×9×9Õ9ˆ6×9×9×9Ñ9ˆ6×9×9Õ9Ð9×9×9×9×9×9×9Ò9r2   c                  ó¾  • [        SS9n U R                  [        R                  S5      nSo!U:H  o3(       d¥  [        R
                  " SU4SX45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=p2g)z(Test formatting model string for OpenAI.Fre   úgpt-4ozopenai:gpt-4or	   rS   r‡   rU   rW   rX   N)r   r‰   r   r#   r   r   r   r   r   r    r!   r"   rŠ   s         r0   Ú-test_agent_factory_format_model_string_openair�   ‚   s   € ä¨%Ñ0€Gà×)Ñ)¬-×*>Ñ*>ÀÓI€Fà$Ð$�_Ñ$×$×$×$Ò$ˆ6×$×$×$×$×$Õ$ˆ6×$×$×$Ñ$ˆ6×$×$Õ$�_×$×$×$×$×$×$Ò$r2   c                  ó¾  • [        SS9n U R                  [        R                  S5      nSo!U:H  o3(       d¥  [        R
                  " SU4SX45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=p2g)z&Test formatting model string for Groq.Fre   zllama-3.1-8b-instantzgroq:llama-3.1-8b-instantr	   rS   r‡   rU   rW   rX   N)r   r‰   r   r$   r   r   r   r   r   r    r!   r"   rŠ   s         r0   Ú+test_agent_factory_format_model_string_groqr’   ‹   s‚   € ä¨%Ñ0€Gà×)Ñ)¬-×*<Ñ*<Ð>TÓU€Fà0Ð0Ð0Ñ0×0×0×0Ò0ˆ6×0×0×0×0×0Õ0ˆ6×0×0×0Ñ0ˆ6×0×0Õ0Ð0×0×0×0×0×0×0Ò0r2   c                  ó¾  • [        SS9n U R                  [        R                  S5      nSo!U:H  o3(       d¥  [        R
                  " SU4SX45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=p2g)z(Test formatting model string for Gemini.Fre   zgemini-1.5-flashzgemini:gemini-1.5-flashr	   rS   r‡   rU   rW   rX   N)r   r‰   r   r%   r   r   r   r   r   r    r!   r"   rŠ   s         r0   Ú-test_agent_factory_format_model_string_geminir”   ”   s‚   € ä¨%Ñ0€Gà×)Ñ)¬-×*>Ñ*>Ð@RÓS€Fà.Ð.Ð.Ñ.×.×.×.Ò.ˆ6×.×.×.×.×.Õ.ˆ6×.×.×.Ñ.ˆ6×.×.Õ.Ð.×.×.×.×.×.×.Ò.r2   c                  ó^  • [        SS9n [        R                  " [        S0 S9   U R	                  5       n[        U[        5      o"(       Gd+  SS[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OSS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S	.-  n[        [        R                  " U5      5      eS
nSoDU;   oU(       d¥  [        R                  " SU4SXA45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nSSU0-  n[        [        R                  " U5      5      eS
=pESoDU;   oU(       d¥  [        R                  " SU4SXA45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nSSU0-  n[        [        R                  " U5      5      eS
=pESoDU;   oU(       d¥  [        R                  " SU4SXA45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nSSU0-  n[        [        R                  " U5      5      eS
=pES
S
S
5        g
! , (       d  f       g
= f)z"Test listing all available models.Fre   rY   rQ   z5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}Ú
isinstancerT   rk   )r   r=   r   r   Nr   r4   ©z%(py1)s in %(py3)s©r=   rV   rW   rX   r   r   )r   r   Úobjectr   Úlist_available_modelsr–   rk   r   r   r   r   r    r!   r"   r   )rg   rT   r+   rE   rC   rD   r[   r\   s           r0   Ú,test_agent_factory_list_available_models_allr›   �   sÝ  € ä¨%Ñ0€Gä	�Š”kÐ#5ÀBÓ	GØ×.Ñ.Ó0ˆä˜&¤$Ó'Ð'Ö'×'×'×'×'×'Ñ'Œz×'×'×'Ñ'Œz×'×'×'×'×'Ö'˜&×'×'×'Ñ'˜&×'×'×'×'×'Ö'¤$×'×'×'Ñ'¤$×'×'Õ'Ð'×'×'×'×'×'Ñ'ØÐ$˜fÑ$×$×$×$Ò$ˆ{×$×$Ô$ˆ{×$×$×$×$×$Ô$˜f×$×$×$Ñ$˜f×$×$×$×$×$×$Ó$ØÐ!˜6Ñ!×!×!×!Ò!ˆx×!×!Ô!ˆx×!×!×!×!×!Ô!˜6×!×!×!Ñ!˜6×!×!×!×!×!×!Ó!ØÐ˜Ñ×××Òˆv××Ôˆv×××××Ô˜×××Ñ˜××××××Ó÷ 
H×	GÖ	Gús   ¤M1NÎ
N,c                  ót  • [        SS9n [        R                  " [        S0 S9   U R	                  [
        R                  S9nSo"U;   o3(       d¥  [        R                  " SU4SX!45      [        R                  " U5      S	[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	S
.-  nSSU0-  n[        [        R                  " U5      5      eS=p#[        U5      nSocU:H  ow(       Gd  [        R                  " SU4SX645      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS	[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n	[        [        R                  " U	5      5      eS=n=pvSSS5        g! , (       d  f       g= f)z*Test listing models for specific provider.Fre   rY   rQ   ©ru   r   r4   r—   rT   r˜   rW   rX   Né   r	   ©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlen©r   r=   rV   r7   r8   r9   )r   r   r™   r   rš   r   r   r   r   r    r   r   r   r!   r"   r    )
rg   rT   rC   rD   r[   r\   r-   rp   rA   rB   s
             r0   Ú:test_agent_factory_list_available_models_specific_providerr¢   ª   s/  € ä¨%Ñ0€Gä	�Š”kÐ#5ÀBÓ	GØ×.Ñ.¼×8OÑ8OÐ.ÐPˆàÐ$˜fÑ$×$×$×$Ò$ˆ{×$×$Ô$ˆ{×$×$×$×$×$Ô$˜f×$×$×$Ñ$˜f×$×$×$×$×$×$Ó$Ü�6‹{Ð˜aÐ˜aÑ×××Óˆ{×××××ÕŒs×××ÑŒs×××××Ö�6×××Ñ�6××Õˆ{××Ó˜a××××××Ó÷	 
H×	GÖ	Gús   ¤G<H)È)
H7c                  óØ  • [        SS9n SS/SS/S.n[        R                  " [        SUS	9   U R	                  [
        R                  S
9nUS   nSS/oCU:H  oU(       do  [        R                  " SU4SX445      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=pTSSS5        g! , (       d  f       g= f)z4Test listing models when known_models are available.Fre   r†   r:   r�   r?   )r   r   rY   rQ   r�   r   r	   r;   r<   r>   r7   N)r   r   r™   r   rš   r   r   r   r   r    r!   r"   )rg   Úmock_known_modelsrT   rC   r+   rD   rE   rA   s           r0   Ú:test_agent_factory_list_available_models_with_known_modelsr¥   µ   sº   € ä¨%Ñ0€Gð 1Ð2KÐLØ˜]Ð+ñÐô
 
�Š”kÐ#5ÐDUÓ	VØ×.Ñ.¼×8OÑ8OÐ.ÐPˆà�kÑ"Ð]Ð'AÐC\Ð&]Ð]Ð&]Ñ]×]×]×]Ò]Ð"×]×]Ô]Ð"×]×]Ó]Ð&]×]×]×]×]×]×]Ó]÷ 
W×	VÖ	Vús   ­B%CÃ
C)c                  ó  • [        SS9n U R                  5       n[        R                  o"R                  o3U;   oD(       Gd  [
        R                  " SU4SX145      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSS	U0-  n[        [
        R                  " U5      5      eS
=n=p4[        R                  o"R                  o3U;  oD(       Gd  [
        R                  " SU4SX145      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSS	U0-  n[        [
        R                  " U5      5      eS
=n=p4g
)z2Test getting available providers with no API keys.Fre   r4   ©zI%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.OLLAMA
}.value
} in %(py6)sr   Ú	providersr6   r8   r9   N)únot in)zP%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.ANTHROPIC
}.value
} not in %(py6)s)r   Úget_available_providersr   r)   r   r   r   r   r   r   r    r!   r"   r   ©rg   r¨   r*   r+   r-   rA   rB   s          r0   Ú/test_agent_factory_get_available_providers_noner¬   Ä   sP  € ô ¨%Ñ0€Gà×/Ñ/Ó1€Iä×ÑÐ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Ô2¨×2×2×2Ñ2¨×2×2×2×2×2×2Õ2Ü×"Ñ"Ð9×(Ñ(Ð9°	Ñ9×9×9×9Ó9Ð(×9×9×9×9×9Õ9Œ=×9×9×9Ñ9Œ=×9×9Õ9Ð"×9×9Ó9Ð(×9×9×9×9×9Ô9°	×9×9×9Ñ9°	×9×9×9×9×9×9Ö9r2   c                  ó  • [        SS9n U R                  5       n[        R                  o"R                  o3U;   oD(       Gd  [
        R                  " SU4SX145      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSS	U0-  n[        [
        R                  " U5      5      eS
=n=p4[        R                  o"R                  o3U;   oD(       Gd  [
        R                  " SU4SX145      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSS	U0-  n[        [
        R                  " U5      5      eS
=n=p4g
)z4Test getting available providers with Anthropic key.Fre   r4   ©zL%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.ANTHROPIC
}.value
} in %(py6)sr   r¨   r6   r8   r9   Nr§   )r   rª   r   r   r   r   r   r   r   r   r    r!   r"   r)   r«   s          r0   Ú4test_agent_factory_get_available_providers_anthropicr¯   Ï   sP  € ô ¨%Ñ0€Gà×/Ñ/Ó1€Iä×"Ñ"Ð5×(Ñ(Ð5¨IÑ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¨I×5×5×5Ñ5¨I×5×5×5×5×5×5Õ5Ü×ÑÐ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Ô2¨×2×2×2Ñ2¨×2×2×2×2×2×2Ö2r2   c                  ó†  • [        SS9n U R                  5       n[        R                  o"R                  o3U;   oD(       Gd  [
        R                  " SU4SX145      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSS	U0-  n[        [
        R                  " U5      5      eS
=n=p4[        R                  o"R                  o3U;   oD(       Gd  [
        R                  " SU4SX145      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSS	U0-  n[        [
        R                  " U5      5      eS
=n=p4[        R                  o"R                  o3U;   oD(       Gd  [
        R                  " SU4SX145      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OSS.-  nSS	U0-  n[        [
        R                  " U5      5      eS
=n=p4g
)z4Test getting available providers with multiple keys.Fre   r4   r®   r   r¨   r6   r8   r9   N)zI%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.OPENAI
}.value
} in %(py6)sr§   )r   rª   r   r   r   r   r   r   r   r   r    r!   r"   r#   r)   r«   s          r0   Ú3test_agent_factory_get_available_providers_multipler±   Ú   sê  € ô ¨%Ñ0€Gà×/Ñ/Ó1€Iä×"Ñ"Ð5×(Ñ(Ð5¨IÑ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¨I×5×5×5Ñ5¨I×5×5×5×5×5×5Õ5Ü×ÑÐ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Ô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Ñ2Œ=×2×2Õ2Ð×2×2Ó2Ð%×2×2×2×2×2Ô2¨×2×2×2Ñ2¨×2×2×2×2×2×2Ö2r2   c                  óÊ  • [        [        5      n [        U 5      nSo!U:H  o3(       Gd  [        R                  " SU4SX45      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[
        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=p2[        R                  ofU ;   ow(       dø  [        R                  " S
U4SX`45      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OSS.-  nSSU0-  n[        [        R                  " U5      5      eS	=pg[        R                  ofU ;   ow(       dø  [        R                  " S
U4SX`45      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OSS.-  nSSU0-  n[        [        R                  " U5      5      eS	=pgg	)z1Test that we can iterate over ModelProvider enum.é   r	   rŸ   r    r¨   r¡   r8   r9   Nr4   )z1%(py2)s
{%(py2)s = %(py0)s.ANTHROPIC
} in %(py4)sr   rz   r>   r7   )z.%(py2)s
{%(py2)s = %(py0)s.OLLAMA
} in %(py4)s)Úlistr   r    r   r   r   r   r   r    r!   r"   r   r)   )	r¨   rD   r-   rp   rA   rB   r*   r+   rE   s	            r0   Ú"test_model_provider_enum_iterationrµ   æ   s§  € ä”]Ó#€Iäˆy‹>Ð˜QÐ˜QÑ×××Óˆ>×××××ÕŒ3×××ÑŒ3×××××Öˆy×××Ñˆy××Õˆ>××Ó˜Q××××××ÓÜ×"Ñ"Ð/ iÑ/×/×/×/Ò/Ð"×/×/×/×/×/Õ/Œ=×/×/×/Ñ/Œ=×/×/Õ/Ð"×/×/×/×/×/Ô/ i×/×/×/Ñ/ i×/×/×/×/×/×/Ó/Ü×ÑÐ, 9Ñ,×,×,×,Ò,Ð×,×,×,×,×,Õ,Œ=×,×,×,Ñ,Œ=×,×,Õ,Ð×,×,×,×,×,Ô, 9×,×,×,Ñ, 9×,×,×,×,×,×,Ô,r2   c                  óž  • [          GHB  n [        R                  oU;   o"(       dø  [        R                  " SU4SX45      S[
        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OSS[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=p![        R                  U    n[        U[        5      oU(       dõ  S	S
[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS
[        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  n[        [        R                  " U5      5      eS=p%[        R                  U    n[        U5      nSoqU:„  oˆ(       d×  [        R                  " SU4SX45      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS=n=n=p‡GME     g)z7Test that all providers have default models configured.r4   )z6%(py0)s in %(py4)s
{%(py4)s = %(py2)s.DEFAULT_MODELS
}ru   r   rz   r>   r7   Nz5assert %(py5)s
{%(py5)s = %(py0)s(%(py2)s, %(py3)s)
}r–   Ústr)r   r   rV   rX   r   )Ú>)z/%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} > %(py7)sr    r   r   r   )r   r   r@   r   r   r   r   r   r    r!   r"   r–   r·   r    )ru   r+   r*   rE   rA   rp   r\   r,   r-   r.   r/   s              r0   Ú-test_model_config_all_providers_have_defaultsr¹   ï   s´  € ç!�MˆÜ&×5Ñ5Ð5Ð5Ñ5×5×5×5Ò5ˆx×5×5×5×5×5Õ5ˆx×5×5×5Ñ5ˆx×5×5×5×5×5Ö5œ;×5×5×5Ñ5œ;×5×5Õ5Ð5×5×5×5×5×5×5Ñ5Ü%×4Ñ4°XÑ>ÐDŒzÐ>ÄÓDÐDÕD×D×D×D×D×DÑDŒz×D×D×DÑDŒz×D×DÕDÐ>×D×D×D×D×DÔDÄ×D×D×DÑDÄ×D×DÕDÐD×D×D×D×D×DÒDÜ×-Ñ-¨hÑ7Ð<ŒsÐ7Ó8Ð<¸1Ð<¸1Ñ<×<×<×<Ò<Ð8×<×<×<×<×<Õ<Œs×<×<×<Ñ<Œs×<×<Õ<Ð7×<×<Ó<Ð8×<×<Ó<¸1×<×<×<×<×<×<×<Ð<ò "r2   c                  óÆ  • [          GHV  n [        R                  oU;   o"(       dø  [        R                  " SU4SX45      S[
        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OSS[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=p![        R                  U    n/ nSoeUL ooq(       d  [        U[        5      oˆnU(       Gdú  [        R                  " S	U4S
XV45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  n	SSU	0-  o¢R                  U
5        U(       Gd  SS[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " W5      S.-  o²R                  U5        [        R                  " US5      0 -  nSSU0-  n[        [        R                  " U5      5      eS=n=n=n=phGMY     g)z7Test that all providers have API key variable mappings.r4   )z4%(py0)s in %(py4)s
{%(py4)s = %(py2)s.API_KEY_VARS
}ru   r   rz   r>   r7   NrK   )z%(py2)s is %(py5)sÚapi_key_var)r   rX   z%(py7)sr   z2%(py13)s
{%(py13)s = %(py9)s(%(py10)s, %(py11)s)
}r–   r·   )r   Úpy10Úpy11Úpy13rž   zassert %(py16)sÚpy16)r   r   rM   r   r   r   r   r   r    r!   r"   r–   r·   ÚappendÚ_format_boolop)ru   r+   r*   rE   rA   r»   rp   rC   Ú@py_assert12r\   r.   Ú@py_format14Ú@py_format15Ú@py_format17s                 r0   Ú1test_model_config_all_providers_have_api_key_varsrÆ   ÷   sŸ  € ç!�MˆÜ&×3Ñ3Ð3Ð3Ñ3×3×3×3Ò3ˆx×3×3×3×3×3Õ3ˆx×3×3×3Ñ3ˆx×3×3×3×3×3Ö3œ;×3×3×3Ñ3œ;×3×3Õ3Ð3×3×3×3×3×3×3Ñ3Ü!×.Ñ.¨xÑ8ˆÙB˜dÐB˜dÐ"×B¤j°¼cÓ&B×B×B×BÕBˆ{×B×B×B×B×BÕBˆ{×B×B×BÑBˆ{×B×BÕB˜d×B×B×B×B×B×B×B×B×B×BÑB¤j×B×B×BÑB¤j×B×B×B×B×BÖB°×B×B×BÑB°×B×B×B×B×BÖB¼c×B×B×BÑB¼c×B×BÕBÐ&B×B×B×B×B×B×B×B×B×B×B×B×BÔBò "r2   ))Ú__doc__Úbuiltinsr   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter   rl   Úunittest.mockr   Úquber.agents.factoryr   r   r   r1   rF   rN   r]   ra   rq   rs   rk   rm   rw   r}   r€   r„   r‹   r�   r�   r’   r”   r›   r¢   r¥   r¬   r¯   r±   rµ   r¹   rÆ   © r2   r0   Ú<module>rÏ      s�  ðÙ Hç  „ ƒ	Ý ç IÑ Iò	2òMòBòòò3ò/ð ‡‚ˆB�J‰J˜ $Ñ'ñó (ðð ‡‚ˆB�J‰JÐ,¨jÐ9Ó:ñ/ó ;ð/ð ‡‚ˆB�J‰JÐ)¨:Ð6¸dÑCñ,ó Dð,ð ‡‚ˆB�J‰J¨fÈÑOÓPñ/ó Qð/ò0ò:ò%ò1ò/ò
 ò ò^ð ‡‚ˆB�J‰J˜ $Ñ'ñ:ó (ð:ð ‡‚ˆB�J‰JÐ,¨jÐ9Ó:ñ3ó ;ð3ð ‡‚ˆB�J‰J¨fÈÑOÓPñ3ó Qð3ò-ò=óCr2   