conductor(checkpoint): Phase 1 complete - capability matrix framework + shared helper
Phase 1 of qwen_llama_grok_integration_20260606 ships two new modules and one new dependency, all under TDD discipline (12 tasks, 4 atomic commits, 3+6 failing-then-passing tests). Modules shipped: - src/vendor_capabilities.py (55 lines): VendorCapabilities frozen dataclass with 12 fields, module-level _REGISTRY dict keyed by (vendor, model), register() / get_capabilities() (with vendor '*' wildcard fallback) / list_models_for_vendor() functions, 22 initial registry entries (1 minimax, 4 grok, 9 llama, 8 qwen; plan's typo of minimax/grok-2-latest omitted). - src/openai_compatible.py (144 lines): NormalizedResponse frozen dataclass, OpenAICompatibleRequest dataclass, send_openai_compatible() dispatch, _send_blocking + _send_streaming helpers, _classify_openai_compatible_error error classifier (RateLimitError->rate_limit, AuthenticationError->auth, etc.). Fixed plan's MagicMock_noop forward-reference code smell. Tests shipped (all passing): - tests/test_vendor_capabilities.py (40 lines, 3 tests) - tests/test_openai_compatible.py (88 lines, 6 tests) - Total: 9 new tests, 0 regressions Dependency added: - pyproject.toml: dashscope>=1.14.0,<2.0.0 (installed: 1.25.21) Verification: - 24/24 tests pass in batch (test_minimax_provider, test_ai_client_no_top_level_sdk_imports, test_vendor_capabilities, test_openai_compatible) - 4 audit scripts pass with no new violations: - scripts/audit_main_thread_imports.py: OK - scripts/audit_weak_types.py: OK - scripts/check_test_toml_paths.py: OK - scripts/audit_no_models_config_io.py: OK - src/ai_client.py: NOT modified (Phase 4 will refactor _send_minimax) - src/openai_compatible.py and src/vendor_capabilities.py are importable with no side effects beyond registry population - No threading.Thread calls introduced (per project invariant) - Module-level imports in new files are stdlib + openai (already-used SDK) + a function-level import of ProviderError from src.ai_client inside the error classifier (avoids circular import risk)
This commit is contained in: