All notable changes to this project are documented here. The format follows Keep a Changelog, and the project uses Semantic Versioning.
Unreleased
0.1.0-alpha.1 - 2026-09-17
Added
TypeSafe.new/1client struct resolving configuration from options, application config, andTYPESAFE_*environment variables.TypeSafe.evaluate/4andevaluate!/4with typedNoul,Choice, andScorequestions and answers; caller keys (atoms or strings) round-trip withoutString.to_atom/1.TypeSafe.evaluate_many/4concurrent fan-out with ordered results andon_errormodes.TypeSafe.models/1forGET /v1/models.TypeSafe.Retrymirroring the official SDK policy, includingretry-after-ms,Retry-After(seconds or HTTP date), and a total time budget per call.TypeSafe.HTTPraw layer (maps in, maps out) built on Req with the built-inJSONmodule.TypeSafe.Errortyped error values::auth,:validation,:rate_limited,:overloaded,:timeout,:connection,:unexpected.- Telemetry spans
[:typesafe, :request, *]andTypeSafe.Telemetry.attach_logger/1. TypeSafe.Teststubs by question id for downstream test suites.TypeSafe.Answer.gate/2andyes?/2helpers for confidence-gated routing.TypeSafe.FanOut.options_schema/0;TypeSafe.evaluate/4andevaluate_many/4render their full option tables inline in the docs.TypeSafe.Result.request_idandTypeSafe.HTTP.request/5returning aTypeSafe.HTTP.Responsewith status, headers,request_id, and retry count.- Local validation that a Choice has 2 to 255 options (the API's ceiling is 255).
TypeSafe.Model.release_dateparsed as aDateTimewhen the API sends one.- HTTP 400 responses map to
type: :validation; error messages are read from the API'sdetail.messageshape as well as string and list details. TypeSafe.Answer.Score.descriptioncarrying the winning level as written;labelis always a string.TypeSafe.Question.validate!/1for eager, raising validation of questions built at compile time; constructors themselves never validate.TypeSafe.SystemOne.prepare/1returning aTypeSafe.SystemOne.Preparedstruct for reuse across many states.livebooks/live_walkthrough.livemd, a Livebook notebook that runs the README example against the live API and shows the request, raw response, and typed result.