package ocaml-ai-sdk
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
OCaml AI SDK - Provider abstraction for AI models
Install
dune-project
Dependency
Authors
Maintainers
Sources
ocaml-ai-sdk-0.6.1.tbz
sha256=cb3b82428abcda76c02ec92f8103a4db28edf3f42795794a37135e9a3c40af96
sha512=11be8889ee25bee67b2be00553c42a4692bc73e5ce23985e8bb87f8a07e9d8f556b5a63b219fe5fe30366c8b0d4edae494afa80ccfbfcb112f1fa1e458de55bf
doc/src/ocaml-ai-sdk.ai_provider/sse.ml.html
Source file sse.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 47type event = { event_type : string; data : string; } let parse_events lines = let current_event = ref "" in let current_data = Buffer.create 256 in let stream, push = Lwt_stream.create () in let emit () = if String.length !current_event > 0 || Buffer.length current_data > 0 then begin let evt = { event_type = !current_event; data = Buffer.contents current_data } in push (Some evt); current_event := ""; Buffer.clear current_data end in Lwt.async (fun () -> try%lwt let%lwt () = Lwt_stream.iter (fun line -> match line with | "" -> emit () | line when String.starts_with ~prefix:":" line -> () | line when String.starts_with ~prefix:"event:" line -> let value = String.trim (String.sub line 6 (String.length line - 6)) in current_event := value | line when String.starts_with ~prefix:"data:" line -> let value = String.sub line 5 (String.length line - 5) in let value = if String.length value > 0 && Char.equal (String.get value 0) ' ' then String.sub value 1 (String.length value - 1) else value in if Buffer.length current_data > 0 then Buffer.add_char current_data '\n'; Buffer.add_string current_data value | _ -> ()) lines in emit (); push None; Lwt.return_unit with exn -> push None; Lwt.fail exn); stream
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>