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