Skip to main content

imp_llm/
stream.rs

1use serde::{Deserialize, Serialize};
2
3use crate::message::AssistantMessage;
4
5/// Normalized stream events produced by all providers.
6#[derive(Debug, Clone, Serialize, Deserialize)]
7#[serde(tag = "type")]
8pub enum StreamEvent {
9    /// New message starting.
10    MessageStart { model: String },
11
12    /// Incremental text from the assistant.
13    TextDelta { text: String },
14
15    /// Incremental thinking/reasoning output.
16    ThinkingDelta { text: String },
17
18    /// A complete tool call (accumulated from deltas).
19    ToolCall {
20        id: String,
21        name: String,
22        arguments: serde_json::Value,
23    },
24
25    /// Message complete with final message.
26    MessageEnd { message: AssistantMessage },
27
28    /// Unrecoverable stream error.
29    Error { error: String },
30}
31
32/// Structured error returned by a provider's API.
33#[derive(Debug, Clone, Serialize, Deserialize)]
34pub struct ProviderError {
35    /// Machine-readable error code (e.g. "rate_limit_exceeded").
36    pub code: String,
37    /// Human-readable error description.
38    pub message: String,
39    /// Whether the caller should retry the request.
40    pub retryable: bool,
41}