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 = match serde_json::to_value(parameters) {
23 Ok(value) => value,
24 Err(error) => panic!("Schema serialization must succeed: {error}"),
25 };
26 json!({
27 "type": "function",
28 "function": {
29 "name": name,
30 "description": description,
31 "strict": strict,
32 "parameters": params
33 }
34 })
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[derive(schemars::JsonSchema)]
42 #[expect(dead_code)]
43 struct TestInput {
44 message: String,
45 }
46
47 #[test]
48 fn test_render_function() {
49 let schema = schemars::schema_for!(TestInput);
50 let rendered = render_function("greet", "Greet someone", &schema, true);
51
52 assert_eq!(rendered["type"], "function");
53 assert_eq!(rendered["function"]["name"], "greet");
54 assert_eq!(rendered["function"]["description"], "Greet someone");
55 assert_eq!(rendered["function"]["strict"], true);
56 assert!(rendered["function"]["parameters"].is_object());
57 }
58
59 #[test]
60 fn test_render_function_non_strict() {
61 let schema = schemars::schema_for!(TestInput);
62 let rendered = render_function("greet", "Greet someone", &schema, false);
63
64 assert_eq!(rendered["function"]["strict"], false);
65 }
66}