mirror of
https://github.com/block/buzz.git
synced 2026-10-31 06:21:34 +00:00
## Summary Route Databricks Unity Catalog model services to OpenAI Responses when their service name matches GPT-5 or newer. These models can reject tools plus reasoning on Chat Completions. Match only the service component, using the existing family-token boundaries and a numeric major version. Catalog and schema names cannot select the protocol. Keep neutral effort capabilities and the full model ID unchanged; other services still use MLflow Chat Completions. Keep the Rust and desktop resolvers in sync, add shared boundary cases and a captured-HTTP regression for completion and summarization, and update the documented FQN rule. ### Related issue No duplicate found in searches for “FQN responses” PRs or “astra” issues. Related: #6918 introduced Unity Catalog discovery. Originating conversation: buzz://message?channel=0b881928-a3a6-4c01-b981-8e64268f01ce&id=770949343bc96a9ed88acd90a1b37d358a0efc52c79237d0fdb491ce02b8d4ed ### Testing No live Databricks inference test. The gateway must accept the full model-service ID on its OpenAI Responses route; this remains the integration risk. The local `just ci` attempt exceeded its five-minute deadline during `mobile-check`, so the full repository gate was not completed. All push-hook checks passed. Generated with Codex Signed-off-by: Fizz <400e8babadcee6a7f420103f10a2849d84c4a9c71d5bd04f3948c814216648a3@buzz.block.builderlab.xyz> Co-authored-by: Fizz <400e8babadcee6a7f420103f10a2849d84c4a9c71d5bd04f3948c814216648a3@buzz.block.builderlab.xyz>
64 lines
2.2 KiB
Rust
64 lines
2.2 KiB
Rust
//! UC route selection must change only the route, never effort or model identity.
|
||
use buzz_agent::model_capabilities::{resolve, DatabricksV2Route};
|
||
|
||
#[test]
|
||
fn gpt_fqn_route_preserves_neutral_capabilities() {
|
||
let fallback = resolve("databricks_v2", "catalog.schema.unknown");
|
||
for model in [
|
||
"catalog.schema.goose-gpt-6-astra",
|
||
"catalog.schema.gpt-5",
|
||
"catalog.schema.goose-gpt-5-5",
|
||
"catalog.schema.gpt-10",
|
||
"catalog.schema.GOOSE-GPT-6-ASTRA",
|
||
"catalog.schema.team-gpt-6-astra",
|
||
] {
|
||
let got = resolve(" DATABRICKS-V2 ", model);
|
||
assert_eq!(
|
||
got.databricks_v2_wire_route,
|
||
DatabricksV2Route::OpenaiResponses,
|
||
"{model}"
|
||
);
|
||
assert_eq!(got.thinking_mode, fallback.thinking_mode, "{model}");
|
||
assert_eq!(got.supported_efforts, fallback.supported_efforts, "{model}");
|
||
assert_eq!(got.default_effort, fallback.default_effort, "{model}");
|
||
assert_eq!(
|
||
got.normalization_policy, fallback.normalization_policy,
|
||
"{model}"
|
||
);
|
||
assert_eq!(got.registry_label, None, "{model}");
|
||
}
|
||
}
|
||
|
||
#[test]
|
||
fn unrelated_fqns_do_not_select_responses() {
|
||
for model in [
|
||
"gpt-6.schema.other",
|
||
"catalog.gpt-5.other",
|
||
"catalog.schema.claude-gpt-6",
|
||
"catalog.schema.mygpt-6-astra",
|
||
"catalog.schema.gpt-4",
|
||
"catalog.schema.gpt-4o",
|
||
"catalog.schema.gpt-6x",
|
||
"catalog.schema.gpt-oss-120b",
|
||
"catalog.schema.gpt-",
|
||
"catalog.schema.gpt-6",
|
||
"catalog.schema.gpt-4294967296",
|
||
"catalog.schema.kimi-k3",
|
||
] {
|
||
assert_eq!(
|
||
resolve("databricks_v2", model).databricks_v2_wire_route,
|
||
DatabricksV2Route::MlflowChat,
|
||
"{model}"
|
||
);
|
||
}
|
||
// The new rule is not an endpoint-family or cross-provider capability change.
|
||
assert_eq!(
|
||
resolve("databricks_v2", "goose-gpt-6-astra").databricks_v2_wire_route,
|
||
DatabricksV2Route::MlflowChat
|
||
);
|
||
assert_eq!(
|
||
resolve("openai", "catalog.schema.goose-gpt-6-astra").databricks_v2_wire_route,
|
||
DatabricksV2Route::NotApplicable
|
||
);
|
||
}
|