Files
homelab/scripts/ci/testdata/v1-models-sample.json
claude-botandClaude Opus 4.8 1992fabb12
ci/woodpecker/pr/ci-scripts-test Pipeline was successful
ci/woodpecker/pr/pr-review Pipeline was successful
fix(ci): make model-picker actually tool-less; gate tests on PRs
Addresses the 14aa6415 review.

- pick-model.sh: the picker relied on `--allowedTools ""` to be tool-less, but an
  empirical check showed an empty allowlist does NOT block tools (the Write tool
  still ran) -- it is treated as "unset" and the default toolset stays live. Add
  `--permission-mode plan`, which IS verified to block Write while still producing
  the selection JSON. --allowedTools "" + the Read deny-list remain as additional
  layers. Corrected the comments in pick-model.sh and the picker settings.json
  that claimed the empty allowlist made it tool-less.
- .woodpecker/ci-scripts-test.yml: new pull_request-triggered pipeline (homelab
  only) that runs scripts/ci/test-model-selection.sh, so a PR weakening the
  injection gate fails checks immediately instead of only on the next scheduled
  e2e cron (closes the coverage-timing gap the review flagged).
- Pin a recorded real /v1/models response (scripts/ci/testdata/v1-models-sample.json)
  and assert fetch-models.sh maps it correctly (opus effort=true, haiku
  effort=false), documenting the verified response shape.

Deferred with rationale: hard-failing a pipeline when the degraded-schema warning
fires -- the warning already reaches the job log (curl/jq stderr is no longer
suppressed), and hard-failing on a benign API schema addition would break all
model selection; graceful degradation to name+date is the deliberate choice.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-25 09:08:39 +02:00

46 lines
1.6 KiB
JSON

{
"data": [
{
"type": "model",
"id": "claude-opus-5",
"display_name": "Claude Opus 5",
"created_at": "2026-07-24T00:00:00Z",
"max_input_tokens": 1000000,
"max_tokens": 128000,
"capabilities": {
"batch": { "supported": true },
"citations": { "supported": true },
"code_execution": { "supported": true },
"context_management": { "supported": true },
"effort": { "supported": true, "low": { "supported": true }, "medium": { "supported": true }, "high": { "supported": true }, "xhigh": { "supported": true }, "max": { "supported": true } },
"image_input": { "supported": true },
"pdf_input": { "supported": true },
"structured_outputs": { "supported": true },
"thinking": { "supported": true }
}
},
{
"type": "model",
"id": "claude-haiku-4-5-20251001",
"display_name": "Claude Haiku 4.5",
"created_at": "2025-10-15T00:00:00Z",
"max_input_tokens": 200000,
"max_tokens": 64000,
"capabilities": {
"batch": { "supported": true },
"citations": { "supported": true },
"code_execution": { "supported": false },
"context_management": { "supported": true },
"effort": { "supported": false },
"image_input": { "supported": true },
"pdf_input": { "supported": true },
"structured_outputs": { "supported": true },
"thinking": { "supported": true }
}
}
],
"has_more": false,
"first_id": "claude-opus-5",
"last_id": "claude-haiku-4-5-20251001"
}