aweshare 0.7.5 → 0.7.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -240,7 +240,7 @@ base_url = "https://hub.example.com/v1"
240
240
  }
241
241
  ```
242
242
 
243
- Set `small_model` — otherwise the session-title request collides with your first message: opencode fires it concurrently, both count against the alias's `maxConcurrencyPerUser`, and the default 1 turns the title call into a 429 `PRODUCER_MAX_CONCURRENCY` retry loop. Left unset, opencode auto-picks a small model from the same provider, but only custom models carrying a recent `release_date` and an id/name matching its cheap keywords (`flash`/`lite`/`mini`/`nano`/`haiku`/`small`/`fast`) are eligible — entries without `release_date` read as 1970 and never qualify — and with no eligible candidate it falls back to the main alias and hits the cap anyway. Pointing `small_model` at any non-aweshare provider works too.
243
+ Set `small_model` — otherwise the session-title request collides with your first message: opencode fires it concurrently, both count against the alias's `maxConcurrencyPerUser`, and the default 1 turns the title call into a 429 `PRODUCER_MAX_CONCURRENCY` retry loop. Left unset, opencode auto-picks a small model from the same provider, but only custom models carrying a recent `release_date` and an id/name matching its cheap keywords (`flash`/`lite`/`mini`/`nano`/`haiku`/`small`/`fast`) are eligible — entries without `release_date` read as 1970 and never qualify — and with no eligible candidate it falls back to the main alias and hits the cap anyway. Pointing `small_model` at any non-aweshare provider works too. Hub-side, admission queueing (see Per-offering usage caps) already absorbs the short version of this collision: the title request holds the slot for a few seconds and the main request queues through instead of erroring.
244
244
 
245
245
  **Discovering models**: `GET /v1/models` (OpenAI SDK `client.models.list()`) returns every alias registered on the hub, with online status.
246
246
 
@@ -296,12 +296,14 @@ One alias can also speak several wire protocols at once: replace `backend = "…
296
296
 
297
297
  | Key | Default | Meaning | Enforcement |
298
298
  |---|---|---|---|
299
- | `maxConcurrencyPerUser` | 1 | concurrent requests **per consumer** on this alias | 429 `PRODUCER_MAX_CONCURRENCY` |
299
+ | `maxConcurrencyPerUser` | 1 | concurrent requests **per consumer** on this alias | 429 `PRODUCER_MAX_CONCURRENCY` — only after `queueWaitMs` of queueing (see below) |
300
300
  | `maxConcurrentUsers` | 3 | distinct consumers with a request in flight on this alias | 429 `PRODUCER_MAX_USERS` |
301
301
  | `dailyTokens` | 1000000 | tokens (prompt + completion) shared across all consumers on this alias, per Beijing day (UTC+8); `0` = unlimited | 429 `QUOTA_EXCEEDED` (resets at Beijing midnight) |
302
302
 
303
303
  `maxConcurrencyPerUser` caps each consumer's in-flight **requests**; `maxConcurrentUsers` caps in-flight **people** — a consumer firing 5 parallel requests needs `maxConcurrencyPerUser ≥ 5` for itself alone, while the total on the alias is bounded by `maxConcurrentUsers × maxConcurrencyPerUser`. Coding agents need headroom here: opencode keeps a background title/summary request in flight next to the main one, so on offerings meant for such agents `maxConcurrencyPerUser = 2` is the practical floor unless consumers route their small model elsewhere (see Consumer tool configuration). Daily caps count recorded usage (see "Honest limits" below). (Renamed in v0.4.3 from `maxConcurrency`, which capped the alias's total in-flight requests.)
304
304
 
305
+ **Admission queueing (`queueWaitMs`)** softens this cap's failure mode without changing its meaning: when the consumer's slot on the alias is busy, the request parks at the hub for up to `queueWaitMs` (env `AWESHARE_QUEUE_WAIT_MS`, config.toml `queueWaitMs`, default 10000, `0` = reject at once) and is admitted the moment the slot frees — a short same-key overlap (the background title request, a second window starting up) resolves invisibly instead of 429ing. Only a slot still busy after the window answers 429, and the denial then names how long it waited. The wait budget is shared across the alias's backup queue (primary and backups draw on one deadline, they do not stack), probes never wait (`consumer list --ping` must answer fast and tell the truth), and `hub status` shows the setting on the timeouts line. Waiting holds no upstream resources — just the HTTP connection.
306
+
305
307
  **Share-time scheduling** (optional, same `[[offerings]]` block; any of the four keys turns it on): `shareWindows = ["00:00-06:00"]` shares the alias **only** inside those wall-clock windows, `blockWindows = ["14:00-18:00"]` is the deny-list alternative — set one or the other, never both. `shareDays` scopes the calendar: `everyday` (default), `weekdays`, `weekend`, `today`, `tomorrow` (both freeze into concrete dates when the config is read — edit the file again tomorrow for another one-day window) or explicit dates like `["2026-09-08", "2026-09-10"]`. `shareTimezone` names the IANA zone the windows live in; unset it defaults to the writing machine's display zone (`AWESHARE_TIMEZONE`, else Asia/Shanghai), resolved once at parse time and sent with the registration — the hub enforces it however its own clock is set. A window whose start is later than its end (`"22:00-06:00"`) crosses midnight and belongs to its start day, so `weekdays`-scheduled `22:00-06:00` stays open into Saturday's small hours but not Saturday night. Days-only schedules (no windows) share all day on matching days. Outside the schedule the hub answers 503 `SHARE_WINDOW_CLOSED` with a `Retry-After` of the exact time until the next window; `consumer list`, `hub list offerings` and `producer list` show a SCHEDULE column (`daily 00:00-06:00`, `weekdays !14:00-18:00`, `2026-09-08 all day`, `-` when unset, `(closed)` while shut). Schedules are config like the caps — hot-reload edits them, and hub-hosted models set the same keys in `config.produce.toml`.
