harn-vm 0.10.119

Async bytecode virtual machine for the Harn programming language
Documentation
use super::*;
use crate::llm::api::{probe_llm_request, LlmRequestPayload, OutputFormat};

#[test]
fn probe_stream_request_uses_stream_transport_without_a_delta_receiver() {
    let _guard = env_guard();
    let _allow_llm_transport = allow_stubbed_llm_transport();
    let captured = std::sync::Arc::new(std::sync::Mutex::new(None));
    let expected_capture = captured.clone();
    let server = spawn_llm_stub("streaming probe stub", move |stream| {
        use std::io::{Read, Write};

        let mut request = vec![0u8; 16_384];
        let read = stream.read(&mut request).expect("read request");
        *expected_capture.lock().expect("capture request") =
            Some(String::from_utf8_lossy(&request[..read]).to_string());

        let body = concat!(
            "data: {\"id\":\"probe-stream\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"ok\"}}]}\n\n",
            "data: {\"id\":\"probe-stream\",\"choices\":[{\"index\":0,\"delta\":{},\"finish_reason\":\"stop\"}],\"usage\":{\"prompt_tokens\":3,\"completion_tokens\":1}}\n\n",
            "data: [DONE]\n\n",
        );
        let response = format!(
            "HTTP/1.1 200 OK\r\ncontent-type: text/event-stream\r\ncontent-length: {}\r\nconnection: close\r\n\r\n{}",
            body.len(),
            body
        );
        stream
            .write_all(response.as_bytes())
            .expect("write streaming response");
    });
    install_openai_stub_provider("probe-stream", server.addr());

    let mut opts = base_opts("probe-stream");
    opts.model = "probe-stream-model".to_string();
    opts.stream = true;
    opts.output_format = OutputFormat::Text;
    opts.output_schema = None;
    opts.native_tools = None;
    opts.tool_choice = None;
    opts.provider_overrides = None;
    let request = LlmRequestPayload::from(&opts);
    let runtime = tokio::runtime::Builder::new_current_thread()
        .enable_all()
        .build()
        .expect("runtime");
    let result = runtime
        .block_on(probe_llm_request(&request))
        .expect("streaming probe result");

    crate::llm_config::clear_user_overrides();
    drop(server);

    assert_eq!(result.text, "ok");
    let request = captured
        .lock()
        .expect("captured request")
        .clone()
        .expect("request captured");
    let body = request.split("\r\n\r\n").nth(1).expect("request body");
    let body: serde_json::Value = serde_json::from_str(body).expect("request JSON");
    assert_eq!(body["stream"], true);
}