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/provider_error.ml.html
Source file provider_error.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 63 64 65 66type timeout_phase = | Request_headers | Stream_idle type error_kind = | Api_error of { status : int; body : string; } | Network_error of { message : string } | Deserialization_error of { message : string; raw : string; } | Timeout of { phase : timeout_phase; elapsed_s : float; limit_s : float; } type t = { provider : string; kind : error_kind; is_retryable : bool; retry_after_s : float option; } exception Provider_error of t let phase_to_string = function | Request_headers -> "response headers" | Stream_idle -> "streaming body chunk" let to_string { provider; kind; _ } = match kind with | Api_error { status; body } -> Printf.sprintf "[%s] API error (HTTP %d): %s" provider status body | Network_error { message } -> Printf.sprintf "[%s] Network error: %s" provider message | Deserialization_error { message; raw } -> Printf.sprintf "[%s] Deserialization error: %s (raw: %s)" provider message raw | Timeout { phase; elapsed_s; limit_s } -> Printf.sprintf "[%s] HTTP timeout waiting for %s after %.1fs (limit: %.1fs)" provider (phase_to_string phase) elapsed_s limit_s let is_retryable_status status = status = 408 || status = 409 || status = 429 || status >= 500 let make_api_error ~provider ~status ~body ?is_retryable ?retry_after_s () = let is_retryable = Option.value is_retryable ~default:(is_retryable_status status) in { provider; kind = Api_error { status; body }; is_retryable; retry_after_s } let timeout_is_retryable (phase : timeout_phase) = match phase with | Request_headers -> false | Stream_idle -> true let make_timeout ~provider ~phase ~elapsed_s ~limit_s = { provider; kind = Timeout { phase; elapsed_s; limit_s }; is_retryable = timeout_is_retryable phase; retry_after_s = None; } let () = Printexc.register_printer (function | Provider_error e -> Some (to_string e) | _ -> None)
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>