From a126226d846b8e431867101605a92ec2c54c45d8 Mon Sep 17 00:00:00 2001 From: forkadarshp Date: Sun, 11 Oct 2026 05:56:32 +0530 Subject: [PATCH 01/13] docs(models): add guides for Claude 5.x, GPT-6, and Gemini 3.8 Flash Add dedicated migration guides for Claude Fable 5.1, Opus 5.5, Sonnet 5.5, Haiku 5.5, the GPT-6 family, and Gemini 3.8 Flash. Each guide carries a Last verified date and a Source line. Add references/models/INDEX.md as the registry: model, guide, status, upgrade path, and freshness rules. Mark the Opus 4.8, Opus 4.6, Sonnet 4.5, and GPT-5.5 guides as legacy layers. --- references/models/INDEX.md | 74 ++++++++++++++++++ references/models/claude-fable-5-1.md | 86 +++++++++++++++++++++ references/models/claude-haiku-5-5.md | 79 +++++++++++++++++++ references/models/claude-opus-4-6.md | 2 + references/models/claude-opus-4-8.md | 3 + references/models/claude-opus-5-5.md | 96 ++++++++++++++++++++++++ references/models/claude-sonnet-4-5.md | 2 + references/models/claude-sonnet-5-5.md | 88 ++++++++++++++++++++++ references/models/gemini-3-8-flash.md | 77 +++++++++++++++++++ references/models/gpt-5-5.md | 3 + references/models/gpt-6.md | 100 +++++++++++++++++++++++++ 11 files changed, 610 insertions(+) create mode 100644 references/models/INDEX.md create mode 100644 references/models/claude-fable-5-1.md create mode 100644 references/models/claude-haiku-5-5.md create mode 100644 references/models/claude-opus-5-5.md create mode 100644 references/models/claude-sonnet-5-5.md create mode 100644 references/models/gemini-3-8-flash.md create mode 100644 references/models/gpt-6.md diff --git a/references/models/INDEX.md b/references/models/INDEX.md new file mode 100644 index 0000000..d3d96ed --- /dev/null +++ b/references/models/INDEX.md @@ -0,0 +1,74 @@ +# Model Guide Index + +Registry of dedicated model guides. Read this first: find the source and +target model, open the guide, then follow its upgrade path. + +Status values: **current** (default target), **active** (still served, not the +default target), **legacy** (superseded guide kept for layered upgrades). + +## Anthropic + +| Model | Model ID | Guide | Status | +| :---- | :------- | :---- | :----- | +| Claude Fable 5.1 | `claude-fable-5-1` | [claude-fable-5-1.md](claude-fable-5-1.md) | current (opt-in only) | +| Claude Opus 5.5 | `claude-opus-5-5` | [claude-opus-5-5.md](claude-opus-5-5.md) | current (default Opus target) | +| Claude Sonnet 5.5 | `claude-sonnet-5-5` | [claude-sonnet-5-5.md](claude-sonnet-5-5.md) | current | +| Claude Haiku 5.5 | `claude-haiku-5-5` | [claude-haiku-5-5.md](claude-haiku-5-5.md) | current | +| Claude Opus 4.8 | `claude-opus-4-8` | [claude-opus-4-8.md](claude-opus-4-8.md) | legacy (layer under Opus 5.5) | +| Claude Opus 4.6 | `claude-opus-4-6` | [claude-opus-4-6.md](claude-opus-4-6.md) | legacy | +| Claude Sonnet 4.5 | `claude-sonnet-4-5` | [claude-sonnet-4-5.md](claude-sonnet-4-5.md) | legacy | + +Claude upgrade paths. Apply each step in order, then the target guide. + +| If you are on | Target | Path | +| :------------ | :----- | :--- | +| Opus 4.x or older | `claude-opus-5-5` | `claude-opus-4-6.md`, `claude-opus-4-8.md`, then `claude-opus-5-5.md` | +| Opus 5 | `claude-opus-5-5` | `claude-opus-5-5.md` | +| Sonnet 4.x or older | `claude-sonnet-5-5` | `claude-sonnet-4-5.md`, then `claude-sonnet-5-5.md` | +| Sonnet 5 | `claude-sonnet-5-5` | `claude-sonnet-5-5.md` | +| Haiku 4.5 or older | `claude-haiku-5-5` | `claude-haiku-5-5.md` | +| Fable 5 | `claude-fable-5-1` | `claude-fable-5-1.md` | + +Default target when the user says "latest Claude model" and names no tier: +`claude-opus-5-5`. + +## OpenAI + +| Model | Model ID | Guide | Status | +| :---- | :------- | :---- | :----- | +| GPT-6 Astra, GPT-6.1 Sol, GPT-6 Sol, GPT-6 Luna | `gpt-6-astra`, `gpt-6.1-sol`, `gpt-6-sol`, `gpt-6-luna` | [gpt-6.md](gpt-6.md) | current | +| GPT-5.5 | `gpt-5.5` | [gpt-5-5.md](gpt-5-5.md) | legacy (layer under GPT-6) | + +## Google + +| Model | Model ID | Guide | Status | +| :---- | :------- | :---- | :----- | +| Gemini 3.8 Flash | `gemini-3.8-flash` | [gemini-3-8-flash.md](gemini-3-8-flash.md) | current | + +## Not covered + +No dedicated guide: other providers, open-weight models, older Gemini +releases. Use `../provider-checklists.md`, then research (see "Freshness" +below). + +## Freshness + +Every guide carries a `Last verified:` date and a `Source:` line. Model facts +(IDs, prices, defaults, deprecations) change faster than guides do. + +- Guide verified within 30 days of today: trust it, still smoke test. +- Older than 30 days, or the target model is missing from this index: fetch + the provider's official migration page before editing. Record the page and + date in the migration report. +- Facts from secondary sources are marked as such in the guide. Confirm them + on the provider page before quoting prices or dates to the user. +- After refreshing a guide, update its `Last verified:` line and this index. + +Official sources: + +- Anthropic: [models overview](https://platform.claude.com/docs/en/about-claude/models/overview) + and [model deprecations](https://platform.claude.com/docs/en/about-claude/model-deprecations) +- OpenAI: [Using GPT-6](https://developers.openai.com/api/docs/guides/latest-model) + and the [models page](https://developers.openai.com/api/docs/models) +- Google: [Gemini models](https://ai.google.dev/gemini-api/docs/models) and the + [Gemini API changelog](https://ai.google.dev/gemini-api/docs/changelog) diff --git a/references/models/claude-fable-5-1.md b/references/models/claude-fable-5-1.md new file mode 100644 index 0000000..04bed9f --- /dev/null +++ b/references/models/claude-fable-5-1.md @@ -0,0 +1,86 @@ +# Claude Fable 5.1 + +Model ID: `claude-fable-5-1` (Project Glasswing counterpart: +`claude-mythos-5-1`) +Pricing: $10 / $50 per million input / output tokens +Cache reads: $0.25 per million tokens +Context / output: 1M tokens / 128K tokens +Last verified: 2026-10-11 +Source: Anthropic API migration guide (bundled `claude-api` skill, cached +2026-10-06) and platform docs + +Anthropic's most capable widely released model, for the most demanding +reasoning and long-horizon agentic work. **Migrate here only when the user +explicitly chose it.** The default upgrade target for "latest model" is +`claude-opus-5-5`. Fable pricing is above Opus tier. + +## Changelog (vs Fable 5) + +- Forced `tool_choice` (`any`, `tool`) removed. +- Thinking blocks are bound to the producing model. +- Editing earlier turns invalidates thinking blocks (preserved thinking). +- Per-message `effort`, turn-scoped `clear_at: "next_user_message"` system + messages, `thinking.display: "updates"`, cache reads at $0.25 per million. +- Same tokenizer as Opus 4.8 and Fable 5. + +## Required changes (will 400) + +| Change | Detail | +| :----- | :----- | +| Thinking config | Thinking is always on. Omit `thinking` or send `{type: "adaptive"}`. `{type: "disabled"}` and `budget_tokens` both 400. | +| Sampling parameters | Non-default `temperature`, `top_p`, `top_k` 400. | +| Assistant prefill | 400. Use `output_config.format` or system prompt instructions. | +| Forced tool use | `tool_choice` `any` and `tool` 400. Use `auto` + `strict: true`, or structured outputs. | +| Preserved thinking | Replayed thinking blocks after an edit to `system`, `tools`, or earlier `messages` 400 on accounts created on or after 2026-08-31. Keep histories append-only: mid-conversation `role: "system"` messages, `tool_addition` / `tool_removal` blocks, server-side compaction or context editing. | +| Data retention | Requires 30-day retention. Zero-data-retention orgs get `400 invalid_request_error` unless Anthropic expressly authorized it. | +| Refusals | Classifiers can decline cyber, biology research, and similar requests. Check `stop_reason == "refusal"` before reading `content`. | + +## Refusal fallback (ship from day one) + +Fallbacks are not automatic. Add one, tell the user, and drop it only if they +decline. + +| Platform | Mechanism | +| :------- | :-------- | +| Claude API, Claude Platform on AWS | Server-side: beta `server-side-fallback-2026-07-01` + `fallbacks: "default"` (routes by refusal category). Older array form: beta `server-side-fallback-2026-06-01` + `fallbacks: [{"model": "claude-opus-4-8"}]`. | +| Amazon Bedrock, Vertex AI, Foundry | SDK client middleware (`BetaRefusalFallbackMiddleware` + one `BetaFallbackState` per conversation). | +| Raw HTTP | Retry on another model. Use fallback credit (`fallback-credit-2026-07-01`) to keep cache-read pricing. The retry body must match the refused request exactly. | + +Thinking blocks from Fable 5.1 are read only by Fable 5.1 and Mythos 5.1. +After a fallback, the next model runs without that reasoning. Do not strip +blocks yourself. + +## Silent changes + +| Change | Action | +| :----- | :----- | +| `thinking.display` default `"omitted"` | Set `"summarized"` for readable reasoning. Pass blocks back unchanged, empty ones included. | +| Turns run many minutes | Plan timeouts, streaming, and progress UX. Check in asynchronously. | +| Tokenizer | Roughly unchanged from Opus 4.7 and 4.8. From Opus 4.6, Sonnet, or Haiku, expect about 1x to 1.35x more tokens. Re-baseline with `count_tokens`. | +| Effort | Supports `low` to `max`. Lower levels often beat prior-generation `xhigh`. Sweep `low` and `medium` for routine work. | + +## Prompt and behavior tuning (optional) + +- De-prescribe migrated prompts and skills. Step-by-step scaffolding written + for older models often lowers output quality. State goals and constraints. +- At high effort, add a no-tidying line to stop unrequested refactors. +- Ground progress claims: require each claim to match a tool result from the + session. +- State boundaries: when the user describes a problem, report findings and + stop. Do not apply fixes until asked. +- Delegate to sub-agents and let them run asynchronously. +- Give a memory file for learnings across sessions. +- Autonomous pipelines: add a "do not ask permission for reversible actions" + reminder. +- Avoid showing remaining-token counts. Deep sessions can trigger context + anxiety. +- Long sessions: ask for a final summary written for a reader who did not + watch the work. No arrow chains or made-up labels. + +## Model ID reference + +| Version | Model ID | Status | +| :------ | :------- | :----- | +| Fable 5.1 | `claude-fable-5-1` | Current | +| Fable 5 | `claude-fable-5` | Active | +| Mythos 5.1 | `claude-mythos-5-1` | Project Glasswing only | diff --git a/references/models/claude-haiku-5-5.md b/references/models/claude-haiku-5-5.md new file mode 100644 index 0000000..f28e52a --- /dev/null +++ b/references/models/claude-haiku-5-5.md @@ -0,0 +1,79 @@ +# Claude Haiku 5.5 + +Model ID: `claude-haiku-5-5` (Amazon Bedrock: `anthropic.claude-haiku-5-5`) +Pricing: $0.10 / $0.50 per million input / output tokens for prompts up to +100K tokens. $0.50 / $2.50 above 100K tokens. (Haiku 4.5: $1 / $5 at any +length.) +Context / output: 1M tokens / 128K tokens (Haiku 4.5: 200K / 64K) +Last verified: 2026-10-11 +Source: Anthropic API migration guide (bundled `claude-api` skill, cached +2026-10-06) and platform docs + +This is the current Haiku, for high-volume and latency-sensitive work: +classification, routing, extraction, and sub-agent tasks. + +## Changelog (vs Haiku 4.5) + +- First Haiku with `effort` levels (`low` to `max`, default `medium`). +- Adaptive thinking on by default. Manual budgets removed. +- Sampling parameters and assistant prefill removed. +- Newer tokenizer: about 30% more tokens for the same text. +- Safety classifiers can decline requests. No server-side fallback exists. +- Larger limits, browser use tool, mid-conversation system messages, + per-message effort, compaction, programmatic tool calling, tool search. + +## Required changes (will 400) + +| Change | Detail | +| :----- | :----- | +| Manual thinking budget | `{type: "enabled", budget_tokens: N}` 400s. Use `{type: "adaptive"}` (or omit) plus `output_config.effort`. | +| Sampling parameters | `temperature` must be `1`, `top_p` must be `0.99`, any `top_k` 400s, and sending both `temperature` and `top_p` 400s. Omit all three. A `temperature=0` classifier: remove it and constrain output with structured outputs or an enum tool. | +| Assistant prefill | A final assistant turn 400s, even with thinking off. End `messages` with a user turn. Use `output_config.format`, an enum tool, or a prompt instruction. | +| Computer use | `computer_20250124` 400s on the Claude API and Google Cloud. Use `computer_toolset_20260801`. Replace the `fine-grained-tool-streaming-2025-05-14` header with `eager_input_streaming: true`. Do not assume the Bedrock exception that Opus 5.5 and Sonnet 5.5 have. | +| Preserved thinking | Replaying a thinking block after editing `system`, `tools`, or earlier `messages` 400s on accounts created on or after 2026-08-31. Keep histories append-only. | +| Refusals | Four categories: `cyber`, `bio`, `frontier_llm`, `general_harms`. Check `stop_reason` first. Do **not** send `fallbacks`: `"default"` leaves a decline declined, and a model list 400s. Handle it in the client. | + +## Silent changes + +| Change | Action | +| :----- | :----- | +| Thinking on by default | Read content blocks by `type`, never `content[0]`. A response can start with `thinking` blocks. | +| Thinking counts toward `max_tokens` | A cap sized for a one-word answer (for example 50) can be consumed by thinking. Raise it or lower effort. | +| Thinking text omitted | Set `display: "summarized"` to see reasoning. Keep empty `thinking` blocks. | +| Tokenizer | Recount with `count_tokens` against `claude-haiku-5-5`. Re-baseline `max_tokens` and cost. | +| Disabled thinking | Still accepted at `low`, `medium`, `high`. 400s at `xhigh` and `max`. Prefer adaptive at `low`. | +| Forced `tool_choice` | Still accepted, but the response skips thinking. Use `auto` plus a prompt when the call needs thought. | +| Cache minimum | 512 tokens (was 4,096). Short prompts now create cache entries. | +| Thinking blocks | Stay with the account that produced them. Replay a stored conversation through the same account. | + +## Effort guide + +| Level | Use | +| :---- | :-- | +| `low` | Chat, short tool tasks, simple high-volume routes. Cheapest and fastest. | +| `medium` (default) | Most work, including agentic coding. | +| `high` | Knowledge work, long agent tasks, strict instruction following. | +| `xhigh`, `max` | Only with a measured gain. Compare against Sonnet 5.5 first. | + +To get less thinking, lower effort. A "answer directly" prompt barely helps. + +## Prompt and behavior tuning (optional) + +- Search tools: put today's date in the system prompt or tool description. For + long prompts or `low` effort, add a line saying which facts may have changed + since training. Avoid blanket "always search" rules. +- JSON output plus the caller's own tools with thinking off can skip a needed + tool call. Keep thinking on, or add: "The JSON output format applies to your + final answer only. When you need a tool, call it first." +- Check for empty replies at `xhigh` in multi-turn chat. +- Long agent prompts at `low` effort can stop early. Add a keep-working + instruction, or raise effort. +- Add a verification instruction for coding agents at `low` and `medium`. +- Deliver mid-turn user input as a text block after the last `tool_result`. + +## Model ID reference + +| Version | Model ID | Status | +| :------ | :------- | :----- | +| Haiku 5.5 | `claude-haiku-5-5` | Current | +| Haiku 4.5 | `claude-haiku-4-5` | Active | diff --git a/references/models/claude-opus-4-6.md b/references/models/claude-opus-4-6.md index 44e16ff..fc0410f 100644 --- a/references/models/claude-opus-4-6.md +++ b/references/models/claude-opus-4-6.md @@ -3,6 +3,8 @@ Released: February 5, 2026 Model ID: `claude-opus-4-6` Pricing: $5 / $25 per million input / output tokens +Status: legacy. Superseded by `claude-opus-4-8.md` and `claude-opus-5-5.md`. +Last verified: legacy, written at the Opus 4.6 launch (February 2026) ## Key features diff --git a/references/models/claude-opus-4-8.md b/references/models/claude-opus-4-8.md index 86ce8bb..1e787d6 100644 --- a/references/models/claude-opus-4-8.md +++ b/references/models/claude-opus-4-8.md @@ -3,6 +3,9 @@ Released: May 28, 2026 Model ID: `claude-opus-4-8` Pricing: $5 / $25 per million input / output tokens (unchanged from 4.7) +Status: legacy. Superseded by `claude-opus-5-5.md`. Still the required layer +when upgrading from Opus 4.7 or older. +Last verified: legacy, written at the Opus 4.8 launch (May 2026) ## Changelog (vs Opus 4.7) diff --git a/references/models/claude-opus-5-5.md b/references/models/claude-opus-5-5.md new file mode 100644 index 0000000..74172ca --- /dev/null +++ b/references/models/claude-opus-5-5.md @@ -0,0 +1,96 @@ +# Claude Opus 5.5 + +Model ID: `claude-opus-5-5` (Amazon Bedrock: `anthropic.claude-opus-5-5`) +Pricing: $4 / $20 per million input / output tokens (Opus 5: $5 / $25) +Cache reads: $0.20 per million tokens +Context / output: 1M tokens / 128K tokens +Last verified: 2026-10-11 +Source: Anthropic API migration guide (bundled `claude-api` skill, cached +2026-10-06) and platform docs + +This is the current Opus and the default upgrade target for Claude code. +Layered guide: coming from Opus 4.8 or older, apply the earlier sections +first (see "Upgrade paths"). + +## Changelog (vs Opus 5) + +- **Lower price**: 20% cheaper per token, 60% cheaper for cache reads. +- **Thinking always on**: `thinking: {type: "disabled"}` is gone. +- **Effort default is `medium`** (Opus 5 defaulted to `high`). +- **Forced `tool_choice` removed**. +- **Preserved thinking**: thinking blocks are tied to the model and to an + unedited conversation prefix. +- **Computer use via toolset only** on the Claude API and Google Cloud. +- **Progress notes between tool calls** come back as `thinking` blocks. +- **New `bio` safety category** joins `cyber` and `reasoning_extraction`. + +## Required changes (will 400) + +| Change | Detail | +| :----- | :----- | +| Disabled thinking | `{type: "disabled"}` and `{type: "enabled", budget_tokens}` both 400 at every effort level. Omit `thinking` or send `{type: "adaptive"}`. Use `effort: "low"` to cut latency. | +| Forced tool use | `tool_choice` `any` and `tool` 400 (also on `count_tokens` and Batches). Use `auto` + `strict: true` + a prompt instruction, then check a call happened. Use `output_config.format` when the forced call only existed to get JSON. | +| Computer use | `computer_20251124` 400s on the Claude API and Google Cloud. Use `{"type": "computer_toolset_20260801"}` (no `name`, no display size, no beta header). Amazon Bedrock still accepts `computer_20251124`. The agent loop changes: the action is the `tool_use` block `name`, several calls per turn, echo `toolset_name` on every result. | +| Preserved thinking | A replayed thinking block after an edit to `system`, `tools`, or earlier `messages` returns 400 on accounts created on or after 2026-08-31. Older accounts opt in via `thinking.block_binding.prefix_mismatch_behavior`. Keep histories append-only. | +| Refusals | Check `stop_reason == "refusal"` before reading `content`. Ship a fallback opt-in. `reasoning_extraction` is not retried on a fallback. | + +## Silent changes (no error, behavior differs) + +| Change | Action | +| :----- | :----- | +| Default effort `medium` | Set `output_config.effort` explicitly. Re-run the effort sweep. `medium` here often matches Opus 5 at `high`. | +| More thinking per level | At `xhigh` and `max`, expect longer turns and more output tokens. Lower effort before adding "think less" prompts. | +| `thinking.display` default `"omitted"` | Set `"summarized"` to show reasoning. Keep empty `thinking` blocks when replaying. | +| Progress updates as `thinking` | Set `display: "updates"` (beta `thinking-display-updates-2026-08-18`) or render non-empty `thinking` blocks ahead of the `tool_use`. | +| `max_tokens` | Size for thinking plus reply. 64K is a good start for long agentic coding. | +| Rate limits | Separate pool from Opus 5. Re-check the tier. | +| Priority Tier | Not supported. | +| Fast mode | Claude API only, $8 / $40 per million tokens. | + +## Upgrade paths + +| From | Apply, in order | +| :--- | :-------------- | +| Opus 5 | This guide only. | +| Opus 4.8 | `claude-opus-4-8.md` (re-tune), Opus 5 changes (thinking on by default, prompt re-tuning), then this guide. | +| Opus 4.7 / 4.6 or older | `claude-opus-4-8.md` (includes the 4.7 breaking changes), Opus 5 changes, then this guide. | +| Sonnet 5 / 5.5 | Request surface already matches. Re-baseline for Opus pricing and rate limits. | + +Opus 5 specifics to carry through on a 4.x upgrade: thinking is on when +`thinking` is omitted, the cache minimum is 512 tokens, the 1M context window +is the default, and Opus 5 writes longer visible output than 4.8 (add +conciseness and scope-discipline instructions). + +## Prompt and behavior tuning (optional) + +- Remove instructions that stood in for thinking. A prompt that asks the model + to write its reasoning into the response can be declined with + `reasoning_extraction`. Read `display: "summarized"` blocks instead. +- Delete "don't think" rules. The model cannot comply and tag leakage rises. +- Re-test visual scaffolding. Chart and screenshot reading improved at every + effort level without extra tooling. +- Re-test Opus 5 verbosity, verification, and scope instructions. Keep them + as a starting point, then A/B each. +- For frontend work, name specific default patterns to avoid. "No generic AI + look" mostly swaps one default for another. +- To vary effort without losing the prompt cache, use per-message effort + (beta `mid-conversation-output-config-2026-07-01`). Changing top-level + `effort` invalidates the cache. + +## Validation notes + +- Smoke test: assert `response.model.startswith("claude-opus-5-5")`. +- Prefix collision: a check for `claude-opus-5` also matches + `claude-opus-5-5`. Add a `not startswith("claude-opus-5-5")` guard. +- Test a long tool loop with thinking blocks replayed unchanged. +- Test a forced-fallback refusal path. + +## Model ID reference + +| Version | Model ID | Status | +| :------ | :------- | :----- | +| Opus 5.5 | `claude-opus-5-5` | Current | +| Opus 5 | `claude-opus-5` | Active | +| Opus 4.8 | `claude-opus-4-8` | Active | +| Opus 4.7 | `claude-opus-4-7` | Active | +| Opus 4.6 | `claude-opus-4-6` | Active | diff --git a/references/models/claude-sonnet-4-5.md b/references/models/claude-sonnet-4-5.md index 0cc35ee..120ec32 100644 --- a/references/models/claude-sonnet-4-5.md +++ b/references/models/claude-sonnet-4-5.md @@ -3,6 +3,8 @@ Released: September 29, 2025 Model ID: `claude-sonnet-4-5` Pricing: $3 / $15 per million input / output tokens +Status: legacy. Superseded by `claude-sonnet-5-5.md`. +Last verified: legacy, written at the Sonnet 4.5 launch (September 2025) ## Key features diff --git a/references/models/claude-sonnet-5-5.md b/references/models/claude-sonnet-5-5.md new file mode 100644 index 0000000..ed95807 --- /dev/null +++ b/references/models/claude-sonnet-5-5.md @@ -0,0 +1,88 @@ +# Claude Sonnet 5.5 + +Model ID: `claude-sonnet-5-5` (Amazon Bedrock: `anthropic.claude-sonnet-5-5`) +Pricing: $2 / $10 per million input / output tokens (same as Sonnet 5) +Cache reads: $0.20 per million tokens +Context / output: 1M tokens / 128K tokens +Last verified: 2026-10-11 +Source: Anthropic API migration guide (bundled `claude-api` skill, cached +2026-10-06) and platform docs + +This is the current Sonnet. Layered guide: coming from Sonnet 4.6 or older, +apply the earlier sections first (see "Upgrade paths"). + +## Changelog (vs Sonnet 5) + +- **`disabled` thinking removed**: use `{type: "between_tools"}` as the + lowest thinking setting. +- **Forced `tool_choice` removed**. +- **Preserved thinking**: thinking blocks are tied to the model and to an + unedited conversation prefix. +- **Computer use via toolset only** on the Claude API and Google Cloud. +- **Advisor tool** accepts fewer advisors. +- **Effort levels recalibrated**. Default is still `high`. +- **New**: mid-conversation system messages, tool changes, per-message effort, + task budgets, 512-token cache minimum. + +## Required changes (will 400) + +| Change | Detail | +| :----- | :----- | +| Disabled thinking | `{type: "disabled"}` 400s. First try adaptive thinking at `effort: "low"`. If the route must stay thinking-off, send `{type: "between_tools"}` at effort `high` or below. | +| `between_tools` limits | No other field inside `thinking`. No per-message effort change. Accepted by Sonnet 5.5 only, so drop it from any body re-sent to another model. | +| Forced tool use | `tool_choice` `any` and `tool` 400 (also on `count_tokens`). Use `auto` + `strict: true` + a prompt instruction, or structured outputs. | +| Computer use | `computer_20251124` 400s on the Claude API and Google Cloud. Use `computer_toolset_20260801`. Amazon Bedrock still accepts `computer_20251124`. Do not prune old screenshots client-side: it invalidates later thinking blocks. | +| Preserved thinking | Enforced by default on the Claude API and Amazon Bedrock for accounts created on or after 2026-08-31. `block_binding` works only with adaptive thinking. Keep histories append-only. | +| Advisor tool | Rejects Opus 4.8, 4.7, 4.6, Sonnet 5, and Sonnet 4.6 advisors. Accepted advisors return encrypted advice. | +| Refusals | Five `stop_details` categories: `cyber`, `bio`, `frontier_llm`, `reasoning_extraction`, `general_harms`. Server-side fallback retries only `cyber` and `frontier_llm`. | + +## Silent changes + +| Change | Action | +| :----- | :----- | +| Effort levels recalibrated | Set `effort` explicitly. Start at `medium` for agentic coding and multistep tool use. Start at `low` for chat, extraction, classification, and search. | +| Thinking before most replies | From `medium` up, the model thinks briefly before almost every reply. Lower effort to cut time to first token. A "think less" prompt barely helps. | +| Progress updates as `thinking` | Set `display: "updates"` (beta) with adaptive thinking. With `between_tools`, the notes return as text and no `display` is allowed. | +| Same tokenizer as Sonnet 5 | Token counts unchanged from Sonnet 5. | +| Rate limits | Own pool. Priority Tier not supported. | + +## Upgrade paths + +| From | Apply, in order | +| :--- | :-------------- | +| Sonnet 5 | This guide only. | +| Sonnet 4.6 | Sonnet 5 changes (adaptive thinking on by default, sampling params rejected, about 30% more tokens, `display` default `"omitted"`), then this guide. Skip the Sonnet 5 effort advice. | +| Sonnet 4.5 or older, Haiku 4.5 | Sonnet 4.6 changes first (prefill removed, explicit effort, beta headers), then Sonnet 5, then this guide. | + +## Prompt and behavior tuning (optional) + +- Remove workarounds for what improved: refusal steering, tool-call retry + shims, "do not be lazy". +- Remove tool-discouraging language ("minimize tool calls"). The model follows + it literally and may skip connected tools. +- Deliver mid-turn user input as a text block after the last `tool_result`. + Never put user text inside a `tool_result`. A mid-task user message placed + right after a tool result can be read as prompt injection. +- Skip task budgets on interactive sessions. The countdown arrives as a system + message after every tool result and can trigger the same reaction. +- At `low` effort, coding agents may report a change done without running a + check. Add a "run a real check before reporting done" instruction. +- Accept near-miss tool names (case differences) or return an `is_error` + result that states the exact expected name. +- Give crop, zoom, or code tools for dense charts and technical drawings. + +## Validation notes + +- Smoke test: assert `response.model.startswith("claude-sonnet-5-5")`. +- Prefix collision: a check for `claude-sonnet-5` also matches + `claude-sonnet-5-5`. Add a `not startswith("claude-sonnet-5-5")` guard. +- Test the thinking-off route at `low` effort first, then `between_tools`. + +## Model ID reference + +| Version | Model ID | Status | +| :------ | :------- | :----- | +| Sonnet 5.5 | `claude-sonnet-5-5` | Current | +| Sonnet 5 | `claude-sonnet-5` | Active | +| Sonnet 4.6 | `claude-sonnet-4-6` | Active | +| Sonnet 4.5 | `claude-sonnet-4-5` | Active | diff --git a/references/models/gemini-3-8-flash.md b/references/models/gemini-3-8-flash.md new file mode 100644 index 0000000..e2e1b19 --- /dev/null +++ b/references/models/gemini-3-8-flash.md @@ -0,0 +1,77 @@ +# Gemini 3.8 Flash + +Model ID: `gemini-3.8-flash` (generally available) +Context / output: 1M tokens / 64K tokens +Default thinking level: `medium` +Pricing: $0.75 / $3.75 per million input / output tokens through Dec 31, 2026. +$1.50 / $7.50 from Jan 1, 2027. The introductory rate also applies to Gemini +3.6 Flash. +Last verified: 2026-10-11 +Source: Google "What's new in Gemini 3.8 Flash" (last updated 2026-10-09) and +the Gemini API pricing page. The release date is not stated on either page. + +Google's most intelligent Flash model. The pricing page lists no Pro model +newer than `gemini-3.1-pro-preview`. Gemini 3.6 Flash stays supported. + +## Current model lineup (pricing page, per 1M tokens in / out) + +| Model | Model ID | Price | +| :---- | :------- | :---- | +| Gemini 3.8 Flash | `gemini-3.8-flash` | $0.75 / $3.75 | +| Gemini 3.6 Flash | `gemini-3.6-flash` | $0.75 / $3.75 | +| Gemini 3.5 Flash-Lite | `gemini-3.5-flash-lite` | $0.30 / $2.50 | +| Gemini 3.1 Flash-Lite | `gemini-3.1-flash-lite` | $0.25 / $1.50 | +| Gemini 3.1 Pro Preview | `gemini-3.1-pro-preview` | $2.00 / $12.00 (up to 200K) | + +## Thinking levels + +| Level | Use | +| :---- | :-- | +| `low` | Latency-critical work: incident response, real-time chat, drafts, fast data analysis | +| `medium` (default) | Complex code and agentic use cases | +| `high` | Deep reasoning, mathematics, hard multi-step tasks | + +`minimal` returns an error on 3.8 Flash. The model uses smaller reasoning +steps, calls tools iteratively, and verifies its work, so it can spend more +tokens on long tasks. Lower the level on everyday tasks to cut token use. + +## Migration checklist + +| Step | Change | +| :--- | :----- | +| 1 | Set the model string to `gemini-3.8-flash`. | +| 2 | Replace `thinking_budget` with the string enum `thinking_level`. Sending both returns 400. | +| 3 | Remove `temperature`, `top_p`, `top_k`, `candidate_count`. `candidate_count` is unsupported in Gemini 3 and later. Secondary guides disagree on whether the sampling parameters error or are silently ignored. Remove them and test. | +| 4 | Remove prefilled model turns. Use server-side `previous_interaction_id` for multi-turn conversations. | +| 5 | Function calling: put multimodal assets inside the response payload, format inline instructions with `\n\n`, and for `generateContent` make every `FunctionResponse` include `call_id` and `name`. For `Malformed_Function_Call` errors tied to text before a tool call, see the linked workarounds on the Google page. | +| 6 | Preserve thought signatures per the Gemini 3 requirements. Thought preservation across turns is on by default. | + +## Behavior notes + +- Default effort fell from high to medium across the 3.5 generation. A route + that relied on the old default now thinks less. Set `thinking_level` + explicitly and re-run evals. +- If the model over-calls tools, lower the thinking level. +- The Antigravity agent in Managed Agents and the Antigravity SDK default to + Gemini 3.8 Flash. Override via `agent_config`. +- The older Gemini 3 developer guide is deprecated. Prefer the + "What's new in Gemini 3.8 Flash" page. +- `gemini-2.5-flash-image` shuts down 2026-10-02. + +## Upgrade paths + +| From | Notes | +| :--- | :---- | +| Gemini 3.6 / 3.7 Flash | Mostly a model-ID swap. Apply steps 2 to 6 if not done, and drop `minimal`. | +| Gemini 3.5 Flash | Apply the full checklist. Re-check the default thinking level. | +| Gemini 2.5, 3 Preview | Apply the full checklist. Move from `thinking_budget` to `thinking_level` and re-validate function calling. | +| Another provider | Follow `provider-checklists.md` (cross-provider section), then this guide. | + +## Model ID reference + +| Version | Model ID | Status | +| :------ | :------- | :----- | +| Gemini 3.8 Flash | `gemini-3.8-flash` | Current (GA) | +| Gemini 3.6 Flash | `gemini-3.6-flash` | Supported | +| Gemini 3.1 Pro Preview | `gemini-3.1-pro-preview` | Preview | +| Gemini 2.5 Pro | `gemini-2.5-pro` | Older | diff --git a/references/models/gpt-5-5.md b/references/models/gpt-5-5.md index e5dc516..2d942fe 100644 --- a/references/models/gpt-5-5.md +++ b/references/models/gpt-5-5.md @@ -5,6 +5,9 @@ Model ID: `gpt-5.5` Pricing: $5 / $30 per million input / output tokens Cached input: $0.50 per million tokens Long-context (>270k input): 2x input, 1.5x output +Status: legacy. Superseded by `gpt-6.md`. Still the required layer when +upgrading from GPT-4o or o-series. +Last verified: legacy, written at the GPT-5.5 launch (April to May 2026) ## Variants diff --git a/references/models/gpt-6.md b/references/models/gpt-6.md new file mode 100644 index 0000000..a52206d --- /dev/null +++ b/references/models/gpt-6.md @@ -0,0 +1,100 @@ +# GPT-6 family + +Model IDs: `gpt-6-astra`, `gpt-6.1-sol`, `gpt-6-sol`, `gpt-6-luna` +Context / output: 1,050,000 tokens (922,000 max input) / 128,000 tokens +Knowledge cutoff: Apr 30, 2026 (Astra and 6.1 Sol) +Last verified: 2026-10-11 +Source: OpenAI "Using GPT-6" guide and the `gpt-6-astra` and `gpt-6.1-sol` +model pages. Sol and Luna prices and all release dates come from secondary +sources and are marked below. Re-check the OpenAI model pages before quoting. + +## Variants + +| Variant | Model ID | Use case | Price in / out per 1M tokens | +| :------ | :------- | :------- | :--------------------------- | +| GPT-6 Astra | `gpt-6-astra` | Highest intelligence: demanding reasoning, coding, professional work | $10 / $50 (cached $1, cache writes $12.50) | +| GPT-6.1 Sol | `gpt-6.1-sol` | Balanced speed, cost, intelligence | $2 / $10 (cached $0.10, cache writes $2.50) | +| GPT-6 Sol | `gpt-6-sol` | Existing model. Review the migration notes before moving to 6.1 Sol | $2 / $10 (secondary source) | +| GPT-6 Luna | `gpt-6-luna` | Fastest, cheapest, high-volume focused tasks | $0.10 / $0.50 (secondary source) | + +Prompts over 272K input tokens bill the whole request at 2x input and cache +rates and 1.5x output. Fast mode is 2x, Ultrafast is 6x, Batch and Flex are +50% lower, regional processing adds 10% (6.1 Sol page). + +Secondary-source release dates (unverified): Astra 2026-09-03, GPT-6 Sol and +Luna 2026-09-22, GPT-6.1 Sol 2026-09-29 or 2026-09-30. + +## Reasoning effort + +Set `reasoning.effort` (Responses API) or `reasoning_effort` (Chat +Completions). + +| Model | Levels | Notes | +| :---- | :----- | :---- | +| GPT-6.1 Sol | `low`, `medium` (default), `high`, `xhigh`, `max` | `none` and `minimal` unsupported | +| GPT-6 Astra | `low`, `medium`, `high`, `xhigh`, `max` | `none` unsupported. Use `low` instead | +| GPT-6 Sol, GPT-6 Luna | Support `none` | | + +## Required changes + +| Area | Change | +| :--- | :----- | +| Endpoint | Use the **Responses API** for tool calling. Astra and 6.1 Sol support Chat Completions only for requests without tools. Sol and Luna support function calling in Chat Completions only with `reasoning_effort: "none"`. | +| Sampling | When effort is not `none`, remove `temperature`, `top_p`, `top_logprobs`. Chat Completions: also remove `logprobs`. Responses: remove `message.output_text.logprobs` from `include`. | +| `minimal` effort | Replace with `low`. Compare on representative tasks. | +| `none` effort (Astra, 6.1 Sol) | Replace with `low`. | +| Prompt caching | Replace `prompt_cache_retention` with `prompt_cache_options.ttl` set to `"30m"` when migrating from GPT-5.5 or earlier. Review cache boundary and cache-write billing changes. | +| Model ID | Set `model` to the target ID. Astra and 6.1 Sol list one snapshot each: the bare ID. | + +OpenAI suggests Codex with the OpenAI Docs skill: +`$openai-docs migrate this project to the GPT-6 model family`. + +## New API features + +- **Async tool calling**: set `async: true` on a function or custom tool, + then return the result later with the original `call_id`. +- **Mid-turn steering**: send user instructions while the model works. +- **`configuration_update` input item**: change reasoning effort mid- + conversation without altering the prompt prefix, so caching survives. +- **Fast and Ultrafast modes**. Data residency differs: Astra Fast mode has + no EU residency and no latency SLA. +- Carried over from GPT-5.6: computer use, Structured Outputs, streaming, + Programmatic Tool Calling, multi-agent orchestration, prompt caching, + persisted reasoning, compaction, pro mode. + +## Prompt and behavior tuning (optional) + +- **Initiative**: Astra asks clarifying questions more than earlier models. + Say to act when the request implies authorization, and to ask for approval + once a concrete result is ready. +- **Instruction priority**: Astra weighs `AGENTS.md` and skill files heavily. + Audit them. State that user instructions override skill guidance. +- **Style**: Astra favors long, formatted answers with lists and tables. State + the style you want if you need prose. +- **Subagents**: Astra may delegate less than you want. Say when and how. +- **Testing**: Astra tests thoroughly, sometimes beyond what a small change + needs. Calibrate the scope. +- Carry-over from GPT-5.5 guidance: outcome-first prompts, drop legacy + scaffolding, keep few-shot examples for format calibration. + +## Upgrade paths + +| From | Notes | +| :--- | :---- | +| GPT-5.5 | Apply the required changes above. Re-baseline effort: Astra defaults are not documented, 6.1 Sol defaults to `medium`. See `gpt-5-5.md` for the earlier surface. | +| GPT-5.x, GPT-4o, o-series | Apply the `gpt-5-5.md` steps first (Responses API, effort, structured outputs), then this guide. | +| GPT-6 Sol | Review the migration notes before moving to 6.1 Sol. | + +Search results also mention a GPT-5.6 model page. Treat GPT-5.6 as an +intermediate release and verify its status on the OpenAI models page before +targeting it. + +## Model ID reference + +| Version | Model ID | Status | +| :------ | :------- | :----- | +| GPT-6 Astra | `gpt-6-astra` | Current | +| GPT-6.1 Sol | `gpt-6.1-sol` | Current | +| GPT-6 Sol | `gpt-6-sol` | Existing | +| GPT-6 Luna | `gpt-6-luna` | Current | +| GPT-5.5 | `gpt-5.5` | Previous generation (see `gpt-5-5.md`) | From 00a42542ddec2fa77081fe1c969a8164dc1b8964 Mon Sep 17 00:00:00 2001 From: forkadarshp Date: Sun, 11 Oct 2026 05:56:32 +0530 Subject: [PATCH 02/13] docs: add cross-provider breaking-changes lookup Map each error or symptom after a model swap to its cause and fix, with the exact provider error text where documented. Extend the Anthropic, OpenAI, and Gemini provider checklists with the current-generation changes. --- references/breaking-changes.md | 50 +++++++++++++++++++++++++++++++ references/provider-checklists.md | 30 +++++++++++++++---- 2 files changed, 75 insertions(+), 5 deletions(-) create mode 100644 references/breaking-changes.md diff --git a/references/breaking-changes.md b/references/breaking-changes.md new file mode 100644 index 0000000..d1c24fa --- /dev/null +++ b/references/breaking-changes.md @@ -0,0 +1,50 @@ +# Breaking Changes Quick Lookup + +Symptom to cause to fix, across providers. Use it when a model swap starts +returning errors or behaving differently. Each row points at the guide that +has the full migration. Facts verified 2026-10-11 against provider docs (see +each guide's `Source:` line). Exact error text is quoted where the provider +documents it. Where it is not documented here, the symptom is described +instead of guessing a string. + +## Request errors (HTTP 400) + +| You send | Fails on | Error or symptom | Fix | +| :------- | :------- | :--------------- | :-- | +| `thinking: {type: "disabled"}` | Claude Opus 5.5, Fable 5.1, Fable 5 | `"thinking.type.disabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.` | Omit `thinking`. Set `output_config.effort` to `low` for speed. | +| `thinking: {type: "disabled"}` | Claude Sonnet 5.5 | `"thinking.type.disabled" is not supported for this model. Use "thinking.type.between_tools" for the lowest thinking setting, or ...` | Try adaptive + `effort: "low"`. Else `{type: "between_tools"}` at effort `high` or below. | +| `thinking: {type: "enabled", budget_tokens: N}` | Claude Opus 4.7 and later, Sonnet 5 and later, Haiku 5.5, Fable | 400 | `{type: "adaptive"}` + `output_config.effort`. | +| `thinking: {type: "disabled"}` with effort `xhigh` or `max` | Claude Opus 5, Haiku 5.5 | `output_config.effort 'xhigh' is not supported when thinking is disabled on this model. Use effort 'high' or below, or enable thinking.` | Lower effort or enable thinking. | +| `thinking: {type: "between_tools"}` | Any model except Claude Sonnet 5.5 | `"thinking.type.between_tools" is not supported for this model.` | Drop the field when re-sending to another model. | +| `tool_choice: {type: "any"}` or `{type: "tool", ...}` | Claude Opus 5.5, Sonnet 5.5, Fable 5.1 | `tool_choice: type "tool" and "any" are not supported for this model.` | `auto` + `strict: true` + prompt instruction, or `output_config.format` for JSON. Check a call happened. | +| `computer_20251124` tool | Claude Opus 5.5, Sonnet 5.5 on Claude API and Google Cloud | `'claude-opus-5-5' does not support tool types: computer_20251124.` | `{"type": "computer_toolset_20260801"}`. Amazon Bedrock still accepts the old tool. | +| `computer_20250124` tool | Claude Haiku 5.5 on Claude API and Google Cloud | 400 | `computer_toolset_20260801`. | +| `temperature`, `top_p`, `top_k` (non-default) | Claude Opus 4.7 and later, Sonnet 5 and later, Haiku 5.5, Fable | 400 | Omit them. Haiku 5.5 accepts only `temperature` 1 and `top_p` 0.99. | +| Assistant prefill (last message is `assistant`) | Claude Opus 4.6 and later, Sonnet 4.6 and later, Haiku 5.5, Fable | 400 | End with a user turn. Use `output_config.format` or a prompt instruction. | +| Replayed thinking block after editing `system`, `tools`, or earlier messages | Claude Fable 5.1, Opus 5.5, Sonnet 5.5, Haiku 5.5 (accounts created on or after 2026-08-31) | 400 | Keep history append-only. See `claude-fable-5-1.md`. | +| `fallbacks` on Haiku 5.5 | Claude Haiku 5.5 | A model list returns 400. `"default"` leaves a decline declined. | Handle the refusal in the client. | +| `thinking_budget` and `thinking_level` together | Gemini 3.x | 400 | Send only `thinking_level`. | +| `thinking_level: "minimal"` | Gemini 3.8 Flash | Error | Use `low`, `medium`, or `high`. | +| `reasoning.effort: "none"` or `"minimal"` | GPT-6 Astra, GPT-6.1 Sol | Unsupported | Use `low`. | +| `temperature`, `top_p`, `top_logprobs`, `logprobs` with reasoning on | GPT-6 family | Unsupported | Remove them. | +| Tool calling on Chat Completions | GPT-6 Astra, 6.1 Sol | Unsupported | Use the Responses API. | + +## Silent changes (no error, output differs) + +| Change | Models | Effect | Fix | +| :----- | :----- | :----- | :-- | +| Thinking on by default | Claude Opus 5, Sonnet 5, Haiku 5.5 | `max_tokens` shared with thinking. Replies truncate. `content[0]` may be a `thinking` block. | Raise `max_tokens` (64K for long agent turns). Read blocks by `type`. | +| Default effort `medium` | Claude Opus 5.5, Haiku 5.5 | Less thinking than the old `high` default. | Set `effort` explicitly. Re-run the sweep. | +| `thinking.display` default `"omitted"` | Claude Opus 4.7 and later, Sonnet 5 and later, Fable | Thinking text is empty. UI shows a long pause. | `display: "summarized"`. | +| Progress notes moved into `thinking` blocks | Claude Opus 5.5, Sonnet 5.5, Fable 5.1 | UI goes quiet between tool calls. | `display: "updates"` (beta) and render non-empty `thinking` blocks. | +| New tokenizer, about 30% more tokens | Claude Sonnet 5 and later (vs 4.6), Haiku 5.5 (vs 4.5) | Cost and context budgets shift. | Recount with `count_tokens`. | +| Classifier refusals (HTTP 200, `stop_reason: "refusal"`) | Claude Fable 5.1, Opus 5 and 5.5, Sonnet 5.5, Haiku 5.5 | Code reading `content[0]` breaks. | Branch on `stop_reason`. Add a fallback where supported. | +| More literal instruction following | Claude Opus 4.7 and later | Vague prompts behave differently. | State format, verbosity, and scope. | +| More tool-call iteration, smaller reasoning steps | Gemini 3.8 Flash | More tokens on long tasks. | Lower `thinking_level`. | +| More clarifying questions, long formatted answers | GPT-6 Astra | Stalls on autonomous work, verbose output. | Prompt for action and style. See `gpt-6.md`. | + +## Where to go next + +- Model-specific steps: `models/INDEX.md`. +- Rollout and rollback: `migration-playbook.md`, `migration-patterns.md`. +- Proving it worked: `validation-proof.md`, `benchmarking.md`. diff --git a/references/provider-checklists.md b/references/provider-checklists.md index 322b94c..08114b2 100644 --- a/references/provider-checklists.md +++ b/references/provider-checklists.md @@ -11,10 +11,19 @@ Provider-specific reminders to use during migration. - Verify structured output mode and schema handling. - Run at least one streamed and one non-streamed smoke test where relevant. -For version-specific changelogs, breaking changes, and quirks, see the -dedicated model guides in `references/models/` (e.g. `claude-opus-4-8.md`). +- Check for the 5.x-era breaking changes when targeting the latest models: + `thinking: {type: "disabled"}` and `budget_tokens` rejected, forced + `tool_choice` (`any`, `tool`) rejected, sampling parameters and assistant + prefill rejected, computer use via `computer_toolset_20260801`. +- Handle `stop_reason: "refusal"` before reading `content`. Add a fallback. +- Keep conversations append-only when replaying thinking blocks (preserved + thinking). +- Set `output_config.effort` explicitly. Defaults differ per model. -Reference: [Anthropic model deprecations](https://docs.anthropic.com/en/docs/resources/model-deprecations) +For version-specific changelogs, breaking changes, and quirks, start at +`references/models/INDEX.md` (e.g. `claude-opus-5-5.md`). + +Reference: [Anthropic model deprecations](https://platform.claude.com/docs/en/about-claude/model-deprecations) ## OpenAI-family migration checklist @@ -23,11 +32,15 @@ Reference: [Anthropic model deprecations](https://docs.anthropic.com/en/docs/res - Confirm any reasoning-effort/config fields are valid for target model. - Validate JSON mode/structured output behavior if used. - Re-check system prompt behavior under new model family. +- Use the Responses API for tool calling on the newest models. +- Remove `temperature`, `top_p`, and `logprobs` when reasoning is on. +- Replace unsupported effort values (`none`, `minimal`) per the target model. +- Re-check prompt caching parameters (for example `prompt_cache_options.ttl`). For version-specific changelogs, reasoning effort levels, and migration steps, -see the dedicated model guides in `references/models/` (e.g. `gpt-5-5.md`). +start at `references/models/INDEX.md` (e.g. `gpt-6.md`). -Reference: [OpenAI model endpoint compatibility](https://platform.openai.com/docs/models) +Reference: [OpenAI models](https://developers.openai.com/api/docs/models) ## Gemini-family migration checklist @@ -36,6 +49,13 @@ Reference: [OpenAI model endpoint compatibility](https://platform.openai.com/doc - Re-check safety settings and blocked-output behavior. - Validate multimodal pathways if image/file inputs are used. - Confirm output format consistency against existing parsers. +- Replace `thinking_budget` with `thinking_level`. Do not send both. +- Remove `temperature`, `top_p`, `top_k`, `candidate_count`, and prefilled + model turns on Gemini 3 and later. +- Re-check function-calling response shape and thought-signature handling. + +For version-specific steps, start at `references/models/INDEX.md` (e.g. +`gemini-3-8-flash.md`). Reference: [Gemini model versions](https://ai.google.dev/gemini-api/docs/models) From 1554c30690fbfd59ea7b3a75664c3328e35b43e4 Mon Sep 17 00:00:00 2001 From: forkadarshp Date: Sun, 11 Oct 2026 05:56:32 +0530 Subject: [PATCH 03/13] feat(validate): check model guide metadata and index entries Fail validation when a guide lacks a Model ID or Last verified line, when a current guide lacks a Source line, when a legacy guide lacks a Status line, or when a guide is missing from INDEX.md. Require references/breaking-changes.md. --- scripts/validate_skill.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/scripts/validate_skill.py b/scripts/validate_skill.py index 0bbbc2f..56b60a9 100644 --- a/scripts/validate_skill.py +++ b/scripts/validate_skill.py @@ -18,6 +18,7 @@ "references/provider-checklists.md", "references/validation-proof.md", "references/benchmarking.md", + "references/breaking-changes.md", "references/output-style.md", "templates/migration-starter-prompt.md", "examples/example-prompts.md", @@ -102,11 +103,49 @@ def validate_skill(root: Path) -> None: fail(f"Example output missing section: {heading}") +def validate_model_guides(root: Path) -> None: + """Every model guide needs metadata and an INDEX.md entry.""" + models_dir = root / "references" / "models" + index_path = models_dir / "INDEX.md" + if not index_path.is_file(): + fail("Missing required file: references/models/INDEX.md") + index = index_path.read_text(encoding="utf-8") + + for guide in sorted(models_dir.glob("*.md")): + if guide.name == "INDEX.md": + continue + text = guide.read_text(encoding="utf-8") + head = "\n".join(text.splitlines()[:20]) + + if not re.search(r"^Model IDs?: `", head, re.MULTILINE): + fail(f"{guide.name}: missing 'Model ID:' line in the header") + + verified = re.search(r"^Last verified: (.+)$", head, re.MULTILINE) + if not verified: + fail(f"{guide.name}: missing 'Last verified:' line in the header") + value = verified.group(1).strip() + if not (re.match(r"\d{4}-\d{2}-\d{2}\b", value) or value.startswith("legacy")): + fail( + f"{guide.name}: 'Last verified:' must start with an ISO date " + "(YYYY-MM-DD) or 'legacy'" + ) + + is_legacy = value.startswith("legacy") + if not is_legacy and not re.search(r"^Source: ", head, re.MULTILINE): + fail(f"{guide.name}: current guide needs a 'Source:' line") + if is_legacy and not re.search(r"^Status: legacy", head, re.MULTILINE): + fail(f"{guide.name}: legacy guide needs a 'Status: legacy' line") + + if guide.name not in index: + fail(f"{guide.name}: not listed in references/models/INDEX.md") + + def main() -> None: root = Path(sys.argv[1] if len(sys.argv) > 1 else ".").resolve() if not root.is_dir(): fail(f"Not a directory: {root}") validate_skill(root) + validate_model_guides(root) print("Skill package is valid.") From 42bddfb64efebe5a5e77bc68e11fd027fdfb20f7 Mon Sep 17 00:00:00 2001 From: forkadarshp Date: Sun, 11 Oct 2026 05:56:32 +0530 Subject: [PATCH 04/13] feat: flag model guides that need re-verification Add scripts/check_freshness.py, which lists dated guides older than 30 days, and a weekly workflow that opens or updates an issue with the report. --- .github/workflows/freshness.yml | 38 +++++++++++++++++++ scripts/check_freshness.py | 65 +++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 .github/workflows/freshness.yml create mode 100644 scripts/check_freshness.py diff --git a/.github/workflows/freshness.yml b/.github/workflows/freshness.yml new file mode 100644 index 0000000..7df2730 --- /dev/null +++ b/.github/workflows/freshness.yml @@ -0,0 +1,38 @@ +name: Model guide freshness + +on: + schedule: + - cron: "0 9 * * 1" # Mondays 09:00 UTC + workflow_dispatch: + +permissions: + contents: read + issues: write + +jobs: + check: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.12" + - name: Check guide ages + id: check + continue-on-error: true + run: python3 scripts/check_freshness.py . | tee freshness-report.txt + - name: Open or update the freshness issue + if: steps.check.outcome == 'failure' + env: + GH_TOKEN: ${{ github.token }} + run: | + title="Model guides need re-verification" + body="$(cat freshness-report.txt)" + existing="$(gh issue list --state open --search "$title in:title" --json number --jq '.[0].number')" + if [ -n "$existing" ]; then + gh issue comment "$existing" --body "$body" + else + gh issue create --title "$title" --body "$body" + fi diff --git a/scripts/check_freshness.py b/scripts/check_freshness.py new file mode 100644 index 0000000..c85dec1 --- /dev/null +++ b/scripts/check_freshness.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +"""Report model guides whose `Last verified:` date is too old. + +Exit code 0 when every dated guide is fresh, 1 when any is stale. Legacy guides +(`Last verified: legacy ...`) are skipped. Used by the weekly freshness +workflow, which opens an issue with this report. + +Usage: python3 scripts/check_freshness.py [root] [--max-age-days 30] [--today YYYY-MM-DD] +""" + +from __future__ import annotations + +import argparse +import re +import sys +from datetime import date +from pathlib import Path + + +def stale_guides(root: Path, max_age_days: int, today: date) -> list[tuple[str, int, str]]: + """Return (guide, age_in_days, source_line) for every dated guide past max age.""" + stale = [] + for guide in sorted((root / "references" / "models").glob("*.md")): + if guide.name == "INDEX.md": + continue + head = "\n".join(guide.read_text(encoding="utf-8").splitlines()[:20]) + verified = re.search(r"^Last verified: (\d{4})-(\d{2})-(\d{2})\b", head, re.MULTILINE) + if not verified: + continue # legacy guide (or validate_skill.py will flag it) + age = (today - date(*map(int, verified.groups()))).days + if age > max_age_days: + # Source may wrap onto continuation lines: join until a blank line or the next key. + source = re.search( + r"^Source: (.+(?:\n(?![A-Za-z ]+: |\n|#).+)*)", head, re.MULTILINE + ) + stale.append((guide.name, age, " ".join(source.group(1).split()) if source else "")) + return stale + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("root", nargs="?", default=".") + ap.add_argument("--max-age-days", type=int, default=30) + ap.add_argument("--today", default=None, help="override today's date (YYYY-MM-DD)") + args = ap.parse_args() + + today = date.fromisoformat(args.today) if args.today else date.today() + stale = stale_guides(Path(args.root).resolve(), args.max_age_days, today) + if not stale: + print(f"All dated model guides were verified within {args.max_age_days} days.") + return + + print(f"{len(stale)} model guide(s) older than {args.max_age_days} days:\n") + for name, age, source in stale: + print(f"- references/models/{name}: {age} days old. Source: {source}") + print( + "\nRe-check each guide against the provider's official page, fix any drift, " + "then update its `Last verified:` line. Also check whether the provider " + "shipped a model that has no guide in references/models/INDEX.md." + ) + sys.exit(1) + + +if __name__ == "__main__": + main() From 280a30cadcc4a26ea945e4ccbbc41643fd8aeeb2 Mon Sep 17 00:00:00 2001 From: forkadarshp Date: Sun, 11 Oct 2026 05:56:32 +0530 Subject: [PATCH 05/13] fix(harness): make the Anthropic provider work with current models max_tokens was 512, which truncates replies on models where thinking is always on and counts toward the cap. Default to 4096 and accept an optional per-scenario request block for effort and max_tokens. Treat a refusal stop reason as a failed case and warn on max_tokens stops. Point the bundled scenarios at claude-opus-5-5 with its list price, and cover the request shape with fake-client tests. --- harness/README.md | 9 +++- harness/providers.py | 40 +++++++++++++--- harness/scenarios/ops_routing.json | 4 +- harness/scenarios/support_triage.json | 4 +- harness/tests/test_harness.py | 69 ++++++++++++++++++++++++++- 5 files changed, 113 insertions(+), 13 deletions(-) diff --git a/harness/README.md b/harness/README.md index 2c841a8..68cdb2e 100644 --- a/harness/README.md +++ b/harness/README.md @@ -70,13 +70,20 @@ slightly. Two real takeaways the harness surfaces: Opus 4.7+ trait: newer models follow instructions more literally, punishing vague prompts and rewarding precise ones). The grading, scoring, and leaderboard pipeline is real; **the numbers are illustrative, not measured.** -- **`anthropic`** — real Messages API calls. Same graders, real numbers. +- **`anthropic`** — real Messages API calls. Same graders, real numbers. Safe + for current models: it never sends `temperature`, `thinking`, prefill, or a + forced `tool_choice` (all rejected by Opus 5.5, Sonnet 5.5, Haiku 5.5, and + Fable 5.1), reads content blocks by type, and treats a `refusal` stop reason + as a failed case. Add an optional `request` block to a scenario to set + `effort` and `max_tokens` (default 4096, which leaves room for always-on + thinking). ## Define your own scenario Copy `scenarios/support_triage.json` and edit: - `models` — old/new model IDs +- `request` — optional `{"effort": "low", "max_tokens": 4096}` for `--provider anthropic` - `prompts.baseline` / `prompts.enhanced` — the configs for arms A/B vs C - `tools`, `categories` — the task surface - `eval_cases` — inputs + expected `{category, tool, args}` and a `difficulty` diff --git a/harness/providers.py b/harness/providers.py index dc51870..9232321 100644 --- a/harness/providers.py +++ b/harness/providers.py @@ -16,10 +16,14 @@ from __future__ import annotations import json +import sys import time from graders import Response +# Leaves headroom for always-on thinking on current Claude models. +DEFAULT_MAX_TOKENS = 4096 + # Simulator formula constants (transparent, tunable). See module docstring. _BOOST_EXPLICIT = 0.30 # precise prompt raises fidelity _PENALTY_VAGUE = 0.20 # literal model * vague prompt lowers fidelity @@ -145,23 +149,45 @@ def generate(self, model: str, system_prompt: str, case: dict) -> Response: for t in self.scenario["tools"] if t["name"] != "none" ] + # Optional per-scenario request settings. Newer models (Opus 5.5, + # Haiku 5.5, Fable 5.1) always think and thinking counts toward + # max_tokens, so the default leaves room for it. Sampling parameters, + # prefill, forced tool_choice, and thinking config are deliberately + # never sent: current models reject them. + request = self.scenario.get("request", {}) + kwargs = {} + if request.get("effort"): + kwargs["output_config"] = {"effort": request["effort"]} + start = time.time() msg = self.client.messages.create( model=model, - max_tokens=512, + max_tokens=request.get("max_tokens", DEFAULT_MAX_TOKENS), system=system_prompt, tools=tools, messages=[{"role": "user", "content": case["input"]}], + **kwargs, ) latency_ms = (time.time() - start) * 1000 + # Classifier declines arrive as HTTP 200 with stop_reason "refusal". + # Grade them as an empty response instead of reading content[0]. + if msg.stop_reason == "max_tokens": + print( + f"warning: {model} hit max_tokens={request.get('max_tokens', DEFAULT_MAX_TOKENS)}; " + "raise scenario request.max_tokens or lower request.effort", + file=sys.stderr, + ) + text, tool_name, tool_args = "", None, {} - for block in msg.content: - if block.type == "text": - text += block.text - elif block.type == "tool_use": - tool_name = block.name - tool_args = dict(block.input) + if msg.stop_reason != "refusal": + # Read blocks by type: a response can start with thinking blocks. + for block in msg.content: + if block.type == "text": + text += block.text + elif block.type == "tool_use": + tool_name = block.name + tool_args = dict(block.input) return Response( text=text, diff --git a/harness/scenarios/ops_routing.json b/harness/scenarios/ops_routing.json index 2c4403e..b3a9c34 100644 --- a/harness/scenarios/ops_routing.json +++ b/harness/scenarios/ops_routing.json @@ -2,7 +2,7 @@ "name": "ops-tool-routing", "role": "You are an ops-assistant that routes a request to exactly one tool.", "description": "Route a natural-language ops request to one of six tools with the right multi-field args, and return strict JSON. Harder than triage: more tools (more ways to mis-route), multi-arg calls, and several compound/ambiguous cases that prompting alone can't fully resolve.", - "models": { "old": "claude-opus-4-6", "new": "claude-opus-4-8" }, + "models": { "old": "claude-opus-4-6", "new": "claude-opus-5-5" }, "categories": ["deploy", "reliability", "observability", "incident", "other"], "tools": [ { "name": "restart_service", "args": ["service"] }, @@ -34,6 +34,6 @@ ], "sim": { "claude-opus-4-6": { "literalness": 0.5, "base": 0.66, "latency_ms": 3800, "price_in": 0.000005, "price_out": 0.000025 }, - "claude-opus-4-8": { "literalness": 0.9, "base": 0.70, "latency_ms": 2300, "price_in": 0.000005, "price_out": 0.000025 } + "claude-opus-5-5": { "literalness": 0.9, "base": 0.70, "latency_ms": 2300, "price_in": 0.000004, "price_out": 0.00002 } } } diff --git a/harness/scenarios/support_triage.json b/harness/scenarios/support_triage.json index 6b92b27..e0a9dc0 100644 --- a/harness/scenarios/support_triage.json +++ b/harness/scenarios/support_triage.json @@ -2,7 +2,7 @@ "name": "support-ticket-triage", "role": "You are a support-triage assistant.", "description": "Classify a support ticket, optionally call one tool, and return a strict JSON object. Exercises output-contract conformance and tool-calling accuracy across a model migration.", - "models": { "old": "claude-opus-4-6", "new": "claude-opus-4-8" }, + "models": { "old": "claude-opus-4-6", "new": "claude-opus-5-5" }, "categories": ["billing", "technical", "account", "other"], "tools": [ { "name": "lookup_order", "args": ["order_id"] }, @@ -32,6 +32,6 @@ ], "sim": { "claude-opus-4-6": { "literalness": 0.5, "base": 0.72, "latency_ms": 3800, "price_in": 0.000005, "price_out": 0.000025 }, - "claude-opus-4-8": { "literalness": 0.9, "base": 0.76, "latency_ms": 2300, "price_in": 0.000005, "price_out": 0.000025 } + "claude-opus-5-5": { "literalness": 0.9, "base": 0.76, "latency_ms": 2300, "price_in": 0.000004, "price_out": 0.00002 } } } diff --git a/harness/tests/test_harness.py b/harness/tests/test_harness.py index d953361..d4045c9 100644 --- a/harness/tests/test_harness.py +++ b/harness/tests/test_harness.py @@ -9,7 +9,7 @@ sys.path.insert(0, str(HARNESS)) from graders import Response, grade_contract, grade_task, grade_tool # noqa: E402 -from providers import SimProvider, explicitness # noqa: E402 +from providers import DEFAULT_MAX_TOKENS, AnthropicProvider, SimProvider, explicitness # noqa: E402 import run # noqa: E402 @@ -81,3 +81,70 @@ def test_modelport_arm_beats_baseline(self): if __name__ == "__main__": unittest.main() + + +class _Block: + def __init__(self, type, **kw): + self.type = type + self.__dict__.update(kw) + + +class _Msg: + def __init__(self, content, stop_reason="end_turn"): + self.content = content + self.stop_reason = stop_reason + self.usage = type("U", (), {"input_tokens": 10, "output_tokens": 5})() + + +class _FakeClient: + """Records the request and returns a canned message (no network).""" + + def __init__(self, msg): + self.calls = [] + self.messages = self + self._msg = msg + + def create(self, **kwargs): + self.calls.append(kwargs) + return self._msg + + +def _provider(scenario_extra, msg): + prov = AnthropicProvider.__new__(AnthropicProvider) # skip the anthropic import + prov.scenario = {"tools": [{"name": "lookup", "args": ["id"]}], **scenario_extra} + prov.client = _FakeClient(msg) + return prov + + +class TestAnthropicProviderNewModels(unittest.TestCase): + CASE = {"input": "where is order 4471?"} + + def test_request_avoids_params_current_models_reject(self): + prov = _provider({}, _Msg([_Block("text", text="{}")])) + prov.generate("claude-opus-5-5", "sys", self.CASE) + sent = prov.client.calls[0] + for banned in ("temperature", "top_p", "top_k", "thinking", "tool_choice"): + self.assertNotIn(banned, sent) + self.assertEqual(sent["max_tokens"], DEFAULT_MAX_TOKENS) + self.assertEqual(sent["messages"][-1]["role"], "user") # no prefill + + def test_effort_is_sent_only_when_configured(self): + prov = _provider({"request": {"effort": "low", "max_tokens": 2048}}, + _Msg([_Block("text", text="{}")])) + prov.generate("claude-haiku-5-5", "sys", self.CASE) + sent = prov.client.calls[0] + self.assertEqual(sent["output_config"], {"effort": "low"}) + self.assertEqual(sent["max_tokens"], 2048) + + def test_reads_blocks_by_type_after_leading_thinking_block(self): + msg = _Msg([_Block("thinking", thinking=""), + _Block("tool_use", name="lookup", input={"id": "4471"})]) + resp = _provider({}, msg).generate("claude-opus-5-5", "sys", self.CASE) + self.assertEqual(resp.tool_name, "lookup") + self.assertEqual(resp.tool_args, {"id": "4471"}) + + def test_refusal_grades_as_empty_response(self): + resp = _provider({}, _Msg([], stop_reason="refusal")).generate( + "claude-opus-5-5", "sys", self.CASE) + self.assertEqual(resp.text, "") + self.assertIsNone(resp.tool_name) From c90dcdd5106dba2f163f21e6887db2ce7ccf944d Mon Sep 17 00:00:00 2001 From: forkadarshp Date: Sun, 11 Oct 2026 05:56:32 +0530 Subject: [PATCH 06/13] docs(skill): route through the model index and add a freshness check Start model lookup at references/models/INDEX.md, re-fetch provider docs when a guide is stale or the target is not indexed, and point to the breaking-changes lookup. Name the current models and the common 400 errors in the skill description so agents select it for those cases. --- SKILL.md | 24 ++++++++++++++++++------ agents/openai.yaml | 4 ++-- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/SKILL.md b/SKILL.md index 6f0ada4..6411c7a 100644 --- a/SKILL.md +++ b/SKILL.md @@ -1,6 +1,6 @@ --- name: modelport-skill -description: Use when the user asks to migrate, upgrade, or port prompts, agents, tools, or codebases from one LLM model or provider version to another. Also use when auditing or continuing migration work started by another agent. Covers API calls, prompt assets, agent configs, tool definitions, tests, docs, runtime settings, rollout plans, and handoff coordination. Can also benchmark pre/post migration systems (old model and prompts vs new model and enhanced system) and report the stats as evidence. +description: Use when the user asks to migrate, upgrade, or port prompts, agents, tools, or code to a newer LLM or a different provider, including Claude Opus 5.5 / Sonnet 5.5 / Haiku 5.5 / Fable 5.1, GPT-6, and Gemini 3.8, or replace a deprecated or retired model. Also use when a model swap returns 400s (thinking disabled, budget_tokens, forced tool_choice, temperature/top_p, prefill, computer_20251124), truncates replies, or breaks parsers and tool calls, and when auditing migration work another agent started. Fixes API calls, prompts, tool definitions, tests, and configs, then proves it with tests, a live smoke check, and an optional old-vs-new benchmark. --- # ModelPort Skill @@ -89,10 +89,19 @@ Collect before editing: report (baseline old/old vs new/enhanced, plus the raw-swap control)? Opt-in. Ask once, up front — capturing the baseline later is impossible. -If source or target matches a model with a dedicated guide in -`references/models/`, read that guide before proceeding. Model guides contain +Look up source and target in `references/models/INDEX.md`. If either has a +dedicated guide, read it before proceeding, and follow the upgrade path in the +index (older guides are layered under newer ones). Model guides contain changelogs, breaking changes, migration steps, and version-specific quirks. +Freshness check, before trusting any guide: + +- `Last verified:` older than 30 days, or the target is not in the index → + fetch the provider's official migration page first. Never guess model IDs, + parameters, prices, or limits. +- Record the source and date used in the migration report. +- Facts marked as secondary-source in a guide → confirm on the provider page. + If benchmarking is requested, read `references/benchmarking.md` and capture the baseline (Arm A) in Phase 0 before any edit — it cannot be reconstructed later. @@ -126,9 +135,12 @@ Read: - `references/migration-playbook.md` - `references/provider-checklists.md` +- `references/models/INDEX.md` — registry, upgrade paths, freshness rules +- `references/breaking-changes.md` — error/symptom → cause → fix lookup across + providers; read first when a swap returns 400s or behaves differently - `references/models/.md` — when source or target matches a model with - a dedicated guide (e.g. `claude-opus-4-8.md`, `claude-opus-4-6.md`, - `claude-sonnet-4-5.md`, `gpt-5-5.md`) + a dedicated guide (Claude Fable 5.1 / Opus 5.5 / Sonnet 5.5 / Haiku 5.5, + GPT-6, Gemini 3.8 Flash, plus legacy Claude and GPT-5.5 guides) - `references/prompt-template-research.md` — when creating or improving a migration prompt or reusable migration request - `references/migration-patterns.md` — when choosing rollout strategy, @@ -249,7 +261,7 @@ Format per `examples/example-output.md`. - Migration strategy: `references/migration-playbook.md` - Provider checklists: `references/provider-checklists.md` - Model-specific guides: `references/models/` (per-version changelogs, quirks, - migration steps) + migration steps). Start at `references/models/INDEX.md`. - Prompt design research: `references/prompt-template-research.md` - Migration patterns: `references/migration-patterns.md` - Validation proof gates: `references/validation-proof.md` diff --git a/agents/openai.yaml b/agents/openai.yaml index 45009fe..3a60325 100644 --- a/agents/openai.yaml +++ b/agents/openai.yaml @@ -1,4 +1,4 @@ interface: display_name: "ModelPort" - short_description: "Migrate prompts, agents, and LLM code safely" - default_prompt: "Use $modelport-skill and the starter prompt template to migrate this codebase from the current model to the newer target model with validation evidence and rollback notes." + short_description: "Upgrade to newer LLMs (Claude 5.x, GPT-6, Gemini 3.8) without breaking prod" + default_prompt: "Use $modelport-skill to migrate this codebase to the target model. Read references/models/INDEX.md, apply required compatibility fixes before optional tuning, and return validation evidence plus rollback notes." From 72f78951e4a7dfff72dda15d3187247ba5f1d1fb Mon Sep 17 00:00:00 2001 From: forkadarshp Date: Sun, 11 Oct 2026 05:56:32 +0530 Subject: [PATCH 07/13] docs(readme): lead with the errors people hit and the supported models Replace the Opus 4.8 launch framing with an evergreen pitch, the exact errors seen after a model swap, a supported-models table, and a sample leaderboard taken from the simulator. Redraw the social preview. --- README.md | 248 +++++++++++++++++++------------------- assets/social-preview.png | Bin 75431 -> 97101 bytes assets/social-preview.svg | 41 +++---- 3 files changed, 139 insertions(+), 150 deletions(-) diff --git a/README.md b/README.md index 58bc13a..8a89b0b 100644 --- a/README.md +++ b/README.md @@ -2,63 +2,86 @@ [![CI](https://github.com/forkadarshp/MPort/actions/workflows/ci.yml/badge.svg)](https://github.com/forkadarshp/MPort/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) -[![Codex Skill](https://img.shields.io/badge/Codex-Skill-111827)](SKILL.md) +[![Agent Skill](https://img.shields.io/badge/Agent-Skill-111827)](SKILL.md) +[![Models](https://img.shields.io/badge/Claude_5.x_·_GPT--6_·_Gemini_3.8-guides-blue)](references/models/INDEX.md) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md) -[![Status: Alpha](https://img.shields.io/badge/Status-v0.1_Alpha-blue)](docs/PUBLISHING.md) ![ModelPort social preview](assets/social-preview.svg) -**Ship model upgrades without breaking prod — then prove it.** +**Upgrade to Claude Opus 5.5, GPT-6, or Gemini 3.8 without breaking prod.** -Two things in one agent skill: **behavior-preserving migrations** across prompts, agents, tools, API callers, and tests — and **built-in evals** that score your old vs. new system so every upgrade is backed by numbers, not vibes. Works in Claude Code, Codex, and Cursor. +ModelPort is an agent skill for Claude Code, Codex, and Cursor. It migrates the +prompts, tool definitions, API calls, and tests around a model swap, using +per-model guides that track each provider's breaking changes. Then it proves the +upgrade worked with tests, a live smoke check, and optional old-vs-new evals. -> **Install in one line:** `npx skills add forkadarshp/MPort` — then tell your agent to migrate. See [Quickstart](#quickstart). +> **Install:** `npx skills add forkadarshp/MPort`, then tell your agent +> *"migrate this repo to claude-opus-5-5"*. See [Quickstart](#quickstart). -**The model ID is one line. The behavior around it is everything else.** -Most migrations break because search-and-replace silently shatters tool calling, -parsers, and orchestration. ModelPort treats a swap as behavior preservation: +## Seen one of these after a model swap? ```text - # the naive migration ┄ what a find/replace does - $ grep -rl 'opus-4-7' . | xargs sed -i 's/4-7/4-8/g' - x tool calls break x parser drift x silent prod regressions - - # the ModelPort migration ┄ behavior-preserving - > migrate this repo to claude-opus-4-8, keep behavior, prove it - ✓ callers mapped ✓ contract held ✓ tests + rollback evidence +"thinking.type.disabled" is not supported for this model. +tool_choice: type "tool" and "any" are not supported for this model. +'claude-opus-5-5' does not support tool types: computer_20251124. +temperature / top_p / logprobs rejected after moving to GPT-6 +thinking_budget and thinking_level in the same request (Gemini 3.x) → 400 +stop_reason: "refusal" and code that reads content[0] ``` -> **Star it** if it's saved you a migration headache — it helps other teams find it. +Changing the model ID is one line. The 400s, the truncated replies (thinking now +counts toward `max_tokens`), the quiet UI between tool calls, and the parsers +that stop matching are everything else. The lookup for all of them is in +[`references/breaking-changes.md`](references/breaking-changes.md). ModelPort +applies the fixes for you, in order, and shows its evidence. + +## What you get + +- **Current-model knowledge.** Dedicated guides for Claude Fable 5.1, Opus 5.5, + Sonnet 5.5, Haiku 5.5, GPT-6, and Gemini 3.8 Flash. Older guides layer + underneath for upgrades that start further back. +- **Guides that stay fresh.** Every guide has a `Last verified:` date and a + `Source:`. A weekly job flags stale guides, and the skill re-checks the + provider's docs before trusting an old one. +- **A migration, not a find/replace.** Scope lock, caller discovery, file + classification, required fixes kept apart from optional tuning, then + validation and rollback notes. +- **Proof.** Tests, a live smoke call, and an optional three-arm benchmark + (old model, naive swap, ModelPort) with a runnable harness. + +## Supported models -## Now shipping: Claude Opus 4.8 (released 2026-05-28) +| Provider | Models with a dedicated guide | +| :------- | :---------------------------- | +| Anthropic | Claude Fable 5.1, Opus 5.5, Sonnet 5.5, Haiku 5.5 (legacy: Opus 4.8, Opus 4.6, Sonnet 4.5) | +| OpenAI | GPT-6 Astra, GPT-6.1 Sol, GPT-6 Sol, GPT-6 Luna (legacy: GPT-5.5) | +| Google | Gemini 3.8 Flash | +| Anything else | Generic playbook plus provider checklists, with research on the target's docs | -Opus 4.8 is live, and ModelPort already ships a dedicated migration guide for it: -[`references/models/claude-opus-4-8.md`](references/models/claude-opus-4-8.md). -It covers the **4.7 → 4.8 drop-in path**, the **4.6 → 4.7 breaking changes you -must apply first** (non-default sampling params now 400, manual extended -thinking → `{type: "adaptive"}` + `effort`, new tokenizer, removed assistant -prefills), and **effort re-baselining**. Point the skill at your repo: +Registry, upgrade paths, and freshness rules: [`references/models/INDEX.md`](references/models/INDEX.md). + +## Example ```text -Use $modelport-skill to migrate this codebase to claude-opus-4-8. +Use $modelport-skill to migrate this codebase to claude-opus-5-5. Apply required compatibility fixes first, keep tool + output behavior stable, and return validation evidence plus rollback notes. ``` +You get back a report with: what changed and why, required fixes versus +optional tuning, test and smoke results, risks, and how to roll back. A sample +is in [examples/example-output.md](examples/example-output.md). + ## How it works -ModelPort treats a model swap as a **behavior-preservation problem**, not a -search-and-replace. The model ID is one line; the behavior around it — tool -calls, parsers, output contracts, prompts, orchestration — is everything else. -The skill drives a strict, phase-gated pipeline that maps every caller, -classifies each hit before editing, keeps required fixes apart from optional -tuning, and refuses to claim "done" without proof. +A strict, phase-gated pipeline. The skill will not edit before scope is locked +and will not claim "done" without proof. ```text ╭──────────────────────────────────────────────────────────────────────╮ │ │ -│ [ Opus 4.7 ] ═══> ( ModelPort ) ═══> [ Opus 4.8 ] │ -│ drop-in upgrade behavior-preserving GA · 2026-05-28 │ +│ [ old model ] ═══> ( ModelPort ) ═══> [ new model ] │ +│ what you run behavior-preserving what you ship │ │ │ │ » phase 0 lock scope, read current state ················· [ OK ]│ │ » phase 1 discover callers, prompts, agents, tools ······· [ OK ]│ @@ -71,95 +94,51 @@ tuning, and refuses to claim "done" without proof. ╰──────────────────────────────────────────────────────────────────────╯ ``` -## More than a model-ID swap +## Beyond the model ID -ModelPort doesn't just rewrite `model="..."`. It updates prompts, tool -descriptions, and guardrails to match how the **target model actually behaves** — -including the undocumented quirks that never make the changelog. +ModelPort also adjusts prompts, tool descriptions, and guardrails to match how +the target model behaves, including changes the changelog barely mentions. Two +examples from the current generation: Claude Opus 5.5 defaults to `medium` +effort, one level below Opus 5, so an untouched config quietly thinks less. And +Claude Sonnet 5.5 can read a user message that arrives right after a tool result +as a prompt injection, so mid-task user input must be delivered as a user turn. +Each guide lists these as required fixes or optional tuning, never mixed. -Take chess: GPT-3.5 played badly, GPT-4o was a leap ahead — not from a rules -change, but because 4o's training data held far more chess games. That kind of -capability shift never appears in the release notes. ModelPort's research -surfaces these advertised *and* unadvertised behaviors — from observed runs, -prior migrations, web research, and provider changelogs — and folds the matching -prompt and tooling changes into the migration, so the new model is actually used -to its strengths instead of just dropped in. +## Benchmark the upgrade -## Outcomes: with vs. without ModelPort +Opt in and ModelPort ends with measured evidence. It runs the same eval set +against three configurations so the raw model delta and the skill's value are +attributed separately: -Skipping the discipline is exactly where migrations look fine in review and -then silently regress in production — broken tool calls, drifted output -contracts, no proof, and no way back. +- **Baseline**: old model, old prompts (where you started) +- **Naive swap**: new model, old prompts (what a find/replace gets you) +- **ModelPort-enhanced**: new model, enhanced system (where you land) -```text -╭───────────────────────────────────┬───────────────────────────────────╮ -│ WITHOUT ModelPort │ WITH ModelPort │ -├───────────────────────────────────┼───────────────────────────────────┤ -│ x find/replace the model ID │ ✓ scope-locked discovery │ -│ x tool calls break silently │ ✓ callers mapped, not guessed │ -│ x parser / output drift │ ✓ output contract preserved │ -│ x prompt hacks carry over │ ✓ fixes vs tuning kept apart │ -│ x "looks fine" — no proof │ ✓ tests + live smoke evidence │ -│ x no way back on breakage │ ✓ rollback notes included │ -├───────────────────────────────────┼───────────────────────────────────┤ -│ → silent prod regressions │ → behavior-preserving upgrade │ -╰───────────────────────────────────┴───────────────────────────────────╯ -``` - -## Benchmark the upgrade — built-in evals - -Migrations shouldn't be a leap of faith. Opt in and ModelPort ends with -**measured evidence, not vibes** — it runs the same eval set against three -configurations so the raw model delta and the skill's added value are attributed -separately: - -- **Baseline** — old model + old prompts (where you started) -- **Naive swap** — new model + old prompts (what a find/replace would get you) -- **ModelPort-enhanced** — new model + skill-enhanced system (where you land) - -A raw swap tends to regress exactly the things that don't survive a model change -on their own — output contracts, tool calls, and parse-able format — because -newer models follow instructions more literally and re-tokenize differently. -The enhanced arm is where the skill's fixes earn their keep. Illustrative -leaderboard (your run produces the actual measured numbers): +Sample leaderboard from the bundled **offline simulator**. The simulator models +only prompt explicitness and a per-model "literalness" knob, so these numbers +show the report format, not real model performance: ```text ╭──────────────────────┬────────────┬────────────┬────────────╮ │ metric │ baseline │ naive swap │ ModelPort │ │ │ (old/old) │ (new/old) │ (new/enh.) │ ├──────────────────────┼────────────┼────────────┼────────────┤ -│ task success │ 82% │ 84% │ 91% │ -│ output contract │ 93% │ 89% │ 98% │ -│ tool-call accuracy │ 90% │ 83% │ 96% │ -│ p95 latency │ 3.9s │ 2.4s │ 2.6s │ -│ cost / req │ $0.052 │ $0.047 │ $0.045 │ -│ refusal / halluc. │ 2.8% │ 2.1% │ 1.4% │ +│ task success │ 64% │ 57% │ 93% │ +│ output contract │ 64% │ 57% │ 93% │ +│ tool-call accuracy │ 64% │ 57% │ 93% │ +│ p95 latency │ 4.1s │ 2.5s │ 2.5s │ +│ cost / req │ $0.0008 │ $0.0006 │ $0.0009 │ ├──────────────────────┼────────────┼────────────┼────────────┤ -│ composite (50/30/20)│ 0.80 │ 0.83 │ 0.91 │ +│ composite (50/30/20)│ 0.57 │ 0.63 │ 0.76 │ ╰──────────────────────┴────────────┴────────────┴────────────╯ ``` -Numbers above are illustrative, not measured results — latency and cost in -particular move with the target model and are always reported as measured, never -assumed. Methodology, metric definitions, and composite scoring live in +Get real numbers: `python3 harness/run.py --provider anthropic` (needs +`ANTHROPIC_API_KEY`). The harness works with current Claude models: it never +sends parameters they reject and leaves room for always-on thinking. Details in +[harness/README.md](harness/README.md) and [references/benchmarking.md](references/benchmarking.md). -**Run it yourself.** A bundled harness turns this into a closed loop: -`python3 harness/run.py` scores the three arms on an eval set, and -`harness/iterate.py` sweeps prompt revisions so you watch the score climb until -it plateaus. Two scenarios ship (support triage + multi-tool routing); it runs -offline by default, or `--provider anthropic` for measured numbers. See -[harness/README.md](harness/README.md). - -## Why ModelPort - -- Replace deprecated model IDs without breaking runtime calls. -- Preserve output contracts, parser behavior, and tool calling. -- Separate required compatibility fixes from optional prompt tuning. -- Choose direct swap, adapter, shadow mode, canary, or phased rollout. -- Produce validation evidence and rollback notes. -- Benchmark pre vs. post (and raw-swap control) to quantify the upgrade. - ## Quickstart Install once, use everywhere — the universal skills CLI wires ModelPort into Codex, Claude Code, Cursor, and more: @@ -199,7 +178,7 @@ mkdir -p ~/.codex/skills/modelport-skill cp -R . ~/.codex/skills/modelport-skill ``` -Then ask Codex: +Then ask your agent: ```text Use $modelport-skill and the starter prompt template to migrate @@ -250,7 +229,7 @@ More examples are in [examples/example-prompts.md](examples/example-prompts.md). ## Expected output -The skill guides Codex to produce a migration report with: +The skill guides your agent to produce a migration report with: - Migration summary - Scope and files changed @@ -279,11 +258,14 @@ See [examples/example-output.md](examples/example-output.md) for a sample report ├── assets/ │ └── social-preview.svg ├── scripts/ -│ └── validate_skill.py +│ ├── validate_skill.py +│ └── check_freshness.py +├── harness/ (offline + live old-vs-new benchmark) ├── templates/ │ └── migration-starter-prompt.md ├── references/ │ ├── benchmarking.md +│ ├── breaking-changes.md │ ├── migration-patterns.md │ ├── migration-playbook.md │ ├── output-style.md @@ -291,10 +273,17 @@ See [examples/example-output.md](examples/example-output.md) for a sample report │ ├── provider-checklists.md │ ├── validation-proof.md │ └── models/ -│ ├── claude-opus-4-8.md -│ ├── claude-opus-4-6.md -│ ├── claude-sonnet-4-5.md -│ └── gpt-5-5.md +│ ├── INDEX.md +│ ├── claude-fable-5-1.md +│ ├── claude-opus-5-5.md +│ ├── claude-sonnet-5-5.md +│ ├── claude-haiku-5-5.md +│ ├── gpt-6.md +│ ├── gemini-3-8-flash.md +│ ├── claude-opus-4-8.md (legacy) +│ ├── claude-opus-4-6.md (legacy) +│ ├── claude-sonnet-4-5.md (legacy) +│ └── gpt-5-5.md (legacy) ├── examples/ │ ├── example-prompts.md │ └── example-output.md @@ -305,7 +294,9 @@ See [examples/example-output.md](examples/example-output.md) for a sample report └── .github/ ├── ISSUE_TEMPLATE/ ├── pull_request_template.md - └── workflows/ci.yml + └── workflows/ + ├── ci.yml + └── freshness.yml ``` ## Validate locally @@ -326,8 +317,10 @@ npx markdownlint-cli2 "**/*.md" ## Roadmap -- Per-model migration guides for Claude Opus 4.8 / 4.6, Sonnet 4.5, and GPT-5.5 - ship today in `references/models/`. Next: Gemini and self-hosted models. +- Per-model migration guides for Claude Fable 5.1 / Opus 5.5 / Sonnet 5.5 / + Haiku 5.5, GPT-6, and Gemini 3.8 Flash ship today in `references/models/`, + with legacy Claude and GPT-5.5 guides layered underneath. Next: Gemini Pro + and Flash-Lite guides, and self-hosted models. - Add regression fixtures for prompt, tool, and structured-output migrations. - Ship a runnable benchmark harness to auto-collect the three-arm leaderboard (the methodology lands today in `references/benchmarking.md`). @@ -335,21 +328,21 @@ npx markdownlint-cli2 "**/*.md" ## FAQ -### How do I migrate to Claude Opus 4.8? +### How do I migrate to Claude Opus 5.5? Install ModelPort, then ask your agent: *"migrate this repo to -`claude-opus-4-8`."* It reads the -[Opus 4.8 guide](references/models/claude-opus-4-8.md), applies the required +`claude-opus-5-5`."* It reads the +[Opus 5.5 guide](references/models/claude-opus-5-5.md), applies the required compatibility fixes, preserves tool calling and output contracts, and returns validation evidence plus rollback notes. -### How do I migrate from Claude Opus 4.7 to 4.8? +### How do I migrate from an older Opus (4.x) to the latest? -4.7 → 4.8 is a drop-in upgrade with no breaking API changes — the main task is -re-baselining any tuned `effort` settings. ModelPort makes the model-ID change, -flags the settings to retest, and validates that behavior is unchanged. Coming -from 4.6 or earlier, it applies the 4.7 breaking changes first (sampling params, -adaptive thinking, tokenizer, removed prefills). +Upgrades layer. From 4.7 or older, ModelPort applies the +[Opus 4.8 guide](references/models/claude-opus-4-8.md) first (sampling params, +adaptive thinking, tokenizer, removed prefills), then the Opus 5.5 changes +(thinking always on, forced `tool_choice` removed, preserved thinking, computer +toolset), and re-baselines `effort`, whose default is now `medium`. ### Will changing the model ID break my tool calling or output format? @@ -361,7 +354,7 @@ target model's actual behavior — researched from observed runs, web research, and provider changelogs, including unadvertised quirks — then validates the contract before finishing. -### How do I benchmark Opus 4.8 against my current model? +### How do I benchmark a new model against my current one? Opt into benchmarking at the start and ModelPort runs a three-arm comparison — baseline, naive swap, and the enhanced system — on the same eval set, then @@ -375,9 +368,10 @@ Code, Codex, Cursor, or any compatible agent. ### Which models and providers does it support? -Any model or provider swap (Anthropic, OpenAI, and others). It ships dedicated -migration guides for Claude Opus 4.8 / 4.6, Claude Sonnet 4.5, and GPT-5.5, and -a generic playbook for everything else. +Any model or provider swap (Anthropic, OpenAI, Google, and others). It ships dedicated +migration guides for Claude Fable 5.1, Opus 5.5, Sonnet 5.5, and Haiku 5.5, +GPT-6, and Gemini 3.8 Flash (plus legacy Claude and GPT-5.5 guides), and a +generic playbook for everything else. ## Contributing diff --git a/assets/social-preview.png b/assets/social-preview.png index c9ea9efc070dc5873e4e112dd466fac42272c797..92a0601e5fec351ef5693a3220eac20a20a4809d 100644 GIT binary patch literal 97101 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 literal 75431 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 ModelPort - Safe LLM upgrades for prompts, agents, and production code. + Upgrade to Claude Opus 5.5, GPT-6, or Gemini 3.8 without breaking prod. An agent skill that fixes the breaking changes and proves the upgrade. - - + + __ __ _ _ _____ _ - | \/ | | | | | __ \ | | - | \ / | ___ __| | ___| | |__) |__ _ __| |_ - | |\/| |/ _ \ / _` |/ _ \ | ___/ _ \| '__| __| - | | | | (_) | (_| | __/ | | | (_) | | | |_ - |_| |_|\___/ \__,_|\___|_|_| \___/|_| \__| + | \/ | | | | | __ \ | | + | \ / | ___ __| | ___| | |__) |__ _ __| |_ + | |\/| |/ _ \ / _` |/ _ \ | ___/ _ \| '__| __| + | | | | (_) | (_| | __/ | | | (_) | | | |_ + |_| |_|\___/ \__,_|\___|_|_| \___/|_| \__| - -+------------------------------------------------------------------------------------------+ -| | -| > Safe LLM upgrades for prompts, agents, and production code. | -| | -| | -| [ Legacy Provider ] ==========> ( ModelPort Engine ) ==========> [ Next-Gen Model ] | -| | -| | -| > init migration_protocol .................................................... [ OK ] | -| > mapping caller routes ...................................................... [ OK ] | -| > applying surgical code patches ............................................. [ OK ] | -| > running regression evals ................................................... [ OK ] | -| | -+------------------------------------------------------------------------------------------+ + Upgrade models without breaking prod. + An agent skill for Claude Opus 5.5, GPT-6 and Gemini 3.8 migrations. + + +x "thinking.type.disabled" is not supported for this model +x tool_choice: type "tool" and "any" are not supported +x reply truncated: thinking counts toward max_tokens +> fixed in order, tested, with rollback notes + + npx skills add forkadarshp/MPort From f283a91edc4387afe43286cf7ed8d4f16c59e3f1 Mon Sep 17 00:00:00 2001 From: forkadarshp Date: Sun, 11 Oct 2026 05:56:32 +0530 Subject: [PATCH 08/13] docs: add a publishing playbook and model-guide contribution steps --- CONTRIBUTING.md | 17 +++++ docs/PUBLISHING.md | 159 +++++++++++++++++++++++++++++++++++---------- 2 files changed, 143 insertions(+), 33 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5695dd8..fb670f3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -34,6 +34,23 @@ python3 scripts/validate_skill.py . npx markdownlint-cli2 "**/*.md" ``` +## Adding or updating a model guide + +New models are the most valuable contribution. A guide needs: + +- A header with `Model ID:`, pricing, `Last verified: YYYY-MM-DD`, and + `Source:` (the provider page you used). Mark facts from blogs or other + secondary sources as such. +- Required changes (will error), silent changes (behavior differs), upgrade + paths from older models, and optional tuning, kept separate. +- An entry in `references/models/INDEX.md`, and in + `references/breaking-changes.md` if the model adds new errors. +- Superseded guides get `Status: legacy` and `Last verified: legacy, ...` + instead of being deleted. + +`python3 scripts/validate_skill.py .` checks the header and the index entry. +`python3 scripts/check_freshness.py .` lists guides older than 30 days. + ## Reporting bugs Use the bug template and include: diff --git a/docs/PUBLISHING.md b/docs/PUBLISHING.md index 0cf581c..51199f5 100644 --- a/docs/PUBLISHING.md +++ b/docs/PUBLISHING.md @@ -1,53 +1,146 @@ -# GitHub Publishing Checklist +# Publishing and Growth Playbook -Use these settings before making the repository public. +Maintainer checklist for repo settings, release cadence, and distribution. -## Repository description +## Positioning + +- **One line:** Upgrade models without breaking prod. +- **Who it is for:** engineers whose app calls an LLM API and who must move to + a newer model (a deprecation notice, a price drop, a capability they need). + Secondary: teams that use Claude Code, Codex, or Cursor and want an agent to + do the migration. +- **Why it wins:** per-model guides with exact breaking changes and error + strings, a fix order, and proof. A generic "migrate my prompts" request to an + agent has none of that. +- **Evergreen, not launch-tied.** Do not build the pitch on one model release. + The pitch is "every release breaks something". The model list is a table that + gets a new row. + +## Repository settings + +Set these in the GitHub repo settings (or with `gh repo edit`). + +Description (under 160 characters): ```text -Codex skill for safe LLM model migrations across prompts, agents, API callers, tests, rollout plans, and rollback paths. +Agent skill that upgrades LLM code to Claude Opus 5.5, GPT-6, Gemini 3.8 without breaking prod. Fixes breaking changes, then proves it with tests and evals. ``` -## Recommended GitHub topics +Topics (20 is the maximum): ```text -llm -model-migration -prompt-engineering -ai-agents -codex -openai -anthropic -gemini -developer-tools -llmops -prompt-migration -model-upgrade +agent-skills, claude-code, codex, cursor, llm-migration, model-migration, +model-upgrade, prompt-migration, prompt-engineering, llmops, llm, anthropic, +openai, gemini, claude, gpt, ai-agents, developer-tools, breaking-changes, +benchmarking ``` -## Social preview +Avoid version-specific topics (for example a model ID). They go stale. -```text -Headline: ModelPort -Subhead: Safe LLM upgrades for prompts, agents, and production code -Visual: old model -> compatibility map -> validated rollout +Social preview: upload `assets/social-preview.png` under Settings, Social +preview. GitHub does not accept this through the API. Regenerate the PNG after +editing the SVG: + +```bash +rsvg-convert -w 1280 -h 640 assets/social-preview.svg -o assets/social-preview.png ``` -Use `assets/social-preview.svg` as the starting social preview artwork. +## Release cadence + +Model news drives search traffic, so speed matters more than polish. + +When a provider ships a model: + +1. Within 48 hours, add a guide in `references/models/`. Copy the header block + of an existing guide: `Model ID`, price, `Last verified`, `Source`. +2. Add the guide to `references/models/INDEX.md` and, if the model brings new + errors, to `references/breaking-changes.md`. +3. Add a row to the README "Supported models" table. +4. Run `python3 scripts/validate_skill.py .`. +5. Tag a release. Use the error strings and the one-line fix in the notes. + +The weekly `freshness` workflow opens an issue when any guide passes 30 days +without re-verification. It cannot see new model releases, so also check the +provider changelogs when you re-verify: + +- Anthropic: +- OpenAI: +- Google: + +Version history: + +- `v0.1.0`: first public release (workflow, references, examples, CI). +- `v0.2.0`: current-generation guides (Claude 5.x, GPT-6, Gemini 3.8), model + index, breaking-changes lookup, freshness automation, harness fixes for + current Claude models. +- `v1.0.0`: stable workflow validated on real migrations (case studies). + +## Distribution -## First-screen README copy +`npx skills add` installs feed the public skills directory at skills.sh, so +installs and discovery reinforce each other. Channels, in order of expected +return: + +1. **Search.** The breaking-changes page contains exact error strings people + paste into search. Write one blog post or README-linked page per major + model release: "What breaks when you move to MODEL NAME" with the error, + cause, and fix. Link back to the repo. +2. **Show HN and Reddit** (r/ClaudeAI, r/ChatGPTCoding). Post once per major + release, with the breaking-changes table as the hook, not the tool. +3. **X or LinkedIn thread** on the same table. +4. **Provider communities** (Anthropic and OpenAI developer Discords and + forums) as an answer to a real migration question, with the relevant guide + linked. +5. **Awesome lists** for agent skills and Claude Code, via pull request. + +Before posting, check each community's self-promotion rules. + +### Draft: Show HN + +```text +Title: Show HN: ModelPort, an agent skill that fixes what breaks when you upgrade LLMs + +Moving to Claude Opus 5.5 means thinking can no longer be disabled, forced +tool_choice returns 400, and thinking blocks must stay append-only. GPT-6 +drops temperature and top_p when reasoning is on. Gemini 3.8 rejects the +"minimal" thinking level. None of this is a find/replace. + +ModelPort is a skill for Claude Code, Codex and Cursor. It has per-model guides +(Claude 5.x, GPT-6, Gemini 3.8) with the exact errors and fixes, applies them in +order, and ends with tests, a live smoke check and rollback notes. There is also +an offline harness for old-vs-new comparisons. The simulator's numbers are +illustrative; --provider anthropic gives measured ones. + +Guides carry a verified-on date and a source, and CI flags stale ones. + +https://github.com/forkadarshp/MPort +``` + +### Draft: thread ```text -Most model migrations fail after the model ID changes. +1/ Upgrading an LLM is never just the model ID. Things I keep seeing break: +- "thinking.type.disabled" is not supported (Claude Opus 5.5) +- tool_choice any/tool returns 400 (Opus 5.5, Sonnet 5.5, Fable 5.1) +- temperature/top_p rejected with reasoning on (GPT-6) +- replies cut off because thinking now counts toward max_tokens -ModelPort treats migration as a behavior-preservation problem, not a -search-and-replace task. It separates required compatibility fixes from optional -prompt and agent tuning, then ends every migration with validation evidence and -rollback notes. +2/ I put every one of these, with the cause and the fix, in one table: +references/breaking-changes.md + +3/ ModelPort is an agent skill that applies those fixes for you, in order, and +ends with tests, a smoke check and rollback notes. npx skills add forkadarshp/MPort ``` -## Release tags +## Measure + +Check weekly: stars, unique visitors and referrers (Insights, Traffic), clones, +and issues opened. Referrers show which channel worked. Repeat what works. + +## Before making a release public -- `v0.1.0`: first public release with skill workflow, references, examples, and CI. -- `v0.2.0`: provider deep dives and migration regression fixtures. -- `v1.0.0`: stable migration workflow with validated examples across providers. +- [ ] `python3 scripts/validate_skill.py .` passes. +- [ ] `npx markdownlint-cli2 "**/*.md"` passes. +- [ ] `python3 -m unittest discover -s harness/tests` passes. +- [ ] README "Supported models" table matches `references/models/INDEX.md`. +- [ ] Description, topics, and social preview match this file. From 460c769993581247a88dc8d23959d95cbe8adf01 Mon Sep 17 00:00:00 2001 From: forkadarshp Date: Sun, 11 Oct 2026 06:00:25 +0530 Subject: [PATCH 09/13] feat(plugin): package ModelPort as a Claude Code plugin Add .claude-plugin/plugin.json and a single-plugin marketplace so Claude Code users can run: /plugin install modelport --marketplace forkadarshp/MPort The repo root stays the skill, so npx skills add still finds one skill. --- .claude-plugin/marketplace.json | 15 +++++++++++++++ .claude-plugin/plugin.json | 14 ++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 .claude-plugin/marketplace.json create mode 100644 .claude-plugin/plugin.json diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json new file mode 100644 index 0000000..b36811f --- /dev/null +++ b/.claude-plugin/marketplace.json @@ -0,0 +1,15 @@ +{ + "name": "modelport", + "description": "ModelPort: upgrade LLM code to newer models without breaking prod", + "owner": { + "name": "Kumar Adarsh Pandita", + "url": "https://github.com/forkadarshp" + }, + "plugins": [ + { + "name": "modelport", + "source": "./", + "description": "Migrate prompts, tools, API calls, and tests to a newer LLM, with per-model breaking-change guides and proof that the upgrade worked." + } + ] +} diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..3aa6366 --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,14 @@ +{ + "name": "modelport", + "displayName": "ModelPort", + "version": "0.2.0", + "description": "Upgrade LLM code to newer models (Claude 5.x, GPT-6, Gemini 3.8) without breaking prod. Applies each model's breaking-change fixes, then proves the upgrade with tests and evals.", + "author": { + "name": "Kumar Adarsh Pandita", + "url": "https://github.com/forkadarshp" + }, + "homepage": "https://github.com/forkadarshp/MPort", + "repository": "https://github.com/forkadarshp/MPort", + "license": "MIT", + "keywords": ["model-migration", "llm-migration", "prompt-migration", "model-upgrade", "breaking-changes", "evals"] +} From 4b94b0c8305a7782021316adc5b271d06632c04c Mon Sep 17 00:00:00 2001 From: forkadarshp Date: Sun, 11 Oct 2026 06:00:25 +0530 Subject: [PATCH 10/13] docs(models): give guides search-friendly titles and summaries Title each current guide "Migrating to : breaking changes and fixes" and add a one-line summary, so the page title and excerpt match what people search for. --- references/breaking-changes.md | 2 +- references/models/claude-fable-5-1.md | 4 +++- references/models/claude-haiku-5-5.md | 4 +++- references/models/claude-opus-5-5.md | 4 +++- references/models/claude-sonnet-5-5.md | 4 +++- references/models/gemini-3-8-flash.md | 4 +++- references/models/gpt-6.md | 4 +++- 7 files changed, 19 insertions(+), 7 deletions(-) diff --git a/references/breaking-changes.md b/references/breaking-changes.md index d1c24fa..9341264 100644 --- a/references/breaking-changes.md +++ b/references/breaking-changes.md @@ -1,4 +1,4 @@ -# Breaking Changes Quick Lookup +# LLM upgrade errors and fixes: Claude 5.x, GPT-6, Gemini 3.8 Symptom to cause to fix, across providers. Use it when a model swap starts returning errors or behaving differently. Each row points at the guide that diff --git a/references/models/claude-fable-5-1.md b/references/models/claude-fable-5-1.md index 04bed9f..bb10cec 100644 --- a/references/models/claude-fable-5-1.md +++ b/references/models/claude-fable-5-1.md @@ -1,4 +1,6 @@ -# Claude Fable 5.1 +# Migrating to Claude Fable 5.1: breaking changes and fixes + +What breaks when you move code to `claude-fable-5-1`, the fix for each, and what to re-tune. Model ID: `claude-fable-5-1` (Project Glasswing counterpart: `claude-mythos-5-1`) diff --git a/references/models/claude-haiku-5-5.md b/references/models/claude-haiku-5-5.md index f28e52a..6723015 100644 --- a/references/models/claude-haiku-5-5.md +++ b/references/models/claude-haiku-5-5.md @@ -1,4 +1,6 @@ -# Claude Haiku 5.5 +# Migrating to Claude Haiku 5.5: breaking changes and fixes + +What breaks when you move code from Haiku 4.5 to `claude-haiku-5-5`, the fix for each, and what to re-tune. Model ID: `claude-haiku-5-5` (Amazon Bedrock: `anthropic.claude-haiku-5-5`) Pricing: $0.10 / $0.50 per million input / output tokens for prompts up to diff --git a/references/models/claude-opus-5-5.md b/references/models/claude-opus-5-5.md index 74172ca..933dee8 100644 --- a/references/models/claude-opus-5-5.md +++ b/references/models/claude-opus-5-5.md @@ -1,4 +1,6 @@ -# Claude Opus 5.5 +# Migrating to Claude Opus 5.5: breaking changes and fixes + +What breaks when you move code to `claude-opus-5-5`, the fix for each, and what to re-tune. Model ID: `claude-opus-5-5` (Amazon Bedrock: `anthropic.claude-opus-5-5`) Pricing: $4 / $20 per million input / output tokens (Opus 5: $5 / $25) diff --git a/references/models/claude-sonnet-5-5.md b/references/models/claude-sonnet-5-5.md index ed95807..b733f7c 100644 --- a/references/models/claude-sonnet-5-5.md +++ b/references/models/claude-sonnet-5-5.md @@ -1,4 +1,6 @@ -# Claude Sonnet 5.5 +# Migrating to Claude Sonnet 5.5: breaking changes and fixes + +What breaks when you move code to `claude-sonnet-5-5`, the fix for each, and what to re-tune. Model ID: `claude-sonnet-5-5` (Amazon Bedrock: `anthropic.claude-sonnet-5-5`) Pricing: $2 / $10 per million input / output tokens (same as Sonnet 5) diff --git a/references/models/gemini-3-8-flash.md b/references/models/gemini-3-8-flash.md index e2e1b19..86de8e5 100644 --- a/references/models/gemini-3-8-flash.md +++ b/references/models/gemini-3-8-flash.md @@ -1,4 +1,6 @@ -# Gemini 3.8 Flash +# Migrating to Gemini 3.8 Flash: breaking changes and fixes + +What changes when you move code to `gemini-3.8-flash`, the fix for each, and what to re-tune. Model ID: `gemini-3.8-flash` (generally available) Context / output: 1M tokens / 64K tokens diff --git a/references/models/gpt-6.md b/references/models/gpt-6.md index a52206d..cf64e07 100644 --- a/references/models/gpt-6.md +++ b/references/models/gpt-6.md @@ -1,4 +1,6 @@ -# GPT-6 family +# Migrating to GPT-6 (Astra, 6.1 Sol, Sol, Luna): breaking changes and fixes + +What changes when you move code from GPT-5.x to the GPT-6 family, the fix for each, and what to re-tune. Model IDs: `gpt-6-astra`, `gpt-6.1-sol`, `gpt-6-sol`, `gpt-6-luna` Context / output: 1,050,000 tokens (922,000 max input) / 128,000 tokens From c175b2d58bd46f04290a5ec31dcb8c5ebac8b5ed Mon Sep 17 00:00:00 2001 From: forkadarshp Date: Sun, 11 Oct 2026 06:00:25 +0530 Subject: [PATCH 11/13] docs(readme): three-step quickstart, copy-paste prompts, and error FAQ Add the plugin install line, per-model prompts, a comparison with the provider guide and an unassisted agent, and FAQ entries phrased as the errors and questions people search for. Update example prompts to current model IDs and drop a roadmap item that already shipped. --- README.md | 95 +++++++++++++++++++++++++++++++++---- examples/example-prompts.md | 11 ++++- 2 files changed, 97 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 8a89b0b..80f6e79 100644 --- a/README.md +++ b/README.md @@ -141,18 +141,54 @@ sends parameters they reject and leaves room for always-on thinking. Details in ## Quickstart -Install once, use everywhere — the universal skills CLI wires ModelPort into Codex, Claude Code, Cursor, and more: +**1. Install.** Pick the line for your agent. ```bash +# Any agent (Claude Code, Codex, Cursor, and others) npx skills add forkadarshp/MPort ``` -*Installing for every agent on your machine? Add `--agent '*'`:* +```text +# Claude Code, as a plugin +/plugin install modelport --marketplace forkadarshp/MPort +``` -```bash -npx skills add forkadarshp/MPort --agent '*' +**2. Ask.** In your project, tell the agent where you are going: + +```text +Migrate this repo to claude-opus-5-5. Keep tool and output behavior the same. ``` +**3. Read the report.** You get the changes, the test and smoke results, the +risks, and the rollback steps. Nothing is called done without evidence. + +### Copy-paste prompts + +| Goal | Prompt | +| :--- | :----- | +| Latest Claude | `Migrate this repo to claude-opus-5-5. Apply required fixes first, then list optional tuning separately.` | +| Cheaper and faster Claude | `Move the classification and routing calls in src/ to claude-haiku-5-5 and keep the output format identical.` | +| GPT-6 | `Migrate our OpenAI calls from gpt-5.5 to gpt-6.1-sol. Move tool calling to the Responses API where needed.` | +| Gemini | `Upgrade our Gemini calls to gemini-3.8-flash and replace thinking_budget with thinking_level.` | +| Switch provider | `Port services/assistant from OpenAI to Claude Sonnet 5.5. Keep the JSON output contract and tool behavior.` | +| Fix a broken swap | `We changed the model ID and now get 400s. Find the cause and fix it.` | +| Prove it | `Migrate to claude-opus-5-5 and benchmark old vs new on our eval set.` | + +More in [examples/example-prompts.md](examples/example-prompts.md). + +## Why not just read the migration guide? + +The provider's guide tells you what changed. You still have to find every +caller, decide the fix order, re-tune prompts, and check nothing regressed. + +| | Provider migration guide | Asking your agent with no skill | ModelPort | +| :--- | :--- | :--- | :--- | +| Knows the current breaking changes | Yes, one provider | Only if it is in its training data | Yes, across providers, dated and sourced | +| Finds every caller, prompt, and tool definition | You do it | Sometimes | Discovery phase, then classification | +| Keeps required fixes apart from tuning | No | Rarely | Always, and labeled | +| Ends with evidence | No | Rarely | Tests, live smoke check, rollback notes | +| Compares old vs new | No | No | Optional three-arm benchmark | + ### Manual Installation (Advanced) If you prefer to fork and modify the skill locally: @@ -248,7 +284,9 @@ See [examples/example-output.md](examples/example-output.md) for a sample report ```text . +├── .claude-plugin/ (Claude Code plugin + marketplace manifests) ├── .markdownlint-cli2.yaml +├── _config.yml (GitHub Pages site config) ├── SKILL.md ├── README.md ├── CONTRIBUTING.md @@ -322,12 +360,47 @@ npx markdownlint-cli2 "**/*.md" with legacy Claude and GPT-5.5 guides layered underneath. Next: Gemini Pro and Flash-Lite guides, and self-hosted models. - Add regression fixtures for prompt, tool, and structured-output migrations. -- Ship a runnable benchmark harness to auto-collect the three-arm leaderboard - (the methodology lands today in `references/benchmarking.md`). +- Add OpenAI and Gemini providers to the benchmark harness (Anthropic and an + offline simulator ship today). - Add real-world before/after migration case studies. ## FAQ +### How do I fix "thinking.type.disabled is not supported for this model"? + +Claude Opus 5.5 and Fable 5.1 always think, so `thinking: {type: "disabled"}` +returns a 400. Remove the `thinking` field and set `output_config.effort` to +`low` if you need speed. On Sonnet 5.5, use `{type: "between_tools"}` when a +route must stay thinking-off. Details in the +[Opus 5.5 guide](references/models/claude-opus-5-5.md). + +### How do I fix "tool_choice: type tool and any are not supported for this model"? + +Forced tool use is gone on Claude Opus 5.5, Sonnet 5.5, and Fable 5.1. Use +`tool_choice: {type: "auto"}` with `strict: true` on the tool and a prompt +instruction, then check that a call happened. If the forced call only existed +to get JSON back, use structured outputs. + +### Why are my replies cut off after upgrading Claude? + +Thinking is on by default on the newer models and counts toward `max_tokens`. A +limit sized for a short answer can be used up before any text is written. Raise +`max_tokens` or lower `effort`, and read content blocks by `type` because the +first block may be a `thinking` block. + +### What changes when I move from GPT-5.5 to GPT-6? + +Tool calling moves to the Responses API on Astra and 6.1 Sol, `temperature`, +`top_p`, and `logprobs` go away when reasoning is on, and the `none` and +`minimal` effort levels are not supported on those two models. See the +[GPT-6 guide](references/models/gpt-6.md). + +### What changes when I move to Gemini 3.8 Flash? + +Replace `thinking_budget` with `thinking_level` (sending both returns 400), +drop the `minimal` level, and remove sampling parameters and prefilled model +turns. See the [Gemini 3.8 Flash guide](references/models/gemini-3-8-flash.md). + ### How do I migrate to Claude Opus 5.5? Install ModelPort, then ask your agent: *"migrate this repo to @@ -363,8 +436,14 @@ reports a leaderboard with quality, latency, cost, and contract metrics. See ### Does it work with Claude Code, Codex, and Cursor? -Yes. It's a universal agent skill — install it once and invoke it from Claude -Code, Codex, Cursor, or any compatible agent. +Yes. Install it with `npx skills add forkadarshp/MPort` for any compatible +agent, or as a Claude Code plugin with +`/plugin install modelport --marketplace forkadarshp/MPort`. + +### Do I need an API key or an account? + +No. The skill is a set of instructions and guides your agent reads. An API key +is needed only if you run the benchmark harness against a live model. ### Which models and providers does it support? diff --git a/examples/example-prompts.md b/examples/example-prompts.md index 24493aa..8158c77 100644 --- a/examples/example-prompts.md +++ b/examples/example-prompts.md @@ -13,8 +13,17 @@ Use these to test ModelPort triggering and behavior. 7. "Migrate this repo to the latest model family and separate required fixes vs optional tuning." 8. "Upgrade model references across config, tests, and docs without breaking runtime routing." +## Current-model migrations + +1. "Migrate this repo to `claude-opus-5-5`. Apply required fixes first, then list optional tuning separately." +2. "Move the classification and routing calls in `src/` to `claude-haiku-5-5` and keep the output format identical." +3. "Migrate our OpenAI calls from `gpt-5.5` to `gpt-6.1-sol`. Move tool calling to the Responses API where needed." +4. "Upgrade our Gemini calls to `gemini-3.8-flash` and replace `thinking_budget` with `thinking_level`." +5. "We changed the model ID and now get 400s. Find the cause and fix it." +6. "Our agent UI goes quiet between tool calls since the upgrade. Find out why and fix it." + ## Advanced migrations -1. "Migrate from OpenAI `gpt-4o` to Anthropic `claude-sonnet-4-20250514` across all agents, normalize output contracts, and add provider-agnostic wrapper layers." +1. "Migrate from OpenAI `gpt-5.5` to Anthropic `claude-sonnet-5-5` across all agents, normalize output contracts, and add provider-agnostic wrapper layers." 2. "Agent B already started migrating `services/chat` — pick up where it left off, verify what's done, and finish the remaining work with validation." 3. "Migrate our structured output pipeline from JSON mode to native structured outputs on the new model, update Zod schemas, and regression-test all tool call paths." From 06d8bb4be09a4fa967c69ecff7f32215bc81e6fc Mon Sep 17 00:00:00 2001 From: forkadarshp Date: Sun, 11 Oct 2026 06:00:25 +0530 Subject: [PATCH 12/13] chore(site): add GitHub Pages config so guides are indexable pages --- _config.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 _config.yml diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..d7e4ffa --- /dev/null +++ b/_config.yml @@ -0,0 +1,21 @@ +# GitHub Pages site config. The repo root is the site source, so every guide +# becomes an indexable page. The skill itself does not read this file. +title: ModelPort +description: >- + Upgrade LLM code to Claude Opus 5.5, GPT-6, or Gemini 3.8 without breaking + prod. Breaking changes, fixes, and an agent skill that applies them. +url: https://forkadarshp.github.io +baseurl: /MPort +theme: jekyll-theme-primer +plugins: + - jekyll-seo-tag + - jekyll-sitemap +exclude: + - harness/ + - scripts/ + - templates/ + - agents/ + - docs/PUBLISHING.md + - CODE_OF_CONDUCT.md + - SECURITY.md + - LICENSE From f429f8f023d61bfd13ec60068632db6d0da47f4d Mon Sep 17 00:00:00 2001 From: forkadarshp Date: Sun, 11 Oct 2026 06:00:25 +0530 Subject: [PATCH 13/13] docs: document install channels, site setup, and naming in the playbook --- docs/PUBLISHING.md | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/docs/PUBLISHING.md b/docs/PUBLISHING.md index 51199f5..46dd748 100644 --- a/docs/PUBLISHING.md +++ b/docs/PUBLISHING.md @@ -75,6 +75,40 @@ Version history: current Claude models. - `v1.0.0`: stable workflow validated on real migrations (case studies). +## Install channels + +Keep both working. Test them after any change to `SKILL.md` or the manifests. + +| Channel | User command | Check | +| :------ | :----------- | :---- | +| Skills CLI (any agent) | `npx skills add forkadarshp/MPort` | `npx skills add . --list` finds one skill | +| Claude Code plugin | `/plugin install modelport --marketplace forkadarshp/MPort` | `claude plugin validate .` passes | + +Listing on skills.sh: . +On 2026-10-11 it showed 1 install and "No SKILL.md available for this skill", +so the page had no description. The raw `SKILL.md` URL resolves, so the cause is +on the directory side or a stale snapshot. Re-check after the next release and +report it to the skills.sh maintainers if it persists. + +Wider reach for the plugin: submit it to Anthropic's plugin directory (see +"Submit to Anthropic's directory" in the Claude Code plugin docs). + +## Website (GitHub Pages) + +`_config.yml` makes the repo root a Jekyll site, so every guide becomes its own +indexable page with a title taken from its first heading. Pages is off until +you enable it: Settings, Pages, deploy from branch `main`, folder `/`. Then set +the repo homepage to the site URL and confirm the build passed under Actions. +The config has not been built locally, so check the first build. + +## Naming + +The repo is `MPort`, the product is ModelPort, and the skill is +`modelport-skill`. Nobody searches for "MPort". Renaming the repo to +`modelport` puts the search term in the URL and in the install command. GitHub +redirects the old URL, but update the README, the manifests, `_config.yml`, and +this file in the same change. + ## Distribution `npx skills add` installs feed the public skills directory at skills.sh, so @@ -91,7 +125,10 @@ return: 4. **Provider communities** (Anthropic and OpenAI developer Discords and forums) as an answer to a real migration question, with the relevant guide linked. -5. **Awesome lists** for agent skills and Claude Code, via pull request. +5. **Awesome lists**, via pull request. Read each list's contribution rules + first. Candidates: `hesreallyhim/awesome-claude-code`, + `travisvn/awesome-claude-skills`, `ComposioHQ/awesome-claude-skills`, + `karanb192/awesome-claude-skills`, `VoltAgent/awesome-agent-skills`. Before posting, check each community's self-promotion rules.