My agentic slop goes here. Not intended for anyone else!
at jsont 4.7 kB view raw
1open Eio.Std 2 3let src = Logs.Src.create "camel_jokes" ~doc:"Camel joke competition" 4module Log = (val Logs.src_log src : Logs.LOG) 5 6let process_claude_response client name = 7 Log.info (fun m -> m "=== %s's Response ===" name); 8 let messages = Claude.Client.receive_all client in 9 List.iter (fun msg -> 10 match msg with 11 | Claude.Message.Assistant msg -> 12 List.iter (function 13 | Claude.Content_block.Text t -> 14 let text = Claude.Content_block.Text.text t in 15 Log.app (fun m -> m "%s: %s" name text) 16 | Claude.Content_block.Tool_use t -> 17 Log.debug (fun m -> m "%s using tool: %s" name 18 (Claude.Content_block.Tool_use.name t)) 19 | Claude.Content_block.Thinking t -> 20 Log.debug (fun m -> m "%s thinking: %s" name 21 (Claude.Content_block.Thinking.thinking t)) 22 | _ -> () 23 ) (Claude.Message.Assistant.content msg); 24 Log.debug (fun m -> m "%s using model: %s" name 25 (Claude.Message.Assistant.model msg)) 26 | Claude.Message.Result msg -> 27 if Claude.Message.Result.is_error msg then 28 Log.err (fun m -> m "Error from %s!" name) 29 else 30 (match Claude.Message.Result.total_cost_usd msg with 31 | Some cost -> 32 Log.info (fun m -> m "%s's joke cost: $%.6f" name cost) 33 | None -> ()); 34 Log.debug (fun m -> m "%s session: %s, duration: %dms" 35 name 36 (Claude.Message.Result.session_id msg) 37 (Claude.Message.Result.duration_ms msg)) 38 | Claude.Message.System _ -> 39 (* System messages are already logged by the library *) 40 () 41 | Claude.Message.User _ -> 42 (* User messages are already logged by the library *) 43 () 44 ) messages 45 46let run_claude ~sw ~env name prompt = 47 Log.info (fun m -> m "🐪 Starting %s..." name); 48 let options = Claude.Options.create ~model:(Claude.Model.of_string "sonnet") ~allowed_tools:[] () in 49 50 let client = Claude.Client.create ~options ~sw 51 ~process_mgr:env#process_mgr 52 () in 53 54 Claude.Client.query client prompt; 55 process_claude_response client name 56 57let main ~env = 58 Switch.run @@ fun sw -> 59 60 Log.app (fun m -> m "🐪 Starting the Great Camel Joke Competition! 🐪"); 61 Log.app (fun m -> m "================================================\n"); 62 63 let prompts = [ 64 "Claude 1", "Tell me a short, funny joke about camels! Make it original and clever."; 65 "Claude 2", "Give me your best camel joke - something witty and unexpected!"; 66 "Claude 3", "Share a hilarious camel joke that will make everyone laugh!"; 67 ] in 68 69 (* Run all three Claudes concurrently *) 70 Fiber.all ( 71 List.map (fun (name, prompt) -> 72 fun () -> run_claude ~sw ~env name prompt 73 ) prompts 74 ); 75 76 Log.app (fun m -> m "\n================================================"); 77 Log.app (fun m -> m "🎉 The Camel Joke Competition is complete! 🎉") 78 79(* Command-line interface *) 80open Cmdliner 81 82let main_term env = 83 let setup_log style_renderer level = 84 Fmt_tty.setup_std_outputs ?style_renderer (); 85 Logs.set_level level; 86 Logs.set_reporter (Logs_fmt.reporter ()); 87 (* Set default to App level if not specified *) 88 if level = None then Logs.set_level (Some Logs.App); 89 (* Enable debug for Client module if in debug mode *) 90 if level = Some Logs.Debug then 91 Logs.Src.set_level Claude.Client.src (Some Logs.Debug) 92 in 93 let run style level = 94 setup_log style level; 95 main ~env 96 in 97 Term.(const run $ Fmt_cli.style_renderer () $ Logs_cli.level ()) 98 99let cmd env = 100 let doc = "Run the Great Camel Joke Competition using Claude" in 101 let man = [ 102 `S Manpage.s_description; 103 `P "This program runs three concurrent Claude instances to generate camel jokes."; 104 `P "Use $(b,-v) or $(b,--verbosity=info) to see RPC message traffic."; 105 `P "Use $(b,-vv) or $(b,--verbosity=debug) to see all internal operations."; 106 `S Manpage.s_examples; 107 `P "Run with normal output:"; 108 `Pre " $(mname)"; 109 `P "Run with info-level logging (RPC traffic):"; 110 `Pre " $(mname) -v"; 111 `Pre " $(mname) --verbosity=info"; 112 `P "Run with debug logging (all operations):"; 113 `Pre " $(mname) -vv"; 114 `Pre " $(mname) --verbosity=debug"; 115 `P "Enable debug for specific modules:"; 116 `Pre " LOGS='claude.transport=debug' $(mname)"; 117 `Pre " LOGS='claude.message=info,camel_jokes=debug' $(mname)"; 118 `S Manpage.s_bugs; 119 `P "Report bugs at https://github.com/your-repo/issues"; 120 ] in 121 let info = Cmd.info "camel_jokes" ~version:"1.0" ~doc ~man in 122 Cmd.v info (main_term env) 123 124let () = 125 Eio_main.run @@ fun env -> 126 exit (Cmd.eval (cmd env))