An AI agent built to do Ralph loops - plan mode for planning and ralph mode for implementing.
1use rustagent::llm::openai::OpenAiClient;
2use rustagent::llm::{Message, ToolDefinition};
3
4#[test]
5fn test_openai_format_request_basic() {
6 let client = OpenAiClient::new("test-key".to_string(), "gpt-4".to_string(), 4096);
7
8 let messages = vec![Message::user("Hello")];
9
10 let request = client.format_request(&messages, &[]).unwrap();
11
12 assert_eq!(request["model"], "gpt-4");
13 assert_eq!(request["messages"][0]["role"], "user");
14 assert_eq!(request["messages"][0]["content"], "Hello");
15}
16
17#[test]
18fn test_openai_format_request_with_system() {
19 let client = OpenAiClient::new("test-key".to_string(), "gpt-4".to_string(), 4096);
20
21 let messages = vec![Message::system("You are helpful"), Message::user("Hello")];
22
23 let request = client.format_request(&messages, &[]).unwrap();
24
25 assert_eq!(request["messages"][0]["role"], "system");
26 assert_eq!(request["messages"][1]["role"], "user");
27}
28
29#[test]
30fn test_openai_format_request_with_tools() {
31 let client = OpenAiClient::new("test-key".to_string(), "gpt-4".to_string(), 4096);
32
33 let messages = vec![Message::user("Read file.txt")];
34
35 let tools = vec![ToolDefinition {
36 name: "read_file".to_string(),
37 description: "Read a file".to_string(),
38 parameters: serde_json::json!({
39 "type": "object",
40 "properties": {
41 "path": {"type": "string"}
42 },
43 "required": ["path"]
44 }),
45 }];
46
47 let request = client.format_request(&messages, &tools).unwrap();
48
49 assert!(request["tools"].is_array());
50 assert_eq!(request["tools"][0]["type"], "function");
51 assert_eq!(request["tools"][0]["function"]["name"], "read_file");
52}
53
54#[test]
55fn test_openai_format_request_with_tool_result() {
56 let client = OpenAiClient::new("test-key".to_string(), "gpt-4".to_string(), 4096);
57
58 let messages = vec![
59 Message::user("Read file.txt"),
60 Message::assistant("I'll read that file"),
61 Message::tool_result("call_123", "File contents here"),
62 ];
63
64 let request = client.format_request(&messages, &[]).unwrap();
65
66 assert_eq!(request["messages"][2]["role"], "tool");
67 assert_eq!(request["messages"][2]["tool_call_id"], "call_123");
68 assert_eq!(request["messages"][2]["content"], "File contents here");
69}