harn-vm 0.10.116

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

use super::*;

#[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()
    ));
}