Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 25 additions & 3 deletions docs/docs/configure/providers.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,16 +48,38 @@ For pricing, security, and data handling details, see the [Altimate LLM Gateway

## Altimate Base

Altimate Base is the hosted Qwen 3.8 free model. It requires no signup or user-managed API key and
is subject to rate limits and abuse protection. Requests and responses are logged and may be used
to improve Altimate products and services. Do not send secrets or confidential code.
Altimate Base is a free, hosted model — no signup, no account, no user-managed API
key. Accept a one-time consent disclosure and it just works. It supports up to 131K tokens of
context and up to 65K tokens of output.

Requests and responses are logged and may be used to improve Altimate's products, including the
model. Secrets are automatically masked before storage, but don't rely on it — avoid sending
secrets or confidential code. Altimate Base is pseudonymous, not anonymous: a stable
per-installation identifier links your requests across launches and `altimate providers logout

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: This section now states the per-installation-identifier and altimate providers logout altimate-base-does-not-reset-it claim twice: the new pseudonymous paragraph (with the security-FAQ pointer) and the existing paragraph further down that starts "That hash is stable across launches...". Both cover the same identifier, the same logout command, and the same allowance-reset point. Keep the intro claim brief and leave the detailed identity/logout/allowance explanation in the later paragraph (or drop one of them) to avoid repeating the caveat in one section.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/docs/configure/providers.md, line 58:

<comment>This section now states the per-installation-identifier and `altimate providers logout altimate-base`-does-not-reset-it claim twice: the new pseudonymous paragraph (with the security-FAQ pointer) and the existing paragraph further down that starts "That hash is stable across launches...". Both cover the same identifier, the same logout command, and the same allowance-reset point. Keep the intro claim brief and leave the detailed identity/logout/allowance explanation in the later paragraph (or drop one of them) to avoid repeating the caveat in one section.</comment>

<file context>
@@ -48,10 +48,16 @@ For pricing, security, and data handling details, see the [Altimate LLM Gateway
+Requests and responses are logged and may be used to improve Altimate's products, including the
+model. Secrets are automatically masked before storage, but don't rely on it — avoid sending
+secrets or confidential code. Altimate Base is pseudonymous, not anonymous: a stable
+per-installation identifier links your requests across launches and `altimate providers logout
+altimate-base` does not reset it (see the [security FAQ](../reference/security-faq.md)). Usage is
+rate limited.
</file context>

altimate-base` does not reset it (see the [security FAQ](../reference/security-faq.md)). Usage is
rate limited.

Choose **Altimate Base** from the first-run picker or `/connect`. A disclosure is shown before any
registration request; **No** is selected by default. After registration, the model is available as
`altimate-free/altimate-base` and becomes the free fallback when no paid Altimate Gateway or
explicit model is selected. Big Pickle is no longer selected implicitly, but remains available in
the full OpenCode model catalog for users who choose it explicitly.

### Usage limits

Altimate Base is fair-use, not unlimited:

- **Your personal allowance** is a one-time grant tied to this installation. It does not renew.
Once it's used up, sign up at [app.myaltimate.com](https://app.myaltimate.com) for a paid plan
(the Altimate LLM Gateway) to keep going, or switch to another model.
- **Shared daily capacity** is a pool covering every free-tier user. It resets daily. If it's
exhausted, try again tomorrow or switch models in the meantime.
- **Rate limiting** protects the service from bursts. If you hit it, wait a moment and retry.
- **Request size limits** apply per request. If a request is rejected as too large, shorten it —
start a new session or trim the context — and try again.

Each of these is reported back to you as a specific, actionable error message when it happens.

Official release binaries embed the current gateway endpoint at build time. Operators and local
development can override it without changing code:

Expand Down
8 changes: 7 additions & 1 deletion packages/opencode/src/altimate/free/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -510,8 +510,14 @@ export function describeRateLimit(
}
if (kind === "budget_exceeded") {
if (detail.includes("ExceededBudget: User=")) {
// The per-user wallet (GRANT_NEW_PRINCIPAL_USD) is a one-time lifetime grant with no
// budget_duration — it never resets. Only the shared global ceiling below resets daily.
// See altimate-gateway issuer/config.py (grant_budget_duration, validate()) and
// accounting_db.py's one-time registration grant. Points to the paid Altimate LLM Gateway
// sign-up (app.myaltimate.com) since switching models is the only other option here.
return {
message: "You've used today's free Altimate Base allowance. It resets tomorrow—switch models to keep going.",
message:
"You've used your free Altimate Base allowance — it's a one-time grant and won't renew. Sign up at app.myaltimate.com to keep going, or switch models.",
retryable: false,
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,14 +124,18 @@ describe("describeRateLimit — via the fake gateway (every ChatMode failure kno
expect(response.status).toBe(429)

const described = FreeTier.describeRateLimit({ body: await response.text() })
// Pinning today's message as written. Flagged ambiguity (plan Deliverable 1, Suite E /
// Summary #2): "It resets tomorrow" is arguably inaccurate for the wallet case — the
// per-principal grant (GRANT_NEW_PRINCIPAL_USD) has no budget_duration and never resets; only
// the separate global daily ceiling actually resets daily. This test asserts current
// behavior, not the plan's suggested fix, per the plan's explicit instruction not to
// silently "correct" it.
// Confirmed against altimate-gateway (issuer/config.py `grant_budget_duration` defaults to
// "" and `validate()` refuses to boot if it's ever set; issuer/accounting_db.py grants a
// one-time registration credit with "without later top-ups" in the docstring; issuer/
// budget_sync.py mirrors the lifetime allowance into LiteLLM's max_budget with no
// budget_duration). The per-user wallet is a one-time lifetime grant that never renews —
// unlike the separate global $50/day ceiling (litellm/config.yaml `budget_duration: 1d`),
// which genuinely does reset daily and is covered by the budget-global case below. The
// message nudges toward the paid Altimate LLM Gateway (app.myaltimate.com) since switching
// models is the only other option when a lifetime grant is gone for good.
expect(described).toEqual({
message: "You've used today's free Altimate Base allowance. It resets tomorrow—switch models to keep going.",
message:
"You've used your free Altimate Base allowance — it's a one-time grant and won't renew. Sign up at app.myaltimate.com to keep going, or switch models.",
retryable: false,
})
})
Expand Down
Loading