Skip to content

provider-anthropic: claude-fable-* models reject temperature ("deprecated for this model") — unknown family defaults to sonnet caps #303

Description

@Joi

Symptom

Every call to claude-fable-5 (and presumably other fable-family models) fails with:

[PROVIDER] Anthropic API error: {"type": "error", "error": {"type": "invalid_request_error", "message": "`temperature` is deprecated for this model."}}
Provider call failed: {"type": "error", "error": {"type": "invalid_request_error", "message": "`temperature` is deprecated for this model."}, "request_id": "req_011CbvNzoQFWckf67ha3W4WE"}

Root Cause

In amplifier_module_provider_anthropic/__init__.py (commit 7fe8cd6):

  1. Family detection is incomplete. The _detect_family() method at line 866 only recognizes opus, sonnet, and haiku. Unknown model families default to sonnet — line 872: return "sonnet".

  2. Fable falls through to sonnet capabilities. Since claude-fable-* doesn't match any recognized family, it gets treated as sonnet, which has supports_sampling=True.

  3. Sonnet's sampling setting sends temperature to fable. The provider includes temperature=0.7 (the default) in parameters sent to the API for any model with supports_sampling=True.

  4. Fable hard-rejects temperature. Unlike Opus 4.7+ (which silently ignored the parameter), fable models throw invalid_request_error: 'temperature' is deprecated for this model."

Result: Every inference call on fable models fails immediately.

Suggested Fix

Recognize the fable model family with supports_sampling=False. The tested patch is:

diff --git a/amplifier_module_provider_anthropic/__init__.py b/amplifier_module_provider_anthropic/__init__.py
index 4ae41a9..b103e10 100644
--- a/amplifier_module_provider_anthropic/__init__.py
+++ b/amplifier_module_provider_anthropic/__init__.py
@@ -866,7 +866,7 @@ class AnthropicProvider:
     def _detect_family(model_id: str) -> str:
         """Detect the Claude model family from a model ID string."""
         model_lower = model_id.lower()
-        for family in ("opus", "sonnet", "haiku"):
+        for family in ("opus", "sonnet", "haiku", "fable"):
             if family in model_lower:
                 return family
         return "sonnet"  # Default to sonnet for unknown models
@@ -948,6 +948,28 @@ class AnthropicProvider:
                 ),
             )
 
+        if family == "fable":
+            # Fable models hard-reject `temperature` with
+            # "`temperature` is deprecated for this model" (invalid_request_error),
+            # unlike Opus 4.7+ which silently ignored it. Mirror the previous
+            # default (latest-sonnet) capabilities but disable sampling so the
+            # parameter is never sent.
+            return ModelCapabilities(
+                family="fable",
+                supports_1m=True,
+                supports_thinking=True,
+                supports_adaptive_thinking=True,
+                supports_sampling=False,
+                default_thinking_budget=32000,
+                capability_tags=(
+                    "tools",
+                    "thinking",
+                    "streaming",
+                    "json_mode",
+                    "vision",
+                ),
+            )
+
         if family == "sonnet":
             is_46_plus = not version_known or (major, minor) >= (4, 6)
             is_45_plus = is_46_plus or (major, minor) >= (4, 5)

Testing

Module test suite passes with this patch:

  • 463 tests pass
  • 4 pre-existing failures (unrelated to this change; confirmed they fail on unpatched HEAD as well — cost serialization and streaming tool-repair issues, not sampling)
  • End-to-end verified: Fresh amplifier run session on claude-fable-5 completes cleanly with no temperature errors.

Deployment Status

Currently running this patch locally via a sources: override in ~/.amplifier/settings.yaml:

sources:
  provider-anthropic: file:///Users/joi/repos/amplifier-module-provider-anthropic

Machines are patched via a branch at /Users/joi/repos/amplifier-module-provider-anthropic on branch fable-supports-sampling (commit 11399e7). We're happy to open a PR if maintainers grant a contribution path, or maintainers can apply this patch directly if preferred. The fix is minimal, defensive (only affects fable models), and has full test coverage.

Related issue: jilog#sbwz

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions