My aggregated monorepo of OCaml code, automaintained
at doc-fixes 66 lines 1.9 kB view raw
1(*--------------------------------------------------------------------------- 2 Copyright (c) 2025 Anil Madhavapeddy <anil@recoil.org>. All rights reserved. 3 SPDX-License-Identifier: ISC 4 ---------------------------------------------------------------------------*) 5 6module J = Jsont.Json 7 8type t = { 9 name : string; 10 description : string; 11 input_schema : Jsont.json; 12 handler : Tool_input.t -> (Jsont.json, string) result; 13} 14 15let create ~name ~description ~input_schema ~handler = 16 { name; description; input_schema; handler } 17 18let name t = t.name 19let description t = t.description 20let input_schema t = t.input_schema 21let call t input = t.handler input 22 23(* Convenience constructors using Jsont.Json builders *) 24 25let text_result s = 26 J.list [ 27 J.object' [ 28 J.mem (J.name "type") (J.string "text"); 29 J.mem (J.name "text") (J.string s) 30 ] 31 ] 32 33let error_result s = 34 J.list [ 35 J.object' [ 36 J.mem (J.name "type") (J.string "text"); 37 J.mem (J.name "text") (J.string s); 38 J.mem (J.name "is_error") (J.bool true) 39 ] 40 ] 41 42(* Schema helpers *) 43 44let schema_string = J.object' [J.mem (J.name "type") (J.string "string")] 45let schema_int = J.object' [J.mem (J.name "type") (J.string "integer")] 46let schema_number = J.object' [J.mem (J.name "type") (J.string "number")] 47let schema_bool = J.object' [J.mem (J.name "type") (J.string "boolean")] 48 49let schema_array item_schema = 50 J.object' [ 51 J.mem (J.name "type") (J.string "array"); 52 J.mem (J.name "items") item_schema 53 ] 54 55let schema_string_enum values = 56 J.object' [ 57 J.mem (J.name "type") (J.string "string"); 58 J.mem (J.name "enum") (J.list (List.map J.string values)) 59 ] 60 61let schema_object props ~required = 62 J.object' [ 63 J.mem (J.name "type") (J.string "object"); 64 J.mem (J.name "properties") (J.object' (List.map (fun (k, v) -> J.mem (J.name k) v) props)); 65 J.mem (J.name "required") (J.list (List.map J.string required)) 66 ]