§
    ¼�žj¼  ã            
       ót  — d Z ddlZddlmc mZ ddlZddlZddl	Z	ej
                             dej
                             ej
                             ej
                             e¦  «        d¦  «        ¦  «        ¦  «         ddlmZmZmZmZmZ  G d„ de	j        ¦  «        Zedk    r e	j        ¦   «          dS dS )zu
Unit Tests cho Gemini 3.8 Flash SDK Pydantic Structured Outputs & Tool Calling
TASK-UPGRADE-TECH-TOOLCHAIN-20260907
é    Nz..)ÚGameActionCommandÚGeminiAgentBridgeÚItemAppraisalResultÚMacroDecisionResultÚTradeWhisperAnalysisc                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestGeminiStructuredAgentc                 óÔ   — d}t          j        |¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         d S )Nu‡  {
            "item_name": "Mirror of Kalandra",
            "rarity": "Currency",
            "item_type": "Currency",
            "tier_score": 100.0,
            "estimated_chaos_value": 150000.0,
            "is_upgrade": false,
            "action": "STASH_FOR_TRADE",
            "reasoning": "Váº­t pháº©m Ä‘áº¯t Ä‘á»� nháº¥t POE2, cáº§n cáº¥t giá»¯ tuyá»‡t Ä‘á»‘i an toÃ n"
        }zMirror of KalandraÚSTASH_FOR_TRADEg    €OA)r   Úmodel_validate_jsonÚassertEqualÚ	item_nameÚactionÚestimated_chaos_value)ÚselfÚ	json_dataÚitems      ú:C:\Projects\AutoPOE2\tests\test_gemini_structured_agent.pyÚtest_item_appraisal_modelz3TestGeminiStructuredAgent.test_item_appraisal_model   sl   € ð	ˆ	õ #Ô6°yÑAÔAˆØ×Ò˜œÐ)=Ñ>Ô>Ð>Ø×Ò˜œÐ&7Ñ8Ô8Ð8Ø×Ò˜Ô3°XÑ>Ô>Ð>Ð>Ð>ó    c                 óÔ   — d}t          j        |¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         d S )Nuþ   {
            "strategy": "DEFENSIVE_RETREAT",
            "priority": "SURVIVAL",
            "suggested_action": "DOUBLE_DODGE_BACKWARD",
            "reasoning": "MÃ¡u dÆ°á»›i 25% kÃ¨m 8 quÃ¡i váº­t xung quanh, cáº§n lÃ¹i láº¡i há»“i phá»¥c"
        }ÚDEFENSIVE_RETREATÚSURVIVALÚDOUBLE_DODGE_BACKWARD)r   r   r   ÚstrategyÚpriorityÚsuggested_action)r   r   Údecisions      r   Útest_macro_decision_modelz3TestGeminiStructuredAgent.test_macro_decision_model&   sn   € ðˆ	õ 'Ô:¸9ÑEÔEˆØ×Ò˜Ô*Ð,?Ñ@Ô@Ð@Ø×Ò˜Ô*¨JÑ7Ô7Ð7Ø×Ò˜Ô2Ð4KÑLÔLÐLÐLÐLr   c                 ó  — d}t          j        |¦  «        }|                      |j        ¦  «         |                      |j        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         d S )NuZ  {
            "is_valid_trade": true,
            "buyer_name": "ExileWarrior",
            "item_requested": "Sekhema Key",
            "offered_currency": "divine",
            "offered_amount": 4.5,
            "is_fair_market_price": true,
            "auto_reply_message": "Chá»� 1 lÃ¡t, mÃ¬nh Ä‘ang má»Ÿ portal vá»� hideout nhÃ©!"
        }ÚExileWarriorg      @Údivine)r   r   Ú
assertTrueÚis_valid_trader   Ú
buyer_nameÚoffered_amountÚoffered_currency)r   r   Útrades      r   Ú!test_trade_whisper_analysis_modelz;TestGeminiStructuredAgent.test_trade_whisper_analysis_model2   s�   € ðˆ	õ %Ô8¸ÑCÔCˆØ�Š˜Ô,Ñ-Ô-Ð-Ø×Ò˜Ô)¨>Ñ:Ô:Ð:Ø×Ò˜Ô-¨sÑ3Ô3Ð3Ø×Ò˜Ô/°Ñ:Ô:Ð:Ð:Ð:r   c                 ó–   — t          ddd¬¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         d S )NÚ	USE_FLASKé   u9   MÃ¡u tá»¥t dÆ°á»›i ngÆ°á»¡ng 30% cáº£nh bÃ¡o kháº©n cáº¥p)Úaction_typeÚ
flask_slotÚ	reasoning)r   r   r-   r.   )r   Úcmds     r   Útest_game_action_command_modelz8TestGeminiStructuredAgent.test_game_action_command_modelB   sW   € ÝØ#ØØQð
ñ 
ô 
ˆð
 	×Ò˜œ¨+Ñ6Ô6Ð6Ø×Ò˜œ¨Ñ+Ô+Ð+Ð+Ð+r   c                 ó–  — t          d¬¦  «        }|                      |                     ¦   «         ¦  «         |                     ddddœ¦  «        }|                      d|¦  «         |                      |d         d¦  «         |                      |d	         d
¦  «         |                     d¦  «        }|                      |¦  «         d S )NÚ )Úapi_keyéÈ   iè  zThe Riverbank)ÚhpÚmax_hpÚ	area_namer   ÚMAINTAIN_COMBATr   r   z	WTS 5 div)r   ÚassertFalseÚis_readyÚplan_macro_strategyÚassertInr   Úanalyze_trade_whisperÚassertIsNone)r   ÚbridgeÚresÚ	trade_ress       r   Ú'test_bridge_fallback_when_uninitializedzATestGeminiStructuredAgent.test_bridge_fallback_when_uninitializedK   sÈ   € Ý"¨2Ð.Ñ.Ô.ˆØ×Ò˜ŸšÑ*Ô*Ñ+Ô+Ð+ð ×(Ò(°¸tÐRaÐ)bÐ)bÑcÔcˆØ�Š�j #Ñ&Ô&Ð&Ø×Ò˜˜ZœÐ*;Ñ<Ô<Ð<Ø×Ò˜˜Zœ¨*Ñ5Ô5Ð5ð ×0Ò0°Ñ=Ô=ˆ	Ø×Ò˜)Ñ$Ô$Ð$Ð$Ð$r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r)   r1   rC   © r   r   r	   r	      sb   € € € € € ð?ð ?ð ?ð 
Mð 
Mð 
Mð;ð ;ð ;ð ,ð ,ð ,ð%ð %ð %ð %ð %r   r	   Ú__main__)Ú__doc__ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arÚosÚsysÚunittestÚpathÚinsertÚabspathÚjoinÚdirnameÚ__file__Ú&src.assistant_tool.gemini_agent_bridger   r   r   r   r   ÚTestCaser	   rD   ÚmainrG   r   r   ú<module>r\      s*  ððð ð
 € € € € € € € € € € € € €	€	€	€	Ø 
€
€
€
Ø €€€à „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ4Ñ#PÔ#PÑQÔQÑ RÔ RÐ Rðð ð ð ð ð ð ð ð ð ð ð ð ð ðB%ð B%ð B%ð B%ð B% Ô 1ñ B%ô B%ð B%ðJ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   