harn-vm 0.10.24

Async bytecode virtual machine for the Harn programming language
Documentation
use super::parse_llm_response;
use crate::llm::capabilities::should_use_responses_transport;

#[test]
fn openai_parser_preserves_partial_usage_in_telemetry() {
    let response = serde_json::json!({
        "id": "chatcmpl-abc",
        "choices": [{
            "message": {"content": "done"},
            "finish_reason": "stop"
        }],
        "usage": {"prompt_tokens": 314, "completion_tokens": 27}
    });

    let result =
        parse_llm_response(&response, "vllm", "qwen3.6", false, false).expect("parser succeeds");
    assert_eq!(
        result.telemetry.source,
        crate::llm::api::telemetry_source::OPENAI_USAGE
    );
    assert_eq!(result.telemetry.server_prompt_tokens, Some(314));
    assert_eq!(result.telemetry.server_output_tokens, Some(27));
    assert_eq!(result.telemetry.server_prompt_eval_ms, None);
    assert_eq!(result.telemetry.request_id.as_deref(), Some("chatcmpl-abc"));
}

#[test]
fn openai_parser_preserves_gateway_routing_metadata() {
    let response = serde_json::json!({
        "id": "gen_gateway",
        "choices": [{
            "message": {"content": "done"},
            "finish_reason": "stop"
        }],
        "usage": {"prompt_tokens": 10, "completion_tokens": 2, "cost": 0.00001},
        "provider_metadata": {
            "gateway": {
                "routing": {"resolvedProvider": "openai", "modelAttemptCount": 1},
                "cost": "0.00001"
            }
        }
    });

    let result = parse_llm_response(
        &response,
        "vercel_ai_gateway",
        "openai/gpt-5.4-nano",
        false,
        false,
    )
    .expect("gateway response parses");

    assert_eq!(
        result
            .telemetry
            .provider_metadata
            .as_ref()
            .and_then(|metadata| metadata.pointer("/gateway/routing/resolvedProvider"))
            .and_then(serde_json::Value::as_str),
        Some("openai")
    );
}

#[test]
fn responses_transport_routing_is_provider_capability_driven() {
    assert!(should_use_responses_transport("openai", "gpt-5.4", true));
    assert!(should_use_responses_transport(
        "vercel_ai_gateway",
        "creator/new-model",
        true,
    ));
    assert!(!should_use_responses_transport(
        "anthropic",
        "claude-sonnet-4.6",
        true,
    ));
    assert!(should_use_responses_transport(
        "openai",
        "gpt-5.3-codex",
        false,
    ));
}