Skip to content

0.3.18

Choose a tag to compare

@DEENUU1 DEENUU1 released this 05 May 12:01
· 413 commits to main since this release

[0.3.18] - 2026-05-05

Fixed

  • EvictionCapability dropped BinaryContent (e.g. screenshots) from ToolReturn results — previously, any ToolReturn(return_value=..., content=[..., BinaryContent(...)]) was collapsed into a plain string before the size check, so the multimodal content (images, audio, PDFs) was silently discarded along with a text eviction message. The capability now only measures and evicts return_value; the content list and metadata are always preserved by re-wrapping the result. (#90)

Fixed

  • DeepAgentDeps was missing the checkpoint_store field — the checkpointing middleware already resolved the store via getattr(deps, "checkpoint_store", None) and the docs instructed users to pass it at construction time, but the field was never declared on the dataclass so assignments were silently ignored and type checkers raised attr-defined errors. The field is now properly declared as checkpoint_store: Any = None and propagated as a shared reference through clone_for_subagent(). (#87)

Added

  • Binary content pruning via max_binary_content — a new before_model_request hook in EvictionCapability bounds the number of multimodal binary parts kept in model-visible history. Older BinaryContent values (from both UserPromptPart.content and ToolReturnPart.content) are written to the backend at deterministic paths (/large_tool_results/binary_{id}.{ext}) and replaced with a compact read_file-able text reference so the agent can still retrieve them on demand. If a backend write fails, the binary is left in place to avoid data loss.
    • EvictionCapability gains a max_binary_content: int | None field (default 3).
    • create_deep_agent() gains a matching max_binary_content: int | None = 3 parameter across all overloads; pass None to keep every binary in history.
    • New constants exported from the top-level package: DEFAULT_MAX_BINARY_CONTENT, BINARY_PRUNED_TEMPLATE.
    • Storage paths use BinaryContent.identifier (a stable SHA1 of the bytes), making re-pruning the same binary idempotent.