@@ -47,16 +47,17 @@ fn is_api_message(message: &ResponseItem) -> bool {
47
47
| ResponseItem :: CustomToolCall { .. }
48
48
| ResponseItem :: CustomToolCallOutput { .. }
49
49
| ResponseItem :: LocalShellCall { .. }
50
- | ResponseItem :: Reasoning { .. }
51
50
| ResponseItem :: WebSearchCall { .. } => true ,
52
- ResponseItem :: Other => false ,
51
+ ResponseItem :: Reasoning { .. } | ResponseItem :: Other => false ,
53
52
}
54
53
}
55
54
56
55
#[ cfg( test) ]
57
56
mod tests {
58
57
use super :: * ;
59
58
use codex_protocol:: models:: ContentItem ;
59
+ use codex_protocol:: models:: ReasoningItemContent ;
60
+ use codex_protocol:: models:: ReasoningItemReasoningSummary ;
60
61
61
62
fn assistant_msg ( text : & str ) -> ResponseItem {
62
63
ResponseItem :: Message {
@@ -78,18 +79,32 @@ mod tests {
78
79
}
79
80
}
80
81
82
+ fn reasoning_msg ( text : & str ) -> ResponseItem {
83
+ ResponseItem :: Reasoning {
84
+ id : String :: new ( ) ,
85
+ summary : vec ! [ ReasoningItemReasoningSummary :: SummaryText {
86
+ text: "summary" . to_string( ) ,
87
+ } ] ,
88
+ content : Some ( vec ! [ ReasoningItemContent :: ReasoningText {
89
+ text: text. to_string( ) ,
90
+ } ] ) ,
91
+ encrypted_content : None ,
92
+ }
93
+ }
94
+
81
95
#[ test]
82
96
fn filters_non_api_messages ( ) {
83
97
let mut h = ConversationHistory :: default ( ) ;
84
- // System message is not an API message ; Other is ignored.
98
+ // System message and reasoning message are not API messages ; Other is ignored.
85
99
let system = ResponseItem :: Message {
86
100
id : None ,
87
101
role : "system" . to_string ( ) ,
88
102
content : vec ! [ ContentItem :: OutputText {
89
103
text: "ignored" . to_string( ) ,
90
104
} ] ,
91
105
} ;
92
- h. record_items ( [ & system, & ResponseItem :: Other ] ) ;
106
+ let reasoning = reasoning_msg ( "thinking..." ) ;
107
+ h. record_items ( [ & system, & reasoning, & ResponseItem :: Other ] ) ;
93
108
94
109
// User and assistant should be retained.
95
110
let u = user_msg ( "hi" ) ;
0 commit comments