hank9999 commited on
Commit
c2bdb0a
·
1 Parent(s): f0d4864

feat: 恢复上下文解析

Browse files
src/kiro/model/events/base.rs CHANGED
@@ -70,7 +70,7 @@ pub enum Event {
70
  /// 计费
71
  Metering(()),
72
  /// 上下文使用率
73
- ContextUsage(()),
74
  /// 未知事件 (保留原始帧数据)
75
  Unknown {},
76
  /// 服务端错误
@@ -120,7 +120,8 @@ impl Event {
120
  Ok(Self::Metering(()))
121
  }
122
  EventType::ContextUsage => {
123
- Ok(Self::ContextUsage(()))
 
124
  }
125
  EventType::Unknown => Ok(Self::Unknown {}),
126
  }
 
70
  /// 计费
71
  Metering(()),
72
  /// 上下文使用率
73
+ ContextUsage(super::ContextUsageEvent),
74
  /// 未知事件 (保留原始帧数据)
75
  Unknown {},
76
  /// 服务端错误
 
120
  Ok(Self::Metering(()))
121
  }
122
  EventType::ContextUsage => {
123
+ let payload = super::ContextUsageEvent::from_frame(&frame)?;
124
+ Ok(Self::ContextUsage(payload))
125
  }
126
  EventType::Unknown => Ok(Self::Unknown {}),
127
  }
src/kiro/model/events/context_usage.rs ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ //! 上下文使用率事件
2
+ //!
3
+ //! 处理 contextUsageEvent 类型的事件
4
+
5
+ use serde::Deserialize;
6
+
7
+ use crate::kiro::parser::error::ParseResult;
8
+ use crate::kiro::parser::frame::Frame;
9
+
10
+ use super::base::EventPayload;
11
+
12
+ /// 上下文使用率事件
13
+ ///
14
+ /// 包含当前上下文窗口的使用百分比
15
+ #[derive(Debug, Clone, Deserialize)]
16
+ #[serde(rename_all = "camelCase")]
17
+ pub struct ContextUsageEvent {
18
+ /// 上下文使用百分比 (0-100)
19
+ #[serde(default)]
20
+ pub context_usage_percentage: f64,
21
+ }
22
+
23
+ impl EventPayload for ContextUsageEvent {
24
+ fn from_frame(frame: &Frame) -> ParseResult<Self> {
25
+ frame.payload_as_json()
26
+ }
27
+ }
28
+
29
+ impl ContextUsageEvent {
30
+ /// 获取格式化的百分比字符串
31
+ pub fn formatted_percentage(&self) -> String {
32
+ format!("{:.2}%", self.context_usage_percentage)
33
+ }
34
+
35
+ /// 判断上下文使用是否超过阈值
36
+ ///
37
+ /// # Arguments
38
+ /// * `threshold` - 阈值百分比 (0-100)
39
+ pub fn exceeds_threshold(&self, threshold: f64) -> bool {
40
+ self.context_usage_percentage > threshold
41
+ }
42
+
43
+ /// 判断上下文是否接近满 (超过 80%)
44
+ pub fn is_near_full(&self) -> bool {
45
+ self.exceeds_threshold(80.0)
46
+ }
47
+
48
+ /// 判断上下文是否已满 (超过 95%)
49
+ pub fn is_full(&self) -> bool {
50
+ self.exceeds_threshold(95.0)
51
+ }
52
+ }
53
+
54
+ impl std::fmt::Display for ContextUsageEvent {
55
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
56
+ write!(f, "{}", self.formatted_percentage())
57
+ }
58
+ }
59
+
60
+ #[cfg(test)]
61
+ mod tests {
62
+ use super::*;
63
+
64
+ #[test]
65
+ fn test_formatted_percentage() {
66
+ let event = ContextUsageEvent {
67
+ context_usage_percentage: 50.123,
68
+ };
69
+ assert_eq!(event.formatted_percentage(), "50.12%");
70
+ }
71
+
72
+ #[test]
73
+ fn test_threshold() {
74
+ let event = ContextUsageEvent {
75
+ context_usage_percentage: 85.0,
76
+ };
77
+ assert!(event.exceeds_threshold(80.0));
78
+ assert!(!event.exceeds_threshold(90.0));
79
+ assert!(event.is_near_full());
80
+ assert!(!event.is_full());
81
+ }
82
+
83
+ #[test]
84
+ fn test_full() {
85
+ let event = ContextUsageEvent {
86
+ context_usage_percentage: 98.0,
87
+ };
88
+ assert!(event.is_full());
89
+ }
90
+ }
src/kiro/model/events/mod.rs CHANGED
@@ -4,8 +4,10 @@
4
 
5
  mod assistant;
6
  mod base;
 
7
  mod tool_use;
8
 
9
  pub use assistant::AssistantResponseEvent;
10
  pub use base::Event;
 
11
  pub use tool_use::ToolUseEvent;
 
4
 
5
  mod assistant;
6
  mod base;
7
+ mod context_usage;
8
  mod tool_use;
9
 
10
  pub use assistant::AssistantResponseEvent;
11
  pub use base::Event;
12
+ pub use context_usage::ContextUsageEvent;
13
  pub use tool_use::ToolUseEvent;