agentic_tools_core/providers/
openai.rs1use schemars::Schema;
4use serde_json::{Value, json};
5
6pub fn render_function(name: &str, description: &str, parameters: &Schema, strict: bool) -> Value {
21 let params = serde_json::to_value(parameters).expect("Schema serialization must succeed");
22 json!({
23 "type": "function",
24 "function": {
25 "name": name,
26 "description": description,
27 "strict": strict,
28 "parameters": params
29 }
30 })
31}
32
33#[cfg(test)]
34mod tests {
35 use super::*;
36
37 #[derive(schemars::JsonSchema)]
38 #[allow(dead_code)]
39 struct TestInput {
40 message: String,
41 }
42
43 #[test]
44 fn test_render_function() {
45 let schema = schemars::schema_for!(TestInput);
46 let rendered = render_function("greet", "Greet someone", &schema, true);
47
48 assert_eq!(rendered["type"], "function");
49 assert_eq!(rendered["function"]["name"], "greet");
50 assert_eq!(rendered["function"]["description"], "Greet someone");
51 assert_eq!(rendered["function"]["strict"], true);
52 assert!(rendered["function"]["parameters"].is_object());
53 }
54
55 #[test]
56 fn test_render_function_non_strict() {
57 let schema = schemars::schema_for!(TestInput);
58 let rendered = render_function("greet", "Greet someone", &schema, false);
59
60 assert_eq!(rendered["function"]["strict"], false);
61 }
62}