Skip to content

feat(deepinfra/anthropic/claude-fable-5): add new models [bot]#1707

Open
models-bot[bot] wants to merge 2 commits into
mainfrom
bot/add-deepinfra-anthropic-claude-fable-5-20260708-000541
Open

feat(deepinfra/anthropic/claude-fable-5): add new models [bot]#1707
models-bot[bot] wants to merge 2 commits into
mainfrom
bot/add-deepinfra-anthropic-claude-fable-5-20260708-000541

Conversation

@models-bot

@models-bot models-bot Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Auto-generated by model-addition-agent for deepinfra/anthropic/claude-fable-5.


Note

Low Risk
Metadata-only model registration with no application or routing code changes.

Overview
Adds a new DeepInfra provider catalog file for anthropic/claude-fable-5, exposing the model for chat routing with DeepInfra pricing ($0.00001 / $0.00005 per input/output token), function calling, JSON output, and thinking enabled.

The entry marks the model active, supports text and image input, and documents a 1M context window and token limit per the DeepInfra source URL.

Reviewed by Cursor Bugbot for commit f1250fb. Bugbot is set up for automated code reviews on this repo. Configure here.

Comment thread providers/deepinfra/anthropic/claude-fable-5.yaml Outdated
Comment thread providers/deepinfra/anthropic/claude-fable-5.yaml
@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

/test-models

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit f1250fb. Configure here.

- json_output
limits:
context_window: 1000000
max_tokens: 1000000

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wrong max_tokens output limit

Medium Severity

limits.max_tokens is set to 1000000, matching the context window instead of the model’s maximum generation size. Claude Fable 5 supports up to 128K output tokens; other DeepInfra Anthropic entries (e.g. claude-4-sonnet) set max_tokens and max_output_tokens to that output cap, not the full context.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit f1250fb. Configure here.

@harshiv-26

Copy link
Copy Markdown
Collaborator

Gateway test results

  • Total: 8
  • Passed: 4
  • Failed: 3
  • Validation failed: 1
  • Errored: 0
  • Skipped: 0
  • Success rate: 50.0%
Provider Model Scenarios
deepinfra anthropic/claude-fable-5 success: tool-call:stream, params:stream, params, tool-call

failure: json-output, json-output:stream, reasoning

validation_failure: reasoning:stream
Failures (4)

deepinfra/anthropic/claude-fable-5 — reasoning:stream (validation_failure)

Error
Traceback (most recent call last):
  File "/tmp/tmp48kna5dj/snippet.py", line 31, in <module>
    raise Exception("VALIDATION FAILED: reasoning stream - no reasoning information in stream")
Exception: VALIDATION FAILED: reasoning stream - no reasoning information in stream
Code snippet
from openai import OpenAI

client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")

response = client.chat.completions.create(
    model="test-v2-deepinfra/anthropic-claude-fable-5",
    messages=[
        {"role": "user", "content": "How to calculate 3^3^3^3? Think step by step and show all reasoning."},
    ],
    reasoning_effort="medium",
    stream=True,
)
_reasoning_detected = False
for chunk in response:
    if chunk.choices and len(chunk.choices) > 0:
        delta = chunk.choices[0].delta
        if delta.content is not None:
            print(delta.content, end="", flush=True)
        if getattr(delta, "reasoning_content", None) is not None:
            _reasoning_detected = True
        if getattr(delta, "reasoning", None) is not None:
            _reasoning_detected = True

    _usage = getattr(chunk, "usage", None)
    if _usage is not None:
        _details = getattr(_usage, "completion_tokens_details", None)
        if _details and getattr(_details, "reasoning_tokens", 0) > 0:
            _reasoning_detected = True

if not _reasoning_detected:
    raise Exception("VALIDATION FAILED: reasoning stream - no reasoning information in stream")
print("\nVALIDATION: reasoning stream SUCCESS")

