"""Opt-in live HF Router checks. These tests intentionally call paid model APIs and are skipped unless ``ML_INTERN_LIVE_LLM_TESTS=1`` plus ``HF_TOKEN`` are set. They verify the router-only request path without requiring provider-specific API keys. """ from __future__ import annotations import os from pathlib import Path from types import SimpleNamespace import pytest from dotenv import load_dotenv from litellm import Message from agent.core.agent_loop import ( _assistant_message_from_result, _call_llm_streaming, ) from agent.core.llm_params import _resolve_llm_params from agent.core.model_ids import DEFAULT_MODEL_ID if env_file := os.environ.get("ML_INTERN_LIVE_ENV_FILE"): load_dotenv(Path(env_file)) LIVE_TESTS_ENABLED = os.environ.get("ML_INTERN_LIVE_LLM_TESTS") == "1" REPORT_RESULT_TOOL = [ { "type": "function", "function": { "name": "report_result", "description": "Report the final test result.", "parameters": { "type": "object", "properties": { "answer": { "type": "string", "description": "The exact marker requested by the test.", } }, "required": ["answer"], }, }, } ] def _skip_without_live_flag() -> None: if not LIVE_TESTS_ENABLED: pytest.skip("set ML_INTERN_LIVE_LLM_TESTS=1 to run paid live LLM tests") def _skip_without_hf_token() -> None: if not os.environ.get("HF_TOKEN"): pytest.skip("set HF_TOKEN to run this live router test") def _session(model_name: str): events = [] async def send_event(event): events.append(event) return SimpleNamespace( config=SimpleNamespace(model_name=model_name), is_cancelled=False, send_event=send_event, events=events, ) @pytest.mark.asyncio async def test_live_default_router_model_does_not_replay_reasoning_metadata(): _skip_without_live_flag() _skip_without_hf_token() session = _session(DEFAULT_MODEL_ID) llm_params = _resolve_llm_params( DEFAULT_MODEL_ID, os.environ["HF_TOKEN"], reasoning_effort="low", bill_to_user=True, ) result = await _call_llm_streaming( session, messages=[ Message( role="user", content="Call report_result with answer ROUTER_OK.", ) ], tools=REPORT_RESULT_TOOL, llm_params=llm_params, ) replay = _assistant_message_from_result(result) assert result.content or result.tool_calls_acc assert getattr(replay, "thinking_blocks", None) is None assert getattr(replay, "reasoning_content", None) is None