objectiveai-sdk 2.0.5

ObjectiveAI SDK, definitions, and utilities
Documentation
use crate::tests::stream_push::stream_push_test;
use super::*;

stream_push_test!(
    single_chunk_unchanged,
    vec![AgentCompletionChunk {
        id: "acc-1".into(),
        created: 100,
        messages: vec![],
        object: Object::AgentCompletionChunk,
        usage: None,
        upstream: crate::agent::Upstream::Openrouter,
        error: None,
        continuation: None,
    }],
    AgentCompletionChunk {
        id: "acc-1".into(),
        created: 100,
        messages: vec![],
        object: Object::AgentCompletionChunk,
        usage: None,
        upstream: crate::agent::Upstream::Openrouter,
        error: None,
        continuation: None,
    }
);

stream_push_test!(
    content_appended_across_two_chunks,
    vec![
        AgentCompletionChunk {
            id: "acc-2".into(),
            created: 100,
            messages: vec![MessageChunk::Assistant(AssistantResponseChunk {
                role: crate::agent::completions::response::AssistantRole::Assistant,
                index: 0,
                created: 0,
                agent: String::new(),
                model: "openai/gpt-4o".into(),
                upstream_id: String::new(),
                reasoning: None,
                tool_calls: None,
                content: Some(crate::agent::completions::message::RichContent::Text(
                    "Hello".into(),
                )),
                refusal: None,
                finish_reason: None,
                logprobs: None,
                service_tier: None,
                system_fingerprint: None,
                provider: None,
                usage: None,
            })],
            object: Object::AgentCompletionChunk,
            usage: None,
            upstream: crate::agent::Upstream::Openrouter,
            error: None,
            continuation: None,
        },
        AgentCompletionChunk {
            id: "acc-2".into(),
            created: 100,
            messages: vec![MessageChunk::Assistant(AssistantResponseChunk {
                role: crate::agent::completions::response::AssistantRole::Assistant,
                index: 0,
                created: 0,
                agent: String::new(),
                model: "openai/gpt-4o".into(),
                upstream_id: String::new(),
                reasoning: None,
                tool_calls: None,
                content: Some(crate::agent::completions::message::RichContent::Text(
                    " world".into(),
                )),
                refusal: None,
                finish_reason: None,
                logprobs: None,
                service_tier: None,
                system_fingerprint: None,
                provider: None,
                usage: None,
            })],
            object: Object::AgentCompletionChunk,
            usage: None,
            upstream: crate::agent::Upstream::Openrouter,
            error: None,
            continuation: None,
        },
    ],
    AgentCompletionChunk {
        id: "acc-2".into(),
        created: 100,
        messages: vec![MessageChunk::Assistant(AssistantResponseChunk {
            role: crate::agent::completions::response::AssistantRole::Assistant,
            index: 0,
            created: 0,
            agent: String::new(),
            model: "openai/gpt-4o".into(),
            upstream_id: String::new(),
            reasoning: None,
            tool_calls: None,
            content: Some(crate::agent::completions::message::RichContent::Text(
                "Hello world".into(),
            )),
            refusal: None,
            finish_reason: None,
            logprobs: None,
            service_tier: None,
            system_fingerprint: None,
            provider: None,
            usage: None,
        })],
        object: Object::AgentCompletionChunk,
        usage: None,
        upstream: crate::agent::Upstream::Openrouter,
        error: None,
        continuation: None,
    }
);

