|
2 | 2 | mod tests { |
3 | 3 | // use super::*; |
4 | 4 | use ::std::error::Error; |
| 5 | + use serde_json::json; |
5 | 6 |
|
6 | 7 | use crate::pdl::{ |
7 | 8 | ast::{PdlBlock, PdlModelBlock, PdlParser, PdlTextBlock}, |
8 | | - interpreter::run, |
| 9 | + interpreter::{run, run_json}, |
9 | 10 | }; |
10 | 11 |
|
11 | 12 | use ollama_rs::generation::chat::MessageRole; |
@@ -35,42 +36,67 @@ mod tests { |
35 | 36 |
|
36 | 37 | #[test] |
37 | 38 | fn single_model_via_text_chain() -> Result<(), Box<dyn Error>> { |
38 | | - let (messages, _) = run( |
39 | | - &PdlBlock::Text( |
40 | | - vec![ |
41 | | - "hello".into(), |
42 | | - PdlBlock::Model(PdlModelBlock::new(DEFAULT_MODEL).build()), |
| 39 | + let (messages, _) = run_json( |
| 40 | + json!({ |
| 41 | + "text": [ |
| 42 | + "hello", |
| 43 | + { "model": DEFAULT_MODEL } |
43 | 44 | ] |
44 | | - .into(), |
45 | | - ), |
| 45 | + }), |
46 | 46 | false, |
47 | 47 | )?; |
48 | 48 | assert_eq!(messages.len(), 2); |
49 | 49 | assert_eq!(messages[0].role, MessageRole::User); |
50 | | - assert!(messages[0].content.contains("hello")); |
| 50 | + assert_eq!(messages[0].content, "hello"); |
51 | 51 | assert_eq!(messages[1].role, MessageRole::Assistant); |
52 | 52 | assert!(messages[1].content.contains("Hello!")); |
53 | 53 | Ok(()) |
54 | 54 | } |
55 | 55 |
|
| 56 | + #[test] |
| 57 | + fn two_models_via_text_chain() -> Result<(), Box<dyn Error>> { |
| 58 | + let (messages, _) = run_json( |
| 59 | + json!({ |
| 60 | + "text": [ |
| 61 | + "what is the fastest animal?", |
| 62 | + { "model": DEFAULT_MODEL }, |
| 63 | + "in europe?", |
| 64 | + { "model": DEFAULT_MODEL }, |
| 65 | + ] |
| 66 | + }), |
| 67 | + false, |
| 68 | + )?; |
| 69 | + assert_eq!(messages.len(), 4); |
| 70 | + assert_eq!(messages[0].role, MessageRole::User); |
| 71 | + assert_eq!(messages[0].content, "what is the fastest animal?"); |
| 72 | + assert_eq!(messages[1].role, MessageRole::Assistant); |
| 73 | + assert!(messages[1].content.contains("cheetah")); |
| 74 | + assert_eq!(messages[2].role, MessageRole::User); |
| 75 | + assert_eq!(messages[2].content, "in europe?"); |
| 76 | + assert_eq!(messages[3].role, MessageRole::Assistant); |
| 77 | + assert!( |
| 78 | + messages[3].content.contains("peregrine") |
| 79 | + || messages[3].content.contains("bison") |
| 80 | + || messages[3].content.contains("hare") |
| 81 | + || messages[3].content.contains("Eagle") |
| 82 | + || messages[3].content.contains("Greyhound") |
| 83 | + || messages[3].content.contains("gazelle") |
| 84 | + || messages[3].content.contains("lynx") |
| 85 | + ); |
| 86 | + Ok(()) |
| 87 | + } |
| 88 | + |
56 | 89 | #[test] |
57 | 90 | fn text_parser_json() -> Result<(), Box<dyn Error>> { |
58 | 91 | let json = "{\"key\": \"value\"}"; |
59 | | - let program = PdlBlock::Text( |
60 | | - vec![ |
61 | | - PdlBlock::Text( |
62 | | - PdlTextBlock::new(vec![json.into()]) |
63 | | - .def(&"foo") |
64 | | - .parser(PdlParser::Json) |
65 | | - .build(), |
66 | | - ), |
67 | | - "${ foo.key }".into(), |
| 92 | + let program = json!({ |
| 93 | + "text": [ |
| 94 | + { "def": "foo", "parser": "json", "text": [json] }, |
| 95 | + "${ foo.key }" |
68 | 96 | ] |
69 | | - .into(), |
70 | | - ); |
71 | | - println!("{}", serde_json::to_string(&program)?); |
| 97 | + }); |
72 | 98 |
|
73 | | - let (messages, _) = run(&program, false)?; |
| 99 | + let (messages, _) = run_json(program, false)?; |
74 | 100 | assert_eq!(messages.len(), 2); |
75 | 101 | assert_eq!(messages[0].role, MessageRole::User); |
76 | 102 | assert_eq!(messages[0].content, json); |
|
0 commit comments