5 failing tests in tests/test_qwen_provider.py that establish the
core behaviors of the new Qwen (DashScope) provider:
1. test_send_qwen_routes_to_dashscope: _send_qwen calls _ensure_qwen_client
and _dashscope_call, returns the text from the DashScope response
2. test_qwen_vision_vl_model_accepts_image: when file_items contains an
image, the messages passed to _dashscope_call include the image ref
3. test_qwen_tool_format_translation: build_dashscope_tools converts
OpenAI-shaped tool dicts to DashScope shape (name/description/parameters
flat structure, not wrapped in function:)
4. test_qwen_error_classification: classify_dashscope_error maps
dashscope.common.error.InvalidApiKey -> ProviderError(kind='auth',
provider='qwen')
5. test_list_qwen_models_returns_hardcoded_registry: _list_qwen_models
returns the 7 Qwen models registered in src/vendor_capabilities.py
The autouse _reset_qwen_state fixture uses hasattr() so it is a no-op
when _qwen_client / _qwen_history do not exist (yet); this keeps the
fixture working in the Red phase.
All 5 tests fail:
- Tests 1, 2: AttributeError: src.ai_client has no _ensure_qwen_client /
_send_qwen / _dashscope_call
- Tests 3, 4: ModuleNotFoundError: No module named src.qwen_adapter
- Test 5: ImportError: cannot import name _list_qwen_models
Test signature adapted to match the real _send_minimax signature at
src/ai_client.py:2143-2148 (10 params, no enable_tools / rag_engine)
rather than the plan's 12-param signature.
Next: Green phase - implement src/qwen_adapter.py + src/ai_client.py
state + _ensure_qwen_client + _send_qwen + _list_qwen_models.