sipp-rs 0.1.4

Unified Rust library for extensible Sipp inference
use crate::client::{
    map, SippError, SippListenRequest, SippTextOptions, DEFAULT_TRANSCRIPTION_MAX_TOKENS,
};

#[test]
fn local_text_options_map_shared_generation_fields() {
    let options = map::local_chat_options(
        SippTextOptions {
            max_tokens: Some(32),
            temperature: Some(0.5),
            top_p: Some(0.9),
            stop: vec!["stop".to_string()],
        },
        Default::default(),
    )
    .expect("local options");
    assert_eq!(options.max_tokens, 32);
}

#[test]
fn local_listen_request_maps_explicit_and_default_token_limits() {
    let explicit = map::local_listen_request(SippListenRequest::new([1]).max_tokens(64))
        .expect("explicit listen request");
    assert_eq!(explicit.max_tokens, 64);

    let default =
        map::local_listen_request(SippListenRequest::new([1])).expect("default listen request");
    assert_eq!(
        default.max_tokens,
        i32::try_from(DEFAULT_TRANSCRIPTION_MAX_TOKENS).expect("default fits i32")
    );
}

#[test]
fn local_listen_request_rejects_token_limits_above_native_range() {
    let error =
        map::local_listen_request(SippListenRequest::new([1]).max_tokens(i32::MAX as u32 + 1))
            .expect_err("oversized listen max_tokens");
    assert!(matches!(
        error,
        SippError::InvalidRequest(message) if message == "local max_tokens exceeds i32::MAX"
    ));
}