bcode_config 0.0.1-alpha.0

Configuration loading for bcode
use bcode_config::BcodeConfig;

#[test]
fn model_selection_labels_are_scoped_and_presentation_only() {
    let mut config: BcodeConfig = toml::from_str(
        r#"
[model]
profile = "custom"
[model.profiles.custom]
provider_plugin_id = "provider"
model_id = "custom-alias"
display_name = "Custom profile"
[model.aliases.custom-alias]
provider_plugin_id = "provider"
model_id = "native-model"
display_name = "Custom alias"
"#,
    )
    .unwrap();
    let resolve = |config: &BcodeConfig, provider, model, requested| {
        config.model_selection_display_name(Some(provider), Some(model), requested)
    };
    let selection = config.resolved_model_selection();
    assert_eq!(selection.model_id.as_deref(), Some("native-model"));
    assert_eq!(
        resolve(&config, "provider", "native-model", None).as_deref(),
        Some("Custom profile")
    );
    assert_eq!(
        resolve(&config, "provider", "native-model", Some("custom-alias")).as_deref(),
        Some("Custom profile")
    );
    assert_eq!(resolve(&config, "provider", "other-model", None), None);
    assert_eq!(
        resolve(&config, "other-provider", "native-model", None),
        None
    );
    assert_eq!(
        resolve(&config, "provider", "native-model", Some("native-model")),
        None
    );
    config
        .model
        .profiles
        .get_mut("custom")
        .unwrap()
        .display_name = Some(" ".into());
    assert_eq!(
        resolve(&config, "provider", "native-model", None).as_deref(),
        Some("Custom alias")
    );
    config.model.profile = None;
    assert_eq!(
        resolve(&config, "provider", "native-model", Some("custom-alias")).as_deref(),
        Some("Custom alias")
    );
    assert_eq!(resolve(&config, "provider", "native-model", None), None);
    config
        .model
        .aliases
        .get_mut("custom-alias")
        .unwrap()
        .display_name = None;
    assert_eq!(
        resolve(&config, "provider", "native-model", Some("custom-alias")),
        None
    );
}