Add Gemma 4 26B MoE as secondary LM Studio model for Windows #101
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| jobs: | |
| lint-and-test: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| python-version: ["3.11", "3.12"] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| # Core test deps + runtime deps needed by orchestrator.py at import time | |
| pip install pytest pytest-asyncio pytest-cov pyyaml | |
| pip install fastapi aiohttp redis httpx python-dotenv loguru pydantic | |
| # fix(ci): slowapi must be present before orchestrator.py can be imported | |
| pip install slowapi | |
| if [ -f requirements.txt ]; then pip install -r requirements.txt; fi | |
| - name: Lint with flake8 (warnings only) | |
| run: | | |
| pip install flake8 | |
| flake8 . --count --max-line-length=120 --statistics --exit-zero | |
| continue-on-error: true | |
| - name: Run tests | |
| run: | | |
| pytest tests/ -v --tb=short | |
| env: | |
| ULTRATHINK_ENDPOINT: http://localhost:8001/ultrathink | |
| ULTRATHINK_TIMEOUT: "120" | |
| ULTRATHINK_ENABLED: "false" | |
| - name: Check routing.yml validity | |
| run: | | |
| python -c " | |
| import yaml | |
| with open('config/routing.yml') as f: | |
| cfg = yaml.safe_load(f) | |
| assert 'routes' in cfg, 'routes key missing' | |
| assert 'deep_reasoning' in cfg['routes'], 'deep_reasoning route missing' | |
| assert 'code_analysis' in cfg['routes'], 'code_analysis route missing' | |
| print('routing.yml OK -- all required routes present') | |
| " | |
| docs-sync: | |
| name: Docs/Config Sync Gate | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.11" | |
| - name: Install pyyaml | |
| run: pip install pyyaml | |
| - name: Validate hardware/SKILL.md matches config/models.yml | |
| run: python scripts/check_docs_sync.py --quiet | |
| - name: Reject stale model as default_primary_model | |
| run: | | |
| # Only fail if qwen3.5-35b-a3b-q4 is set as the PRIMARY model. | |
| # It may still appear as a legacy fallback entry — that is intentional. | |
| if grep "default_primary_model:.*qwen3.5-35b-a3b-q4" hardware/SKILL.md; then | |
| echo "FAIL: stale model 'qwen3.5-35b-a3b-q4' is set as default_primary_model — update to canonical LM Studio model" | |
| exit 1 | |
| fi | |
| echo "OK: default_primary_model is not a stale reference" |