88 lines
2.9 KiB
Rust
88 lines
2.9 KiB
Rust
use super::native_descriptor;
|
|
|
|
#[test]
|
|
fn native_descriptors_are_provider_specific() {
|
|
let descriptor = native_descriptor("anthropic", "claude-sonnet");
|
|
|
|
assert_eq!(descriptor.id, "rig-anthropic:claude-sonnet");
|
|
assert_eq!(descriptor.display_name, "Rig / anthropic / claude-sonnet");
|
|
}
|
|
|
|
#[test]
|
|
fn anthropic_discovery_prefers_live_limits_over_catalog_defaults() {
|
|
let model = super::anthropic_model_info(&serde_json::json!({
|
|
"id": "claude-opus-4-6", "display_name": "Opus", "max_input_tokens": 500000, "max_tokens": 32000
|
|
})).unwrap();
|
|
assert_eq!(model.context_size, Some(500000));
|
|
assert_eq!(model.max_output_tokens, Some(32000));
|
|
}
|
|
|
|
#[test]
|
|
fn anthropic_discovery_uses_exact_catalog_limits_when_api_omits_them() {
|
|
let model = super::anthropic_model_info(&serde_json::json!({
|
|
"id": "claude-opus-4-6", "max_input_tokens": null, "max_tokens": null
|
|
}))
|
|
.unwrap();
|
|
assert_eq!(model.context_size, Some(1000000));
|
|
assert_eq!(model.max_output_tokens, Some(128000));
|
|
let unknown =
|
|
super::anthropic_model_info(&serde_json::json!({"id": "claude-unknown"})).unwrap();
|
|
assert_eq!(unknown.context_size, None);
|
|
assert_eq!(unknown.max_output_tokens, None);
|
|
}
|
|
|
|
#[test]
|
|
fn anthropic_discovery_reads_only_supported_effort_capabilities() {
|
|
let model = super::anthropic_model_info(&serde_json::json!({
|
|
"id": "claude-future", "capabilities": {"effort": {
|
|
"supported": true, "low": {"supported": true},
|
|
"medium": {"supported": false}, "high": {"supported": true},
|
|
"xhigh": {"supported": true}, "max": {"supported": false}
|
|
}}
|
|
}))
|
|
.unwrap();
|
|
assert_eq!(model.reasoning_efforts, ["low", "high", "xhigh"]);
|
|
assert!(super::anthropic_reasoning_efforts(&serde_json::json!({
|
|
"capabilities": {"effort": {"supported": false, "low": {"supported": true}}}
|
|
}))
|
|
.is_empty());
|
|
assert!(super::anthropic_reasoning_efforts(&serde_json::json!({
|
|
"id": "claude-opus-4-6"
|
|
}))
|
|
.is_empty());
|
|
}
|
|
|
|
#[test]
|
|
fn native_reasoning_selections_use_provider_request_fields() {
|
|
assert_eq!(
|
|
super::anthropic_reasoning_params("high"),
|
|
serde_json::json!({
|
|
"output_config": {"effort": "high"}
|
|
})
|
|
);
|
|
assert_eq!(
|
|
super::gemini_reasoning_params("low"),
|
|
serde_json::json!({
|
|
"generationConfig": {"thinkingConfig": {"thinkingLevel": "low"}}
|
|
})
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn gemini_reasoning_parameters_survive_rig_typed_conversion() {
|
|
use rig_core::providers::gemini::completion::gemini_api_types::{
|
|
AdditionalParameters, ThinkingLevel,
|
|
};
|
|
let params: AdditionalParameters =
|
|
serde_json::from_value(super::gemini_reasoning_params("medium")).unwrap();
|
|
assert_eq!(
|
|
params
|
|
.generation_config
|
|
.unwrap()
|
|
.thinking_config
|
|
.unwrap()
|
|
.thinking_level,
|
|
Some(ThinkingLevel::Medium)
|
|
);
|
|
}
|