Source file convert_tools.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
open Melange_json.Primitives
type cc = Cache_control.t
let cc_to_json (cc : cc) = Cache_control.breakpoint_to_json cc.cache_type
type anthropic_tool = {
name : string;
description : string option; [@json.option] [@json.drop_default]
input_schema : Melange_json.t;
cache_control : cc option; [@json.option] [@json.drop_default]
}
[@@deriving to_json]
type tool_choice_type_json = { type_ : string [@json.key "type"] } [@@deriving to_json]
type tool_choice_specific_json = {
type_ : string; [@json.key "type"]
name : string;
}
[@@deriving to_json]
type anthropic_tool_choice =
| Tc_auto
| Tc_any
| Tc_tool of { name : string }
let convert_single_tool (tool : Ai_provider.Tool.t) : anthropic_tool =
{ name = tool.name; description = tool.description; input_schema = tool.parameters; cache_control = None }
let convert_tools ~tools ~tool_choice =
match tool_choice with
| Some Ai_provider.Tool_choice.None_ -> [], None
| None | Some Ai_provider.Tool_choice.Auto -> List.map convert_single_tool tools, Some Tc_auto
| Some Ai_provider.Tool_choice.Required -> List.map convert_single_tool tools, Some Tc_any
| Some (Ai_provider.Tool_choice.Specific { tool_name }) ->
List.map convert_single_tool tools, Some (Tc_tool { name = tool_name })
let anthropic_tool_choice_to_json = function
| Tc_auto -> tool_choice_type_json_to_json { type_ = "auto" }
| Tc_any -> tool_choice_type_json_to_json { type_ = "any" }
| Tc_tool { name } -> tool_choice_specific_json_to_json { type_ = "tool"; name }