0.2.0 (2026-10-12)
Added
provider: :openaifor OpenAI's Decisions API (POST /v1/decisions, default modelgpt-6-luna,OPENAI_API_KEY). Requests and responses are translated to and from the System One shape bySystemOneClient.Wire.OpenAIDecisions, so questions and answer structs are the same as for every other provider. Score legends carry your own level text, as with TypeSafe.SystemOneClient.Answer.Refusalfor a question the model declines to answer; the other answers in the request are still returned.- Typespecs for the public API, including
SystemOneClient.option/0,SystemOneClient.options/0,SystemOneClient.error/0andSystemOneClient.Provider.name/0; checked with Dialyzer in CI. - Doctests on
validate_questions/1,Answer.parse/1,Provider.resolve/1and the OpenAI request encoder, and grouped modules in the docs.
Changed
SystemOneClient.Providerresults carry awirefield (:system_oneor:openai_decisions).- The Hex package links to this changelog.
0.1.0 (2026-10-08)
SystemOneClientbehaviour withevaluate/3,validate_questions/1, and a dispatcher that picks the implementation fromopts[:client]or app env.SystemOneClient.HTTP: Req-based client with retries on 429/529/502/503/504 and transport errors,Retry-Afterandretry-after-mssupport, 2 s default receive timeout.SystemOneClient.Provider::typesafe,:cloudflare(Clef and Clef-flash,resultenvelope),:openrouter,:compatible(any/v1/systemoneURL, e.g. CLM).SystemOneClient.Answer.{Choice, Noul, Score}with full probability distributions and validation of non-numeric probabilities and non-map answer payloads.SystemOneClient.Stubfor offline tests.- Telemetry
[:system_one_client, :request, *]without state, questions, or keys.