ConnectOnionAll Posts

Design Journal · August 15, 2026 · ConnectOnion 1.6.6

Changing the Default Model Is a Backend Decision First

Gemini 3.7 Flash is now what you get when you do not choose. The interesting part was not the model — it was the order.

In 1.6.6 every default that was co/gemini-3.6-flash becomes co/gemini-3.7-flashAgent, llm_do, co ai, transcribe, and the browser agent. One million tokens of context, and nothing you configured explicitly is touched.

The decision

The managed backend learns a model before the client can name it. Never the other way round.

Why the order is the whole problem

A default model is not a value in a config file. It is the value that runs when a user has expressed no opinion — which is most users, most of the time. That makes it the single line of code with the widest blast radius in the framework.

If the client had shipped first, every agent created without an explicit model would have asked the backend for a model it did not have. Not a degraded experience — a hard failure, on the default path, for everyone who upgraded. And because it is the default path, the people affected would be exactly those who had done nothing wrong.

The general rule we follow for any change spanning a client and a server:

Ship the side that degrades gracefully first. Ask what a user sees if this half is live and the other is not. A backend that supports a model nobody requests yet is invisible. A client that requests a model nobody supports is an outage.

Verify the ID, not the name

The first acceptance criterion on both the client and backend issues was the same, and it is the one that looks like paperwork until it bites: confirm the exact upstream model ID; do not rely on the display name.

"Gemini 3.7" is what a launch post says. gemini-3.7-flash is what the API answers to, and the difference between them is an allowlist entry that silently matches nothing. So the check that mattered was not reading an announcement — it was asking the deployed backend what it actually serves, and then making one real, billed call through it before changing a single default in the client.

The rollback we kept open

co/gemini-3.6-flash remains available and remains accepted by the backend. A project that pins it keeps working, and moving back is a one-line change with no migration of persisted state. A default change that cannot be undone without a release is not a default change; it is a removal wearing a friendlier word.

# take the new default
pip install --upgrade connectonion

# or keep the previous one, explicitly
agent = Agent("assistant", model="co/gemini-3.6-flash")

What would make us revisit this

Defaults should follow evidence, not release dates. If 3.7 Flash turns out worse than 3.6 on tool-calling reliability or structured output in real agent loops — the two things agents do that a general benchmark does not measure — the default moves back. That is why the rollback is a supported path rather than a courtesy.

See also The Agent That Was Itself, and Billed Someone Else for the 1.6.5 release, and One Browser Protocol, Native Coding Adapters for why these are 1.6 patches rather than preview-train work.

Star us on GitHub

If ConnectOnion saves you time, a ⭐ goes a long way — and earns you a coffee chat with our founder.