Skip to content

Changelog

All notable changes to Attest are documented here. Versions follow Semantic Versioning.


SDK patch release — adapter fixes and async compatibility

  • LangChain adapter — Add missing callback protocol attributes (ignore_agent, ignore_retry, raise_error) required by LangChain’s BaseCallbackHandler interface. Handle LangGraph AIMessage and ToolMessage output formats so traces capture tool-call responses correctly.
  • expect() DSL — Accept Trace directly in addition to AgentResult. Auto-wraps into AgentResult for manual adapter workflows that build traces via TraceBuilder without going through a provider adapter.
  • Plugin fixture — Run the engine event loop in a background daemon thread with run_coroutine_threadsafe() bridge. Fixes Future attached to a different loop errors when pytest-asyncio tests (e.g., google-adk) call into the engine from a separate event loop.
Terminal window
uv add attest-ai@latest
  • No engine changes. The Go engine binary remains at v0.4.0. ENGINE_VERSION is unchanged; auto-download continues to fetch v0.4.0 binaries.

SDK patch release — engine auto-download

  • Engine auto-download — Both Python and TypeScript SDKs now automatically download the attest-engine binary from GitHub Releases on first use. No manual binary setup required after uv add attest-ai or pnpm add @attest-ai/core.

  • SHA256 verification — Downloaded binaries are verified against checksums-sha256.txt from the release. Checksum mismatch aborts the download with a clear error.

  • Version-pinned cache — Binaries are cached at ~/.attest/bin/ with a .engine-version marker. SDK version mismatch triggers automatic re-download.

  • Discovery chain — Engine binary resolution follows a predictable order:

    ATTEST_ENGINE_PATH env var
    → PATH lookup
    → ~/.attest/bin/ (shared cache, version-checked)
    → ../../bin/ (monorepo dev layout)
    → ./bin/ (local)
    → auto-download from GitHub Releases
    → actionable error message
  • Opt-out — Set ATTEST_ENGINE_NO_DOWNLOAD=1 to disable network access. The error message explains alternative installation methods.

  • pytest pluginpytest.skip() replaced with pytest.fail() when the engine binary is missing. With auto-download in place, silent skipping is no longer appropriate; real errors are now surfaced.
  • TypeScript VERSION — Corrected from 0.3.0 to 0.4.1.
Terminal window
uv add attest-ai
Terminal window
pnpm add @attest-ai/core
VariablePurposeDefault
ATTEST_ENGINE_PATHAbsolute path to engine binary — skips all discoveryunset
ATTEST_ENGINE_NO_DOWNLOAD1 / true / yes disables auto-downloadunset (enabled)

Production & Polish

  • Result history with SQLite storage
  • Drift detection (σ-based statistical thresholds)
  • Continuous eval runner with sampling and alerting
  • Plugin system (attest.plugins entry point group)
  • CrewAI adapter (11 adapters total)
  • CLI init and validate commands
  • MkDocs documentation site

Simulation & Multi-Agent

  • Layers 7-8: simulation runtime, multi-agent testing
  • TypeScript SDK (first npm publish: @attest-ai/core, @attest-ai/vitest)
  • Framework adapters: LangChain, Google ADK, LlamaIndex

Semantic & Judge Layers

  • Layers 5-6: ONNX local embeddings, LLM-as-judge
  • Soft failure support
  • OTel adapter
  • setup-attest GitHub Action

Foundation

  • Layers 1-4: schema validation, cost/performance, trace structure, content validation
  • Python SDK with pytest plugin
  • 4 provider adapters: OpenAI, Anthropic, Gemini, Ollama
  • PyPI + GitHub release