Skip to main content

va_ai_api_bridge/
stream.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6use crate::{ContentBlock, Extensions, FinishReason, Role, Usage};
7
8#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
9#[serde(rename_all = "camelCase")]
10pub struct DecodeState {
11    #[serde(default, skip_serializing_if = "Extensions::is_empty")]
12    pub extensions: Extensions,
13}
14
15#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
16#[serde(rename_all = "camelCase")]
17pub struct EncodeState {
18    #[serde(default, skip_serializing_if = "Extensions::is_empty")]
19    pub extensions: Extensions,
20}
21
22#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
23#[serde(
24    tag = "type",
25    rename_all = "snake_case",
26    rename_all_fields = "camelCase"
27)]
28pub enum UniversalEvent {
29    ResponseStart {
30        #[serde(default, skip_serializing_if = "Option::is_none")]
31        id: Option<String>,
32        #[serde(default, skip_serializing_if = "Option::is_none")]
33        model: Option<String>,
34        #[serde(default, skip_serializing_if = "Extensions::is_empty")]
35        extensions: Extensions,
36    },
37    MessageStart {
38        id: String,
39        role: Role,
40        #[serde(default, skip_serializing_if = "Extensions::is_empty")]
41        extensions: Extensions,
42    },
43    ContentStart {
44        index: usize,
45        block: ContentBlock,
46    },
47    TextDelta {
48        index: usize,
49        text: String,
50    },
51    ReasoningDelta {
52        index: usize,
53        text: String,
54    },
55    ToolCallDelta {
56        id: String,
57        #[serde(default, skip_serializing_if = "Option::is_none")]
58        name: Option<String>,
59        arguments_delta: String,
60    },
61    ContentDone {
62        index: usize,
63        #[serde(default, skip_serializing_if = "Option::is_none")]
64        final_block: Option<ContentBlock>,
65    },
66    MessageDone {
67        #[serde(default, skip_serializing_if = "Option::is_none")]
68        finish_reason: Option<FinishReason>,
69        #[serde(default, skip_serializing_if = "Option::is_none")]
70        usage: Option<Usage>,
71        #[serde(default, skip_serializing_if = "Extensions::is_empty")]
72        extensions: Extensions,
73    },
74    ResponseDone {
75        #[serde(default, skip_serializing_if = "Option::is_none")]
76        usage: Option<Usage>,
77        #[serde(default, skip_serializing_if = "Extensions::is_empty")]
78        extensions: Extensions,
79    },
80    Error {
81        message: String,
82        #[serde(default, skip_serializing_if = "Option::is_none")]
83        raw: Option<Value>,
84    },
85    Unknown {
86        raw: Value,
87        #[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
88        tags: BTreeMap<String, String>,
89    },
90}