harn-vm 0.10.162

Async bytecode virtual machine for the Harn programming language
Documentation
use std::collections::BTreeMap;

use super::*;

#[test]
fn catalog_gate_rejects_a_deprecated_provider_default() {
    let mut config = default_config();
    let (provider, model_id) = config
        .provider_defaults
        .iter()
        .find_map(|(provider, defaults)| {
            defaults
                .portal
                .as_ref()
                .map(|model_id| (provider.clone(), model_id.clone()))
        })
        .expect("the catalog must have a portal default to check");
    assert!(provider_route_default_issues(&config).is_empty());
    config
        .models
        .get_mut(&model_id)
        .expect("the configured default must resolve")
        .deprecated = true;
    let issues = provider_route_default_issues(&config);
    assert!(
        issues.iter().any(|issue| issue.contains(&format!(
            "provider_defaults.{provider}.portal targets deprecated model"
        ))),
        "deprecated default must fail catalog generation: {issues:?}"
    );
}

#[test]
fn route_default_overrides_logical_model_default() {
    let mut config = default_config();
    config.model_defaults.insert(
        "fireworks/accounts/fireworks/models/gpt-oss-120b".to_string(),
        BTreeMap::from_iter([("temperature".to_string(), toml::Value::Float(0.4))]),
    );

    let params = model_params_for_route_with_config(
        &config,
        "fireworks",
        "accounts/fireworks/models/gpt-oss-120b",
    );
    assert_eq!(
        params.get("temperature").and_then(toml::Value::as_float),
        Some(0.4)
    );
    assert_eq!(
        params.get("top_p").and_then(toml::Value::as_float),
        Some(1.0)
    );
    assert_eq!(
        params.get("reasoning_effort").and_then(toml::Value::as_str),
        Some("high")
    );

    config.model_defaults.insert(
        "groq/openai/gpt-oss-120b".to_string(),
        BTreeMap::from_iter([("temperature".to_string(), toml::Value::Float(0.2))]),
    );
    let wire_params = model_params_for_route_with_config(&config, "groq", "openai/gpt-oss-120b");
    assert_eq!(
        wire_params
            .get("temperature")
            .and_then(toml::Value::as_float),
        Some(0.2),
        "canonical route override must apply when the transport passes a wire id"
    );
}

#[test]
fn audit_rejects_unknown_and_malformed_logical_defaults() {
    let mut unknown = default_config();
    unknown.model_defaults.insert(
        "logical:not-a-catalog-model".to_string(),
        BTreeMap::from_iter([("temperature".to_string(), toml::Value::Float(1.0))]),
    );
    assert!(model_default_issues(&unknown).contains(
        &"model_defaults.logical:not-a-catalog-model references an unknown logical model"
            .to_string()
    ));

    let mut malformed = default_config();
    malformed.model_defaults.insert(
        "logical:openai-gpt-oss-120b".to_string(),
        BTreeMap::from_iter([
            ("temperature".to_string(), toml::Value::Float(3.0)),
            (
                "reasoning_effort".to_string(),
                toml::Value::String("extreme".to_string()),
            ),
        ]),
    );
    let issues = model_default_issues(&malformed);
    assert!(issues.contains(
        &"model_defaults.logical:openai-gpt-oss-120b.temperature is not a supported generation default"
            .to_string()
    ));
    assert!(issues.contains(
        &"model_defaults.logical:openai-gpt-oss-120b.reasoning_effort is not a supported generation default"
            .to_string()
    ));
}