306
308
 
307
309
  An exhausted daily budget can be reopened mid-day by the offering's **owner** — no restart, no re-register: `aweshare producer refresh ns/model` on the producer's machine re-anchors today's window at this moment (usage before it stops counting), `--add N` raises today's cap by N tokens until Beijing midnight, `--clear` drops both markers. For hub-hosted models the same verbs live under `aweshare hub produce refresh name` (`hub/` prefix optional). Both commands take `--all` to bare-refresh every one of their own offerings in a single run. The split is deliberate: quota expansion is the owner's call — the hub operator can restrict a producer's model (`admin offering revoke`) but never spends more of its upstream budget; grants survive re-registers and any catalog edit (they live in their own alias-keyed table, never on the offering rows) and lapse at Beijing midnight on their own. A permanent raise belongs in the config (`dailyTokens`), which hot-reloads.
@@ -461,16 +463,18 @@ The hub reads `config.toml` from its data dir (`~/.aweshare-hub/config.toml`; Do
461
463
  | `AWESHARE_CONSUMER_RPS` / `BURST` / `CONCURRENCY` | 10 / 20 / 8 | per-consumer limits |
462
464
  | `AWESHARE_CONSUMER_PROBE_BUDGET` | 10 | complete `consumer list --ping` runs per consumer per day; 0 = unlimited |
463
465
  | `AWESHARE_HEAD_TIMEOUT_MS` / `IDLE_TIMEOUT_MS` | 120000 / 120000 | response-head timeout / stream idle timeout |
466
+ | `AWESHARE_QUEUE_WAIT_MS` | 10000 | how long a request may wait for a per-user admission slot before 429 — short same-key overlaps (a coding agent's background title request, a second window) queue through instead of failing at once; `0` = reject immediately |
464
467
  | `AWESHARE_MAX_BODY_BYTES` | 32MB | request body cap |
465
468
  | `AWESHARE_INVITE_REDEEM_PER_MIN` | 10 | redeem entry global insurance budget (valid-format attempts shared by every origin) |
466
469
  | `AWESHARE_INVITE_REDEEM_PER_IP_MIN` | 5 | redeem entry per-origin-IP bucket (`CF-Connecting-IP` behind a tunnel/proxy) — one visitor cannot monopolize admission; both keys reload via SIGHUP |
467
470
  | `AWESHARE_MAX_PRODUCERS` | 10 | max active producers — token issuance (admin API), invite redeem and restore refuse with `403 HUB_FULL` when full |
468
471
  | `AWESHARE_AUTO_BLOCK_MODEL_MISMATCH` | false | auto-block an offering after 2 consecutive successful responses report a different model than declared. Off by default: mismatches are logged once (flip) and visible in `hub list offerings` / `consumer list` / `list usage --details` either way — the hub is report-only until the operator opts in. An auto block clears when the producer re-declares a different `upstreamModel`; an explicit manual `admin offering revoke` takes precedence and always persists; reloads via SIGHUP |
472
+ | `AWESHARE_OFFLINE_AFTER_MS` | 432000000 (120h) | continuous-degraded duration before an offering renders `offline` — the honest verdict for a backend that has not recovered in days. Display and catalog only: dispatch is already cut at degraded, recovery probes keep running, and a late success returns the offering straight to `online`. Per offering (its backend), never per producer: the producer's other models keep their own verdicts. The 503 gains how long it has been dead, `hub status` lists the dead aliases, and `/v1/catalog` carries `degradedSince`. Upgraded agents report the exact streak start; older ones get a hub-side first-seen stamp (reset by a hub restart or producer reconnect). 0 = stay degraded forever; reloads via SIGHUP |
469
473
  | `AWESHARE_HUB_CONTACT_EMAIL` | unset | contact address shown on the browser landing page (`GET /` with `Accept: text/html`) where visitors request an invite — a static bilingual EN/中文 page (toggle via `?lang=`, first visit follows `Accept-Language`); unset shows generic "contact the hub operator" wording; reloads via SIGHUP |
470
474
  | `AWESHARE_NO_UPDATE_CHECK` | unset | set to `1` to disable the passive update reminder |
471
475
  | `AWESHARE_TIMEZONE` | `Asia/Shanghai` | display zone for every human-readable time the CLIs print (table cells, `since …` windows, log lines). Any IANA name; the wire, SQLite and `--json` stay UTC ISO. Read by whichever CLI renders, so it also applies to `docker exec` — set it on the container to change `hub list`/`hub status` output. Not a server tunable: no SIGHUP reload, no config.toml key |
472
476
 
473
- Health: agent heartbeats every 15s, silent 45s = dead; backends with 2 consecutive AUTH/QUOTA failures auto-degrade (alias shows `degraded`, dispatch stops), 30s probes recover; 2 consecutive upstream 5xx show `unstable` (dispatch continues), a 3rd degrades only with `degradeOn5xx` opted in. A new connection with the same producer token replaces the old one (latest-wins).
477
+ Health: agent heartbeats every 15s, silent 45s = dead; backends with 2 consecutive AUTH/QUOTA failures auto-degrade (alias shows `degraded`, dispatch stops), 30s probes recover; 2 consecutive upstream 5xx show `unstable` (dispatch continues), a 3rd degrades only with `degradeOn5xx` opted in. A degraded streak older than `AWESHARE_OFFLINE_AFTER_MS` (default 120h) escalates that offering to `offline` — per offering, the producer's other models unaffected; probes keep running, and a recovery returns it straight to `online` (the escalation is never a block, and never stops the daily last-gasp probe). A new connection with the same producer token replaces the old one (latest-wins).
474
478
 
475
479
  Model honesty: an offering's `upstreamModel` is the producer's claim — the hub compares it with the bounded model id reported by each successful response (`model` / `message.model` / `response.model`). This is consistency evidence, not proof of the model's underlying weights: a producer or upstream router can still rewrite that metadata. The observation rides the existing usage meter, never rewrites the relayed response, and is scoped to the same alias, protocol and current declaration. It appears in the `OBSERVED MODEL` column, `list usage --details`, and `/v1/catalog` as `observedModel`, `observedAt`, `modelMatch` and the backward-compatible `modelVerified`. The catalog also carries `hubCheckAt` — the newer of that observation and the serving side's heartbeat-reported last success — rendered as the LAST SEEN column: how long ago the hub's evidence says the offering actually served (`-` = never). Comparison is token-aware: exact ids and explicit date/revision suffixes are affirmative; vendor prefixes are tolerated; adjacent variants such as `gpt-4`/`gpt-4o` and `gpt-4o`/`gpt-4o-mini` mismatch; a less-specific response is marked `?`/`insufficient`, not verified. Handling is tiered: default **report-only**, manual `hub admin offering revoke ALIAS` or whole-producer `hub admin invite revoke`, and opt-in auto-block after 2 consecutive mismatches. Manual blocks override automatic ones. `producer doctor` probes every distinct configured model and reports the response-named id with the same evidence boundary.
476
480
 
@@ -37,6 +37,10 @@ export declare function hubConfigFromEnv(env?: NodeJS.ProcessEnv): {
37
37
  * 120s: a live stream of coding-agent traffic emits chunks far more often
38
38
  * than that, and every idle second holds an admission slot hostage. */
39
39
  idleTimeoutMs: number;
40
+ /** How long a request may wait for a per-user admission slot before 429 —
41
+ * short same-key overlaps (an agent's background title request, a second
42
+ * window) queue through instead of failing at once. 0 = reject at once. */
43
+ queueWaitMs: number;
40
44
  maxBodyBytes: number;
41
45
  /** Redeem attempts per minute on the unauthenticated invite endpoint —
42
46
  * the global insurance budget shared by every origin. */
@@ -52,6 +56,10 @@ export declare function hubConfigFromEnv(env?: NodeJS.ProcessEnv): {
52
56
  * logged and visible either way; blocking on them risks false positives
53
57
  * (versioned or vendor-prefixed model ids) and is the operator's call. */
54
58
  autoBlockModelMismatch: boolean;
59
+ /** Continuous-degraded duration before an offering renders offline
60
+ * (display and catalog only — dispatch is already cut at degraded, and
61
+ * recovery probes keep running). 0 = stay degraded forever. */
62
+ offlineAfterMs: number;
55
63
  /** Contact address shown on the browser landing page (GET /) for invite
56
64
  * requests; empty = generic "contact the hub operator" wording. */
57
65
  contactEmail: string;
@@ -64,5 +72,5 @@ export declare function loadHubConfig(env?: NodeJS.ProcessEnv, paths?: HubPaths)
64
72
  * Returns the names of keys whose value actually changed. Never throws. */
65
73
  export declare function applyHubConfig(live: HubConfig, fresh: HubConfig): string[];
66
74
  /** Written by `hub init`; every key commented out so an untouched file keeps the defaults. */
67
- export declare const HUB_CONFIG_TEMPLATE = "# aweshare hub configuration (~/.aweshare-hub/config.toml)\n# Generated by 'aweshare hub init'. Every key is commented out: uncomment one\n# to override its default. Precedence: CLI flags (--host/--port) > environment\n# variables (AWESHARE_*) > this file > defaults.\n\n# Listen address.\n#host = \"0.0.0.0\"\n#port = 8787\n\n# Per-consumer token bucket: refill per second, burst size, max in-flight.\n#consumerRps = 10\n#consumerBurst = 20\n#consumerMaxConcurrent = 8\n\n# Complete \"consumer list --ping\" runs per consumer per day, shared across\n# aliases; 0 = unlimited.\n#consumerProbeBudget = 10\n\n# Timeouts in ms: no response head within headTimeoutMs -> 504; no bytes\n# within idleTimeoutMs after the head -> 504 (streaming keeps it alive).\n#headTimeoutMs = 120000\n#idleTimeoutMs = 120000\n\n# Request body cap (32MB) and the unauthenticated invite-redeem rate limits:\n# a per-origin-IP bucket (one visitor must not monopolize admission) plus a\n# global insurance budget shared by every origin.\n#maxBodyBytes = 33554432\n#inviteRedeemPerMinute = 10\n#inviteRedeemPerIpMinute = 5\n\n# Cap on active (non-suspended) producers \u2014 the hub's tenant slots.\n#maxProducers = 10\n\n# Auto-block an offering after repeated successful responses report a model\n# different from its declared upstreamModel. Off by default:\n# mismatches are logged and visible in hub list offerings / consumer list either way,\n# and blocking on them risks false positives on versioned or vendor-prefixed\n# model ids. An auto block clears when the producer re-declares a different\n# upstreamModel; manual revokes (aweshare hub admin offering revoke) always persist.\n#autoBlockModelMismatch = false\n\n# Contact email shown on the browser landing page (GET / in a browser) \u2014 the\n# address people request an invite from. Empty or absent = the page tells\n# visitors to contact the hub operator without showing an address.\n#contactEmail = \"you@example.com\"\n\n";
75
+ export declare const HUB_CONFIG_TEMPLATE = "# aweshare hub configuration (~/.aweshare-hub/config.toml)\n# Generated by 'aweshare hub init'. Every key is commented out: uncomment one\n# to override its default. Precedence: CLI flags (--host/--port) > environment\n# variables (AWESHARE_*) > this file > defaults.\n\n# Listen address.\n#host = \"0.0.0.0\"\n#port = 8787\n\n# Per-consumer token bucket: refill per second, burst size, max in-flight.\n#consumerRps = 10\n#consumerBurst = 20\n#consumerMaxConcurrent = 8\n\n# Complete \"consumer list --ping\" runs per consumer per day, shared across\n# aliases; 0 = unlimited.\n#consumerProbeBudget = 10\n\n# Timeouts in ms: no response head within headTimeoutMs -> 504; no bytes\n# within idleTimeoutMs after the head -> 504 (streaming keeps it alive).\n#headTimeoutMs = 120000\n#idleTimeoutMs = 120000\n\n# How long (ms) a request may WAIT for a per-user admission slot when this\n# consumer key already has maxConcurrencyPerUser requests in flight on the\n# alias. Short same-key overlaps (a coding agent's background title request,\n# a second window) queue through instead of 429ing at once; only a slot\n# still busy after this window answers 429 PRODUCER_MAX_CONCURRENCY.\n# 0 = reject immediately.\n#queueWaitMs = 10000\n\n# Request body cap (32MB) and the unauthenticated invite-redeem rate limits:\n# a per-origin-IP bucket (one visitor must not monopolize admission) plus a\n# global insurance budget shared by every origin.\n#maxBodyBytes = 33554432\n#inviteRedeemPerMinute = 10\n#inviteRedeemPerIpMinute = 5\n\n# Cap on active (non-suspended) producers \u2014 the hub's tenant slots.\n#maxProducers = 10\n\n# Auto-block an offering after repeated successful responses report a model\n# different from its declared upstreamModel. Off by default:\n# mismatches are logged and visible in hub list offerings / consumer list either way,\n# and blocking on them risks false positives on versioned or vendor-prefixed\n# model ids. An auto block clears when the producer re-declares a different\n# upstreamModel; manual revokes (aweshare hub admin offering revoke) always persist.\n#autoBlockModelMismatch = false\n\n# Continuous-degraded duration (ms) before an offering renders offline \u2014 the\n# honest verdict for a backend that has not recovered in days. Display and\n# catalog only: dispatch is already cut at degraded, recovery probes keep\n# running, and a late success brings the offering straight back to online.\n# Per offering, never per producer: the producer's other models are untouched.\n# 0 = stay degraded forever. Default 120h = 432000000.\n#offlineAfterMs = 432000000\n\n# Contact email shown on the browser landing page (GET / in a browser) \u2014 the\n# address people request an invite from. Empty or absent = the page tells\n# visitors to contact the hub operator without showing an address.\n#contactEmail = \"you@example.com\"\n\n";
68
76
  export declare const HUB_PRODUCE_CONFIG_TEMPLATE = "# aweshare hub-local model catalog (~/.aweshare-hub/config.produce.toml)\n# Generated by 'aweshare hub produce init'. Upstream key values live in\n# secrets.json next to this file.\n\n# Master switch for the whole hub-local catalog: enabled = false unloads\n# every hub/... model within the 2s hot-reload window (the catalog below\n# stays intact; flip it back to true to bring them all back). Hot-reloads\n# like every other key; a non-boolean value fails the reload loudly.\n#enabled = true\n\n#[[backends]]\n#id = \"openai\"\n#protocol = \"openai\" # openai | anthropic | responses\n#baseUrl = \"https://api.openai.com/v1\"\n#keyRef = \"openai-key\"\n\n#[[offerings]]\n#alias = \"hub/gpt-4o\" # bare names are auto-prefixed with hub/\n#backend = \"openai\"\n#upstreamModel = \"gpt-4o-2024-11-20\"\n#maxConcurrencyPerUser = 4\n#maxConcurrentUsers = 3\n#dailyTokens = 1000000\n# Share-time scheduling (optional; any of the four keys turns it on). Windows\n# are wall-clock HH:MM-HH:MM in shareTimezone (default: this machine's display\n# zone, frozen at parse time); a start later than its end crosses midnight and\n# belongs to the start day. shareDays is one of everyday (default), weekdays,\n# weekend, today, tomorrow \u2014 the last two freeze into concrete dates when the\n# config is read \u2014 or a list like [\"2026-09-08\", \"2026-09-09\"]. Outside the\n# schedule the hub answers 503 SHARE_WINDOW_CLOSED; edits hot-reload.\n#shareWindows = [\"00:00-06:00\"] # only share in these windows\n#blockWindows = [\"14:00-18:00\"] # never share in these (mutually exclusive)\n#shareDays = \"weekdays\"\n#shareTimezone = \"Asia/Shanghai\"\n";
@@ -56,6 +56,18 @@ function positiveNumber(env, key, fallback) {
56
56
  }
57
57
  return value;
58
58
  }
59
+ /** Parse a non-negative number env var — 0 is a meaningful "off" for the
60
+ * knobs measured in milliseconds; garbage fails fast with the key named. */
61
+ function nonNegativeNumber(env, key, fallback) {
62
+ const raw = env[key];
63
+ if (raw === undefined || raw === '')
64
+ return fallback;
65
+ const value = Number(raw);
66
+ if (!Number.isFinite(value) || value < 0) {
67
+ throw new Error(`${key} must be 0 or a positive number, got '${raw}'`);
68
+ }
69
+ return value;
70
+ }
59
71
  /** Parse a whole-number env var that may legitimately be 0 (0 = off /
60
72
  * unlimited for the budget knobs); garbage fails fast with the key named. */
61
73
  function nonNegativeInteger(env, key, fallback) {
@@ -108,6 +120,10 @@ export function hubConfigFromEnv(env = process.env) {
108
120
  * 120s: a live stream of coding-agent traffic emits chunks far more often
109
121
  * than that, and every idle second holds an admission slot hostage. */
110
122
  idleTimeoutMs: positiveNumber(env, 'AWESHARE_IDLE_TIMEOUT_MS', 120_000),
123
+ /** How long a request may wait for a per-user admission slot before 429 —
124
+ * short same-key overlaps (an agent's background title request, a second
125
+ * window) queue through instead of failing at once. 0 = reject at once. */
126
+ queueWaitMs: nonNegativeNumber(env, 'AWESHARE_QUEUE_WAIT_MS', 10_000),
111
127
  maxBodyBytes: positiveNumber(env, 'AWESHARE_MAX_BODY_BYTES', 32 * 1024 * 1024),
112
128
  /** Redeem attempts per minute on the unauthenticated invite endpoint —
113
129
  * the global insurance budget shared by every origin. */
@@ -123,6 +139,10 @@ export function hubConfigFromEnv(env = process.env) {
123
139
  * logged and visible either way; blocking on them risks false positives
124
140
  * (versioned or vendor-prefixed model ids) and is the operator's call. */
125
141
  autoBlockModelMismatch: booleanFromEnv(env, 'AWESHARE_AUTO_BLOCK_MODEL_MISMATCH', false),
142
+ /** Continuous-degraded duration before an offering renders offline
143
+ * (display and catalog only — dispatch is already cut at degraded, and
144
+ * recovery probes keep running). 0 = stay degraded forever. */
145
+ offlineAfterMs: nonNegativeInteger(env, 'AWESHARE_OFFLINE_AFTER_MS', 120 * 3_600_000),
126
146
  /** Contact address shown on the browser landing page (GET /) for invite
127
147
  * requests; empty = generic "contact the hub operator" wording. */
128
148
  contactEmail: stringFromEnv(env, 'AWESHARE_HUB_CONTACT_EMAIL', ''),
@@ -138,11 +158,13 @@ const CONFIG_FILE_KEYS = new Set([
138
158
  'consumerProbeBudget',
139
159
  'headTimeoutMs',
140
160
  'idleTimeoutMs',
161
+ 'queueWaitMs',
141
162
  'maxBodyBytes',
142
163
  'inviteRedeemPerMinute',
143
164
  'inviteRedeemPerIpMinute',
144
165
  'maxProducers',
145
166
  'autoBlockModelMismatch',
167
+ 'offlineAfterMs',
146
168
  'contactEmail',
147
169
  ]);
148
170
  /** Read config.toml from the data dir. Absent file = null; anything wrong with
@@ -193,14 +215,27 @@ function readConfigFile(paths) {
193
215
  out.autoBlockModelMismatch = value;
194
216
  }
195
217
  }
196
- else if (key === 'consumerProbeBudget') {
197
- // 0 is meaningful here (unlimited), unlike the other numeric knobs
198
- if (typeof value !== 'number' || !Number.isInteger(value) || value < 0) {
199
- problems.push(`consumerProbeBudget must be 0 or a positive integer, got '${value}'`);
218
+ else if (key === 'queueWaitMs') {
219
+ // 0 is meaningful here (reject at once), and fractional ms are fine
220
+ if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {
221
+ problems.push(`${key} must be 0 or a positive number, got '${value}'`);
200
222
  }
201
223
  else {
224
+ out.queueWaitMs = value;
225
+ }
226
+ }
227
+ else if (key === 'consumerProbeBudget' || key === 'offlineAfterMs') {
228
+ // 0 is meaningful here (off / stay degraded forever), unlike the other
229
+ // numeric knobs
230
+ if (typeof value !== 'number' || !Number.isInteger(value) || value < 0) {
231
+ problems.push(`${key} must be 0 or a positive integer, got '${value}'`);
232
+ }
233
+ else if (key === 'consumerProbeBudget') {
202
234
  out.consumerProbeBudget = value;
203
235
  }
236
+ else {
237
+ out.offlineAfterMs = value;
238
+ }
204
239
  }
205
240
  else if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0) {
206
241
  problems.push(`${key} must be a positive number, got '${value}'`);
@@ -226,11 +261,13 @@ export function loadHubConfig(env = process.env, paths = resolvePaths(env)) {
226
261
  consumerProbeBudget: nonNegativeInteger(env, 'AWESHARE_CONSUMER_PROBE_BUDGET', file?.consumerProbeBudget ?? 10),
227
262
  headTimeoutMs: positiveNumber(env, 'AWESHARE_HEAD_TIMEOUT_MS', file?.headTimeoutMs ?? 120_000),
228
263
  idleTimeoutMs: positiveNumber(env, 'AWESHARE_IDLE_TIMEOUT_MS', file?.idleTimeoutMs ?? 120_000),
264
+ queueWaitMs: nonNegativeNumber(env, 'AWESHARE_QUEUE_WAIT_MS', file?.queueWaitMs ?? 10_000),
229
265
  maxBodyBytes: positiveNumber(env, 'AWESHARE_MAX_BODY_BYTES', file?.maxBodyBytes ?? 32 * 1024 * 1024),
230
266
  inviteRedeemPerMinute: positiveNumber(env, 'AWESHARE_INVITE_REDEEM_PER_MIN', file?.inviteRedeemPerMinute ?? 10),
231
267
  inviteRedeemPerIpMinute: positiveNumber(env, 'AWESHARE_INVITE_REDEEM_PER_IP_MIN', file?.inviteRedeemPerIpMinute ?? 5),
232
268
  maxProducers: positiveNumber(env, 'AWESHARE_MAX_PRODUCERS', file?.maxProducers ?? 10),
233
269
  autoBlockModelMismatch: booleanFromEnv(env, 'AWESHARE_AUTO_BLOCK_MODEL_MISMATCH', file?.autoBlockModelMismatch ?? false),
270
+ offlineAfterMs: nonNegativeInteger(env, 'AWESHARE_OFFLINE_AFTER_MS', file?.offlineAfterMs ?? 120 * 3_600_000),
234
271
  contactEmail: stringFromEnv(env, 'AWESHARE_HUB_CONTACT_EMAIL', file?.contactEmail ?? ''),
235
272
  };
236
273
  }
@@ -243,11 +280,13 @@ const RELOADABLE_KEYS = [
243
280
  'consumerProbeBudget',
244
281
  'headTimeoutMs',
245
282
  'idleTimeoutMs',
283
+ 'queueWaitMs',
246
284
  'maxBodyBytes',
247
285
  'inviteRedeemPerMinute',
248
286
  'inviteRedeemPerIpMinute',
249
287
  'maxProducers',
250
288
  'autoBlockModelMismatch',
289
+ 'offlineAfterMs',
251
290
  'contactEmail',
252
291
  ];
253
292
  /** Correlated copy: one generic key keeps key and value type-linked, so a key
@@ -291,6 +330,14 @@ export const HUB_CONFIG_TEMPLATE = `# aweshare hub configuration (~/.aweshare-hu
291
330
  #headTimeoutMs = 120000
292
331
  #idleTimeoutMs = 120000
293
332
 
333
+ # How long (ms) a request may WAIT for a per-user admission slot when this
334
+ # consumer key already has maxConcurrencyPerUser requests in flight on the
335
+ # alias. Short same-key overlaps (a coding agent's background title request,
336
+ # a second window) queue through instead of 429ing at once; only a slot
337
+ # still busy after this window answers 429 PRODUCER_MAX_CONCURRENCY.
338
+ # 0 = reject immediately.
339
+ #queueWaitMs = 10000
340
+
294
341
  # Request body cap (32MB) and the unauthenticated invite-redeem rate limits:
295
342
  # a per-origin-IP bucket (one visitor must not monopolize admission) plus a
296
343
  # global insurance budget shared by every origin.
@@ -309,6 +356,14 @@ export const HUB_CONFIG_TEMPLATE = `# aweshare hub configuration (~/.aweshare-hu
309
356
  # upstreamModel; manual revokes (aweshare hub admin offering revoke) always persist.
310
357
  #autoBlockModelMismatch = false
311
358
 
359
+ # Continuous-degraded duration (ms) before an offering renders offline — the
360
+ # honest verdict for a backend that has not recovered in days. Display and
361
+ # catalog only: dispatch is already cut at degraded, recovery probes keep
362
+ # running, and a late success brings the offering straight back to online.
363
+ # Per offering, never per producer: the producer's other models are untouched.
364
+ # 0 = stay degraded forever. Default 120h = 432000000.
365
+ #offlineAfterMs = 432000000
366
+
312
367
  # Contact email shown on the browser landing page (GET / in a browser) — the
313
368
  # address people request an invite from. Empty or absent = the page tells
314
369
  # visitors to contact the hub operator without showing an address.
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -23,10 +23,13 @@ export interface OfferingView {
23
23
  /** Epoch ms of the backend's last success as the serving side reported it
24
24
  * (heartbeats); null when that side is offline or never succeeded. */
25
25
  lastOkOf(o: OfferingRow): number | null;
26
+ /** Start of the backend's current degraded streak (heartbeats); null when
27
+ * not degraded — drives the dead escalation's evidence in the catalog. */
28
+ degradedSinceOf(o: OfferingRow): number | null;
26
29
  activeUsersOf(alias: string): number;
27
30
  activeRequestsOf(alias: string): number;
28
31
  }
29
- export declare function offeringView(tunnel: Pick<Tunnel, 'offeringStatus' | 'backendLastOk'>, local: Pick<LocalProducer, 'offeringStatus' | 'backendLastOk'>, slots: Pick<AliasSlots, 'countRequests'>, users: Pick<AliasUsers, 'countUsers'>): OfferingView;
32
+ export declare function offeringView(tunnel: Pick<Tunnel, 'offeringStatus' | 'backendLastOk' | 'backendDegradedSince'>, local: Pick<LocalProducer, 'offeringStatus' | 'backendLastOk' | 'backendDegradedSince'>, slots: Pick<AliasSlots, 'countRequests'>, users: Pick<AliasUsers, 'countUsers'>): OfferingView;
30
33
  /** One offering as the discovery views present it: caps with hub defaults
31
34
  * applied, live tunnel status, in-flight occupancy, today's used tokens and
32
35
  * the model-honesty verdict (what the response reports, audited
@@ -45,6 +48,10 @@ export declare function serializeOffering(db: Database.Database, view: OfferingV
45
48
  observedModel: string | null;
46
49
  observedAt: string | null;
47
50
  hubCheckAt: string | null;
51
+ /** Start of the backend's current degraded streak (ISO); null when not
52
+ * degraded. Present exactly while the status is degraded or its dead
53
+ * escalation — the catalog's evidence for how long an alias has been out. */
54
+ degradedSince: string | null;
48
55
  modelMatch: import("aweshare-protocol").ModelComparison | null;
49
56
  /** Kept for older clients: null means no current evidence or an
50
57
  * observation less specific than the declaration. */
@@ -1,6 +1,6 @@
1
1
  import { randomUUID } from 'node:crypto';
2
2
  import { isProbeBody } from '../../../packages/producer-core/dist/index.js';
3
- import { compareModels, fmtTokens, formatShareSchedule, isShareOpen, nextShareOpen, parseAlias, protocolLabel, } from '../../../packages/protocol/dist/index.js';
3
+ import { compareModels, fmtDuration, fmtTokens, formatShareSchedule, isShareOpen, nextShareOpen, parseAlias, protocolLabel, } from '../../../packages/protocol/dist/index.js';
4
4
  import { requireConsumer } from './auth.js';
5
5
  import { admitProbeRun, blockOffering, dailyBonusOf, dailyWindowStart, getOffering, getQuotaGrant, insertUsageEvent, LOCAL_PRODUCER_ID, lastObservedModel, listOfferings, sumTokensForAliasSince, sumTokensUsed, touchLastSeen, } from './db.js';
6
6
  import { HttpError, readBody, sendError, sendJson } from './http.js';
@@ -22,6 +22,9 @@ export function offeringView(tunnel, local, slots, users) {
22
22
  lastOkOf: (o) => o.producer_id === LOCAL_PRODUCER_ID
23
23
  ? local.backendLastOk(o.backend_id)
24
24
  : tunnel.backendLastOk(o.producer_id, o.backend_id),
25
+ degradedSinceOf: (o) => o.producer_id === LOCAL_PRODUCER_ID
26
+ ? local.backendDegradedSince(o.backend_id)
27
+ : tunnel.backendDegradedSince(o.producer_id, o.backend_id),
25
28
  activeUsersOf: (alias) => users.countUsers(alias),
26
29
  activeRequestsOf: (alias) => slots.countRequests(alias),
27
30
  };
@@ -47,6 +50,7 @@ export function serializeOffering(db, view, o) {
47
50
  const observedMs = observed === null ? null : Date.parse(observed.at) || 0;
48
51
  const hubCheckMs = lastOkMs === null ? observedMs : Math.max(lastOkMs, observedMs ?? 0);
49
52
  const hubCheckAt = hubCheckMs === null ? null : new Date(hubCheckMs).toISOString();
53
+ const degradedSinceMs = view.degradedSinceOf(o);
50
54
  return {
51
55
  producer: o.producer,
52
56
  alias: o.alias,
@@ -58,6 +62,10 @@ export function serializeOffering(db, view, o) {
58
62
  observedModel: observed?.model ?? null,
59
63
  observedAt: observed?.at ?? null,
60
64
  hubCheckAt,
65
+ /** Start of the backend's current degraded streak (ISO); null when not
66
+ * degraded. Present exactly while the status is degraded or its dead
67
+ * escalation — the catalog's evidence for how long an alias has been out. */
68
+ degradedSince: degradedSinceMs === null ? null : new Date(degradedSinceMs).toISOString(),
61
69
  modelMatch,
62
70
  /** Kept for older clients: null means no current evidence or an
63
71
  * observation less specific than the declaration. */
@@ -221,11 +229,16 @@ async function handleInference(ctx, deps, protocol, path) {
221
229
  // `consumer list --ping` must tell the truth about the alias it names,
222
230
  // not quietly measure its backup.
223
231
  const queue = isProbe ? [model] : [model, ...deps.backups.queueFor(model)];
232
+ // one admission-wait budget for the whole queue: an attempt that waits out
233
+ // its share leaves the remainder to the backups instead of every alias
234
+ // compounding its own full window. `?? 0` — an embedder-built config that
235
+ // omits the key must not turn the deadline into NaN.
236
+ const admitDeadline = Date.now() + (config.queueWaitMs ?? 0);
224
237
  let primaryFailure = null;
225
238
  try {
226
239
  for (const [attempt, candidate] of queue.entries()) {
227
240
  try {
228
- await serveAlias(ctx, deps, consumer, protocol, path, body, isProbe, candidate, attempt > 0);
241
+ await serveAlias(ctx, deps, consumer, protocol, path, body, isProbe, admitDeadline, candidate, attempt > 0);
229
242
  return;
230
243
  }
231
244
  catch (err) {
@@ -262,7 +275,10 @@ async function handleInference(ctx, deps, protocol, path) {
262
275
  * failed queue entry is skipped and the next one tried. Releases the alias
263
276
  * admission (slots + users) exactly once per exit path.
264
277
  */
265
- async function serveAlias(ctx, deps, consumer, protocol, path, body, isProbe, model, fallback) {
278
+ async function serveAlias(ctx, deps, consumer, protocol, path, body, isProbe,
279
+ /** Shared across the whole [primary, ...backups] queue: this attempt may
280
+ * wait for a per-user slot until this instant, not a moment longer. */
281
+ admitDeadline, model, fallback) {
266
282
  const { db, tunnel, local, slots, users, watch, rejections } = deps;
267
283
  const offering = getOffering(db, model, protocol);
268
284
  if (!offering) {
@@ -337,14 +353,31 @@ async function serveAlias(ctx, deps, consumer, protocol, path, body, isProbe, mo
337
353
  if (!session)
338
354
  fail(503, 'PRODUCER_OFFLINE', `producer of ${model} is offline`);
339
355
  else if (session.backendStatus.get(offering.backend_id)?.state === 'degraded') {
340
- fail(503, 'BACKEND_DEGRADED', `backend for ${model} is degraded`);
356
+ // dead streak (past offlineAfterMs) says so in the message: the
357
+ // consumer should not wait this out — same 503, failover-eligible either way
358
+ const deadFor = tunnel.deadForMs(offering.producer_id, offering.backend_id);
359
+ fail(503, 'BACKEND_DEGRADED', `backend for ${model} is degraded${deadFor !== null ? ` (dead for ${fmtDuration(deadFor)})` : ''}`);
341
360
  }
342
361
  }
343
362
  const perUser = offering.max_concurrency_per_user;
344
- if (!slots.acquire(model, consumer.id, perUser)) {
345
- deny('PRODUCER_MAX_CONCURRENCY', `consumer ${consumer.name} is at its per-user concurrency on ${model} (${perUser})`, jitteredRetrySec());
363
+ // probes never queue — a health check must answer fast and tell the truth
364
+ const admitStart = Date.now();
365
+ const waitBudget = isProbe ? 0 : Math.max(0, admitDeadline - admitStart);
366
+ if (!(await slots.acquireOrWait(model, consumer.id, perUser, waitBudget))) {
367
+ deny('PRODUCER_MAX_CONCURRENCY', `consumer ${consumer.name} is at its per-user concurrency on ${model} (${perUser}; every in-flight request from this key counts, including background ones like title generation)` +
368
+ (waitBudget > 0 ? ` — waited ${fmtDuration(Date.now() - admitStart)} for a free slot` : ''), jitteredRetrySec());
346
369
  }
347
370
  slotsHeld = true;
371
+ const waitedMs = Date.now() - admitStart;
372
+ if (waitedMs >= 5) {
373
+ deps.log.info({ alias: model, consumer: consumer.name, waitedMs, fallback }, 'request waited for a per-user admission slot');
374
+ }
375
+ // the client may have hung up while the request sat queued — nothing left
376
+ // to relay, and dispatching would only burn the slot upstream
377
+ if (ctx.res.destroyed || ctx.res.writableEnded) {
378
+ release();
379
+ throw new HttpError(499, 'REQUEST_CANCELED', 'client went away while waiting for admission');
380
+ }
348
381
  const maxUsers = offering.max_concurrent_users ?? DEFAULT_MAX_CONCURRENT_USERS;
349
382
  if (!users.acquire(model, consumer.id, maxUsers)) {
350
383
  deny('PRODUCER_MAX_USERS', `alias ${model} is at its max concurrent users (${maxUsers})`, jitteredRetrySec());
@@ -1 +1 @@
1
- {"version":3,"file":"consumer.js","sourceRoot":"","sources":["../src/consumer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"consumer.js","sourceRoot":"","sources":["../src/consumer.ts"],"names":[],"mappings":"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"}
@@ -61,8 +61,21 @@ export declare class TokenWindow {
61
61
  * producer's offering (maxConcurrencyPerUser). */
62
62
  export declare class AliasSlots {
63
63
  private active;
64
+ /** Parked acquireOrWait callers per (alias, consumer) — release() wakes them. */
65
+ private waiters;
64
66
  /** Returns true when the slot was acquired. */
65
67
  acquire(alias: string, consumerId: number, maxPerUser: number): boolean;
68
+ /** acquire() with a bounded wait: while the (alias, consumer) pair is at its
69
+ * cap, park up to waitMs for a release instead of failing at once — short
70
+ * same-key overlaps (an agent's background title request, a second window)
71
+ * queue through instead of 429ing. Admission-side only: nothing upstream is
72
+ * held while parked. Resolves false when the window expires still full;
73
+ * waitMs 0 is the plain acquire. */
74
+ acquireOrWait(alias: string, consumerId: number, maxPerUser: number, waitMs: number): Promise<boolean>;
75
+ /** One parked round: resolved when release() hits the same (alias, consumer)
76
+ * or the timeout fires — either way the caller's loop re-checks the cap, so
77
+ * a spurious wake costs nothing and a lost race just parks again. */
78
+ private waitForRelease;
66
79
  release(alias: string, consumerId: number): void;
67
80
  /** Total in-flight requests on the alias (read-only view for the catalog). */
68
81
  countRequests(alias: string): number;
@@ -97,6 +97,8 @@ export class TokenWindow {
97
97
  * producer's offering (maxConcurrencyPerUser). */
98
98
  export class AliasSlots {
99
99
  active = new Map();
100
+ /** Parked acquireOrWait callers per (alias, consumer) — release() wakes them. */
101
+ waiters = new Map();
100
102
  /** Returns true when the slot was acquired. */
101
103
  acquire(alias, consumerId, maxPerUser) {
102
104
  const users = this.active.get(alias) ?? new Map();
@@ -107,6 +109,48 @@ export class AliasSlots {
107
109
  this.active.set(alias, users);
108
110
  return true;
109
111
  }
112
+ /** acquire() with a bounded wait: while the (alias, consumer) pair is at its
113
+ * cap, park up to waitMs for a release instead of failing at once — short
114
+ * same-key overlaps (an agent's background title request, a second window)
115
+ * queue through instead of 429ing. Admission-side only: nothing upstream is
116
+ * held while parked. Resolves false when the window expires still full;
117
+ * waitMs 0 is the plain acquire. */
118
+ async acquireOrWait(alias, consumerId, maxPerUser, waitMs) {
119
+ const deadline = Date.now() + waitMs;
120
+ while (!this.acquire(alias, consumerId, maxPerUser)) {
121
+ const remaining = deadline - Date.now();
122
+ if (remaining <= 0)
123
+ return false;
124
+ await this.waitForRelease(alias, consumerId, remaining);
125
+ }
126
+ return true;
127
+ }
128
+ /** One parked round: resolved when release() hits the same (alias, consumer)
129
+ * or the timeout fires — either way the caller's loop re-checks the cap, so
130
+ * a spurious wake costs nothing and a lost race just parks again. */
131
+ waitForRelease(alias, consumerId, timeoutMs) {
132
+ const key = `${alias}\0${consumerId}`;
133
+ return new Promise((resolve) => {
134
+ let settled = false;
135
+ const wake = () => {
136
+ if (settled)
137
+ return;
138
+ settled = true;
139
+ clearTimeout(timer);
140
+ const parked = this.waiters.get(key);
141
+ if (parked) {
142
+ parked.delete(wake);
143
+ if (parked.size === 0)
144
+ this.waiters.delete(key);
145
+ }
146
+ resolve();
147
+ };
148
+ const timer = setTimeout(wake, timeoutMs);
149
+ const parked = this.waiters.get(key) ?? new Set();
150
+ this.waiters.set(key, parked);
151
+ parked.add(wake);
152
+ });
153
+ }
110
154
  release(alias, consumerId) {
111
155
  const users = this.active.get(alias);
112
156
  if (!users)
@@ -118,6 +162,14 @@ export class AliasSlots {
118
162
  users.set(consumerId, current - 1);
119
163
  if (users.size === 0)
120
164
  this.active.delete(alias);
165
+ // wake every parked caller on this (alias, consumer) — each re-checks the
166
+ // cap on its own, so wake-all needs no queue ordering to stay fair
167
+ const parked = this.waiters.get(`${alias}\0${consumerId}`);
168
+ if (parked) {
169
+ this.waiters.delete(`${alias}\0${consumerId}`);
170
+ for (const wake of parked)
171
+ wake();
172
+ }
121
173
  }
122
174
  /** Total in-flight requests on the alias (read-only view for the catalog). */
123
175
  countRequests(alias) {