from src import agent_loop, llm_core from src.agent_tools import admin_tools from src import settings from routes.chat_routes import _resolve_prompt_thinking_mode def test_kimi_thinking_off_translates_to_provider_payload(): assert llm_core._detect_provider("https://api.kimi.com/coding/v1") == "kimi-code" payload = {} llm_core._apply_hosted_thinking_mode( payload, "kimi-code", "kimi-for-coding", "off" ) assert payload["thinking"] == {"type": "disabled"} def test_kimi_thinking_default_does_not_add_provider_field(): payload = {} llm_core._apply_hosted_thinking_mode( payload, "kimi-code", "kimi-for-coding", None ) assert "thinking" not in payload def test_openrouter_thinking_off_uses_unified_reasoning_control(): payload = {} llm_core._apply_hosted_thinking_mode( payload, "openrouter", "moonshotai/kimi-k3", "off" ) assert payload["reasoning"] == {"effort": "none"} def test_openrouter_does_not_disable_mandatory_grok_45_reasoning(): payload = {"reasoning": {"effort": "none"}} llm_core._apply_hosted_thinking_mode( payload, "openrouter", "x-ai/grok-4.5", "off" ) assert "reasoning" not in payload def test_stream_transport_suppresses_reasoning_when_thinking_is_off(): source = open(llm_core.__file__, encoding="utf-8").read() assert 'if reasoning and _normalize_thinking_mode(thinking_mode) != "off":' in source def test_response_cache_is_partitioned_by_thinking_mode(): args = ("https://api.kimi.com/coding/v1", "kimi-for-coding", [{"role": "user", "content": "Hi"}], 1.0, 100) assert llm_core._get_cache_key(*args, thinking_mode="off") != llm_core._get_cache_key(*args, thinking_mode="on") def test_chat_backend_reads_thinking_mode_from_active_prompt_preset(): manager = type("PresetManager", (), {"presets": {"custom": {"enabled": True, "thinking_mode": "off"}}})() assert _resolve_prompt_thinking_mode(None, "custom", manager) == "off" assert _resolve_prompt_thinking_mode("on", "custom", manager) == "on" def test_email_writing_style_is_agent_manageable_and_routable(): assert settings.DEFAULT_SETTINGS["email_writing_style"] == "" source = open(admin_tools.__file__, encoding="utf-8").read() assert '"writing style": "email_writing_style"' in source assert any( "writing style" in triggers and "manage_settings" in tools for triggers, tools in agent_loop._QWEN38_ROUTER_KEYWORD_TOOLS ) index_source = open("src/tool_index.py", encoding="utf-8").read() assert '"writing style", "reply style", "email writing style"' in index_source