Tags

Tags give the ability to mark specific points in history as being important
  • v0.9.1

    v0.9.1
    
    - **Fixed:** retry jitter now draws from `crypto/rand` instead of a predictable
      pseudo-random source.
    - Development and CI commands now run in a pinned Docker image. `make sec`
      runs `govulncheck` and Semgrep, then writes the combined SARIF report used by
      the CI security upload.
  • v0.9.0

    - **Breaking:** the maintained Z.ai Coding catalog now contains only GLM 5.3
      and GLM 5.3 Flash. `KnownModels` no longer advertises legacy Coding Plan
      models, and `LookupModel` no longer supplies their context or reasoning
      metadata. Move Coding Plan configuration to `glm-5.3` or `glm-5.3-flash`.
    - GLM 5.3 retains validated low, high, and max reasoning effort controls. GLM
      5.3 Flash preserves tool-loop thinking but does not advertise numeric or
      disabling controls.
  • v0.8.0

    - **New:** `drivers/zaicoding` calls Z.ai Coding's OpenAI-shaped endpoint and
      applies its per-model thinking controls. `LookupModel` supplies metadata for
      GLM 4.5 Air, GLM 4.7, and GLM 5.1 through GLM 5.3.
    - Tool loops now retain Z.ai `reasoning_content` and replay it with the
      assistant tool-call message on the next provider request. The generic OpenAI
      transport exposes a trusted assistant-message extension for provider drivers
      that need this behavior.
    - `ReasoningEffortNone` now reaches drivers that can disable thinking but do
      not accept numeric effort grades.
    - Existing OpenAI and Anthropic callers need no changes. Applications using
      Z.ai Coding should construct `zaicoding.NewDriver` and select models with
      `zaicoding.LookupModel`.
  • v0.7.0

    - **New:** `UserMessageQueue` accepts bounded, concurrent user input while an
      agent loop is running. `WithUserMessageQueue` drains queued messages in FIFO
      order at provider round boundaries. Automatic loops can continue after a
      terminal answer when new input is pending. Manual loops carry queued input
      into the round after tool execution.
    - Queued messages must use the user role and cannot carry assistant, tool, or
      injection protocol fields. The engine validates queued content against the
      selected model before calling the driver. Messages left at the round limit
      stay queued for a later run.
    - Replaced the deprecated `common-go/errors` dependency with
      `ctxerrors/commerr`. Provider-neutral sentinel matching remains unchanged.
  • v0.6.1

    e3e2854f · chore: release v0.6.1 ·
    elelem v0.6.1 — Go 1.26.6 CI security update
  • v0.6.0

    elelem v0.6.0 — explicit SDK-environment isolation for multi-provider clients
  • v0.4.4

    elelem v0.4.4 — README names ctxscope
    
    The Logging section still pointed at common-go/scope, which this module stopped
    importing in v0.4.3 and which common-go removed in v0.4.0. No code changed.
  • v0.4.3

    elelem v0.4.3 — log scope from ctxscope
    
    Log scope now comes from github.com/psyb0t/ctxscope rather than
    github.com/psyb0t/common-go/scope. Same API, new package name. common-go is
    still a dependency for its errors package. No change to elelem's own exported
    surface.
  • v0.4.2

    elelem v0.4.2 — imported-by badge, refreshed weekly
    
    CI only; the library is unchanged. The README gains a count of importing
    packages linking to the repositories behind it.
    
    Blast radius, not adoption: the number is what tells you how much breaks when an
    exported name moves.
  • v0.4.1

    elelem v0.4.1 — README voice
    
    Docs only. No code, no API, no behaviour change.
    
    The README now reads like the rest of the psyb0t libraries. Also corrects a
    stale test/coverage claim (247 tests at 90%+, not 227 at 91%+), documents
    WithStreaming, and points at RunInto from the quick start.
    
    'Trust boundaries' is now 'Shit that can bite you' — the anchor moved with it.
  • v0.4.0

    elelem v0.4.0 — Run/RunInto, and streaming is a choice
    
    Breaking: Request.Complete, Request.Stream and Request.CompleteInto are gone.
    Run(ctx) and RunInto(ctx, &dst) are the whole launcher surface. Complete ->
    Run, CompleteInto -> RunInto, Stream(ctx, fn) -> OnDelta(fn).Run(ctx). The one
    behaviour change to check: Complete did not send tools even when the request
    carried them; Run sends whatever is configured.
    
    New: WithStreaming(bool) on client and request, for compat backends that
    cannot serve a streaming call. Driver gains Complete -- the same request with
    streaming off, feeding the finished response through the same delta callback,
    so callbacks, tool assembly and the Response are unchanged. A third-party
    driver must implement it. Capabilities.StreamingUnsupported reports a provider
    that cannot stream at all.
  • v0.3.1

    elelem v0.3.1 — test layout only
    
    The v0.3.0 callback-chaining tests move from callback_chain_test.go, which
    names no source file, into request_test.go beside the rest of the Request
    tests. No API or behaviour change.
  • v0.3.0

    elelem v0.3.0 — callbacks chain instead of replace
    
    Registering the same On* twice now runs both handlers, in registration order,
    and the first error stops the chain. Previously the second registration
    silently discarded the first, which failed by absence: no error, no log, just a
    handler that stopped running.
    
    ResetCallback(kinds...) and ResetCallbacks() are how a caller replaces rather
    than adds. The two token-limit handlers keep replace semantics on purpose.
  • v0.2.0

    elelem v0.2.0 — prompts become one immutable value; multimodal content
    
    Breaking: Message.Content is Content ([]Part), not string.
    Breaking: the system-message and history builders move off Request onto a new
    immutable Prompt, handed over in one WithPrompt call.
    
    Adds image, audio and document content parts, local refusal of content the
    model cannot read (ErrUnsupportedContent), the three new content capabilities,
    and WithCapabilityOverride for a driver aimed at a compatible gateway.
    
    Fixes cloneMessages not copying content, which with byte payloads left the
    engine transcript aliasing the caller's image buffer.
  • v0.1.3

    elelem v0.1.3 — relicensed to MIT
    
    Was WTFPL. MIT is what every Go project here ships, and pkg.go.dev handles
    WTFPL poorly. The canonical MIT text verbatim, so both GitHub and pkg.go.dev
    detect it.
    
    Nothing copyleft is linked in: the GPL/MPL modules under vendor/ are tool-block
    dependencies for the linter and appear nowhere in the module's import graph.
    
    No code change.
  • v0.1.2

    elelem v0.1.2 — README wording
    
    The opening line and one section heading borrowed their phrasing from another
    project's README. Both now say what this project needed to say instead. No code
    and no documentation content changed.
  • v0.1.1

    elelem v0.1.1 — documentation accuracy
    
    No API or behaviour change; every Go edit is a comment.
    
    Reattached two exported doc comments (Client.Driver, DefaultTokenCounter) that
    a stray // plus a blank line had detached, leaving them absent from pkg.go.dev.
    
    Corrected documentation that did not match the code: tool denial is a
    ToolCallDecision carrying a required CallID, not an error from OnToolCallStart
    or Tool.PreRun (both of which abort the run, and a CallID-less decision fails
    open); history limiting is also disabled when the output reserve is >=
    ContextSize; the custom limiting-handler example could orphan a tool result;
    ProviderError must be returned as a pointer; the token-counter resolution order
    includes the client tier; response repair needs no strict validation and skips
    refusals; tool-result size is bounded only when WithMaxToolResultTokens is set;
    INFO covers two events, not lifecycle.
    
    README reorganised around an above-the-fold example, a per-area table, a
    drivers section and a logging section.
  • v0.1.0

    elelem v0.1.0 — provider-neutral Go engine for LLM requests
    
    First standalone release, extracted from the project it grew up in as an
    internal package.
    
    The engine is provider-neutral; the drivers are not. Application code holds
    Driver, Client and Request, and the OpenAI and Anthropic SDK types never leave
    their own packages. The conformance suite both shipped drivers run is part of
    the public surface, so a third driver gets the same contract checked.
    
    Covers streamed requests, a tool loop with bounded concurrency and per-tool
    timeouts (manual by default, automatic via WithAutoToolCalls), history limiting
    that treats an assistant tool call and its results as one indivisible unit,
    retries that stop the moment output begins, usage accounting that separates
    context from billed cost, and structured output validated against a schema
    derived from the caller's own type.
    
    Deliberately absent: storage, credential resolution, tool authorization,
    presentation, and any kind of agent framework.