Skip to main content

mentra_provider/
stream.rs

1use 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}