Skip to content

feat(databricks): update model YAMLs [bot]#1760

Open
models-bot[bot] wants to merge 1 commit into
mainfrom
bot/update-databricks-20260714-021728
Open

feat(databricks): update model YAMLs [bot]#1760
models-bot[bot] wants to merge 1 commit into
mainfrom
bot/update-databricks-20260714-021728

Conversation

@models-bot

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

Copy link
Copy Markdown
Contributor

Auto-generated by poc-agent for provider databricks.


Note

Low Risk
Declarative provider catalog changes only; no runtime code paths, though billing/feature flags may shift how clients are validated or costed.

Overview
Updates six Databricks model YAMLs so routing, billing, and request shaping match current Foundation Model API behavior.

Claude Opus 4-5 and GPT-5 mini now declare prompt-cache pricing (cache_creation_input_token_cost, cache_read_input_token_cost) and expanded features (e.g. prompt_caching, system_messages; GPT-5 mini also gains structured/JSON output and cache_control). Opus 4-5 adds pricing/docs sources.

Several chat/embedding models gain removeParams: reasoning_effort (plus BGE embedding adds it alongside max_tokens) so clients don’t send an unsupported param on Databricks.

Llama 4 Maverick drops context_window / max_input_tokens from limits, leaving output token caps only.

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

@github-actions

Copy link
Copy Markdown
Contributor

/test-models

@harshiv-26

Copy link
Copy Markdown
Collaborator

Gateway test results

  • Total: 33
  • Passed: 28
  • Failed: 4
  • Validation failed: 0
  • Errored: 0
  • Skipped: 1
  • Success rate: 87.5%
Provider Model Scenarios
databricks databricks-bge-large-en success: params
databricks databricks-claude-opus-4-1 success: params, params:stream

failure: tool-call, tool-call:stream
databricks databricks-claude-opus-4-5 success: params, params:stream, tool-call, tool-call:stream

failure: reasoning:stream, reasoning
databricks databricks-gemma-3-12b success: params:stream, tool-call, tool-call:stream, params, json-output

skipped: json-output:stream
databricks databricks-gpt-5-mini success: structured-output, tool-call, params:stream, params, tool-call:stream, structured-output:stream, json-output, json-output:stream, reasoning:stream, reasoning
databricks databricks-llama-4-maverick success: tool-call, params:stream, params, structured-output:stream, structured-output, tool-call:stream
Failures (4)

