cpex_core/extensions/
completion.rs1use serde::{Deserialize, Serialize};
10
11#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
13#[serde(rename_all = "snake_case")]
14pub enum StopReason {
15 End,
17 Return,
19 Call,
21 MaxTokens,
23 StopSequence,
25}
26
27#[derive(Debug, Clone, Default, Serialize, Deserialize)]
29pub struct TokenUsage {
30 #[serde(default)]
32 pub input_tokens: u32,
33
34 #[serde(default)]
36 pub output_tokens: u32,
37
38 #[serde(default)]
40 pub total_tokens: u32,
41}
42
43#[derive(Debug, Clone, Default, Serialize, Deserialize)]
47pub struct CompletionExtension {
48 #[serde(default, skip_serializing_if = "Option::is_none")]
50 pub stop_reason: Option<StopReason>,
51
52 #[serde(default, skip_serializing_if = "Option::is_none")]
54 pub tokens: Option<TokenUsage>,
55
56 #[serde(default, skip_serializing_if = "Option::is_none")]
58 pub model: Option<String>,
59
60 #[serde(default, skip_serializing_if = "Option::is_none")]
62 pub raw_format: Option<String>,
63
64 #[serde(default, skip_serializing_if = "Option::is_none")]
66 pub created_at: Option<String>,
67
68 #[serde(default, skip_serializing_if = "Option::is_none")]
70 pub latency_ms: Option<u64>,
71}