use super::super::{Quirks, Registry, resolve};
use super::DOCUMENT;
const KIMI: &str = "https://api.kimi.com/coding/v1";
const ZAI: &str = "https://api.z.ai/api/coding/paas/v4";
fn registry() -> Registry {
Registry::distil(DOCUMENT, 0).expect("the fixture document distils")
}
fn kimi_defaults() -> Quirks {
preset_quirks("kimi")
}
fn zai_defaults() -> Quirks {
preset_quirks("zai")
}
fn preset_quirks(key: &str) -> Quirks {
crate::cli::init::presets::preset(key)
.expect("the preset exists")
.quirks()
}
#[test]
fn no_registry_at_all_keeps_the_presets_values() {
assert_eq!(resolve(None, kimi_defaults(), KIMI, "k3"), kimi_defaults());
assert_eq!(
resolve(None, zai_defaults(), ZAI, "glm-5.3"),
zai_defaults()
);
}
#[test]
fn a_model_the_registry_does_not_name_keeps_the_presets_values() {
assert_eq!(
resolve(Some(®istry()), kimi_defaults(), KIMI, "k4-preview"),
kimi_defaults()
);
}
#[test]
fn an_endpoint_the_registry_does_not_name_keeps_the_presets_values() {
assert_eq!(
resolve(
Some(®istry()),
zai_defaults(),
"http://localhost:1234/v1",
"glm-5.3"
),
zai_defaults(),
"the model id alone must not match another provider's entry"
);
}
#[test]
fn a_required_max_tokens_becomes_the_models_own_limit() {
let resolved = resolve(Some(®istry()), kimi_defaults(), KIMI, "k3");
assert_eq!(resolved.max_tokens, Some(131_072));
assert!(resolved.max_tokens_from_registry);
}
#[test]
fn a_second_model_on_the_same_endpoint_gets_its_own_limit() {
let resolved = resolve(Some(®istry()), kimi_defaults(), KIMI, "kimi-for-coding");
assert_eq!(resolved.max_tokens, Some(32_768));
}
#[test]
fn a_model_whose_endpoint_publishes_no_limit_keeps_the_presets_fallback() {
let defaults = kimi_defaults();
let resolved = resolve(
Some(®istry()),
defaults,
"https://quiet.example/v1",
"unspecified",
);
assert_eq!(resolved.max_tokens, defaults.max_tokens);
assert!(
!resolved.max_tokens_from_registry,
"the rendered comment must not claim this is the model's own limit"
);
}
#[test]
fn the_registry_never_introduces_a_max_tokens() {
let resolved = resolve(Some(®istry()), zai_defaults(), ZAI, "glm-5.3");
assert_eq!(resolved.max_tokens, None);
assert!(!resolved.max_tokens_from_registry);
}
#[test]
fn a_model_that_refuses_temperature_loses_it() {
let mut defaults = kimi_defaults();
defaults.temperature = Some(0.2);
let resolved = resolve(Some(®istry()), defaults, KIMI, "k3");
assert_eq!(resolved.temperature, None);
}
#[test]
fn a_model_that_accepts_temperature_keeps_the_presets_value() {
let resolved = resolve(Some(®istry()), zai_defaults(), ZAI, "glm-5.2");
assert_eq!(resolved.temperature, zai_defaults().temperature);
}
#[test]
fn the_registry_never_introduces_a_temperature() {
let mut defaults = zai_defaults();
defaults.temperature = None;
let resolved = resolve(Some(®istry()), defaults, ZAI, "glm-5.2");
assert_eq!(resolved.temperature, None);
}
fn one_model(endpoint: &str, model: &str, temperature: bool, output: Option<u32>) -> Registry {
let limit = match output {
Some(value) => format!(r#", "limit": {{ "output": {value} }}"#),
None => String::new(),
};
let document = format!(
r#"{{"p": {{"api": "{endpoint}", "models": {{"{model}": {{"id": "{model}",
"temperature": {temperature}{limit} }} }} }} }}"#
);
Registry::distil(&document, 0).expect("distils")
}
#[test]
fn a_published_limit_above_the_presets_fallback_never_raises_it() {
let registry = one_model(KIMI, "k3", false, Some(999_999));
let resolved = resolve(Some(®istry), kimi_defaults(), KIMI, "k3");
assert_eq!(
resolved.max_tokens,
kimi_defaults().max_tokens,
"narrowed, never raised"
);
assert!(
!resolved.max_tokens_from_registry,
"and the rendered comment must not credit the registry for it"
);
}
#[test]
fn a_published_limit_below_the_fallback_is_taken() {
let registry = one_model(KIMI, "kimi-for-coding", false, Some(32_768));
let resolved = resolve(Some(®istry), kimi_defaults(), KIMI, "kimi-for-coding");
assert_eq!(resolved.max_tokens, Some(32_768));
assert!(resolved.max_tokens_from_registry);
}
#[test]
fn two_providers_sharing_an_endpoint_contribute_both_model_lists() {
let endpoint = "https://api.minimax.io/anthropic/v1";
let document = format!(
r#"{{"minimax": {{"api": "{endpoint}", "models": {{"MiniMax-M2": {{"id": "MiniMax-M2",
"temperature": false, "limit": {{"output": 128000}} }} }} }},
"minimax-coding-plan": {{"api": "{endpoint}", "models": {{"MiniMax-M3": {{"id":
"MiniMax-M3", "temperature": false, "limit": {{"output": 128000}} }} }} }} }}"#
);
let registry = Registry::distil(&document, 0).expect("distils");
let defaults = Quirks {
temperature: Some(0.2),
max_tokens: None,
max_tokens_from_registry: false,
};
for model in ["MiniMax-M2", "MiniMax-M3"] {
assert_eq!(
resolve(Some(®istry), defaults, endpoint, model).temperature,
None,
"`{model}` should be known: neither provider's list may be dropped"
);
}
}
#[test]
fn a_published_limit_equal_to_the_fallback_is_still_the_models_own_limit() {
let fallback = kimi_defaults().max_tokens.expect("kimi requires the field");
let registry = one_model(KIMI, "k3", false, Some(fallback));
let resolved = resolve(Some(®istry), kimi_defaults(), KIMI, "k3");
assert_eq!(resolved.max_tokens, Some(fallback));
assert!(
resolved.max_tokens_from_registry,
"the registry named this model's limit, so the comment may say so"
);
}
#[test]
fn a_model_named_without_a_published_limit_is_never_credited_with_one() {
let registry = one_model(KIMI, "k3", false, None);
let resolved = resolve(Some(®istry), kimi_defaults(), KIMI, "k3");
assert_eq!(resolved.max_tokens, kimi_defaults().max_tokens);
assert!(
!resolved.max_tokens_from_registry,
"the registry named no limit, so the fallback is drep's own number"
);
}