fabro/docs/public/docs.json
Bryan Helmkamp a4e8987da8
feat(llm): add Claude Fable 5 support (#482)
## Summary

Adds Anthropic Claude Fable 5 as a first-class Fabro model without
changing the default Anthropic model. The catalog now exposes
`claude-fable-5` with `fable` and `claude-fable` aliases, 1M context,
128k max output, effort levels, vision/tools, prompt caching, and the
documented pricing.

The Anthropic adapter now handles Fable's API behavior directly: it uses
the `claude-fable-5` API ID, omits the legacy 1M context beta header,
avoids injecting default `thinking`, preserves `output_config.effort`,
omits deprecated `temperature`/`top_p` sampling fields for Fable, and
rejects unsupported manual enabled/disabled thinking configs locally.

Fable refusals are converted into content-filter LLM errors with
`stop_details` preserved. Those refusal errors are fallback-eligible, so
existing `run.model.fallbacks` chains work for both prompt and agent
paths, while no-fallback refusals surface clearly as LLM errors.

## Live QA

Manually exercised the PR branch against a live Anthropic API key from
`~/.fabro.bak/.env.bak` using a temporary local harness that was removed
before commit. The run covered non-streaming completion via `fable`,
token counting via `claude-fable`, streaming completion, the deep
model-test path with tools/reasoning, local rejection of manual thinking
config, and a live refusal probe. The live run initially exposed
Anthropic's Fable rejection of `temperature`; this PR now strips
deprecated sampling fields for Fable and the live harness then passed
6/6 checks.

## Testing

- `cargo test -p fabro-llm --test live_fable_manual -- --nocapture
--test-threads=1` -> 6 passed against live Anthropic, temporary harness
removed afterward
- `cargo nextest run -p fabro-llm
encode_fable_uses_api_id_effort_and_omits_1m_beta`
- `cargo nextest run -p fabro-model -p fabro-llm -p fabro-workflow` ->
1808 passed, 41 skipped
- `cargo +nightly-2026-04-14 fmt --check --all`
- `cargo insta pending-snapshots` -> no pending snapshots
- `git diff --check`

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 14:01:56 -04:00

412 lines
12 KiB
JSON

{
"$schema": "https://mintlify.com/docs.json",
"theme": "almond",
"name": "Fabro",
"colors": {
"primary": "#357F9E",
"light": "#67B2D7",
"dark": "#357F9E"
},
"favicon": "/favicon.svg",
"navigation": {
"tabs": [
{
"tab": "Documentation",
"icon": "book",
"groups": [
{
"group": "Getting Started",
"icon": "rocket",
"pages": [
"getting-started/introduction",
"getting-started/why-fabro",
"getting-started/quick-start"
]
},
{
"group": "Core Concepts",
"icon": "lightbulb",
"pages": [
"core-concepts/how-fabro-works",
"getting-started/dark-factory",
"core-concepts/workflows",
"core-concepts/agents",
"core-concepts/models"
]
},
{
"group": "Defining Workflows",
"icon": "diagram-project",
"pages": [
"workflows/stages-and-nodes",
"workflows/transitions",
"workflows/variables",
"workflows/imports",
"workflows/human-in-the-loop",
"workflows/stylesheets"
]
},
{
"group": "Executing Workflows",
"icon": "play",
"pages": [
"execution/run-configuration",
"execution/child-runs",
"execution/environments",
"execution/context",
"execution/checkpoints",
"execution/outcomes",
"execution/failures",
"execution/observability"
]
},
{
"group": "Human Tools",
"icon": "hand",
"pages": [
"human-tools/interviews",
"human-tools/steering",
"human-tools/ssh-access",
"human-tools/vs-code",
"human-tools/preview",
"human-tools/vnc-access",
"human-tools/vpn-connections"
]
},
{
"group": "Agents",
"icon": "robot",
"pages": [
"agents/prompts",
"agents/skills",
"agents/tools",
"agents/mcp",
"agents/hooks",
"agents/subagents",
"agents/permissions",
"agents/outputs"
]
},
{
"group": "Integrations",
"icon": "puzzle-piece",
"pages": [
"integrations/github",
"integrations/daytona",
"integrations/litellm",
"integrations/slack",
"integrations/brave-search"
]
},
{
"group": "Reference",
"icon": "book",
"pages": [
"reference/dot-language",
"reference/cli",
"reference/shell-completions",
"reference/user-configuration",
"reference/run-directory",
"reference/sdk",
"reference/architecture",
"reference/server-operations",
"reference/verifying-releases",
"administration/server-configuration",
"administration/troubleshooting",
"getting-started/comparison",
"administration/security",
"reference/acknowledgements"
]
}
]
},
{
"tab": "Guides",
"icon": "graduation-cap",
"groups": [
{
"group": "Overview",
"icon": "compass",
"pages": []
},
{
"group": "Workflow Tutorials",
"icon": "graduation-cap",
"pages": [
"tutorials/hello-world",
"tutorials/plan-implement",
"tutorials/branch-loop",
"tutorials/parallel-review",
"tutorials/multi-model",
"tutorials/ensemble",
"tutorials/sub-workflow"
]
},
{
"group": "Example Workflows",
"icon": "flask",
"pages": [
"examples/repl-handoff",
"examples/solitaire",
"examples/semantic-port",
"examples/definition-of-done",
"examples/nlspec-conformance",
"examples/clone-substack"
]
},
{
"group": "Deployment",
"icon": "server",
"pages": [
"administration/deployment",
"administration/self-host-docker",
"administration/deploy-railway"
]
}
]
},
{
"tab": "API Reference",
"icon": "code",
"openapi": "api-reference/fabro-api.yaml",
"groups": [
{
"group": "Using the API",
"icon": "code",
"pages": [
"api-reference/overview",
"api-reference/client-sdks"
]
},
{
"group": "Runs",
"icon": "play",
"pages": [
"GET /api/v1/runs",
"POST /api/v1/runs",
"GET /api/v1/runs/{id}",
"PUT /api/v1/runs/{id}/parent",
"DELETE /api/v1/runs/{id}/parent",
"POST /api/v1/runs/{id}/start",
"POST /api/v1/runs/{id}/approve",
"POST /api/v1/runs/{id}/deny",
"POST /api/v1/runs/{id}/cancel",
"POST /api/v1/runs/{id}/pause",
"POST /api/v1/runs/{id}/unpause",
"GET /api/v1/runs/{id}/graph",
"GET /api/v1/runs/{id}/events"
]
},
{
"group": "Human-in-the-Loop",
"icon": "hand",
"pages": [
"GET /api/v1/runs/{id}/questions",
"POST /api/v1/runs/{id}/questions/{qid}/answer",
"POST /api/v1/runs/{id}/preview"
]
},
{
"group": "Run Outputs",
"icon": "file-export",
"pages": [
"GET /api/v1/runs/{id}/artifacts",
"GET /api/v1/runs/{id}/billing",
{
"group": "Run Internals",
"icon": "microchip",
"pages": [
"GET /api/v1/runs/{id}/checkpoint",
"GET /api/v1/runs/{id}/stages",
"GET /api/v1/runs/{id}/stages/{stageId}/events",
"GET /api/v1/runs/{id}/settings"
]
}
]
},
{
"group": "More",
"icon": "ellipsis",
"pages": [
{
"group": "Administration",
"icon": "gear",
"pages": [
"GET /api/v1/settings"
]
},
{
"group": "Models",
"icon": "microchip",
"pages": [
"GET /api/v1/models",
"POST /api/v1/models/{id}/test"
]
}
]
}
]
},
{
"tab": "Changelog",
"icon": "clock-rotate-left",
"groups": [
{
"group": "June 2026",
"icon": "clock-rotate-left",
"pages": [
"changelog/2026-06-10"
]
},
{
"group": "May 2026",
"icon": "clock-rotate-left",
"pages": [
"changelog/2026-05-26",
"changelog/2026-05-25",
"changelog/2026-05-24",
"changelog/2026-05-23",
"changelog/2026-05-22",
"changelog/2026-05-21",
"changelog/2026-05-20",
"changelog/2026-05-18",
"changelog/2026-05-17",
"changelog/2026-05-16",
"changelog/2026-05-14",
"changelog/2026-05-13",
"changelog/2026-05-12",
"changelog/2026-05-11",
"changelog/2026-05-10",
"changelog/2026-05-09",
"changelog/2026-05-08",
"changelog/2026-05-07",
"changelog/2026-05-06",
"changelog/2026-05-05",
"changelog/2026-05-04",
"changelog/2026-05-03",
"changelog/2026-05-02",
"changelog/2026-05-01"
]
},
{
"group": "April 2026",
"icon": "clock-rotate-left",
"pages": [
"changelog/2026-04-30",
"changelog/2026-04-29",
"changelog/2026-04-28",
"changelog/2026-04-27",
"changelog/2026-04-26",
"changelog/2026-04-25",
"changelog/2026-04-24",
"changelog/2026-04-23",
"changelog/2026-04-22",
"changelog/2026-04-21",
"changelog/2026-04-20",
"changelog/2026-04-19",
"changelog/2026-04-18",
"changelog/2026-04-17",
"changelog/2026-04-16",
"changelog/2026-04-15",
"changelog/2026-04-14",
"changelog/2026-04-13",
"changelog/2026-04-12",
"changelog/2026-04-11",
"changelog/2026-04-10",
"changelog/2026-04-09",
"changelog/2026-04-08",
"changelog/2026-04-07",
"changelog/2026-04-06",
"changelog/2026-04-04",
"changelog/2026-04-02",
"changelog/2026-04-01"
]
},
{
"group": "March 2026",
"icon": "clock-rotate-left",
"pages": [
"changelog/2026-03-31",
"changelog/2026-03-30",
"changelog/2026-03-29",
"changelog/2026-03-28",
"changelog/2026-03-27",
"changelog/2026-03-26",
"changelog/2026-03-23",
"changelog/2026-03-22",
"changelog/2026-03-21",
"changelog/2026-03-20",
"changelog/2026-03-19",
"changelog/2026-03-18",
"changelog/2026-03-17",
"changelog/2026-03-16",
"changelog/2026-03-15",
"changelog/2026-03-14",
"changelog/2026-03-13",
"changelog/2026-03-12",
"changelog/2026-03-11",
"changelog/2026-03-10",
"changelog/2026-03-09",
"changelog/2026-03-08",
"changelog/2026-03-07",
"changelog/2026-03-06",
"changelog/2026-03-05",
"changelog/2026-03-04",
"changelog/2026-03-03",
"changelog/2026-03-02",
"changelog/2026-03-01"
]
},
{
"group": "February 2026",
"icon": "clock-rotate-left",
"pages": [
"changelog/2026-02-28",
"changelog/2026-02-27",
"changelog/2026-02-26",
"changelog/2026-02-25",
"changelog/2026-02-24",
"changelog/2026-02-23"
]
}
]
}
]
},
"logo": {
"light": "/logo/light.svg",
"dark": "/logo/dark.svg"
},
"navbar": {
"primary": {
"type": "button",
"label": "Get Started",
"href": "/getting-started/introduction"
}
},
"contextual": {
"options": [
"copy",
"view",
"chatgpt",
"claude",
"perplexity",
"mcp",
"cursor",
"vscode"
]
},
"styling": {
"codeblocks": {
"languages": {
"custom": ["/languages/dot.json", "/languages/fabro.json"]
}
}
},
"footer": {
"socials": {
"x": "https://x.com/fabro_sh",
"github": "https://github.com/fabro-sh"
}
}
}