Loading
Commits on Source 9
-
Matt Cockayne authored
-
Matt Cockayne authored
-
Matt Cockayne authored
-
Matt Cockayne authored
-
Matt Cockayne authored
-
Anthropic no longer serves claude-opus-4-1-20250805. The generated table still answered for it, so Capabilities() reported support for a model the API now rejects — a caller checking before a call was told yes and then failed on the request. Regenerated in full rather than edited by hand. That matters here: the listing does not report whether a model still accepts temperature, so genmodels probes each one, and a hand-deletion would have looked like the same change while proving nothing about the other ten. The probe confirms none of them moved — the diff is exactly the one withdrawn entry. The default does not change. claude-opus-5 is still served and is still the most capable model Anthropic offers at GA, so D1 selects what it already selected; the withdrawal is two generations below it. Listing read and probes run on 2026-08-18. Closes #3
-
v0.11.0 adds chat.BoundConversation, the seam a provider applies a history policy through, and the conformance case that proves it runs. The case fails on this bump alone — history_policy_applied reports the last request carrying 9 turns with TruncateOldest(2) set. That is the point of it: the policy has never been applied here, and until now nothing said so.
-
Config.HistoryPolicy has had no effect on this provider since it shipped. The core defined the seam and this module never called it, so a caller setting TruncateOldest(40) got a conversation that grew without bound. Before every request, the client now describes its retained turns, passes them through chat.BoundConversation, and rewrites the session from the indices that come back. Before *every* request, not once per call: the ReAct loop appends a tool request and its results per step, so a bound taken on entry never sees the transcript that actually overflows. All three request paths run it — Chat, Ask and the streaming loop. Two things the description has to get right, and the core refuses the edit if it does not: - A turn carrying cache_control is Pinned. Caching bills a matching prefix, so dropping a cached turn invalidates every later cache hit — a failure that surfaces only as a larger invoice. - An assistant turn requesting tools and the user turn answering it share a ToolGroup. Keeping one without the other is an API error rather than a shorter conversation. The turn being answered is held out of the budget, per spec 0013 D8. At a tool step that is the whole tool unit rather than the trailing message alone: holding back only the tool_result would leave its tool_use in the described set, where a policy is free to drop it on its own. Recorded as the 2026-08-19 amendment to D8, because all three adapters have to agree and the conformance case cannot see the difference. chatStep extracts the bound and the round-trip together, which keeps Chat inside the complexity limit rather than suppressing the check. Refs chat#13 -