stream_push_test!(
    content_appended_across_three_chunks,
    vec![
        AgentCompletionChunk {
            id: "acc-3".into(),
            created: 200,
            messages: vec![MessageChunk::Assistant(AssistantResponseChunk {
                role: crate::agent::completions::response::AssistantRole::Assistant,
                index: 0,
                created: 0,
                agent: String::new(),
                model: "google/gemini-3.0-pro".into(),
                upstream_id: String::new(),
                reasoning: None,
                tool_calls: None,
                content: Some(crate::agent::completions::message::RichContent::Text(
                    "A".into(),
                )),
                refusal: None,
                finish_reason: None,
                logprobs: None,
                service_tier: None,
                system_fingerprint: None,
                provider: None,
                usage: None,
            })],
            object: Object::AgentCompletionChunk,
            usage: None,
            upstream: crate::agent::Upstream::Openrouter,
            error: None,
            continuation: None,
        },
        AgentCompletionChunk {
            id: "acc-3".into(),
            created: 200,
            messages: vec![MessageChunk::Assistant(AssistantResponseChunk {
                role: crate::agent::completions::response::AssistantRole::Assistant,
                index: 0,
                created: 0,
                agent: String::new(),
                model: "google/gemini-3.0-pro".into(),
                upstream_id: String::new(),
                reasoning: None,
                tool_calls: None,
                content: Some(crate::agent::completions::message::RichContent::Text(
                    "B".into(),
                )),
                refusal: None,
                finish_reason: None,
                logprobs: None,
                service_tier: None,
                system_fingerprint: None,
                provider: None,
                usage: None,
            })],
            object: Object::AgentCompletionChunk,
            usage: None,
            upstream: crate::agent::Upstream::Openrouter,
            error: None,
            continuation: None,
        },
        AgentCompletionChunk {
            id: "acc-3".into(),
            created: 200,
            messages: vec![MessageChunk::Assistant(AssistantResponseChunk {
                role: crate::agent::completions::response::AssistantRole::Assistant,
                index: 0,
                created: 0,
                agent: String::new(),
                model: "google/gemini-3.0-pro".into(),
                upstream_id: String::new(),
                reasoning: None,
                tool_calls: None,
                content: Some(crate::agent::completions::message::RichContent::Text(
                    "C".into(),
                )),
                refusal: None,
                finish_reason: None,
                logprobs: None,
                service_tier: None,
                system_fingerprint: None,
                provider: None,
                usage: None,
            })],
            object: Object::AgentCompletionChunk,
            usage: None,
            upstream: crate::agent::Upstream::Openrouter,
            error: None,
            continuation: None,
        },
    ],
    AgentCompletionChunk {
        id: "acc-3".into(),
        created: 200,
        messages: vec![MessageChunk::Assistant(AssistantResponseChunk {
            role: crate::agent::completions::response::AssistantRole::Assistant,
            index: 0,
            created: 0,
            agent: String::new(),
            model: "google/gemini-3.0-pro".into(),
            upstream_id: String::new(),
            reasoning: None,
            tool_calls: None,
            content: Some(crate::agent::completions::message::RichContent::Text(
                "ABC".into(),
            )),
            refusal: None,
            finish_reason: None,
            logprobs: None,
            service_tier: None,
            system_fingerprint: None,
            provider: None,
            usage: None,
        })],
        object: Object::AgentCompletionChunk,
        usage: None,
        upstream: crate::agent::Upstream::Openrouter,
        error: None,
        continuation: None,
    }
);

stream_push_test!(
    usage_set_from_later_chunk,
    vec![
        AgentCompletionChunk {
            id: "acc-4".into(),
            created: 100,
            messages: vec![],
            object: Object::AgentCompletionChunk,
            usage: None,
            upstream: crate::agent::Upstream::Openrouter,
            error: None,
            continuation: None,
        },
        AgentCompletionChunk {
            id: "acc-4".into(),
            created: 100,
            messages: vec![],
            object: Object::AgentCompletionChunk,
            usage: Some(crate::agent::completions::response::Usage {
                prompt_tokens: 10,
                completion_tokens: 5,
                total_tokens: 15,
                completion_tokens_details: None,
                prompt_tokens_details: None,
                cost: rust_decimal::Decimal::ZERO,
                cost_details: None,
                total_cost: rust_decimal::Decimal::ZERO,
            }),
            upstream: crate::agent::Upstream::Openrouter,
            error: None,
            continuation: None,
        },
    ],
    AgentCompletionChunk {
        id: "acc-4".into(),
        created: 100,
        messages: vec![],
        object: Object::AgentCompletionChunk,
        usage: Some(crate::agent::completions::response::Usage {
            prompt_tokens: 10,
            completion_tokens: 5,
            total_tokens: 15,
            completion_tokens_details: None,
            prompt_tokens_details: None,
            cost: rust_decimal::Decimal::ZERO,
            cost_details: None,
            total_cost: rust_decimal::Decimal::ZERO,
        }),
        upstream: crate::agent::Upstream::Openrouter,
        error: None,
        continuation: None,
    }
);

stream_push_test!(
    last_error_kept,
    vec![
        AgentCompletionChunk {
            id: "acc-5".into(),
            created: 100,
            messages: vec![],
            object: Object::AgentCompletionChunk,
            usage: None,
            upstream: crate::agent::Upstream::Openrouter,
            error: Some(crate::error::ResponseError {
                code: 500,
                message: serde_json::json!("first"),
            }),
            continuation: None,
        },
        AgentCompletionChunk {
            id: "acc-5".into(),
            created: 100,
            messages: vec![],
            object: Object::AgentCompletionChunk,
            usage: None,
            upstream: crate::agent::Upstream::Openrouter,
            error: Some(crate::error::ResponseError {
                code: 502,
                message: serde_json::json!("second"),
            }),
            continuation: None,
        },
    ],
    AgentCompletionChunk {
        id: "acc-5".into(),
        created: 100,
        messages: vec![],
        object: Object::AgentCompletionChunk,
        usage: None,
        upstream: crate::agent::Upstream::Openrouter,
        error: Some(crate::error::ResponseError {
            code: 502,
            message: serde_json::json!("second"),
        }),
        continuation: None,
    }
);