From 6071bb0aa776b010ffc297e21d9cd4a80b704fca Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Mon, 23 Feb 2026 14:39:42 -0500 Subject: [PATCH] Handle signature_delta streaming event for Anthropic thinking blocks The Anthropic streaming API sends thinking block signatures via a signature_delta event, not in content_block_start or content_block_stop. The parser was ignoring this event type, falling back to the empty placeholder signature from content_block_start, causing "Invalid signature in thinking block" errors on multi-turn conversations. Co-Authored-By: Claude Opus 4.6 --- crates/llm/src/providers/anthropic.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/crates/llm/src/providers/anthropic.rs b/crates/llm/src/providers/anthropic.rs index 9434b2801..2b5e1cede 100644 --- a/crates/llm/src/providers/anthropic.rs +++ b/crates/llm/src/providers/anthropic.rs @@ -800,6 +800,19 @@ impl StreamAccumulator { delta: thinking.to_string(), }] } + "signature_delta" => { + let signature = delta + .and_then(|d| d.get("signature")) + .and_then(serde_json::Value::as_str) + .map(String::from); + if let Some(ContentBlockKind::Thinking { + signature: ref mut sig, + }) = self.current_block + { + *sig = signature; + } + vec![] + } _ => vec![], } }