Complete the fully-local trio ("Qwen3 planned" in the matrix): point the LLM stage at an OpenAI-compatible local endpoint (Ollama/vLLM).
Pattern: likely reuses OpenAILLM (core/adapters/llm.py) with a configurable base_url + the live-path plugin equivalent in worker.py; model id comes from Settings (no hardcoded defaults — see the adapter comments).
Acceptance: LLM_PROVIDER=ollama runs prep + a live session against a local Qwen3; mock fallback intact; provider matrix updated. 🟡 moderate
Complete the fully-local trio ("Qwen3 planned" in the matrix): point the LLM stage at an OpenAI-compatible local endpoint (Ollama/vLLM).
Pattern: likely reuses
OpenAILLM(core/adapters/llm.py) with a configurable base_url + the live-path plugin equivalent inworker.py; model id comes from Settings (no hardcoded defaults — see the adapter comments).Acceptance:
LLM_PROVIDER=ollamaruns prep + a live session against a local Qwen3; mock fallback intact; provider matrix updated. 🟡 moderate