aweshare 0.6.1 → 0.6.3
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.ai.md +6 -0
- package/README.md +7 -4
- package/apps/agent/dist/connection.d.ts +22 -6
- package/apps/agent/dist/connection.js +75 -11
- package/apps/agent/dist/connection.js.map +1 -1
- package/apps/agent/dist/table.d.ts +9 -0
- package/apps/agent/dist/table.js +21 -0
- package/apps/agent/dist/table.js.map +1 -1
- package/apps/consumer/dist/cli.js +87 -10
- package/apps/consumer/dist/cli.js.map +1 -1
- package/apps/consumer/dist/hub.d.ts +4 -2
- package/apps/consumer/dist/hub.js +5 -3
- package/apps/consumer/dist/hub.js.map +1 -1
- package/apps/consumer/dist/ping.d.ts +24 -0
- package/apps/consumer/dist/ping.js +164 -0
- package/apps/consumer/dist/ping.js.map +1 -0
- package/apps/consumer/dist/table.d.ts +38 -4
- package/apps/consumer/dist/table.js +86 -32
- package/apps/consumer/dist/table.js.map +1 -1
- package/apps/hub/dist/cli.js +2 -0
- package/apps/hub/dist/cli.js.map +1 -1
- package/apps/hub/dist/config.d.ts +4 -1
- package/apps/hub/dist/config.js +31 -0
- package/apps/hub/dist/config.js.map +1 -1
- package/apps/hub/dist/consumer.d.ts +5 -1
- package/apps/hub/dist/consumer.js +26 -1
- package/apps/hub/dist/consumer.js.map +1 -1
- package/apps/hub/dist/db.d.ts +7 -0
- package/apps/hub/dist/db.js +22 -5
- package/apps/hub/dist/db.js.map +1 -1
- package/apps/hub/dist/limits.d.ts +6 -0
- package/apps/hub/dist/limits.js +13 -4
- package/apps/hub/dist/limits.js.map +1 -1
- package/apps/hub/dist/local.d.ts +3 -0
- package/apps/hub/dist/local.js +5 -0
- package/apps/hub/dist/local.js.map +1 -1
- package/apps/hub/dist/table.d.ts +8 -0
- package/apps/hub/dist/table.js +20 -0
- package/apps/hub/dist/table.js.map +1 -1
- package/apps/hub/dist/tunnel.d.ts +4 -0
- package/apps/hub/dist/tunnel.js +6 -0
- package/apps/hub/dist/tunnel.js.map +1 -1
- package/package.json +1 -1
- package/packages/producer-core/dist/health.d.ts +10 -0
- package/packages/producer-core/dist/health.js +25 -0
- package/packages/producer-core/dist/health.js.map +1 -1
- package/packages/producer-core/dist/probe.d.ts +9 -0
- package/packages/producer-core/dist/probe.js +40 -0
- package/packages/producer-core/dist/probe.js.map +1 -1
- package/packages/protocol/dist/messages.d.ts +4 -0
- package/packages/protocol/dist/messages.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,8EAA8E;AAC9E,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,10 @@ export interface HubInfo {
|
|
|
9
9
|
version?: string;
|
|
10
10
|
wire?: number;
|
|
11
11
|
}
|
|
12
|
-
/** Node fetch reports "fetch failed" without the reason; surface the cause.
|
|
13
|
-
|
|
12
|
+
/** Node fetch reports "fetch failed" without the reason; surface the cause.
|
|
13
|
+
* `timeoutMs` names the caller's own deadline so a timeout reports the wait
|
|
14
|
+
* that actually happened (control calls 10s, model pings 60s). */
|
|
15
|
+
export declare function errorMessage(err: unknown, timeoutMs?: number): string;
|
|
14
16
|
/** Probe GET /healthz: reachable, a real aweshare hub, and which version/wire
|
|
15
17
|
* it speaks. Throws HubError with the precise failure otherwise. */
|
|
16
18
|
export declare function probeHub(hubUrl: string): Promise<HubInfo>;
|
|
@@ -13,11 +13,13 @@ const TIMEOUT_MS = 10_000;
|
|
|
13
13
|
/** One failed hub round-trip; the message is user-ready (never the token). */
|
|
14
14
|
export class HubError extends Error {
|
|
15
15
|
}
|
|
16
|
-
/** Node fetch reports "fetch failed" without the reason; surface the cause.
|
|
17
|
-
|
|
16
|
+
/** Node fetch reports "fetch failed" without the reason; surface the cause.
|
|
17
|
+
* `timeoutMs` names the caller's own deadline so a timeout reports the wait
|
|
18
|
+
* that actually happened (control calls 10s, model pings 60s). */
|
|
19
|
+
export function errorMessage(err, timeoutMs = TIMEOUT_MS) {
|
|
18
20
|
if (err instanceof Error) {
|
|
19
21
|
if (err.name === 'TimeoutError' || err.name === 'AbortError') {
|
|
20
|
-
return `timed out after ${
|
|
22
|
+
return `timed out after ${timeoutMs / 1000}s`;
|
|
21
23
|
}
|
|
22
24
|
const cause = err.cause;
|
|
23
25
|
return cause ? `${err.message} (${cause.code ?? cause.message})` : err.message;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hub.js","sourceRoot":"","sources":["../src/hub.ts"],"names":[],"mappings":"AAAA;;kEAEkE;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,MAAM,OAAO,GACX,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAGnF,CAAC,OAAO,CAAA;AAET;;+BAE+B;AAC/B,MAAM,CAAC,MAAM,UAAU,GAAG,qBAAqB,OAAO,EAAE,CAAA;AAExD,MAAM,UAAU,GAAG,MAAM,CAAA;AAEzB,8EAA8E;AAC9E,MAAM,OAAO,QAAS,SAAQ,KAAK;CAAG;AAOtC
|
|
1
|
+
{"version":3,"file":"hub.js","sourceRoot":"","sources":["../src/hub.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CatalogRow } from './table.js';
|
|
2
|
+
export interface PingResult {
|
|
3
|
+
alias: string;
|
|
4
|
+
protocol: string;
|
|
5
|
+
ok: boolean;
|
|
6
|
+
/** HTTP status when the hub answered, e.g. 200 or 429; null on network error. */
|
|
7
|
+
status: number | null;
|
|
8
|
+
/** Round-trip milliseconds. */
|
|
9
|
+
ms: number;
|
|
10
|
+
/** User-ready verdict: served model, or the hub/upstream error message. */
|
|
11
|
+
detail: string;
|
|
12
|
+
}
|
|
13
|
+
/** One offering row, one ping. `fetchImpl` is the test seam. The catalog's
|
|
14
|
+
* alias is already the full namespaced model name (`producer/name`). */
|
|
15
|
+
export declare function pingOffering(hubUrl: string, token: string, row: CatalogRow, fetchImpl?: typeof fetch): Promise<PingResult>;
|
|
16
|
+
export interface PingReport {
|
|
17
|
+
ok: boolean;
|
|
18
|
+
results: PingResult[];
|
|
19
|
+
}
|
|
20
|
+
/** Ping every offering row sequentially: the hub rate-limits each consumer
|
|
21
|
+
* (rps/burst), and parallel pings would trip that limiter and misreport.
|
|
22
|
+
* `onResult` fires with the settled row as each ping lands — the CLI streams
|
|
23
|
+
* one line per row instead of going silent for the whole run. */
|
|
24
|
+
export declare function runPings(hubUrl: string, token: string, rows: CatalogRow[], fetchImpl?: typeof fetch, onResult?: (result: PingResult, row: CatalogRow) => void): Promise<PingReport>;
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
// The engine behind `consumer list --ping`: one minimal real model request
|
|
2
|
+
// per offering row, through the same consumer endpoints an SDK would hit. A
|
|
3
|
+
// green row means the whole chain works — consumer auth, hub dispatch,
|
|
4
|
+
// tunnel, producer, upstream. A real model call consumes quota and takes
|
|
5
|
+
// seconds; the plain table (and its LAST SEEN column) is the free view.
|
|
6
|
+
// Probe-shaped requests are budgeted hub-side (15/day per consumer by
|
|
7
|
+
// default) so the diagnostic cannot drain producers' upstreams.
|
|
8
|
+
import { selfReportedModel } from '../../../packages/protocol/dist/index.js';
|
|
9
|
+
import { errorMessage, USER_AGENT } from './hub.js';
|
|
10
|
+
/** How long one request may take before we call the link degraded. Slow
|
|
11
|
+
* upstreams (30s+) still answer; past this the SDK would too. */
|
|
12
|
+
const TIMEOUT_MS = 60_000;
|
|
13
|
+
/** Request shape per wire protocol — the minimal body every SDK can send.
|
|
14
|
+
* The `model` is the offering alias; the hub routes on it. */
|
|
15
|
+
function pingRequest(hubUrl, token, alias, protocol, stream = false) {
|
|
16
|
+
const headers = {
|
|
17
|
+
'user-agent': USER_AGENT,
|
|
18
|
+
authorization: `Bearer ${token}`,
|
|
19
|
+
'content-type': 'application/json',
|
|
20
|
+
};
|
|
21
|
+
if (protocol === 'anthropic') {
|
|
22
|
+
return {
|
|
23
|
+
url: `${hubUrl}/v1/messages`,
|
|
24
|
+
init: {
|
|
25
|
+
method: 'POST',
|
|
26
|
+
headers: { ...headers, 'anthropic-version': '2023-06-01' },
|
|
27
|
+
body: JSON.stringify({
|
|
28
|
+
model: alias,
|
|
29
|
+
max_tokens: 1,
|
|
30
|
+
stream,
|
|
31
|
+
messages: [{ role: 'user', content: 'ping' }],
|
|
32
|
+
}),
|
|
33
|
+
signal: AbortSignal.timeout(TIMEOUT_MS),
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
if (protocol === 'responses') {
|
|
38
|
+
return {
|
|
39
|
+
url: `${hubUrl}/v1/responses`,
|
|
40
|
+
init: {
|
|
41
|
+
method: 'POST',
|
|
42
|
+
headers,
|
|
43
|
+
body: JSON.stringify({
|
|
44
|
+
model: alias,
|
|
45
|
+
stream,
|
|
46
|
+
store: false,
|
|
47
|
+
...(stream ? {} : { max_output_tokens: 1 }),
|
|
48
|
+
input: [{ role: 'user', content: [{ type: 'input_text', text: 'ping' }] }],
|
|
49
|
+
}),
|
|
50
|
+
signal: AbortSignal.timeout(TIMEOUT_MS),
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
url: `${hubUrl}/v1/chat/completions`,
|
|
56
|
+
init: {
|
|
57
|
+
method: 'POST',
|
|
58
|
+
headers,
|
|
59
|
+
body: JSON.stringify({
|
|
60
|
+
model: alias,
|
|
61
|
+
max_tokens: 1,
|
|
62
|
+
stream,
|
|
63
|
+
messages: [{ role: 'user', content: 'ping' }],
|
|
64
|
+
}),
|
|
65
|
+
signal: AbortSignal.timeout(TIMEOUT_MS),
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/** The hub's error body shape ({error:{message}}) is user-ready; OpenAI-style
|
|
70
|
+
* backends answer with a bare {detail} — both pass through. Anything else
|
|
71
|
+
* (edge HTML, non-JSON) collapses to the raw status (statusText is empty on
|
|
72
|
+
* HTTP/2 and behind many proxies, so it is the honest floor). */
|
|
73
|
+
async function errorDetail(res) {
|
|
74
|
+
const data = (await res.json().catch(() => ({})));
|
|
75
|
+
return data.error?.message ?? data.detail ?? `HTTP ${res.status}`;
|
|
76
|
+
}
|
|
77
|
+
/** One offering row, one ping. `fetchImpl` is the test seam. The catalog's
|
|
78
|
+
* alias is already the full namespaced model name (`producer/name`). */
|
|
79
|
+
export async function pingOffering(hubUrl, token, row, fetchImpl = fetch) {
|
|
80
|
+
const alias = row.alias;
|
|
81
|
+
const base = { alias, protocol: row.protocol };
|
|
82
|
+
const started = Date.now();
|
|
83
|
+
let res;
|
|
84
|
+
try {
|
|
85
|
+
const { url, init } = pingRequest(hubUrl, token, alias, row.protocol);
|
|
86
|
+
res = await fetchImpl(url, init);
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
return {
|
|
90
|
+
...base,
|
|
91
|
+
ok: false,
|
|
92
|
+
status: null,
|
|
93
|
+
ms: Date.now() - started,
|
|
94
|
+
detail: errorMessage(err, TIMEOUT_MS),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const ms = Date.now() - started;
|
|
98
|
+
// stream-only upstreams (e.g. chatgpt's responses backend) reject
|
|
99
|
+
// stream:false with a named 400 — retry once in the shape they accept
|
|
100
|
+
// before reporting a failure that streaming clients never see
|
|
101
|
+
if (res.status === 400 && row.protocol === 'responses') {
|
|
102
|
+
const detail = await errorDetail(res);
|
|
103
|
+
if (/stream must be set to true/i.test(detail)) {
|
|
104
|
+
const retry = await pingOnce(hubUrl, token, row, alias, true, fetchImpl);
|
|
105
|
+
return retry.ok
|
|
106
|
+
? { ...retry, detail: `${retry.detail} — upstream accepts streaming clients only` }
|
|
107
|
+
: retry;
|
|
108
|
+
}
|
|
109
|
+
return { ...base, ok: false, status: res.status, ms, detail };
|
|
110
|
+
}
|
|
111
|
+
if (!res.ok) {
|
|
112
|
+
return { ...base, ok: false, status: res.status, ms, detail: await errorDetail(res) };
|
|
113
|
+
}
|
|
114
|
+
return { ...base, ok: true, status: res.status, ms, detail: await servedDetail(res) };
|
|
115
|
+
}
|
|
116
|
+
/** The streaming retry path — collects the SSE stream so the connection
|
|
117
|
+
* closes, then reports on any 2xx. */
|
|
118
|
+
async function pingOnce(hubUrl, token, row, alias, stream, fetchImpl) {
|
|
119
|
+
const base = { alias, protocol: row.protocol };
|
|
120
|
+
const started = Date.now();
|
|
121
|
+
try {
|
|
122
|
+
const { url, init } = pingRequest(hubUrl, token, alias, row.protocol, stream);
|
|
123
|
+
const res = await fetchImpl(url, init);
|
|
124
|
+
const ms = Date.now() - started;
|
|
125
|
+
if (!res.ok) {
|
|
126
|
+
return { ...base, ok: false, status: res.status, ms, detail: await errorDetail(res) };
|
|
127
|
+
}
|
|
128
|
+
return { ...base, ok: true, status: res.status, ms, detail: await servedDetail(res) };
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
return {
|
|
132
|
+
...base,
|
|
133
|
+
ok: false,
|
|
134
|
+
status: null,
|
|
135
|
+
ms: Date.now() - started,
|
|
136
|
+
detail: errorMessage(err, TIMEOUT_MS),
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/** What the response itself reported — the served model id when present,
|
|
141
|
+
* 'ok' otherwise. Consistency evidence for the catalog's declaration. */
|
|
142
|
+
async function servedDetail(res) {
|
|
143
|
+
try {
|
|
144
|
+
const served = selfReportedModel((await res.json()));
|
|
145
|
+
return served ? `served '${served}'` : 'ok';
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return 'ok'; // SSE or non-JSON: nothing self-reported to audit
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/** Ping every offering row sequentially: the hub rate-limits each consumer
|
|
152
|
+
* (rps/burst), and parallel pings would trip that limiter and misreport.
|
|
153
|
+
* `onResult` fires with the settled row as each ping lands — the CLI streams
|
|
154
|
+
* one line per row instead of going silent for the whole run. */
|
|
155
|
+
export async function runPings(hubUrl, token, rows, fetchImpl = fetch, onResult) {
|
|
156
|
+
const results = [];
|
|
157
|
+
for (const row of rows) {
|
|
158
|
+
const result = await pingOffering(hubUrl, token, row, fetchImpl);
|
|
159
|
+
results.push(result);
|
|
160
|
+
onResult?.(result, row);
|
|
161
|
+
}
|
|
162
|
+
return { ok: results.every((r) => r.ok), results };
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=ping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ping.js","sourceRoot":"","sources":["../src/ping.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ModelComparison } from 'aweshare-protocol';
|
|
2
|
+
import type { PingResult } from './ping.js';
|
|
2
3
|
/** Left-aligned columns with two-space gutters. */
|
|
3
4
|
export declare function formatTable(headers: string[], rows: string[][]): string;
|
|
4
5
|
export interface CatalogRow {
|
|
@@ -13,6 +14,11 @@ export interface CatalogRow {
|
|
|
13
14
|
observedModel?: string | null;
|
|
14
15
|
modelVerified?: boolean | null;
|
|
15
16
|
modelMatch?: ModelComparison | null;
|
|
17
|
+
/** ISO instant of the hub's freshest evidence that this offering served:
|
|
18
|
+
* the last self-naming response or the serving side's last-reported
|
|
19
|
+
* success, whichever is newer. Undefined on hubs that predate it, null
|
|
20
|
+
* when nothing has ever succeeded — rendered as LAST SEEN. */
|
|
21
|
+
hubCheckAt?: string | null;
|
|
16
22
|
/** Concurrent-requests cap per consumer; pre-v0.4.3 hubs don't report it. */
|
|
17
23
|
maxConcurrencyPerUser?: number;
|
|
18
24
|
maxConcurrentUsers: number;
|
|
@@ -33,8 +39,36 @@ export declare function filterCatalog(rows: CatalogRow[], all: boolean): Catalog
|
|
|
33
39
|
* apps/agent/src/table.ts with the shared headers: the observed id, '✗'-marked
|
|
34
40
|
* when it disagrees with the declaration, '-' when nothing was observed. */
|
|
35
41
|
export declare function observedCell(observedModel: string | null | undefined, modelVerified: boolean | null | undefined, modelMatch?: ModelComparison | null): string;
|
|
36
|
-
/** The
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
|
|
42
|
+
/** The LAST SEEN cell — kept verbatim in apps/hub/src/table.ts and
|
|
43
|
+
* apps/agent/src/table.ts: how long ago the hub's freshest evidence says this
|
|
44
|
+
* offering actually served ('-' when it never did or the hub can't tell). */
|
|
45
|
+
export declare function lastSeenCell(hubCheckAt: string | null | undefined, now?: number): string;
|
|
46
|
+
/** Catalog rows grouped per alias (each group = one display line), in list
|
|
47
|
+
* order. */
|
|
48
|
+
export declare function catalogGroups(rows: CatalogRow[]): CatalogRow[][];
|
|
49
|
+
/** One display line for an alias group. With `pings` (one entry per row of
|
|
50
|
+
* the group, same order — a PingResult, or null for a row that was shown but
|
|
51
|
+
* not pinged), the RESULT/TIME/DETAIL cells join in after LAST SEEN: the
|
|
52
|
+
* hub's claim and the consumer's own proof side by side. */
|
|
53
|
+
export declare function catalogCells(list: CatalogRow[], pings?: (PingResult | null)[]): string[];
|
|
54
|
+
/** Headers shared by every offering table (consumer list, hub list offerings,
|
|
55
|
+
* producer list — locked together by a cross-CLI test in apps/hub/test);
|
|
56
|
+
* `--ping` inserts its three proof columns after LAST SEEN. */
|
|
57
|
+
export declare const CATALOG_HEADERS: readonly ["PRODUCER", "ALIAS", "LAST SEEN", "OBSERVED MODEL", "PROTOCOL", "STATUS", "MAX USERS", "IN USE", "PER USER", "DAILY TOKENS", "REMAINING"];
|
|
58
|
+
export declare const PING_HEADERS: readonly ["RESULT", "TIME", "DETAIL"];
|
|
59
|
+
export declare function catalogHeaders(withPing: boolean): string[];
|
|
60
|
+
/** The offering table every CLI renders — same column spec as hub list
|
|
61
|
+
* offerings and producer list (locked together by a cross-CLI test in
|
|
62
|
+
* apps/hub/test). OBSERVED MODEL is what the upstream itself served: a '✗'
|
|
63
|
+
* marks a declaration that doesn't hold; LAST SEEN is how long ago the hub's
|
|
64
|
+
* evidence says it last served. */
|
|
40
65
|
export declare function renderCatalog(rows: CatalogRow[]): string;
|
|
66
|
+
/** The `list --ping` table rendered all at once: same rows plus the
|
|
67
|
+
* consumer's own proof columns, one merged line per alias. The live CLI
|
|
68
|
+
* streams instead — header once, then one line per offering row as its ping
|
|
69
|
+
* lands (SKIP rows up front) — tests use this as the at-once reference for
|
|
70
|
+
* cell shapes. */
|
|
71
|
+
export declare function renderPingCatalog(rows: CatalogRow[], pings: Map<string, PingResult | null>): string;
|
|
72
|
+
/** Identity of one pingable catalog row — an alias may speak several
|
|
73
|
+
* protocols, so the offering's (alias, protocol) pair is the key. */
|
|
74
|
+
export declare function pingKey(row: Pick<CatalogRow, 'alias' | 'protocol'>): string;
|
|
@@ -26,11 +26,34 @@ export function observedCell(observedModel, modelVerified, modelMatch) {
|
|
|
26
26
|
return `${observedModel} ✗`;
|
|
27
27
|
return modelMatch === 'insufficient' ? `${observedModel} ?` : observedModel;
|
|
28
28
|
}
|
|
29
|
+
/** The LAST SEEN cell — kept verbatim in apps/hub/src/table.ts and
|
|
30
|
+
* apps/agent/src/table.ts: how long ago the hub's freshest evidence says this
|
|
31
|
+
* offering actually served ('-' when it never did or the hub can't tell). */
|
|
32
|
+
export function lastSeenCell(hubCheckAt, now = Date.now()) {
|
|
33
|
+
if (hubCheckAt === undefined || hubCheckAt === null)
|
|
34
|
+
return '-';
|
|
35
|
+
const ms = Date.parse(hubCheckAt);
|
|
36
|
+
if (!Number.isFinite(ms))
|
|
37
|
+
return '-';
|
|
38
|
+
const age = Math.max(0, now - ms);
|
|
39
|
+
if (age < 60_000)
|
|
40
|
+
return 'just now';
|
|
41
|
+
if (age < 3_600_000)
|
|
42
|
+
return `${Math.floor(age / 60_000)}m ago`;
|
|
43
|
+
if (age < 86_400_000)
|
|
44
|
+
return `${Math.floor(age / 3_600_000)}h ago`;
|
|
45
|
+
return `${Math.floor(age / 86_400_000)}d ago`;
|
|
46
|
+
}
|
|
29
47
|
/** One alias may speak several protocols (one hub row each); the table shows
|
|
30
48
|
* one line per alias with the protocols joined. Other columns join differing
|
|
31
49
|
* values with '/' so nothing is hidden; usage is metered per alias on the hub,
|
|
32
50
|
* so identical rows collapse to a single number. */
|
|
33
51
|
function mergeByAlias(rows) {
|
|
52
|
+
return catalogGroups(rows).map((list) => catalogCells(list));
|
|
53
|
+
}
|
|
54
|
+
/** Catalog rows grouped per alias (each group = one display line), in list
|
|
55
|
+
* order. */
|
|
56
|
+
export function catalogGroups(rows) {
|
|
34
57
|
const groups = new Map();
|
|
35
58
|
for (const row of rows) {
|
|
36
59
|
const key = `${row.producer}/${row.alias}`;
|
|
@@ -38,41 +61,72 @@ function mergeByAlias(rows) {
|
|
|
38
61
|
list.push(row);
|
|
39
62
|
groups.set(key, list);
|
|
40
63
|
}
|
|
41
|
-
return [...groups.values()]
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
64
|
+
return [...groups.values()];
|
|
65
|
+
}
|
|
66
|
+
/** One display line for an alias group. With `pings` (one entry per row of
|
|
67
|
+
* the group, same order — a PingResult, or null for a row that was shown but
|
|
68
|
+
* not pinged), the RESULT/TIME/DETAIL cells join in after LAST SEEN: the
|
|
69
|
+
* hub's claim and the consumer's own proof side by side. */
|
|
70
|
+
export function catalogCells(list, pings) {
|
|
71
|
+
const first = list[0];
|
|
72
|
+
const join = (pick, sep = '/') => [...new Set(list.map(pick))].join(sep);
|
|
73
|
+
const cells = [first?.producer ?? '', first?.alias ?? '', join((r) => lastSeenCell(r.hubCheckAt))];
|
|
74
|
+
if (pings !== undefined) {
|
|
75
|
+
const done = pings.filter((p) => p !== null);
|
|
76
|
+
const cell = (pick, sep) => [...new Set(done.map(pick))].join(sep);
|
|
77
|
+
cells.push(done.length === 0 && pings.length > 0
|
|
78
|
+
? 'SKIP'
|
|
79
|
+
: cell((p) => (p.ok ? 'ok' : `FAIL (${p.status ?? 'network'})`), '/'), done.length === 0 && pings.length > 0 ? '-' : cell((p) => `${p.ms}ms`, '/'), done.length === 0 && pings.length > 0 ? 'not pinged' : cell((p) => p.detail, ' / '));
|
|
80
|
+
}
|
|
81
|
+
cells.push(join((r) => observedCell(r.observedModel, r.modelVerified, r.modelMatch)), join((r) => protocolLabel(r.protocol), ', '), join((r) => r.status), join((r) => String(r.maxConcurrentUsers)), join((r) => (r.activeUsers === undefined ? '-' : `${r.activeUsers}/${r.maxConcurrentUsers}`)), join((r) => (r.maxConcurrencyPerUser === undefined ? '-' : String(r.maxConcurrencyPerUser))), join((r) => (r.dailyTokens === 0 ? '∞' : String(r.dailyTokens))), join((r) => r.dailyTokens === 0 ? '∞' : String(Math.max(0, r.dailyTokens - r.usedDailyTokens))));
|
|
82
|
+
return cells;
|
|
57
83
|
}
|
|
58
|
-
/**
|
|
59
|
-
* producer list
|
|
60
|
-
*
|
|
61
|
-
|
|
84
|
+
/** Headers shared by every offering table (consumer list, hub list offerings,
|
|
85
|
+
* producer list — locked together by a cross-CLI test in apps/hub/test);
|
|
86
|
+
* `--ping` inserts its three proof columns after LAST SEEN. */
|
|
87
|
+
export const CATALOG_HEADERS = [
|
|
88
|
+
'PRODUCER',
|
|
89
|
+
'ALIAS',
|
|
90
|
+
'LAST SEEN',
|
|
91
|
+
'OBSERVED MODEL',
|
|
92
|
+
'PROTOCOL',
|
|
93
|
+
'STATUS',
|
|
94
|
+
'MAX USERS',
|
|
95
|
+
'IN USE',
|
|
96
|
+
'PER USER',
|
|
97
|
+
'DAILY TOKENS',
|
|
98
|
+
'REMAINING',
|
|
99
|
+
];
|
|
100
|
+
export const PING_HEADERS = ['RESULT', 'TIME', 'DETAIL'];
|
|
101
|
+
export function catalogHeaders(withPing) {
|
|
102
|
+
return withPing
|
|
103
|
+
? [...CATALOG_HEADERS.slice(0, 3), ...PING_HEADERS, ...CATALOG_HEADERS.slice(3)]
|
|
104
|
+
: [...CATALOG_HEADERS];
|
|
105
|
+
}
|
|
106
|
+
/** The offering table every CLI renders — same column spec as hub list
|
|
107
|
+
* offerings and producer list (locked together by a cross-CLI test in
|
|
108
|
+
* apps/hub/test). OBSERVED MODEL is what the upstream itself served: a '✗'
|
|
109
|
+
* marks a declaration that doesn't hold; LAST SEEN is how long ago the hub's
|
|
110
|
+
* evidence says it last served. */
|
|
62
111
|
export function renderCatalog(rows) {
|
|
63
112
|
if (rows.length === 0)
|
|
64
113
|
return 'no offerings on this hub yet';
|
|
65
|
-
return formatTable(
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
'
|
|
75
|
-
|
|
76
|
-
|
|
114
|
+
return formatTable(catalogHeaders(false), mergeByAlias(rows));
|
|
115
|
+
}
|
|
116
|
+
/** The `list --ping` table rendered all at once: same rows plus the
|
|
117
|
+
* consumer's own proof columns, one merged line per alias. The live CLI
|
|
118
|
+
* streams instead — header once, then one line per offering row as its ping
|
|
119
|
+
* lands (SKIP rows up front) — tests use this as the at-once reference for
|
|
120
|
+
* cell shapes. */
|
|
121
|
+
export function renderPingCatalog(rows, pings) {
|
|
122
|
+
if (rows.length === 0)
|
|
123
|
+
return 'no offerings on this hub yet';
|
|
124
|
+
const groups = catalogGroups(rows);
|
|
125
|
+
return formatTable(catalogHeaders(true), groups.map((list) => catalogCells(list, list.map((r) => pings.get(pingKey(r)) ?? null))));
|
|
126
|
+
}
|
|
127
|
+
/** Identity of one pingable catalog row — an alias may speak several
|
|
128
|
+
* protocols, so the offering's (alias, protocol) pair is the key. */
|
|
129
|
+
export function pingKey(row) {
|
|
130
|
+
return `${row.alias}|${row.protocol}`;
|
|
77
131
|
}
|
|
78
132
|
//# sourceMappingURL=table.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,OAAO,EAAwB,aAAa,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}
|
package/apps/hub/dist/cli.js
CHANGED
|
@@ -197,6 +197,7 @@ Options:
|
|
|
197
197
|
--max-concurrent N Max in-flight requests.
|
|
198
198
|
--tpm N Max tokens in any sliding 60s window.
|
|
199
199
|
--max-total-tokens N Lifetime token budget.
|
|
200
|
+
--probe-budget N 'ping'-shaped probe requests per day (0 = unlimited).
|
|
200
201
|
--clear Drop every override (back to hub-wide defaults).
|
|
201
202
|
--json Print the raw API response instead of text.
|
|
202
203
|
-h, --help Show this message and exit.`,
|
|
@@ -380,6 +381,7 @@ const LIMIT_FLAGS = [
|
|
|
380
381
|
['max-concurrent', 'maxConcurrent'],
|
|
381
382
|
['tpm', 'tpm'],
|
|
382
383
|
['max-total-tokens', 'maxTotalTokens'],
|
|
384
|
+
['probe-budget', 'probeBudget'],
|
|
383
385
|
];
|
|
384
386
|
/** 'rps=5, maxConcurrent=2' or the none-line when nothing is overridden. */
|
|
385
387
|
function fmtLimits(name, overrides) {
|