databricks/databricks-claude-opus-4-5 — reasoning:stream (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmpm3f3e9on/snippet.py", line 5, in <module>
    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.BadRequestError: Error code: 400 - {'status': 'failure', 'message': 'databricks error: {"message":"reasoning_effort: Extra inputs are not permitted"}', 'error': {'message': 'databricks error: {"message":"reasoning_effort: Extra inputs are not permitted"}', 'type': 'APIError', 'code': '400'}, 'error_origin_level': 'api_error', 'provider': 'databricks'}
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-databricks/databricks-claude-opus-4-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")

databricks/databricks-claude-opus-4-5 — reasoning (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmp5wsm7wlc/snippet.py", line 5, in <module>
    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.BadRequestError: Error code: 400 - {'status': 'failure', 'message': 'databricks error: {"message":"reasoning_effort: Extra inputs are not permitted"}', 'error': {'message': 'databricks error: {"message":"reasoning_effort: Extra inputs are not permitted"}', 'type': 'APIError', 'code': '400'}, 'error_origin_level': 'api_error', 'provider': 'databricks'}
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-databricks/databricks-claude-opus-4-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")

databricks/databricks-claude-opus-4-1 — tool-call (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmpbq53deg6/snippet.py", line 27, in <module>
    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.BadRequestError: Error code: 400 - {'status': 'failure', 'message': 'databricks error: {"message":"tools.0.custom.strict: Extra inputs are not permitted"}', 'error': {'message': 'databricks error: {"message":"tools.0.custom.strict: Extra inputs are not permitted"}', 'type': 'APIError', 'code': '400'}, 'error_origin_level': 'api_error', 'provider': 'databricks'}
Code snippet
from 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-databricks/databricks-claude-opus-4-1",
    messages=[
        {"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")

databricks/databricks-claude-opus-4-1 — tool-call:stream (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmpmaj1m9ap/snippet.py", line 27, in <module>
    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.BadRequestError: Error code: 400 - {'status': 'failure', 'message': 'databricks error: {"message":"tools.0.custom.strict: Extra inputs are not permitted"}', 'error': {'message': 'databricks error: {"message":"tools.0.custom.strict: Extra inputs are not permitted"}', 'type': 'APIError', 'code': '400'}, 'error_origin_level': 'api_error', 'provider': 'databricks'}
Code snippet
from 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-databricks/databricks-claude-opus-4-1",
    messages=[
        {"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")
Successes (28)

databricks/databricks-gemma-3-12b — params:stream (success)

Output
The capital of France is **Paris**.



It's also the largest city in France and a major global center for art, fashion, gastronomy, and culture.

databricks/databricks-gemma-3-12b — tool-call (success)

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

databricks/databricks-gemma-3-12b — tool-call:stream (success)

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

databricks/databricks-gemma-3-12b — params (success)

Output
The capital of France is **Paris**.



It's also the largest city in France and a global center for art, fashion, gastronomy, and culture.

databricks/databricks-gemma-3-12b — json-output (success)

Output
{"colors": [
    {"name": "Crimson", "hex": "#DC143C"},
    {"name": "Forest Green", "hex": "#228B22"},
    {"name": "Sky Blue", "hex": "#87CEEB"}
  ]
... (truncated, 34 chars omitted)

databricks/databricks-bge-large-en — params (success)

Output
[[-0.01227569580078125, -0.005374908447265625, 0.00406646728515625, -0.0228271484375, 0.01137542724609375, -0.02593994140625, 0.0157012939453125, -0.0
... (truncated, 20238 chars omitted)

databricks/databricks-gpt-5-mini — structured-output (success)

Output
{"name":"Science fair visit","date":"Friday","participants":["Alice","Bob"]}
VALIDATION: structured-output SUCCESS

databricks/databricks-gpt-5-mini — tool-call (success)

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

databricks/databricks-gpt-5-mini — params:stream (success)

Output
The capital of France is Paris.

databricks/databricks-gpt-5-mini — params (success)

Output
The capital of France is Paris.

databricks/databricks-gpt-5-mini — tool-call:stream (success)

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

databricks/databricks-gpt-5-mini — structured-output:stream (success)

Output
{"name":"Science fair","date":"Friday","participants":["Alice","Bob"]}
VALIDATION: structured-output stream SUCCESS

databricks/databricks-gpt-5-mini — json-output (success)

Output
{
  "colors": [
    { "name": "Crimson", "hex": "#DC143C" },
    { "name": "Teal", "hex": "#008080" },
    { "name": "Gold", "hex": "#FFD700" }
  ]
}

... (truncated, 32 chars omitted)

databricks/databricks-gpt-5-mini — json-output:stream (success)

Output
{
  "colors": [
    { "name": "Crimson", "hex": "#DC143C" },
    { "name": "SeaGreen", "hex": "#2E8B57" },
    { "name": "GoldenRod", "hex": "#DAA520"
... (truncated, 48 chars omitted)

databricks/databricks-gpt-5-mini — reasoning:stream (success)

Output
Short answer
3^3^3^3 = 3^(3^(3^3)) = 3^(3^27) = 3^7,625,597,484,987.

Step-by-step (concise, final steps only)
- Exponentiation is right-associative, 
... (truncated, 629 chars omitted)

databricks/databricks-gpt-5-mini — reasoning (success)

Output
First note exponentiation is right-associative, so
3^3^3^3 = 3^(3^(3^3)).

Step 1: evaluate the top exponent
3^3 = 27.

Step 2: evaluate the next expo
... (truncated, 694 chars omitted)

databricks/databricks-claude-opus-4-5 — params (success)

Output
The capital of France is Paris.

databricks/databricks-claude-opus-4-5 — params:stream (success)

Output
The capital of France is Paris.

databricks/databricks-claude-opus-4-5 — tool-call (success)

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

databricks/databricks-claude-opus-4-5 — tool-call:stream (success)

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

databricks/databricks-llama-4-maverick — tool-call (success)

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

databricks/databricks-llama-4-maverick — params:stream (success)

Output
The capital of France is Paris.

databricks/databricks-llama-4-maverick — params (success)

Output
The capital of France is Paris.

databricks/databricks-llama-4-maverick — structured-output:stream (success)

Output
{"name": "Science Fair", "date": "Friday", "participants": ["Alice", "Bob"]}
VALIDATION: structured-output stream SUCCESS

databricks/databricks-llama-4-maverick — structured-output (success)

Output
{"name": "Science Fair", "date": "Friday", "participants": ["Alice", "Bob"]}
VALIDATION: structured-output SUCCESS

databricks/databricks-llama-4-maverick — tool-call:stream (success)

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

databricks/databricks-claude-opus-4-1 — params (success)

Output
The capital of France is Paris.

databricks/databricks-claude-opus-4-1 — params:stream (success)

Output
The capital of France is Paris.
Skipped (1)

databricks/databricks-gemma-3-12b — json-output:stream (skipped)

Skip reason
Streaming is not supported with json-output

@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 3 potential issues.

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 9158dd0. Configure here.

- structured_output
limits:
context_window: 128000
max_input_tokens: 128000

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Missing model context limits

High Severity

context_window and max_input_tokens were removed from limits, leaving only output caps. Those values previously documented a 128000-token context that external Databricks listings still report, so consumers of this registry lose the input/context bounds for databricks-llama-4-maverick.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 9158dd0. Configure here.

- json_output
- prompt_caching
- system_messages
- cache_control

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 cache control feature

Medium Severity

cache_control was added to features for databricks-gpt-5-mini. In this schema that flag means fine-grained cache breakpoints on content blocks, which is an Anthropic-style capability. Sibling Databricks GPT models only declare prompt_caching, so this mislabels the model and can steer clients toward unsupported request fields.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 9158dd0. Configure here.

- tool_choice
- assistant_prefill
- prompt_caching
- system_messages

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Incomplete Claude caching features

Medium Severity

prompt_caching was added without cache_control. Every other Databricks Claude model that declares prompt_caching also declares cache_control, which this schema defines as fine-grained cache breakpoints. Claude-style prompt caching generally depends on those breakpoints, so the new feature set is incomplete and inconsistent with sibling configs.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 9158dd0. Configure here.

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