Commit Graph
2 Commits
Author SHA1 Message Date
zooqueen 868d12da48 a free conversation is titled on the route it already uses
Titles are generated with the endpoint's configured title model, which is
priced. A conversation that opens on the free route belongs to an account with
no balance, so every one of those titles was refused at the wallet and the chat
kept the name it was born with.

The conversation's own model is already the starting point; for a free one,
leaving it there is the answer.

Also pins that reordering the catalog copies it. The list it reorders is the
cached one every caller is served, and doing it in place would let one free
caller move the default for everybody.
2026-08-16 03:14:58 -07:00
zooqueen 694061e40b a free plan opens on the model it can run
A conversation opens on the first model its endpoint offers, and that was a
priced rung. An account on the free plan holds no balance by design — it is
free, and buys its own credit — so its first message reached the wallet gate
where an answer belonged.

The plan is read from the one service that decides it (cloud /v1/allowance,
which names the plan and the day's free calls) and the free route leads the
catalog for a free caller. Reordered, never trimmed: the priced rungs stay
listed, because seeing what a plan buys is the offer. A plan that cannot be
read is not a free plan, so no failure of that read gives the free lane away.

Consent follows the route rather than the caller. The free models cost nothing
and share data in exchange; that is as true of a free plan defaulting to them
as of a guest pinned to them.

A spent day of free calls now renders as the limit it is. The gateway names it
allowance_spent beside the same 402 an empty wallet gets, and unmapped it read
as "something went wrong on our side" — an outage, at the moment an account is
most ready to buy. It says when the count returns and offers the plan that
lifts it, and no longer offers a switch to the route that just refused.
2026-08-16 01:56:48 -07:00