• # Promptkit v0.11.0

    eric released this 2026-09-23 18:04:59 +00:00 | 199 commits to main since this release

    This release adds reliable, observable model execution and changes Promptkit's
    license to LGPL-3.0-or-later.

    Summary

    • Built-in model calls can recover from selected transient HTTP failures.
    • Optional execution observations report attempts, timing, outcomes, and known
      token usage, including work completed before a run fails.
    • Public errors distinguish transport failures, malformed responses, and retry
      exhaustion without parsing diagnostic text.

    Compatibility

    The built-in client now defaults to two additional transient attempts. This can
    increase latency, request counts, and cost; retries do not guarantee exactly-once
    generation. Injected LLMClient implementations retain their own retry policy
    and are not automatically replayed. Existing generation timeouts apply per
    attempt, while the caller context governs the complete operation. See the
    provider integration contract.

    Public retry and observation controls are additive. Existing successful-result
    usage semantics remain unchanged, and operational failures still return no
    partial RunResult. Observations distinguish unknown usage from reported zero;
    they are not a complete billing ledger. See the
    consumer guide and
    observation GoDoc.

    Promptkit is now licensed under LGPL-3.0-or-later. Review the
    license summary, LGPL text, and
    accompanying GPL text before adoption or distribution.
    Previously published releases and dependency licenses are unchanged.

    Upgrade

    Update the dependency:

    go get gitea.maximumdirect.net/eric/promptkit@v0.11.0
    

    To retain single-attempt behavior for built-in generation, set
    Config.TransientRetries to a pointer to zero. RunRequest.TransientRetries
    can override the engine choice per request. Review any existing application or
    HTTP-transport retry loops to avoid unintentionally multiplying attempts.
    Transient retries and structural repairs have separate budgets; provide a
    caller deadline when a total execution time limit is needed.

    Observation is opt-in through RunRequest.Observer, including for prepared
    execution. Callbacks are synchronous; shared observers must support concurrent
    runs. Injected clients can supply GenerateResponse.UsagePresence to explicitly
    report known zero counts. No observer or usage-presence changes are required
    for existing consumers. See the consumer guide
    for adoption and the offline example
    for a structured proposal-and-assessment workflow.

    Changes

    • Centralized built-in retry coordination with cancellable backoff and provider
      retry timing. Retries and structural repair share existing backend capacity;
      backoff releases active permits without releasing logical run admission.
    • Added ErrTransport, ErrMalformedResponse, ErrRetriesExhausted, and
      RetryExhaustedError, retaining applicable underlying error identities.
    • Added request-scoped lifecycle observations and presence-aware token accounting
      for ordinary and prepared execution, without recording prompt/response bodies.
    • Isolated delegated operations' observation state and made injected-client
      attempt classifications consistent with terminal classifications.
    • Added an offline observation example and regression coverage for retry,
      repair, capacity, error, and observation interactions.
    • Adopted LGPL-3.0-or-later and streamlined the documented local release process.

    Backend catalog selections are unchanged from v0.10.0: OpenRouter
    v2.20260922.1 and Rakestrawhome v2.20260922.0. See the
    catalog compatibility policy
    and profile inventories.

    Validated commit: db05b56166

    Downloads