Loading
Commits on Source 8
-
Matt Cockayne authored
-
Matt Cockayne authored
-
Matt Cockayne authored
-
Matt Cockayne authored
-
Google's listing has moved since the table was last generated. Six models are withdrawn and one is new: withdrawn gemini-2.0-flash, gemini-2.0-flash-001, gemini-2.0-flash-lite, gemini-2.0-flash-lite-001, gemini-3-pro-preview, gemini-robotics-er-1.5-preview new gemini-3.7-flash The withdrawn entries are the part that bites: Capabilities() answered for models Google no longer serves, so a caller checking before a call was told yes and then failed on the request. gemini-3.7-flash is generally available (3.7-flash-08-2026, no preview marker) and reports the same limits and support flags as the current default gemini-3.6-flash. That makes it what D1 selects on the latest tie-break, but the default constant lives in the core, so the promotion lands in go/chat and this module follows. The snapshot records the default this module is pinned to today, which is still gemini-3.6-flash; it refreshes when the core bump arrives. Regenerated, not hand-edited, with the listing read on 2026-08-18. Closes #1 -
Matt Cockayne authored
v0.11.0 adds chat.BoundConversation, the seam a provider applies a history policy through, and the conformance case that proves it runs. It also moves DefaultModelGemini to gemini-3.7-flash, which is why this sits on the capability-table refresh rather than on main: the table has to know the model this module defaults to, or its own capability tests fail.
-
Matt Cockayne authored
Config.HistoryPolicy has had no effect on this provider since it shipped. A caller setting TruncateOldest(40) got a conversation that grew without bound. genai owns the transcript once a *genai.Chat exists and exposes no way to rewrite it — History(curated) reads, and nothing writes. So a bounded conversation means a new session seeded with the turns that survived. Chats.Create is purely local, validating the history and filling a struct, so rebuilding costs no round-trip; and the session is only rebuilt when the policy actually dropped or replaced something. The bound runs before every request rather than once per call. The ReAct loop appends a tool request and its results per step, so an entry-time bound never sees the transcript that overflows. All three paths run it — Chat, Ask and the streaming step. Gemini differs from the other two providers in two ways worth stating: - The prompt travels as parts on Send and never enters the history, so the turn being answered is excluded without any special handling. What does need holding out is a trailing model turn carrying function calls, because the parts about to be sent are its responses. - Nothing is ever Pinned. AddCached creates a provider-side cache and references it by name, so cached content never enters the transcript. Where a cache cannot be created the content is staged inline exactly as Add would — and then it is not cached, so dropping it invalidates nothing. askSession extracts the session open and bound together, which keeps Ask inside the complexity limit rather than suppressing the check. Refs chat#13 -