XJYNC4STRIEVS6TAJ4ZHIK35KDQD4ANUC534MKRIRKKF55F5BCXAC
x
LU
Lb
LU
LU
LU
Lb
(ocamlc /Users/david/.opam/ant/bin/ocamlc.opt)
(ocaml_config_vars (afl_instrument false) (architecture amd64) (asm "cc -c -Wno-trigraphs") (asm_cfi_supported true) (ast_impl_magic_number Caml1999M033) (ast_intf_magic_number Caml1999N033) (bytecomp_c_compiler "cc -O2 -fno-strict-aliasing -fwrapv -pthread -D_FILE_OFFSET_BITS=64 ") (bytecomp_c_libraries "-L/usr/local/Cellar/zstd/1.5.5/lib -lzstd -lpthread") (c_compiler cc) (ccomp_type cc) (cma_magic_number Caml1999A033) (cmi_magic_number Caml1999I033) (cmo_magic_number Caml1999O033) (cmt_magic_number Caml1999T033) (cmx_magic_number Caml1999Y033) (cmxa_magic_number Caml1999Z033) (cmxs_magic_number Caml1999D033) (default_executable_name a.out) (default_safe_string true) (exec_magic_number Caml1999X033) (ext_asm .s) (ext_dll .so) (ext_exe "") (ext_lib .a) (ext_obj .o) (flambda false) (flat_float_array true) (function_sections false) (host x86_64-apple-darwin23.3.0) (int_size 63) (linear_magic_number Caml1999L033) (model default) (naked_pointers false) (native_c_compiler "cc -O2 -fno-strict-aliasing -fwrapv -pthread -D_FILE_OFFSET_BITS=64 ") (native_c_libraries " -lpthread") (native_compiler true) (native_dynlink true) (native_pack_linker "ld -r -o ") (ocamlc_cflags "-O2 -fno-strict-aliasing -fwrapv -pthread ") (ocamlc_cppflags " -D_FILE_OFFSET_BITS=64 ") (ocamlopt_cflags "-O2 -fno-strict-aliasing -fwrapv -pthread ") (ocamlopt_cppflags " -D_FILE_OFFSET_BITS=64 ") (os_type Unix) (safe_string true) (standard_library /Users/david/.opam/ant/lib/ocaml) (standard_library_default /Users/david/.opam/ant/lib/ocaml) (supports_shared_libraries true) (system macosx) (systhread_supported true) (target x86_64-apple-darwin23.3.0) (version 5.1.1) (windows_unicode false) (with_frame_pointers false) (word_size 64))
((6:ocamlc37:/Users/david/.opam/ant/bin/ocamlc.opt)(17:ocaml_config_vars((14:afl_instrument5:false)(12:architecture5:amd64)(3:asm20:cc -c -Wno-trigraphs)(17:asm_cfi_supported4:true)(21:ast_impl_magic_number12:Caml1999M033)(21:ast_intf_magic_number12:Caml1999N033)(19:bytecomp_c_compiler71:cc -O2 -fno-strict-aliasing -fwrapv -pthread -D_FILE_OFFSET_BITS=64 )(20:bytecomp_c_libraries54:-L/usr/local/Cellar/zstd/1.5.5/lib -lzstd -lpthread)(10:c_compiler2:cc)(10:ccomp_type2:cc)(16:cma_magic_number12:Caml1999A033)(16:cmi_magic_number12:Caml1999I033)(16:cmo_magic_number12:Caml1999O033)(16:cmt_magic_number12:Caml1999T033)(16:cmx_magic_number12:Caml1999Y033)(17:cmxa_magic_number12:Caml1999Z033)(17:cmxs_magic_number12:Caml1999D033)(23:default_executable_name5:a.out)(19:default_safe_string4:true)(17:exec_magic_number12:Caml1999X033)(7:ext_asm2:.s)(7:ext_dll3:.so)(7:ext_exe0:)(7:ext_lib2:.a)(7:ext_obj2:.o)(7:flambda5:false)(16:flat_float_array4:true)(17:function_sections5:false)(4:host25:x86_64-apple-darwin23.3.0)(8:int_size2:63)(19:linear_magic_number12:Caml1999L033)(5:model7:default)(14:naked_pointers5:false)(17:native_c_compiler71:cc -O2 -fno-strict-aliasing -fwrapv -pthread -D_FILE_OFFSET_BITS=64 )(18:native_c_libraries12: -lpthread)(15:native_compiler4:true)(14:native_dynlink4:true)(18:native_pack_linker9:ld -r -o )(13:ocamlc_cflags43:-O2 -fno-strict-aliasing -fwrapv -pthread )(15:ocamlc_cppflags24: -D_FILE_OFFSET_BITS=64 )(15:ocamlopt_cflags43:-O2 -fno-strict-aliasing -fwrapv -pthread )(17:ocamlopt_cppflags24: -D_FILE_OFFSET_BITS=64 )(7:os_type4:Unix)(11:safe_string4:true)(16:standard_library32:/Users/david/.opam/ant/lib/ocaml)(24:standard_library_default32:/Users/david/.opam/ant/lib/ocaml)(25:supports_shared_libraries4:true)(6:system6:macosx)(19:systhread_supported4:true)(6:target25:x86_64-apple-darwin23.3.0)(7:version5:5.1.1)(15:windows_unicode5:false)(19:with_frame_pointers5:false)(9:word_size2:64))))
open Cohttp
open Cohttp_lwt_unix
open Lwt
open Yojson.Basic.Util
let read_stdin_to_string () =
let rec read_lines acc =
try
let line = input_line stdin in
read_lines (acc ^ line ^ "\n")
with End_of_file -> acc
in
read_lines ""
let headers =
Header.init () |> fun h ->
Header.add h "x-api-key" ant_api_key |> fun h ->
Header.add h "anthropic-version" "2023-06-01" |> fun h ->
Header.add h "content-type" "application/json"
in
in
let uri = Uri.of_string "https://cdecary-memos.fly.dev/api/v2/memos" in
Client.post ~headers ~body:(`String body) uri >>= fun (resp, _) ->
let status = resp |> Response.status in
if Code.is_success (Code.code_of_status status) then Lwt.return_unit
else Lwt.fail (Failure "Error posting data to Memos")
(* Main function that orchestrates the process *)
let main () =
let prompt = read_stdin_to_string () in
Printf.printf "(* %s *)\n\n" prompt;
get_from_claude prompt () >>= fun text ->
Printf.printf "(* %s *)\n\n" text;
post_to_memos prompt text >>= fun () -> Lwt.return_unit
let () = Lwt_main.run (main ())
let body =
`Assoc
[
("model", `String model);
("max_tokens", `Int max_tokens);
( "messages",
`List
[ `Assoc [ ("role", `String "user"); ("content", `String prompt) ] ]
);
]
|> Yojson.Basic.to_string
in
Client.post ~headers ~body:(Cohttp_lwt.Body.of_string body) ant_uri
>>= fun (resp, body) ->
let status = resp |> Response.status in
if Code.is_success (Code.code_of_status status) then
body |> Cohttp_lwt.Body.to_string >|= fun body_str ->
let json = Yojson.Basic.from_string body_str in
let content = json |> member "content" in
index 0 content |> member "text" |> to_string
else Lwt.fail (Failure "Error fetching data from Anthropic")
(* Function to post data to Memos *)
let post_to_memos prompt text =
let memo = prompt ^ "\n\n" ^ text ^ "\n\n#claude" in
let body =
`Assoc [ ("content", `String memo); ("visibility", `String "PRIVATE") ]
|> Yojson.Basic.to_string
in
let api_key = "Bearer " ^ memos_api_key in
let headers =
Header.init () |> fun h ->
Header.add h "Authorization" api_key |> fun h ->
Header.add h "Content-Type" "application/json"
(* Function to make a request to Anthropic *)
let get_from_claude prompt () =
let model = "claude-3-haiku-20240307" in
let max_tokens = 1024 in
let ant_uri = Uri.of_string "https://api.anthropic.com/v1/messages" in
(* Functions to get api keys *)
let ant_api_key = get_env "ANTHROPIC_API_KEY" ()
let memos_api_key = get_env "MEMOS_API_KEY" ()
(* Function to get env variable *)
let get_env api () =
try Sys.getenv api
with Not_found -> failwith api ^ " environment variable not found"
(* Read from stdin *)
H;
LU
Lb
LU
LU
LU
LU
LU
LH
Lm
LU
LH
Lm
LH
Lm
LH
Lm
LH
Lm
LU
LU
LX
LU
LU
Lm
La
Ll
LY
Ld
La
LU
LU
LU
LU
LU
LU
LU
L\
LN
LU
Lp
LX
LU
LU
LU
LU
LU
LS
LS
LS
LS
LS
LS
LS
LS
LY
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LV
Lj
LV
LV
LV
LV
LV
LV
LV
LV
L
L\
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
Lj
LV
LV
LV
LV
LV
LV
LV
LV
L
LX
LX
LU
LU
LQ
LS
LU
LU
LU
LU
LU
LU
LX
LU
LU
LU
LX
LX
LU
LU
LU
LU
Lm
LID mDl
LU
LU
LU
LU
LU
LU
LU
Ls
LU
La
LU
LQ
LU
LU
LU
Lf
Lf
L[
LU
LU
LU
LU
LU
LU
LU
Lj
LU
LU
LU
LU
Lw
Lg
Ls
LU
LU
LS
LS
Lj
LU
Lf
LU
LU
LP
LS
LU
LU
LX
LX
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LO
LO
LO
LO
LO
LtA0I8G0E4���T
LU
LU
LU
LU
Lv
LU
LU
LU
Lv
LT
LT
LT
LU
LU
LU
LU
LU
LU
LQ
LU
LU
LU
LX
LU
LU
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LV
LV
LV
LV
LV
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LV
LV
LV
LV
LV
LV
Lb
Lb
LT
Ld
Lq
LLA@H
Lo
LR
LR
LR
LR
L{8D@m8D0[
LO
Ln
Lx
LM
L[
L\
LU
LU
Lf
Lb
LU
LQ
L[
LU
La
LU
Lu
Lu
Lu
Lw
Lw
L`AO
LqAM
LIE@t
LO
L\Eo
LX
Li
LH
LU
Lb
LX
LU
LU
LU
LU
LU
LU
LQ
LU
LX
LU
LU
LU
LU
LU
LU
LU
LU
LX
LX
LX
Lf
Lf
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
Le
LX
LX
Ll
LN
LWAG
LAOEJAVAG
L~
L~
LGA@]HG@E�������$���L
LI
LK
L[
LF
Ln
LF
LU
LU
LU
LU
LU
LX
LU
Li
LU
LH
Lm
LQ
LU
LX
LL
Lu
LU
LU
L\
LU
L{
Lb
LU
LU
LU
LV
LX
LU
LX
LU
LX
LU
LU
LU
LU
LU
LU
LU
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LX
LH
Li
Lf
LV
LV
LV
LX
LX
LX
LX
LX
Lg
LX
LX
LX
LX
Lg
Lg
LID [D~
LID [D~
LX
LX
LX
LX
LX
LX
LX
LV
LV
LV
LV
LV
Lc
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LU
Lo
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LY
LY
LY
LY
LV
LV
LV
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
L_
L_
L_
L_
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LTA������$���,
LY
Lj
Ld
LS
LS
LS
LS
LS
LS
LS
LS
LS
LB
LQ
LQ
LU
LR
LR
LN
LQ
LU
LN
LR
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LR
LN
LU
LU
L\
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
L\
LU
L_
LX
L\
LX
L\
LX
L\
LX
L_
LX
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LZ
L_
L\
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LY
Lm
L
LU
LV
LV
L`
L]
L]
Lj
Ly
LB
LY
LY
Lc
L`
L`
Lj
LB
LN
LN
LR
L\
LR
LR
L[
L\
Lf
L
LOA W
LS
LS
LZ
L\
LX
LX
LX
LX
LX
LU
LU
LX
LX
LX
LX
LU
LU
LU
LX
LU
LU
LU
LU
LU
LX
LX
LX
LX
LX
LX
LX
LX
LU
LU
LX
LX
LX
LU
LU
LX
LX
LX
L_
LX
LX
LU
L_
Ll
L_
Ll
L_
Ll
Ll
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LX
LO
Lg
Ll
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LX
LO
Lg
Ll
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
LV
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LX
LO
Lg
Li
LU
LU
L\
LU
LU
LX
LX
LX
LX
LX
LU
LU
LX
LU
LU
LU
L`
LU
LU
LU
LU
LS
LU
LU
LU
LU
LU
LU
L
Ld
LQ
LU
LK
LIA0{
LY
LY
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LY
LY
LY
LY
LY
LY
LY
LY
LY
L_
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LX
LV
LV
LV
LV
LV
LV
LV
LV
LV
LX
LY
LY
LY
LY
LY
LX
LX
LY
LY
LY
LY
LX
LX
LX
LX
LX
LX
LX
LX
LX
LV
LX
LX
Le
Le
Lt
Lt
L_
L_
L_
LX
LX
LX
LX
LX
Lp
Lp
LT
LT
LT
LX
LX
LX
LX
LX
�������DQ
LY
LY
LY
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LV
LY
LY
LY
LY
LY
LY
LY
LY
LY
L_
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LX
LV
LV
LV
LV
LV
LV
LV
LV
LV
LX
LY
LY
LY
LY
LY
LX
LX
LY
LY
LY
LY
LX
Lj
LW
LN
LU
LU
LU
LU
LU
LU
LV
LX
LN
LU
LX
LV
LX
LX
LX
LX
LX
LX
LX
LX
LX
LV
LX
LX
LX
LX
L
LX
LH
Lp
LX
LX
LX
LX
LX
LX
LB
LU
LX
LH
Lp
L[
LX
LX
LX
LX
Lg
LY
LY
LU
LU
LU
LQ
LU
Lj
LS
LU
LS
LU
LU
LU
LU
Lh
LS
LU
LU
LY
L\
LX
LV
LV
LQ
LU
LU
LU
LU
LU
LU
LX
LX
LU
LU
LU
LU
LU
L)
LQ
LU
LU
LU
LU
LH
Lm
Lv
LR
LR
Ln
LY
LU
LX
LU
LX
LU
LU
LU
LU
LX
LU
LU
LX
LX
LX
LX
LX
LX
LX
LU
LX
LX
LX
LU
LU
LU
LU
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LU
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LX
LX
LX
LX
LX
LU
LU
LU
LU
LX
LX
LU
LU
LU
LU
LH
Lm
Lv
LQ
LU
LL
LM
LM
LI
LO
LO
LK
LI
LM
LL
LJ
LN
LI
LM
Lm
LQ
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LI(D0l
LD(D y
LIAo
LM
LL
Le
LI(D0V(D _A Y
LI(D0V(D oA Y
LMEY
�������V `
LJE A
LM
LI
LZ
L`
LI
LK
LL
Li
LO
LQ
LQ
LQ
Lk
LZ
LNE0B
Lm
LH
Lm
LH
Lp
LX
LU
LX
LQ
LU
LX
LX
LX
LX
LU
LU
LU
LU
LU
LU
LX
LU
LU
LU
LX
Lg
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LQ
LU
LX
LU
LU
LU
LX
LU
LX
LX
LU
LU
LX
LU
LX
LU
LU
LU
LU
LU
LU
LU
LX
LX
LX
LX
LX
LX
LU
LU
LU
LU
LU
LU
LU
LU
LU
L]AV
LZ
LC
LO
LU
LN
LR
LX
LX
LU
LU
LX
LX
LU
LU
LX
LX
LU
LU
LX
LX
LU
LU
L_
L\
LU
LU
LX
LX
LU
LU
LX
LU
LU
LU
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LO
LS
LS
LU
LX
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
Lg
Lg
Lg
Lg
LU
LU
LR
LR
LN
LU
LU
LU
LR
LR
LR
LU
LU
LU
LDA B(G B����������\
LX
LX
LU
LU
LQ
LX
LX
LX
LU
LU
LU
LX
LX
LX
LU
LU
LU
LX
LX
LX
LU
LU
LU
LX
LX
LX
LU
LU
LU
LX
LX
LX
LX
LX
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LU
LR
LN
LU
LU
LR
LR
LU
LU
LQAO
LQ
LU
LN
LR
LU
LU
LU
LU
LU
LU
LU
LU
LU
LX
LQ
LU
LU
LU
LU
LU
LU
LU
LU
LU
LX
LU
LU
LU
LU
LX
LU
LU
LU
LX
LR
LR
LQ
LS
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LX
LU
LU
LU
LY
L]
LX
LH
Lp
LH
Lp
LX
LV
LX
LX
LU
LU
LU
LU
LX
LU
LU
LU
LB
LQ
LQ
LU
LR
LR
LR
LU
LX
LR
LU
LJ
LR
LV
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LS
LS
LS
LS
LS
LS
LS
LS
LS
LU
LU
LU
LU
LX
LX
LX
LX
LX
Lw(G E������4���T
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LX
LH
Lp
LX
LX
LX
LX
LX
LX
LX
LX
LX
Lp
LX
LX
Lt
LH
Lm
LX
LX
LX
LX
LN
LX
LU
LU
LX
LU
LU
LX
LU
LU
LU
LU
LvA0tE0L
Ll
LDA_
LU
LU
LU
LU
LU
LX
LU
LU
LX
LX
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LI
LQ
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
Lg
LX
LX
LX
LX
LX
LX
LQ
Le
LU
LU
LX
LX
LX
LU
LU
LU
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
Lr
Lf
LT
Lg
LT
Lg
LT
Lg
LQ
LX
Lg
LT
Lg
LT
Lg
LT
LX
LX
LX
LX
LX
LX
Lg
Li
LT
Lj
LT
Lj
LT
Lj
LT
LX
LX
Lj
LT
Lj
LT
LU
LX
LX
LR
LU
LU
LX
LX
LU
LH
Lp
LX
LU
LX
LU
LX
LU
LH
Lp
LU
LX
LU
LU
LU
LU
LU
LU
LX
LX
LX
LU
LU
L\
LU
LQ
LU
LS
LS
LS
LS
LS
LS
LU
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
L_
LY
L_
LY
LY
L_
LY
L_
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LX
LU
LX
LX
LX
LX
LX
LX
LX
LT
LX
LU
LU
LU
LU
LU
LU
LS
LU
LU
LU
LX
Ll
LQ
LU
Lq
LU
LX
LX
LX
LX
LX
LU
Lf
LU
L\
LJ
LR
LS
LR
LS
LS
Ly
LIA B(G E���������
LU
LU
LQ
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
Li
LH
Lm
LU
LU
LY
LU
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
L_
L_
LY
LY
LY
LY
LV
LV
LV
LV
LV
LV
LV
LV
LV
LY
LV
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LX
LY
L_
L_
L_
LY
LY
L_
LY
L_
L_
L_
L_
L_
L_
L_
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LQ
LU
LX
LIAw
LIAM
LIA\
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LN
LQ
LH
Lm
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LX
LX
LX
L[
L[
LM
Lf
LM
Lf
LM
Lf
LM
Lf
LM
Lf
LM
Lf
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
Le
Le
Le
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
Lg
LX
LX
Ll
LX
Ll
LX
LX
LX
L^
Lb
LS
LS
LS
LS
LS
LS
LS
LX
LX
LX
LU
Lf
LU
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LH
Lp
LX
LX
LV
LX
LX
Ll
Lk
LR
LU
LU
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LV
LV
LV
LV
LV
LX
LX
LR
LX
LX
LX
LB
LB
LU
LU
LU
LQ
LU
LU
LU
LYD p
LT
LDDR
LT
L{
LV
Li
LU
LU
LU
LU
LU
Ld
LU
LU
LU
LU
LU
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LU
LU
LX
LQ
LU
LX
LU
LX
LU
LX
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LH
Lp
L\
LX
LX
LX
LX
L\
LX
LX
LX
LX
LX
L[
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LX
LX
LX
LU
LU
LU
LU
LU
LU
LU
LU
LX
LX
LX
LX
LO
LS
LV
LV
LS
LS
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LX
LV
LV
LX
LX
LX
LX
LX
LX
LX
LIA0U
LIA0{
LIA0i
LIA@v
LIA0v
LIA Z
LIA W
LQ
LU
LU
LU
LU
LU
L\
LU
LU
LX
LU
LU
LR
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
L[
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LU
LU
LU
LU
LX
LX
LX
LS
LU
LU
LX
LX
LU
LU
LU
LU
LU
LU
LU
LU
LGA0D
L|
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LQ
LU
Lb
LU
LU
LU
LU
LU
LX
LU
LU
LU
LU
LU
LU
LX
LX
LX
LU
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
L_
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LGA0D
L|
�������DX
LX
LX
LX
LX
LU
L_
L_
LQ
LU
LU
LY
LY
LU
LY
LX
LX
LX
LU
L\
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LU
LU
LU
LX
LX
LX
LX
LU
LU
LX
LX
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LQ
LU
LS
LU
LU
LU
LU
Lj
L1
LWHDPZHD@.
Lw
L]
LZA0t8G0E������,���
Lz(G E����D���<
Lf
LX
LQ
LU
LU
LU
LU
LU
LU
LU
LX
LU
LU
LU
LX
LU
LU
LU
LX
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LH
Lp
LX
LV
LX
LX
LX
LX
LX
LX
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LX
LU
LX
LX
LU
LU
LX
LX
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LX
LU
LX
LX
LU
LU
LX
LX
LU
LU
LU
LU
LU
LS
LU
LU
LU
LU
LU
LU
LU
LX
LX
LX
LX
LU
LU
LX
LX
LM
LM
LX
LX
LX
LX
LU
LU
LU
LU
LU
LU
LU
LU
LX
LX
LX
LU
LU
LU
LU
LU
LU
LU
LE
LE
LE
LIhDp\hD`v
LmA`E
L^
LH
Lm
LH
Lm
L
LX
LU
Ll
LU
LU
LU
LU
LU
LU
LQ
LU
LU
LU
LU
LU
Li
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LX
LO
LM
LIAO
LM
LGA~
LQ
LN
LGEY
LN
Li
LU
LU
LU
LR
LU
LU
LR
LU
LU
LR
LU
LU
LU
LU
LU
LX
LX
LX
LX
LU
LU
LU
LU
LU
LU
LU
LU
LX
LU
LV
LV
LU
LU
LU
LX
LX
LU
LX
LX
LX
LX
LX
LU
LX
LX
LX
LX
LX
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LU
LU
LQ
LU
LU
LU
LQ
Lm
LU
LU
LU
LQ
LX
LX
LU
LX
LX
LX
LX
LX
LX
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
L[
LX
L[
LX
LX
LX
LX
L[
LH
Lp
LX
LX
LX
LX
LX
LX
L[
L[
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
L[
L[
L[
L[
LX
LX
LX
LX
LU
LU
LU
LX
LX
LX
LX
LX
LU
LU
LU
LU
LU
LR
LQ
LU
LU
LU
LU
LU
LU
LU
LR
Lm
LH
Lm
LH
Lp
LX
LX
LX
LX
LX
LX
LX
LU
LU
Lf
LX
LX
LX
LX
LU
LU
LU
LQ
LU
LU
LX
LX
LX
LX
LU
LX
LX
LX
LX
LX
LZ
LZ
LfBH
LU
LU
LH
Lm
La
LU
LU
LU
LU
LQ
LU
LU
LU
LU
LY
LU
L[
LY
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LO
LK
LK
LK
LX
LX
LX
LV
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
Lv
LX
LC
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LU
LQ
LU
LX
LU
LX
LR
L\
LIA@L
LIA0u
LO
LtE@JA@KA@VHG@E��4���
LIA@N
LIA0z
LO
LX
LX
LID [D[D [DH
Ll
LU
LX
Lm
LX
LQ
LU
LU
LX
LU
LU
LX
LX
LU
LX
LU
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LU
LX
LU
LX
LU
LX
LU
LU
LX
LU
LX
LU
LX
LX
LX
LX
Lm
Lv
Lk
LS
LO
L}
LQ
LU
LU
LU
LU
LU
LU
LU
LU
LU
LRA X
LR
LR
LR
LX
LX
LX
LR
LR
LR
LR
LP
LB
LT
LT
LP
LT
LP
LT
LT
LT
LT
LR
LU
Lu
LU(D0s(D Q
Lw
Lc
LR
LN
L^
L{
L|
LK
LU
LU
LIAG����,���<
LIAG����$���l
LM
LV
LV
LQ
Lt
Lt
Lt
Lu
Li
Lj
LX
LX
LX
LX
Li
Li
LU
LU
LU
LU
LU
LX
LU
LU
LX
LU
LX
LU
LU
LU
LU
LU
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LX
LU
LX
LQ
LU
LQ
LX
LU
LU
LA
LI
LM
LM
LI
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LX
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LS
LY
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LS
LU
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LS
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LY
LU
LQ
%s
��h
��d
��
Error: s-expression parsing error;
Error: s-expression parsing error;
%s
Error: s-expression conversion error;
exception %s
Error: s-expression conversion error;
��l
��h
��d
��0
��,
�����| ��p
��\
Lb
open Cohttp
open Cohttp_lwt_unix
open Lwt
open Yojson.Basic.Util
(* Read from stdin *)
let read_stdin_to_string () =
let rec read_lines acc =
try
let line = input_line stdin in
read_lines (acc ^ line ^ "\n")
with End_of_file -> acc
in
read_lines ""
(* Function to get env variable *)
let get_env api () =
try
Sys.getenv api
with
| Not_found -> failwith api ^ " environment variable not found"
(* Functions to get api keys *)
let ant_api_key = get_env "ANTHROPIC_API_KEY" ()
let headers =
Header.init () |> fun h ->
Header.add h "x-api-key" ant_api_key |> fun h ->
Header.add h "anthropic-version" "2023-06-01" |> fun h ->
Header.add h "content-type" "application/json"
in
let json = Yojson.Basic.from_string body_str in
let content = json |> member "content" in
index 0 content |> member "text" |> to_string
else
Lwt.fail (Failure "Error fetching data from Anthropic")
(* Function to post data to Memos *)
let post_to_memos prompt text =
let memo = prompt ^ "\n\n" ^ text ^ "\n\n#claude" in
let body = `Assoc [
("content", `String memo);
("visibility", `String "PRIVATE");
] |> Yojson.Basic.to_string in
let api_key = "Bearer " ^ memos_api_key in
let headers =
Header.init () |> fun h ->
Header.add h "Authorization" api_key |> fun h ->
Header.add h "Content-Type" "application/json" in
let uri = Uri.of_string "https://cdecary-memos.fly.dev/api/v2/memos" in
Client.post ~headers ~body:(`String body) uri >>= fun (resp, _) ->
let status = resp |> Response.status in
if Code.is_success (Code.code_of_status status) then
Lwt.return_unit
else
Lwt.fail (Failure "Error posting data to Memos")
(* Main function that orchestrates the process *)
let main () =
let prompt = read_stdin_to_string () in
Printf.printf "(* %s *)\n\n" prompt;
get_from_claude prompt () >>= fun text ->
Printf.printf "(* %s *)\n\n" text;
post_to_memos prompt text >>= fun () ->
Lwt.return_unit
let () =
Lwt_main.run (main ())
let body = `Assoc
[
("model", `String model);
("max_tokens", `Int max_tokens);
( "messages",
`List
[ `Assoc [ ("role", `String "user"); ("content", `String prompt) ] ]
);
] |> Yojson.Basic.to_string in
Client.post ~headers ~body:(Cohttp_lwt.Body.of_string body) ant_uri >>= fun (resp, body) ->
let status = resp |> Response.status in
if Code.is_success (Code.code_of_status status) then
body |> Cohttp_lwt.Body.to_string >|= fun body_str ->
(* Function to make a request to Anthropic *)
let get_from_claude prompt () =
let model = "claude-3-haiku-20240307" in
let max_tokens = 1024 in
let ant_uri = Uri.of_string "https://api.anthropic.com/v1/messages" in
let memos_api_key = get_env "MEMOS_API_KEY" ()
# OCAMLPARAM: unset
# Shared cache: disabled
# Shared cache location: /Users/david/.cache/dune/db
# Workspace root: /Users/david/ocaml/ant
# Auto-detected concurrency: 4
# Dune context:
# { name = "default"
# ; kind = "default"
# ; profile = Dev
# ; merlin = true
# ; fdo_target_exe = None
# ; build_dir = In_build_dir "default"
# ; installed_env =
# map
# { "INSIDE_DUNE" : "/Users/david/ocaml/ant/_build/default"
# ; "OCAML_COLOR" : "always"
# ; "OPAMCOLOR" : "always"
# }
# ; instrument_with = []
# }
$ /Users/david/.opam/ant/bin/ocamlc.opt -config > /var/folders/rv/kyhr9kcn4q39_880qd3rp2kr0000gn/T/dune_d0dd73_output
$ (cd _build/default && /Users/david/.opam/ant/bin/ocamlformat --impl v1_ant.ml) > _build/default/.formatted/v1_ant.ml
$ (cd _build/default && /Users/david/.opam/ant/bin/ocamlformat --impl ant.ml) > _build/default/.formatted/ant.ml
$ /usr/local/bin/git --no-pager diff --no-index --color=always -u _build/default/v1_ant.ml _build/default/.formatted/v1_ant.ml
> diff --git a/_build/default/v1_ant.ml b/_build/default/.formatted/v1_ant.ml
> index 0b18446..5055f01 100644
> --- a/_build/default/v1_ant.ml
> +++ b/_build/default/.formatted/v1_ant.ml
> @@ -13,14 +13,12 @@ let read_stdin_to_string () =
> read_lines ""
>
> let get_env api () =
> - try
> - Sys.getenv api
> - with
> - | Not_found -> failwith api ^ " environment variable not found"
> + try Sys.getenv api
> + with Not_found -> failwith api ^ " environment variable not found"
>
> let ant_api_key = get_env "ANTHROPIC_API_KEY" ()
> (* let memos_api_key = get_env "MEMOS_API_KEY" () *)
> -
> +
> let model = "claude-3-haiku-20240307"
> let max_tokens = 1024
> let ant_uri = Uri.of_string "https://api.anthropic.com/v1/messages"
> @@ -43,7 +41,8 @@ let extract_code_block (s : string) : string option =
> if String.sub s open_pos 3 = triple_backtick then
> let close_pos = String.index_from s (open_pos + 3) '`' in
> if String.sub s close_pos 3 = triple_backtick then
> - Some (String.sub s (open_pos + 3 + 5) (close_pos - open_pos - 3 - 5)) (* here +5 to remove ocaml or julia after ``` and -5 to remove closing backticks *)
> + Some (String.sub s (open_pos + 3 + 5) (close_pos - open_pos - 3 - 5))
> + (* here +5 to remove ocaml or julia after ``` and -5 to remove closing backticks *)
> else None
> else None
> with Not_found -> None
[1]
$ /usr/local/bin/git --no-pager diff --no-index --color=always -u _build/default/ant.ml _build/default/.formatted/ant.ml
> diff --git a/_build/default/ant.ml b/_build/default/.formatted/ant.ml
> index 60df6b7..be1a0e7 100644
> --- a/_build/default/ant.ml
> +++ b/_build/default/.formatted/ant.ml
> @@ -15,10 +15,8 @@ let read_stdin_to_string () =
>
> (* Function to get env variable *)
> let get_env api () =
> - try
> - Sys.getenv api
> - with
> - | Not_found -> failwith api ^ " environment variable not found"
> + try Sys.getenv api
> + with Not_found -> failwith api ^ " environment variable not found"
>
> (* Functions to get api keys *)
> let ant_api_key = get_env "ANTHROPIC_API_KEY" ()
> @@ -35,7 +33,8 @@ let get_from_claude prompt () =
> Header.add h "anthropic-version" "2023-06-01" |> fun h ->
> Header.add h "content-type" "application/json"
> in
> - let body = `Assoc
> + let body =
> + `Assoc
> [
> ("model", `String model);
> ("max_tokens", `Int max_tokens);
> @@ -43,45 +42,44 @@ let get_from_claude prompt () =
> `List
> [ `Assoc [ ("role", `String "user"); ("content", `String prompt) ] ]
> );
> - ] |> Yojson.Basic.to_string in
> - Client.post ~headers ~body:(Cohttp_lwt.Body.of_string body) ant_uri >>= fun (resp, body) ->
> + ]
> + |> Yojson.Basic.to_string
> + in
> + Client.post ~headers ~body:(Cohttp_lwt.Body.of_string body) ant_uri
> + >>= fun (resp, body) ->
> let status = resp |> Response.status in
> if Code.is_success (Code.code_of_status status) then
> body |> Cohttp_lwt.Body.to_string >|= fun body_str ->
> - let json = Yojson.Basic.from_string body_str in
> - let content = json |> member "content" in
> - index 0 content |> member "text" |> to_string
> - else
> - Lwt.fail (Failure "Error fetching data from Anthropic")
> + let json = Yojson.Basic.from_string body_str in
> + let content = json |> member "content" in
> + index 0 content |> member "text" |> to_string
> + else Lwt.fail (Failure "Error fetching data from Anthropic")
>
> (* Function to post data to Memos *)
> let post_to_memos prompt text =
> let memo = prompt ^ "\n\n" ^ text ^ "\n\n#claude" in
> - let body = `Assoc [
> - ("content", `String memo);
> - ("visibility", `String "PRIVATE");
> - ] |> Yojson.Basic.to_string in
> + let body =
> + `Assoc [ ("content", `String memo); ("visibility", `String "PRIVATE") ]
> + |> Yojson.Basic.to_string
> + in
> let api_key = "Bearer " ^ memos_api_key in
> let headers =
> - Header.init () |> fun h ->
> - Header.add h "Authorization" api_key |> fun h ->
> - Header.add h "Content-Type" "application/json" in
> + Header.init () |> fun h ->
> + Header.add h "Authorization" api_key |> fun h ->
> + Header.add h "Content-Type" "application/json"
> + in
> let uri = Uri.of_string "https://cdecary-memos.fly.dev/api/v2/memos" in
> Client.post ~headers ~body:(`String body) uri >>= fun (resp, _) ->
> let status = resp |> Response.status in
> - if Code.is_success (Code.code_of_status status) then
> - Lwt.return_unit
> - else
> - Lwt.fail (Failure "Error posting data to Memos")
> + if Code.is_success (Code.code_of_status status) then Lwt.return_unit
> + else Lwt.fail (Failure "Error posting data to Memos")
>
> (* Main function that orchestrates the process *)
> let main () =
> let prompt = read_stdin_to_string () in
> Printf.printf "(* %s *)\n\n" prompt;
> get_from_claude prompt () >>= fun text ->
> - Printf.printf "(* %s *)\n\n" text;
> - post_to_memos prompt text >>= fun () ->
> - Lwt.return_unit
> + Printf.printf "(* %s *)\n\n" text;
> + post_to_memos prompt text >>= fun () -> Lwt.return_unit
>
> -let () =
> - Lwt_main.run (main ())
> \ No newline at end of file
> +let () = Lwt_main.run (main ())
[1]
# dune fmt