66 lines
2.0 KiB
Rust
66 lines
2.0 KiB
Rust
use PicoBot::providers::{ChatCompletionRequest, Message};
|
|
|
|
/// Test that message with special characters is properly escaped
|
|
#[test]
|
|
fn test_message_special_characters() {
|
|
let msg = Message {
|
|
role: "user".to_string(),
|
|
content: "Hello \"world\"\nNew line\tTab".to_string(),
|
|
};
|
|
|
|
let json = serde_json::to_string(&msg).unwrap();
|
|
let deserialized: Message = serde_json::from_str(&json).unwrap();
|
|
|
|
assert_eq!(deserialized.content, "Hello \"world\"\nNew line\tTab");
|
|
}
|
|
|
|
/// Test that multi-line system prompt is preserved
|
|
#[test]
|
|
fn test_multiline_system_prompt() {
|
|
let messages = vec![
|
|
Message {
|
|
role: "system".to_string(),
|
|
content: "You are a helpful assistant.\n\nFollow these rules:\n1. Be kind\n2. Be accurate".to_string(),
|
|
},
|
|
Message {
|
|
role: "user".to_string(),
|
|
content: "Hi".to_string(),
|
|
},
|
|
];
|
|
|
|
let json = serde_json::to_string(&messages[0]).unwrap();
|
|
assert!(json.contains("helpful assistant"));
|
|
assert!(json.contains("rules"));
|
|
assert!(json.contains("1. Be kind"));
|
|
}
|
|
|
|
/// Test ChatCompletionRequest serialization (without model field)
|
|
#[test]
|
|
fn test_chat_request_serialization() {
|
|
let request = ChatCompletionRequest {
|
|
messages: vec![
|
|
Message {
|
|
role: "system".to_string(),
|
|
content: "You are helpful".to_string(),
|
|
},
|
|
Message {
|
|
role: "user".to_string(),
|
|
content: "Hello".to_string(),
|
|
},
|
|
],
|
|
temperature: Some(0.7),
|
|
max_tokens: Some(100),
|
|
tools: None,
|
|
};
|
|
|
|
let json = serde_json::to_string(&request).unwrap();
|
|
|
|
// Verify structure
|
|
assert!(json.contains(r#""role":"system""#));
|
|
assert!(json.contains(r#""role":"user""#));
|
|
assert!(json.contains(r#""content":"You are helpful""#));
|
|
assert!(json.contains(r#""content":"Hello""#));
|
|
assert!(json.contains(r#""temperature":0.7"#));
|
|
assert!(json.contains(r#""max_tokens":100"#));
|
|
}
|