package ocaml-ai-sdk

  1. Overview
  2. Docs
OCaml AI SDK - Provider abstraction for AI models

Install

dune-project
 Dependency

Authors

Maintainers

Sources

ocaml-ai-sdk-0.2.tbz
sha256=17063971a74ccd72619a43ecfcb29d28cdf08f90d406a960bd475f65fee1a0d9
sha512=1f3f2d1d7fa4f53843cc1b303cbf9d6dcc85780e7c768ced723f3de83ea897748fa231b48e729216abcc069dee818edc6751a45271541e8a007369bf6e9d23e3

doc/src/ocaml-ai-sdk.ai_core/generate_text_result.ml.html

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
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;
}

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));
  }