package ocaml-ai-sdk

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file generate_text_result.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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
type tool_call = {
  tool_call_id : string;
  tool_name : string;
  args : Yojson.Basic.t;
}

type pending_tool_approval = {
  tool_call_id : string;
  tool_name : string;
  args : Yojson.Basic.t;
  approved : bool;
}

type tool_result = {
  tool_call_id : string;
  tool_name : string;
  result : Yojson.Basic.t;
  is_error : bool;
  provider_metadata : Yojson.Basic.t option;
}

type step = {
  text : string;
  reasoning : string;
  tool_calls : tool_call list;
  tool_results : tool_result list;
  finish_reason : Ai_provider.Finish_reason.t;
  usage : Ai_provider.Usage.t;
  response_model : string option;
  provider_metadata : Ai_provider.Provider_options.t option;
}

type t = {
  text : string;
  reasoning : string;
  tool_calls : tool_call list;
  tool_results : tool_result list;
  steps : step list;
  finish_reason : Ai_provider.Finish_reason.t;
  usage : Ai_provider.Usage.t;
  response : Ai_provider.Generate_result.response_info;
  warnings : Ai_provider.Warning.t list;
  output : Yojson.Basic.t option;
}

let join_text steps =
  steps |> List.map (fun (s : step) -> s.text) |> List.filter (fun s -> String.length s > 0) |> String.concat "\n"

let join_reasoning steps =
  steps |> List.map (fun (s : step) -> s.reasoning) |> List.filter (fun s -> String.length s > 0) |> String.concat "\n"

let add_usage (a : Ai_provider.Usage.t) (b : Ai_provider.Usage.t) : Ai_provider.Usage.t =
  let input_tokens = a.input_tokens + b.input_tokens in
  let output_tokens = a.output_tokens + b.output_tokens in
  {
    input_tokens;
    output_tokens;
    total_tokens =
      (match a.total_tokens, b.total_tokens with
      | Some x, Some y -> Some (x + y)
      | _ -> Some (input_tokens + output_tokens));
  }