mentra_provider/
stream.rs1use tokio::sync::mpsc;
2
3use crate::{
4 ReasoningProvenance, model::HostedToolSearchCall, model::HostedWebSearchCall,
5 model::ImageGenerationCall, model::ImageGenerationResult, model::ImageSource, model::Role,
6 model::TokenUsage, model::ToolResultContent, model::WebSearchAction,
7};
8
9pub type ProviderEventStream = mpsc::UnboundedReceiver<Result<ProviderEvent, crate::ProviderError>>;
10
11#[derive(Debug, Clone, PartialEq, Eq, Default)]
12pub struct ResponseHeaders {
13 pub values: Vec<(String, String)>,
14}
15
16#[derive(Debug, Clone, PartialEq)]
17pub enum ProviderEvent {
18 ResponseHeaders(ResponseHeaders),
19 ResponseCreated,
20 MessageStarted {
21 id: String,
22 model: String,
23 role: Role,
24 },
25 ContentBlockStarted {
26 index: usize,
27 kind: ContentBlockStart,
28 },
29 ContentBlockDelta {
30 index: usize,
31 delta: ContentBlockDelta,
32 },
33 ContentBlockStopped {
34 index: usize,
35 },
36 MessageDelta {
37 stop_reason: Option<String>,
38 usage: Option<TokenUsage>,
39 },
40 ReasoningSummaryDelta {
41 delta: String,
42 summary_index: i64,
43 },
44 ReasoningContentDelta {
45 delta: String,
46 content_index: i64,
47 },
48 ReasoningSummaryPartAdded {
49 summary_index: i64,
50 },
51 MessageStopped,
52}
53
54#[derive(Debug, Clone, PartialEq, Eq)]
55pub enum ContentBlockStart {
56 Text,
57 Thinking {
58 encrypted_content: Option<String>,
59 id: Option<String>,
60 provenance: Option<ReasoningProvenance>,
61 redacted: bool,
62 },
63 Image {
64 source: ImageSource,
65 },
66 ToolUse {
67 id: String,
68 name: String,
69 },
70 ToolResult {
71 tool_use_id: String,
72 is_error: bool,
73 content: Option<ToolResultContent>,
74 },
75 HostedToolSearch {
76 call: HostedToolSearchCall,
77 },
78 HostedWebSearch {
79 call: HostedWebSearchCall,
80 },
81 ImageGeneration {
82 call: ImageGenerationCall,
83 },
84}
85
86#[derive(Debug, Clone, PartialEq, Eq)]
87pub enum ContentBlockDelta {
88 Text(String),
89 ThinkingText(String),
90 ThinkingSignature(String),
91 ThinkingEncryptedContent(String),
92 ToolUseInputJson(String),
93 ToolResultContent(ToolResultContent),
94 HostedToolSearchQuery(String),
95 HostedToolSearchStatus(String),
96 HostedWebSearchAction(WebSearchAction),
97 HostedWebSearchStatus(String),
98 ImageGenerationStatus(String),
99 ImageGenerationRevisedPrompt(String),
100 ImageGenerationResult(ImageGenerationResult),
101}