All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
0.1.0 - 2026-09-27
Added
use Cite.Policy: a policy declared once in a module, built on Spark. Filters, concerns (screened directly with a detect and an optional confirm, or built from factors with roles and checks), factors, and Score or Choice descriptors. A passage is evidence for every concern it matches. Questions name what they read by placeholder ({passage},{household}) and Cite replaces each with a path in the request. Any question may add a one-linefocus. Every mistake in a policy is a compile error.- A DSL reference in
Cite.Policy's docs, generated from the DSL by Spark. Cite.source/2: the caller's passages, kept byte for byte, withas:for the word they sit under andshow:for the meta the model sees.Cite.judge/4: two fixed rounds. A screen of every passage for every detect in windows, fixed rules that gather matches into findings, and one judgment per finding on all of its evidence, gated by a review band. Options:threshold,review_band,window. A client, source, policy, or options of the wrong kind raiseArgumentError.- Replies are checked before they count: a reply that skips a question or answers out of range makes its whole request an error, never a verdict. Errors are reported beside the findings, one per failed request.
Cite.Report,Cite.Finding,Cite.Citation,Cite.Passage, andCite.Erroras the outputs, encodable with Jason. A finding carries its verdict, the raw answers to its checks and descriptors, the passages it cites and those its confirm dropped; the report keeps every round-1 score, token usage, and the model ids that answered.Cite.Providerbehaviour andCite.Provider.TypeSafe, a Req client for TypeSafe System One;Cite.client/2builds the client functionjudge/4takes. A request's"state"may holdCite.Wire.Objectvalues, JSON objects that keep their key order. The TypeSafe client takesapi_key,model,base_url,max_retry_delay, andreq_options. It retries 429, 529, 500–504, and connection failures up to three times, honouringRetry-After, with delays capped at 30 seconds; timeouts are not retried.- Round-1 windows over the provider's size cap (
{:error, :request_too_large}) are halved and retried; only a lone passage still over the cap becomes an error. A round-2 request refused as too large is that finding's error. - Guides: Writing policies, and How judging works. Tutorials, each building a policy from scratch: Triaging logs, Finding sponsor segments, Labelling allergens in recipes, and Checking support calls against procedure.
- Stability tiers, named in the README and grouping the docs: Core API (the SemVer contract), Providers, and Internal.
- Requires Elixir
~> 1.18.