vtcode_core/gemini/streaming/
mod.rs

1pub mod errors;
2pub mod processor;
3
4pub use errors::StreamingError;
5pub use processor::{StreamingConfig, StreamingProcessor};
6
7use serde::{Deserialize, Serialize};
8use std::time::{Duration, Instant};
9
10/// Streaming metrics for monitoring and debugging
11#[derive(Debug, Clone, Default)]
12pub struct StreamingMetrics {
13    pub request_start_time: Option<Instant>,
14    pub first_chunk_time: Option<Instant>,
15    pub total_chunks: usize,
16    pub total_bytes: usize,
17    pub total_requests: usize,
18    pub total_response_time: Duration,
19    pub error_count: usize,
20    pub retry_count: usize,
21}
22
23/// Streaming response structure
24#[derive(Debug, Clone, Serialize, Deserialize)]
25#[serde(rename_all = "camelCase")]
26pub struct StreamingResponse {
27    pub candidates: Vec<StreamingCandidate>,
28    pub usage_metadata: Option<serde_json::Value>,
29}
30
31/// Streaming candidate structure
32#[derive(Debug, Clone, Serialize, Deserialize)]
33#[serde(rename_all = "camelCase")]
34pub struct StreamingCandidate {
35    pub content: crate::gemini::models::Content,
36    pub finish_reason: Option<String>,
37    pub index: Option<usize>,
38}