Skip to main content

bitrouter_core/models/language/
stream_part.rs

1use crate::models::shared::{
2    provider::ProviderMetadata,
3    types::{JsonValue, TimestampMillis},
4    warnings::Warning,
5};
6
7use super::{finish_reason::LanguageModelFinishReason, usage::LanguageModelUsage};
8
9/// Represents a part of a streaming response from a language model provider.
10#[derive(Debug, Clone)]
11pub enum LanguageModelStreamPart {
12    TextStart {
13        id: String,
14        provider_metadata: Option<ProviderMetadata>,
15    },
16    TextDelta {
17        id: String,
18        delta: String,
19        provider_metadata: Option<ProviderMetadata>,
20    },
21    TextEnd {
22        id: String,
23        provider_metadata: Option<ProviderMetadata>,
24    },
25    ReasoningStart {
26        id: String,
27        provider_metadata: Option<ProviderMetadata>,
28    },
29    ReasoningDelta {
30        id: String,
31        delta: String,
32        provider_metadata: Option<ProviderMetadata>,
33    },
34    ReasoningEnd {
35        id: String,
36        provider_metadata: Option<ProviderMetadata>,
37    },
38    ToolInputStart {
39        id: String,
40        tool_name: String,
41        provider_executed: Option<bool>,
42        dynamic: Option<bool>,
43        title: Option<String>,
44        provider_metadata: Option<ProviderMetadata>,
45    },
46    ToolInputDelta {
47        id: String,
48        delta: String,
49        provider_metadata: Option<ProviderMetadata>,
50    },
51    ToolInputEnd {
52        id: String,
53        provider_metadata: Option<ProviderMetadata>,
54    },
55    /// type: "file"
56    File {
57        /// The file data as bytes
58        data: Vec<u8>,
59        /// The IANA media type
60        media_type: String,
61        /// Provider-specific metadata
62        provider_metadata: Option<ProviderMetadata>,
63    },
64    /// type: "tool-approval-request"
65    ToolApprovalRequest {
66        /// The approval ID
67        approval_id: String,
68        /// The tool call ID
69        tool_call_id: String,
70        /// Provider-specific metadata
71        provider_metadata: Option<ProviderMetadata>,
72    },
73    /// type: "url-source"
74    UrlSource {
75        /// The URL source ID
76        id: String,
77        /// The URL
78        url: String,
79        /// The title of the URL content, if available
80        title: Option<String>,
81        /// Provider-specific metadata
82        provider_metadata: Option<ProviderMetadata>,
83    },
84    /// type: "document-source"
85    DocumentSource {
86        /// The document source ID
87        id: String,
88        /// The IANA media type
89        media_type: String,
90        /// The title of the document
91        title: String,
92        /// The filename of the document, if available
93        filename: Option<String>,
94        /// Provider-specific metadata
95        provider_metadata: Option<ProviderMetadata>,
96    },
97    /// type: "tool-call"
98    ToolCall {
99        /// The tool call ID
100        tool_call_id: String,
101        /// The tool name
102        tool_name: String,
103        /// The stringified tool input
104        tool_input: String,
105        /// Whether the tool call was executed by the provider
106        provider_executed: Option<bool>,
107        /// Whether the tool call is defined at runtime
108        dynamic: Option<bool>,
109        /// Provider-specific metadata
110        provider_metadata: Option<ProviderMetadata>,
111    },
112    /// type: "tool-result"
113    ToolResult {
114        /// The tool call ID
115        tool_call_id: String,
116        /// The tool name
117        tool_name: String,
118        /// The tool result content
119        result: JsonValue,
120        /// Optional flag if the result is an error
121        is_error: Option<bool>,
122        /// Preliminary tool results replace each other, e.g. image previews.
123        /// There always has to be a final, non-preliminary tool result.
124        preliminary: Option<bool>,
125        /// Whether the tool call is defined at runtime
126        dynamic: Option<bool>,
127        /// Provider-specific metadata
128        provider_metadata: Option<ProviderMetadata>,
129    },
130    StreamStart {
131        warnings: Vec<Warning>,
132    },
133    ResponseMetadata {
134        id: Option<String>,
135        timestamp: Option<TimestampMillis>,
136        model_id: Option<String>,
137    },
138    Finish {
139        usage: LanguageModelUsage,
140        finish_reason: LanguageModelFinishReason,
141        provider_metadata: Option<ProviderMetadata>,
142    },
143    Raw {
144        raw_value: JsonValue,
145    },
146    Error {
147        error: JsonValue,
148    },
149}