Skip to content

Forge

v0.7.5 Breaking

This release includes 1 breaking change for platform teams planning a safe upgrade.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

agentic-ai agentic-workflow agents function-calling llama-cpp llamafile
+5 more
llm ollama python self-hosted tool-calling

ReleasePort's take

Moderate signal
editorial:auto 1mo

The v0.7.5 release adds a `reasoning_replay` option to WorkflowRunner and updates the Anthropic client with extended thinking and prompt caching features.

Why it matters: A new `reasoning_replay` flag (full, keep‑last, none) lets developers control replay behavior; default now skips reasoning blocks. The AnthropicClient gains adaptive thinking and cache‑aware token accounting for more efficient usage.

Summary

AI summary

Updates docs/decisions/017-reasoning-replay-policy.md, docs/results/raw/reasoning-replay.md, and proxy across a mixed release.

Changes in this release

Breaking High

Changes default behavior to replay no reasoning blocks.

Changes default behavior to replay no reasoning blocks.

Source: llm_adapter@2026-06-12

Confidence: high

Feature Medium

Adds `reasoning_replay` option (`full`, `keep-last`, `none`) to WorkflowRunner and proxy.

Adds `reasoning_replay` option (`full`, `keep-last`, `none`) to WorkflowRunner and proxy.

Source: llm_adapter@2026-06-12

Confidence: high

Feature Medium

Adds reasoning‑replay evaluation grid with ~170k runs across policies and ablations.

Adds reasoning‑replay evaluation grid with ~170k runs across policies and ablations.

Source: llm_adapter@2026-06-12

Confidence: high

Feature Medium

Adds `AnthropicClient(thinking=…)` to enable extended thinking (e.g., adaptive).

Adds `AnthropicClient(thinking=…)` to enable extended thinking (e.g., adaptive).

Source: llm_adapter@2026-06-12

Confidence: high

Feature Medium

Adds prompt caching (`AnthropicClient(prompt_caching=True)`) with cache‑aware token accounting.

Adds prompt caching (`AnthropicClient(prompt_caching=True)`) with cache‑aware token accounting.

Source: llm_adapter@2026-06-12

Confidence: high

Feature Medium

Re‑bases Claude eval tier to run Sonnet and Opus with adaptive extended thinking enabled.

Re‑bases Claude eval tier to run Sonnet and Opus with adaptive extended thinking enabled.

Source: llm_adapter@2026-06-12

Confidence: high

Full changelog

Reasoning replay is now a measured, bounded policy. Reasoning-capable backends return hidden reasoning alongside tool calls, and forge previously re-serialized all of it into backend-facing history on every later turn. The new reasoning_replay knob bounds that — and after a full re-sweep of the published eval grid showed that dropping replayed reasoning is quality-free and token-cheaper, the default is none. The release also re-baselines the Claude eval tier with extended thinking enabled and adds Anthropic prompt caching with cache-aware cost accounting.

Added

  • reasoning_replay {full, keep-last, none} on WorkflowRunner(reasoning_replay=…) and the proxy (--reasoning-replay). full replays every captured reasoning block (the historical behavior), keep-last only the most recent, none keeps reasoning out of backend-facing history entirely. Serialization-only: reasoning is still captured and still surfaces in on_message and internal history. In OpenAI-compatible proxy responses, keep-last exposes current reasoning as reasoning_content rather than assistant content, so clients that preserve reasoning fields can replay just the latest block. See ADR-017.
  • Reasoning-replay eval grid (eval_results_v0.7.5.jsonl, a new eval generation): the full 8–14B lineup re-swept across all three policies × both ablations × native/prompt — ~170k runs. The policy is part of the eval resume key and a first-class report/dashboard dimension: row labels carry :keep-last / :full tags (untagged = none), the dashboard gains a Reasoning Replay filter, the report a --reasoning-replay filter, and a dedicated reasoning-replay view compares policies per config. A wire-level counter (reasoning_wire) validates each policy's on-wire behavior (none → exactly 0 replayed reasoning across every run).
  • Anthropic extended thinking — AnthropicClient(thinking=…) — request-side extended-thinking config (e.g. {"type": "adaptive"}). When set, a forced tool_choice is suppressed (the API requires auto with thinking on) and max_tokens is raised to fit the thinking budget. The Claude eval baseline now runs Sonnet and Opus with adaptive thinking — all prior Claude rows had thinking off, the wrong baseline for a reasoning-flavored suite; Haiku does not support adaptive thinking and stays non-thinking.
  • Anthropic prompt caching — AnthropicClient(prompt_caching=True) — marks a static ephemeral cache breakpoint over the tool definitions + system prompt (byte-identical every turn, so it read-hits from turn 2 onward instead of re-billing the re-sent schema). TokenUsage gains generic cache_creation_input_tokens / cache_read_input_tokens counters, and eval cost accounting prices cache writes (1.25×) and reads (0.1×) at their actual rates.

Changed

  • Captured reasoning is no longer replayed to the backend by default. Pre-0.7.5 behavior replayed every captured reasoning block (equivalent to reasoning_replay="full"); the default is now "none". On the published eval suite, none is statistically indistinguishable from replay-all in aggregate while saving the replayed tokens every turn; no per-config regression survives multiple-comparison correction (closest: a mild raw drop on Ministral-3 14B Reasoning Q4, where none and keep-last are indistinguishable from each other). The knob is inert for models that emit no reasoning. Migration: --reasoning-replay full (proxy) or WorkflowRunner(reasoning_replay="full") restores the historical behavior. Anthropic-protocol proxy responses emit reasoning text only under full — forge does not synthesize signed Anthropic thinking blocks.

Breaking Changes

  • Default `reasoning_replay` changed from `full` to `none`, altering backend history behavior.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track Forge

Get notified when new releases ship.

Sign up free

About Forge

All releases →

Related context

Earlier breaking changes

  • v0.7.4 Deprecates pydantic `.model_*` API on `ToolCall` and `TextResponse` dataclasses; construction no longer validates argument shape.
  • v0.7.3 Renames `--mode {native,prompt}` to `--backend-capability {native,prompt}`; no deprecation alias.
  • v0.7.0 Unknown‑tool handling now replies with [UnknownToolError] on the tool channel instead of user nudges.
  • v0.7.0 Changes error reporting: step enforcement and prerequisite violations now emit tool‑channel messages with [StepEnforcementError] / [PrereqError].

Beta — feedback welcome: [email protected]