deepinfra/anthropic/claude-fable-5 — json-output (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmp4sgf9xjr/snippet.py", line 21, in <module>
    _json.loads(_content)
  File "/usr/local/lib/python3.11/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Code snippet
from openai import OpenAI

client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")

response = client.chat.completions.create(
    model="test-v2-deepinfra/anthropic-claude-fable-5",
    messages=[
        {"role": "user", "content": "List 3 colors with their hex codes in JSON."},
    ],
    response_format={"type": "json_object"},
    stream=False,
)
import json as _json

_content = response.choices[0].message.content
print(_content)

if not _content:
    raise Exception("VALIDATION FAILED: json-output - response content is empty")

_json.loads(_content)
print("VALIDATION: json-output SUCCESS")
Output
```json
{
  "colors": [
    {
      "name": "Red",
      "hex": "#FF0000"
    },
    {
      "name": "Green",
      "hex": "#00FF00"
    },
    {
      "name": "Blue",
      "hex": "#0000FF"
    }
  ]
}

</details>

**`deepinfra/anthropic/claude-fable-5` — json-output:stream (failure)**

<details><summary>Error</summary>

Traceback (most recent call last):
File "/tmp/tmpkzp4m6ve/snippet.py", line 26, in
_json.loads(_accumulated)
File "/usr/local/lib/python3.11/json/init.py", line 346, in loads
return _default_decoder.decode(s)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)


</details>

<details><summary>Code snippet</summary>

```python
from openai import OpenAI

client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")

response = client.chat.completions.create(
    model="test-v2-deepinfra/anthropic-claude-fable-5",
    messages=[
        {"role": "user", "content": "List 3 colors with their hex codes in JSON."},
    ],
    response_format={"type": "json_object"},
    stream=True,
)
import json as _json

_accumulated = ""
for chunk in response:
    if chunk.choices and len(chunk.choices) > 0:
        delta = chunk.choices[0].delta
        if delta.content is not None:
            _accumulated += delta.content
            print(delta.content, end="", flush=True)

if not _accumulated:
    raise Exception("VALIDATION FAILED: json-output stream - no content received")

_json.loads(_accumulated)
print("\nVALIDATION: json-output stream SUCCESS")
Output
<think></think>```json
[
  {
    "name": "Red",
    "hex": "#FF0000"
  },
  {
    "name": "Green",
    "hex": "#00FF00"
  },
  {
    "name": "Blue",
    "hex": "#0000FF"
  }
]

</details>

**`deepinfra/anthropic/claude-fable-5` — reasoning (failure)**

<details><summary>Error</summary>

Traceback (most recent call last):
File "/tmp/tmpwjcb8h3v/snippet.py", line 5, in
response = client.chat.completions.create(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 286, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 1147, in create
return self._post(
^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1259, in post
return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1047, in request
raise self._make_status_error_from_response(err.response) from None
openai.InternalServerError: Error code: 500 - {'status': 'failure', 'message': 'Invalid response received from deepinfra: {"error":{"message":"{\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"\\\"thinking.type.enabled\\\" is not supported for this model. Use \\\"thinking.type.adaptive\\\" and \\\"output_config.effort\\\" to control thinking behavior.\"},\"request_id\":\"req_vrtx_011CcoddyPd2AdHHARniWX24\"}","type":"api_error","param":null,"code":null}}', 'error': {'message': 'Invalid response received from deepinfra: {"error":{"message":"{\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"\\\"thinking.type.enabled\\\" is not supported for this model. Use \\\"thinking.type.adaptive\\\" and \\\"output_config.effort\\\" to control thinking behavior.\"},\"request_id\":\"req_vrtx_011CcoddyPd2AdHHARniWX24\"}","type":"api_error","param":null,"code":null}}', 'type': 'APIError', 'code': '500'}, 'error_origin_level': 'api_error', 'provider': 'deepinfra'}


</details>

<details><summary>Code snippet</summary>

```python
from openai import OpenAI

client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")

response = client.chat.completions.create(
    model="test-v2-deepinfra/anthropic-claude-fable-5",
    messages=[
        {"role": "user", "content": "How to calculate 3^3^3^3? Think step by step and show all reasoning."},
    ],
    reasoning_effort="medium",
    stream=False,
)
_usage = getattr(response, "usage", None)
_reasoning_detected = False

_choices = getattr(response, "choices", None)
if _choices and len(_choices) > 0:
    _message = getattr(_choices[0], "message", None)
else:
    _message = None

if _message and getattr(_message, "content", None) is not None:
    print(_message.content)

if _usage is not None:
    _output_token_details = getattr(_usage, "completion_tokens_details", None)
    if _output_token_details and getattr(_output_token_details, "reasoning_tokens", 0) > 0:
        _reasoning_detected = True
    elif getattr(_usage, "reasoning", None) is not None:
        _reasoning_detected = True

if getattr(_message, "reasoning_content", None) is not None:
    _reasoning_detected = True
elif getattr(_message, "reasoning", None) is not None:
    _reasoning_detected = True

if not _reasoning_detected:
    print("Response: ", response)
    raise Exception("VALIDATION FAILED: reasoning - no reasoning information in response")
print("VALIDATION: reasoning SUCCESS")
Successes (4)

deepinfra/anthropic/claude-fable-5 — tool-call:stream (success)

Output
{"location": "London"}
VALIDATION: tool-call stream SUCCESS

deepinfra/anthropic/claude-fable-5 — params:stream (success)

Output
<think></think>The capital of France is **Paris**. It's the country's largest city and serves as its political, economic, and cultural center. Paris i
... (truncated, 92 chars omitted)

deepinfra/anthropic/claude-fable-5 — params (success)

Output
The capital of France is **Paris**. It's the country's largest city and serves as its political, economic, and cultural center. Paris is known for ico
... (truncated, 85 chars omitted)

deepinfra/anthropic/claude-fable-5 — tool-call (success)

Output
Function: get_weather
Arguments: {"location": "London"}
VALIDATION: tool-call SUCCESS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant