Skip to main content

llama_cpp_bindings/
chat_message_parse_outcome.rs

1use llama_cpp_bindings_types::ParsedChatMessage;
2
3use crate::raw_chat_message::RawChatMessage;
4
5pub enum ChatMessageParseOutcome {
6    Recognized(ParsedChatMessage),
7    Unrecognized(RawChatMessage),
8}
9
10#[cfg(test)]
11mod tests {
12    use llama_cpp_bindings_types::ParsedChatMessage;
13
14    use super::ChatMessageParseOutcome;
15    use crate::raw_chat_message::RawChatMessage;
16
17    #[test]
18    fn recognized_variant_exposes_parsed_chat_message() {
19        let parsed =
20            ParsedChatMessage::new("content".to_owned(), "reasoning".to_owned(), Vec::new());
21        let outcome = ChatMessageParseOutcome::Recognized(parsed);
22
23        match outcome {
24            ChatMessageParseOutcome::Recognized(parsed) => {
25                assert_eq!(parsed.content, "content");
26                assert_eq!(parsed.reasoning_content, "reasoning");
27                assert!(parsed.tool_calls.is_empty());
28            }
29            ChatMessageParseOutcome::Unrecognized(_) => {
30                panic!("expected Recognized variant");
31            }
32        }
33    }
34
35    #[test]
36    fn unrecognized_variant_exposes_raw_chat_message() {
37        let outcome = ChatMessageParseOutcome::Unrecognized(RawChatMessage {
38            tools_json: "[]".to_owned(),
39            text: "raw input".to_owned(),
40            is_partial: false,
41            ffi_error_message: "parser bailed".to_owned(),
42        });
43
44        match outcome {
45            ChatMessageParseOutcome::Unrecognized(raw) => {
46                assert_eq!(raw.tools_json, "[]");
47                assert_eq!(raw.text, "raw input");
48                assert!(!raw.is_partial);
49                assert_eq!(raw.ffi_error_message, "parser bailed");
50            }
51            ChatMessageParseOutcome::Recognized(_) => {
52                panic!("expected Unrecognized variant");
53            }
54        }
55    }
56}