rig-core 0.44.0

An opinionated library for building LLM powered applications.
Documentation
use super::*;
use crate::message::AssistantContent;
use crate::operation::Finish;
use crate::test_utils::{MockFrame, MockScript, MockStreamEvent};

fn whole() -> CompletionResponse {
    CompletionResponse::new(
        vec![
            AssistantContent::reasoning("think"),
            AssistantContent::text("answer"),
        ],
        Default::default(),
        crate::message::Origin::new("test.api", "mock", ""),
        serde_json::Value::Null,
    )
}

#[test]
fn a_whole_reply_and_its_stream_fold_into_one_turn() {
    assert_restated_agrees(
        &MockScript::default(),
        [MockFrame::Response(Box::new(whole()))],
        [
            MockFrame::Event(MockStreamEvent::reasoning_delta("think")),
            MockFrame::Event(MockStreamEvent::text("answer")),
            MockFrame::Event(MockStreamEvent::FinalResponse(Finish::default())),
        ],
    );
}

#[test]
#[should_panic(expected = "the same turn")]
fn a_stream_that_drops_a_block_disagrees() {
    assert_restated_agrees(
        &MockScript::default(),
        [MockFrame::Response(Box::new(whole()))],
        [
            MockFrame::Event(MockStreamEvent::text("answer")),
            MockFrame::Event(MockStreamEvent::FinalResponse(Finish::default())),
        ],
    );
}

#[test]
fn rig_issued_call_ids_are_compared_by_position() {
    let call = crate::message::ToolCall::new(
        crate::message::CallId::from_wire(""),
        crate::message::ToolFunction::new(
            crate::message::ToolName::new("lookup").expect("a name"),
            serde_json::json!({}),
        ),
    );
    let whole = CompletionResponse::new(
        vec![AssistantContent::ToolCall(call)],
        Default::default(),
        crate::message::Origin::new("test.api", "mock", ""),
        serde_json::Value::Null,
    );
    assert_restated_agrees(
        &MockScript::default(),
        [MockFrame::Response(Box::new(whole))],
        [
            MockFrame::Event(MockStreamEvent::ToolCall {
                id: String::new(),
                name: "lookup".into(),
                arguments: serde_json::json!({}),
                call_id: None,
            }),
            MockFrame::Event(MockStreamEvent::FinalResponse(Finish::default())),
        ],
    );
}