[Community] Update model: anthropic/claude-fable-5#1689
Conversation
|
/test-models |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 0bbbd57. Configure here.
| - max_tokens | ||
| sources: | ||
| - https://platform.claude.com/docs/en/about-claude/models/introducing-claude-fable-5-and-claude-mythos-5 | ||
| - test |
There was a problem hiding this comment.
Placeholder documentation source committed
Medium Severity
The sources list now contains the literal string test instead of a documentation or pricing URL. That replaces the prior Claude platform link, so published catalog metadata no longer points consumers at authoritative model documentation.
Reviewed by Cursor Bugbot for commit 0bbbd57. Configure here.
| @@ -1,6 +1,5 @@ | |||
| costs: | |||
| - cache_creation_input_token_cost: 0.0000125 | |||
| cache_creation_input_token_cost_per_hour: 0.00002 | |||
There was a problem hiding this comment.
Missing hourly cache creation cost
Medium Severity
cache_creation_input_token_cost_per_hour was removed from costs while prompt_caching remains enabled. Anthropic Fable pricing still includes 1-hour cache write rates, so unified pricing output can omit that component and understate cache-related cost.
Reviewed by Cursor Bugbot for commit 0bbbd57. Configure here.
Gateway test results
Failures (16)
ErrorCode snippetfrom openai import OpenAI
client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather for a location.",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. London",
},
},
"required": ["location"],
"additionalProperties": False,
},
"strict": True,
},
},
]
response = client.chat.completions.create(
model="test-v2-anthropic/claude-fable-5",
messages=[
{"role": "system", "content": "You are a helpful assistant with access to tools. You MUST strictly call multiple tools in parallel whenever possible. Never call them sequentially."},
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "Use the get_weather tool to check the weather in London and Paris. You MUST make both tool calls strictly in parallel, not sequentially."},
],
tools=tools,
tool_choice="auto",
parallel_tool_calls=True,
stream=False,
)
_message = response.choices[0].message
if _message.tool_calls:
print(f"Number of parallel tool calls: {len(_message.tool_calls)}")
for _tc in _message.tool_calls:
print(f"Function: {_tc.function.name}")
print(f"Arguments: {_tc.function.arguments}")
else:
print(_message.content)
if not _message.tool_calls or len(_message.tool_calls) < 1:
raise Exception(
f"VALIDATION FAILED: parallel-tool-call - expected at least 1 tool call, "
f"got {len(_message.tool_calls) if _message.tool_calls else 0}"
)
print("VALIDATION: parallel-tool-call SUCCESS")
ErrorCode snippetimport anthropic
_api_key = "***"
_model = "test-v2-anthropic/claude-fable-5"
client = anthropic.Anthropic(
api_key=_api_key,
base_url="https://internal.devtest.truefoundry.tech/api/llm",
)
tools = [
{
"name": "get_weather",
"description": "Get the current weather for a location.",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. London",
},
},
"required": ["location"],
},
},
]
messages = [
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "Use the get_weather tool to check the weather in London. You must call the tool, do not respond with plain text."},
]
response = client.messages.create(
model=_model,
system="You are a helpful assistant with access to tools. You MUST strictly use the provided tools to answer. Never respond with plain text when a tool is available.",
messages=messages,
tools=tools,
tool_choice={"type": "auto"},
max_tokens=1024,
)
for block in response.content:
if block.type == "tool_use":
print(f"Tool: {block.name}")
print(f"Input: {block.input}")
elif block.type == "text":
print(block.text)
_tool_uses = [block for block in response.content if block.type == "tool_use"]
if not _tool_uses:
raise Exception("VALIDATION FAILED: tool-call - no tool uses in Anthropic response")
print("VALIDATION: tool-call SUCCESS")
ErrorCode snippetimport anthropic
_api_key = "***"
_model = "test-v2-anthropic/claude-fable-5"
client = anthropic.Anthropic(
api_key=_api_key,
base_url="https://internal.devtest.truefoundry.tech/api/llm",
)
tools = [
{
"name": "get_weather",
"description": "Get the current weather for a location.",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. London",
},
},
"required": ["location"],
},
},
]
messages = [
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "Use the get_weather tool to check the weather in London and Paris. You MUST make both tool calls strictly in parallel, not sequentially."},
]
response = client.messages.create(
model=_model,
system="You are a helpful assistant with access to tools. You MUST strictly call multiple tools in parallel whenever possible. Never call them sequentially.",
messages=messages,
tools=tools,
tool_choice={"type": "auto"},
max_tokens=1024,
)
for block in response.content:
if block.type == "tool_use":
print(f"Tool: {block.name}")
print(f"Input: {block.input}")
elif block.type == "text":
print(block.text)
_tool_uses = [block for block in response.content if block.type == "tool_use"]
if _tool_uses:
print(f"Number of parallel tool calls: {len(_tool_uses)}")
if not _tool_uses or len(_tool_uses) < 1:
raise Exception(
f"VALIDATION FAILED: parallel-tool-call - expected at least 1 tool call, "
f"got {len(_tool_uses) if _tool_uses else 0}"
)
print("VALIDATION: parallel-tool-call SUCCESS")
ErrorCode snippetfrom openai import OpenAI
client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")
response = client.chat.completions.create(
model="test-v2-anthropic/claude-fable-5",
messages=[
{"role": "system", "content": "You are a helpful assistant. You MUST think step by step and show your reasoning. Never skip reasoning steps."},
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"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")
ErrorCode snippetfrom openai import OpenAI
client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather for a location.",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. London",
},
},
"required": ["location"],
"additionalProperties": False,
},
"strict": True,
},
},
]
response = client.chat.completions.create(
model="test-v2-anthropic/claude-fable-5",
messages=[
{"role": "system", "content": "You are a helpful assistant with access to tools. You MUST strictly use the provided tools to answer. Never respond with plain text when a tool is available."},
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "Use the get_weather tool to check the weather in London. You must call the tool, do not respond with plain text."},
],
tools=tools,
tool_choice="auto",
stream=True,
)
_tool_calls_made = 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 delta.tool_calls:
_tool_calls_made = True
for _tc in delta.tool_calls:
if _tc.function:
print(_tc.function.arguments or "", end="", flush=True)
if not _tool_calls_made:
raise Exception("VALIDATION FAILED: tool-call stream - no tool calls received")
print("\nVALIDATION: tool-call stream SUCCESS")
ErrorCode snippetimport anthropic
_api_key = "***"
_model = "test-v2-anthropic/claude-fable-5"
client = anthropic.Anthropic(
api_key=_api_key,
base_url="https://internal.devtest.truefoundry.tech/api/llm",
)
messages = [
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "How to calculate 3^3^3^3? Think step by step and show all reasoning."},
]
response = client.messages.create(
model=_model,
system="You are a helpful assistant. You MUST think step by step and show your reasoning. Never skip reasoning steps.",
messages=messages,
max_tokens=16000,
thinking={"type":"adaptive"},
)
for block in response.content:
if block.type == "thinking":
print(f"Thinking: {block.thinking[:200]}...")
elif block.type == "text":
print(block.text)
_reasoning_detected = False
for block in response.content:
if block.type == "thinking":
_reasoning_detected = True
if hasattr(response, "usage") and response.usage:
if getattr(response.usage, "cache_creation_input_tokens", 0) or getattr(response.usage, "cache_read_input_tokens", 0):
pass
if not _reasoning_detected:
print("Response content types: ", [block.type for block in response.content])
raise Exception("VALIDATION FAILED: reasoning - no thinking blocks in Anthropic response")
print("VALIDATION: reasoning SUCCESS")
ErrorCode snippetfrom openai import OpenAI
client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")
response = client.chat.completions.create(
model="test-v2-anthropic/claude-fable-5",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "What is the capital of France?"},
],
max_tokens=1000,
stream=False,
)
print(response.choices[0].message.content)
ErrorCode snippetfrom openai import OpenAI
client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather for a location.",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. London",
},
},
"required": ["location"],
"additionalProperties": False,
},
"strict": True,
},
},
]
response = client.chat.completions.create(
model="test-v2-anthropic/claude-fable-5",
messages=[
{"role": "system", "content": "You are a helpful assistant with access to tools. You MUST strictly use the provided tools to answer. Never respond with plain text when a tool is available."},
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "Use the get_weather tool to check the weather in London. You must call the tool, do not respond with plain text."},
],
tools=tools,
tool_choice="auto",
stream=False,
)
_message = response.choices[0].message
if _message.tool_calls:
for _tc in _message.tool_calls:
print(f"Function: {_tc.function.name}")
print(f"Arguments: {_tc.function.arguments}")
else:
print(_message.content)
if not _message.tool_calls or len(_message.tool_calls) == 0:
raise Exception("VALIDATION FAILED: tool-call - no tool calls in response")
print("VALIDATION: tool-call SUCCESS")
ErrorCode snippetfrom openai import OpenAI
client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")
response = client.chat.completions.create(
model="test-v2-anthropic/claude-fable-5",
messages=[
{"role": "system", "content": "You are a helpful assistant. You MUST think step by step and show your reasoning. Never skip reasoning steps."},
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"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")
ErrorCode snippetimport anthropic
_api_key = "***"
_model = "test-v2-anthropic/claude-fable-5"
client = anthropic.Anthropic(
api_key=_api_key,
base_url="https://internal.devtest.truefoundry.tech/api/llm",
)
messages = [
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "What is the capital of France?"},
]
response = client.messages.create(
model=_model,
system="You are a helpful assistant.",
messages=messages,
max_tokens=1000,
)
for block in response.content:
if block.type == "text":
print(block.text)
ErrorCode snippetimport anthropic
_api_key = "***"
_model = "test-v2-anthropic/claude-fable-5"
client = anthropic.Anthropic(
api_key=_api_key,
base_url="https://internal.devtest.truefoundry.tech/api/llm",
)
tools = [
{
"name": "get_weather",
"description": "Get the current weather for a location.",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. London",
},
},
"required": ["location"],
},
},
]
messages = [
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "Use the get_weather tool to check the weather in London and Paris. You MUST make both tool calls strictly in parallel, not sequentially."},
]
with client.messages.stream(
model=_model,
system="You are a helpful assistant with access to tools. You MUST strictly call multiple tools in parallel whenever possible. Never call them sequentially.",
messages=messages,
tools=tools,
tool_choice={"type": "auto"},
max_tokens=1024,
) as stream:
response = stream.get_final_message()
for block in response.content:
if block.type == "tool_use":
print(f"Tool: {block.name}")
print(f"Input: {block.input}")
elif block.type == "text":
print(block.text)
_tool_uses = [block for block in response.content if block.type == "tool_use"]
if _tool_uses:
print(f"Number of parallel tool calls: {len(_tool_uses)}")
if not _tool_uses or len(_tool_uses) < 1:
raise Exception(
f"VALIDATION FAILED: parallel-tool-call stream - expected at least 1 tool call, "
f"got {len(_tool_uses) if _tool_uses else 0}"
)
print(f"\nVALIDATION: parallel-tool-call stream SUCCESS")
ErrorCode snippetfrom openai import OpenAI
client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather for a location.",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. London",
},
},
"required": ["location"],
"additionalProperties": False,
},
"strict": True,
},
},
]
response = client.chat.completions.create(
model="test-v2-anthropic/claude-fable-5",
messages=[
{"role": "system", "content": "You are a helpful assistant with access to tools. You MUST strictly call multiple tools in parallel whenever possible. Never call them sequentially."},
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "Use the get_weather tool to check the weather in London and Paris. You MUST make both tool calls strictly in parallel, not sequentially."},
],
tools=tools,
tool_choice="auto",
parallel_tool_calls=True,
stream=True,
)
_tool_call_indices = set()
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 delta.tool_calls:
for _tc in delta.tool_calls:
_tool_call_indices.add(_tc.index)
if _tc.function:
print(_tc.function.arguments or "", end="", flush=True)
if len(_tool_call_indices) < 1:
raise Exception(
f"VALIDATION FAILED: parallel-tool-call stream - expected at least 1 tool call, "
f"got {len(_tool_call_indices)}"
)
print(f"\nNumber of parallel tool calls: {len(_tool_call_indices)}")
print("VALIDATION: parallel-tool-call stream SUCCESS")
ErrorCode snippetfrom openai import OpenAI
client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")
response = client.chat.completions.create(
model="test-v2-anthropic/claude-fable-5",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "What is the capital of France?"},
],
max_tokens=1000,
stream=True,
)
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)
ErrorCode snippetimport anthropic
_api_key = "***"
_model = "test-v2-anthropic/claude-fable-5"
client = anthropic.Anthropic(
api_key=_api_key,
base_url="https://internal.devtest.truefoundry.tech/api/llm",
)
tools = [
{
"name": "get_weather",
"description": "Get the current weather for a location.",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. London",
},
},
"required": ["location"],
},
},
]
messages = [
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "Use the get_weather tool to check the weather in London. You must call the tool, do not respond with plain text."},
]
with client.messages.stream(
model=_model,
system="You are a helpful assistant with access to tools. You MUST strictly use the provided tools to answer. Never respond with plain text when a tool is available.",
messages=messages,
tools=tools,
tool_choice={"type": "auto"},
max_tokens=1024,
) as stream:
response = stream.get_final_message()
for block in response.content:
if block.type == "tool_use":
print(f"Tool: {block.name}")
print(f"Input: {block.input}")
elif block.type == "text":
print(block.text)
_tool_uses = [block for block in response.content if block.type == "tool_use"]
if not _tool_uses:
raise Exception("VALIDATION FAILED: tool-call stream - no tool uses in Anthropic stream response")
print("\nVALIDATION: tool-call stream SUCCESS")
ErrorCode snippetimport anthropic
_api_key = "***"
_model = "test-v2-anthropic/claude-fable-5"
client = anthropic.Anthropic(
api_key=_api_key,
base_url="https://internal.devtest.truefoundry.tech/api/llm",
)
messages = [
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "What is the capital of France?"},
]
with client.messages.stream(
model=_model,
system="You are a helpful assistant.",
messages=messages,
max_tokens=1000,
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
ErrorCode snippetimport anthropic
_api_key = "***"
_model = "test-v2-anthropic/claude-fable-5"
client = anthropic.Anthropic(
api_key=_api_key,
base_url="https://internal.devtest.truefoundry.tech/api/llm",
)
messages = [
{"role": "user", "content": "Hi"},
{"role": "assistant", "content": "Hi, how can I help you"},
{"role": "user", "content": "How to calculate 3^3^3^3? Think step by step and show all reasoning."},
]
with client.messages.stream(
model=_model,
system="You are a helpful assistant. You MUST think step by step and show your reasoning. Never skip reasoning steps.",
messages=messages,
max_tokens=16000,
thinking={"type":"adaptive"},
) as stream:
response = stream.get_final_message()
for block in response.content:
if block.type == "thinking":
print(f"Thinking: {block.thinking[:200]}...")
elif block.type == "text":
print(block.text)
_reasoning_detected = False
for block in response.content:
if block.type == "thinking":
_reasoning_detected = True
if not _reasoning_detected:
print("Response content types: ", [block.type for block in response.content])
raise Exception("VALIDATION FAILED: reasoning stream - no thinking blocks in Anthropic stream response")
print("\nVALIDATION: reasoning stream SUCCESS") |


This PR updates the model
anthropic/claude-fable-5in the catalog.Submitted via the TrueFoundry Model Catalog UI.
Note
Low Risk
Single-file catalog metadata only; the missing hourly cache cost field and placeholder source may affect pricing display and provenance but not runtime inference.
Overview
Community catalog edit for
anthropic/claude-fable-5trims a few YAML fields and changes documentation references.Costs: Removes
cache_creation_input_token_cost_per_hour, leaving the other cache and per-token batch rates unchanged.Limits: Drops
limits.max_tokenswhilemax_output_tokens(128000) and themax_tokensrequest param (default/min/max inparams) stay as before.Sources: Replaces the Anthropic model docs URL with the placeholder entry
test, which looks like an accidental UI value rather than an intentional citation update.Reviewed by Cursor Bugbot for commit 0bbbd57. Bugbot is set up for automated code reviews on this repo. Configure here.