llmshim 0.7.2

Blazing fast LLM API translation layer in pure Rust
Documentation
use llmshim::{
    catalog::{
        EffortLevel::{High, Low, Max, Medium},
        ModelCapabilities, ReasoningOption, Support,
    },
    providers::anthropic_reasoning::Profile,
};
#[test]
fn catalog_options_choose_effort_budget_and_unsupported_without_model_names() {
    let p = Profile::from_options(
        ModelCapabilities::unknown(),
        &[ReasoningOption::BudgetTokens {
            min: Some(2048),
            max: Some(4096),
        }],
    );
    assert!(!p.adaptive());
    assert_eq!(p.budget("low", 4096).unwrap(), 2048);
    assert_eq!(p.budget("max", 16000).unwrap(), 4096);
    assert!(p.budget("high", 2048).is_err());
    let options = [
        ReasoningOption::Effort {
            values: vec![Low, High],
        },
        ReasoningOption::BudgetTokens {
            min: Some(1024),
            max: None,
        },
    ];
    let p = Profile::from_options(ModelCapabilities::unknown(), &options);
    assert!(p.adaptive());
    assert_eq!(p.effort("medium"), "high");
    assert_eq!(p.effort("max"), "high");
    assert!(!Profile::from_options(
        ModelCapabilities::unknown().with_reasoning(Support::Unsupported),
        &options
    )
    .supported());
}
#[test]
fn verified_reasoning_table_wins_over_community_and_unknown_models_are_not_guessed() {
    let catalog = llmshim::catalog::Catalog::vendored();
    let model = catalog.resolve("anthropic/claude-sonnet-4-6").unwrap();
    assert_eq!(
        model.reasoning_options,
        vec![ReasoningOption::Effort {
            values: vec![Low, Medium, High, Max]
        }]
    );
    assert!(Profile::for_model("claude-sonnet-4-6-20250514").adaptive());
    assert!(!Profile::for_model("claude-opus-99-not-a-real-model").supported());
}