@antseed/node 0.2.145 → 0.2.147

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.
@@ -0,0 +1,380 @@
1
+ /**
2
+ * Adaptive seller selection for automatic routing.
3
+ *
4
+ * Each buyer learns, from its own traffic, how every seller serves every
5
+ * model: how often requests succeed, how soon the answer starts and how fast
6
+ * it streams. Observations fade with a half-life, so a seller that blipped
7
+ * once barely moves and a seller that fixed itself recovers as soon as it
8
+ * serves again — no timers. Trust stays a gate applied before this: every
9
+ * seller the buyer has not used starts from the same prior, so with no
10
+ * observations the order is plain price order.
11
+ *
12
+ * Sellers are ranked by expected cost of one successful answer: price plus the
13
+ * value of the time it takes, divided by the chance it succeeds. Traffic is
14
+ * spread across sellers that are close to the best instead of all going to
15
+ * one, and a small share probes sellers the buyer has not heard from lately,
16
+ * so failover always has fresh data and recovered sellers are noticed.
17
+ *
18
+ * Nothing here talks to anyone: it is local state plus public metadata.
19
+ */
20
+ /** Observations lose half their weight every 15 minutes. */
21
+ export const SELLER_HEALTH_HALF_LIFE_MS = 15 * 60_000;
22
+ /** Chance of success assumed for a seller the buyer has not used. */
23
+ export const SELLER_SUCCESS_PRIOR = 0.8;
24
+ /** The prior counts as this many observations. */
25
+ export const SELLER_HEALTH_PRIOR_WEIGHT = 2;
26
+ /** Value of one second of waiting, in USD. Makes a seller 15 s slower worth ~$0.003 more per request. */
27
+ export const DEFAULT_TIME_VALUE_USD_PER_SECOND = 0.0002;
28
+ /** Sellers within this fraction of the best expected cost share the traffic. */
29
+ export const SELLER_SPREAD_TOLERANCE = 0.3;
30
+ /** Share of requests that probe a seller the buyer has no recent data on. */
31
+ export const SELLER_EXPLORATION_RATE = 0.05;
32
+ /** A seller not observed for this long is due for a probe. */
33
+ export const SELLER_STALE_AFTER_MS = 10 * 60_000;
34
+ /**
35
+ * Extra wait counted for a seller the buyer has no open payment channel with:
36
+ * the first request has to reserve funds on-chain before it is served.
37
+ */
38
+ export const NEW_RESERVE_SECONDS = 5;
39
+ /** Below this chance of success a seller is tried only after every healthier one. */
40
+ export const UNHEALTHY_SUCCESS_PROBABILITY = 0.5;
41
+ /** Weight of a seller's record on its other models, for a model with no data of its own. */
42
+ const SELLER_WIDE_WEIGHT = 0.5;
43
+ const DEFAULT_FIRST_TOKEN_MS = 4_000;
44
+ const DEFAULT_TOKENS_PER_SECOND = 50;
45
+ const LATENCY_EMA_ALPHA = 0.3;
46
+ const MIN_THROUGHPUT_TOKENS = 20;
47
+ const MAX_ENTRIES = 2_048;
48
+ /** Entries not observed for a day carry no weight worth keeping. */
49
+ const RETENTION_MS = 24 * 60 * 60_000;
50
+ function emptyStats(now) {
51
+ return {
52
+ successes: 0,
53
+ failures: 0,
54
+ decayedAt: now,
55
+ firstTokenMs: null,
56
+ tokensPerSecond: null,
57
+ lastSuccessAt: 0,
58
+ lastFailureAt: 0,
59
+ lastFailureReason: null,
60
+ };
61
+ }
62
+ function ema(previous, sample) {
63
+ return previous === null ? sample : previous * (1 - LATENCY_EMA_ALPHA) + sample * LATENCY_EMA_ALPHA;
64
+ }
65
+ function finiteNonNegative(value) {
66
+ return typeof value === 'number' && Number.isFinite(value) && value >= 0;
67
+ }
68
+ export function sellerHealthKey(peerId, serviceId) {
69
+ return `${peerId.trim().toLowerCase().replace(/^0x/, '')}|${(serviceId ?? '').trim().toLowerCase()}`;
70
+ }
71
+ /** What one buyer has observed of every seller and model it used. */
72
+ export class SellerHealthBook {
73
+ _halfLifeMs;
74
+ _entries = new Map();
75
+ constructor(_halfLifeMs = SELLER_HEALTH_HALF_LIFE_MS) {
76
+ this._halfLifeMs = _halfLifeMs;
77
+ }
78
+ _decayed(stats, now) {
79
+ const elapsed = now - stats.decayedAt;
80
+ if (elapsed <= 0)
81
+ return stats;
82
+ const factor = 0.5 ** (elapsed / this._halfLifeMs);
83
+ return { ...stats, successes: stats.successes * factor, failures: stats.failures * factor, decayedAt: now };
84
+ }
85
+ _update(peerId, serviceId, now, apply) {
86
+ const key = sellerHealthKey(peerId, serviceId);
87
+ const current = this._entries.get(key);
88
+ this._entries.delete(key);
89
+ this._entries.set(key, apply(current ? this._decayed(current, now) : emptyStats(now)));
90
+ if (this._entries.size > MAX_ENTRIES) {
91
+ const oldest = this._entries.keys().next().value;
92
+ if (oldest !== undefined)
93
+ this._entries.delete(oldest);
94
+ }
95
+ }
96
+ recordSuccess(peerId, serviceId, now, timing) {
97
+ this._update(peerId, serviceId, now, (stats) => {
98
+ const next = { ...stats, successes: stats.successes + 1, lastSuccessAt: now };
99
+ if (!timing || !finiteNonNegative(timing.firstTokenMs))
100
+ return next;
101
+ const outputTokens = timing.outputTokens ?? 0;
102
+ if (timing.streamed) {
103
+ next.firstTokenMs = ema(stats.firstTokenMs, timing.firstTokenMs);
104
+ if (outputTokens >= MIN_THROUGHPUT_TOKENS && finiteNonNegative(timing.streamMs) && timing.streamMs > 0) {
105
+ next.tokensPerSecond = ema(stats.tokensPerSecond, outputTokens / (timing.streamMs / 1000));
106
+ }
107
+ }
108
+ else {
109
+ // Only the whole duration is known: take out the generation time at
110
+ // the speed seen so far to estimate when the answer would have started.
111
+ const tokensPerSecond = stats.tokensPerSecond ?? DEFAULT_TOKENS_PER_SECOND;
112
+ next.firstTokenMs = ema(stats.firstTokenMs, Math.max(0, timing.firstTokenMs - (outputTokens / tokensPerSecond) * 1000));
113
+ }
114
+ return next;
115
+ });
116
+ }
117
+ /** `weight` lets a failure that can only be the seller's (a forged receipt) count for more than one. */
118
+ recordFailure(peerId, serviceId, now, reason, weight = 1) {
119
+ this._update(peerId, serviceId, now, (stats) => ({
120
+ ...stats,
121
+ failures: stats.failures + Math.max(0, weight),
122
+ lastFailureAt: now,
123
+ lastFailureReason: reason,
124
+ }));
125
+ }
126
+ /** A failure that applies to every model the seller serves (e.g. a forged receipt) when the model is unknown. */
127
+ recordSellerFailure(peerId, now, reason, weight = 1) {
128
+ const prefix = sellerHealthKey(peerId, null);
129
+ let matched = false;
130
+ for (const key of [...this._entries.keys()]) {
131
+ if (!key.startsWith(prefix))
132
+ continue;
133
+ const [, serviceId] = key.split('|');
134
+ this.recordFailure(peerId, serviceId ?? null, now, reason, weight);
135
+ matched = true;
136
+ }
137
+ if (!matched)
138
+ this.recordFailure(peerId, null, now, reason, weight);
139
+ }
140
+ /**
141
+ * Decayed view of one seller's model. For a model the buyer has not used
142
+ * with this seller yet, what it saw on the seller's other models counts at
143
+ * half weight: a seller rejecting every request on one model usually does
144
+ * on the next. Speed is per model and is not carried over.
145
+ */
146
+ stats(peerId, serviceId, now) {
147
+ const exact = this._entries.get(sellerHealthKey(peerId, serviceId));
148
+ if (exact)
149
+ return this._decayed(exact, now);
150
+ const prefix = sellerHealthKey(peerId, null);
151
+ let sellerWide = null;
152
+ for (const [key, entry] of this._entries) {
153
+ if (!key.startsWith(prefix))
154
+ continue;
155
+ const decayed = this._decayed(entry, now);
156
+ sellerWide ??= { ...emptyStats(now) };
157
+ sellerWide.successes += decayed.successes * SELLER_WIDE_WEIGHT;
158
+ sellerWide.failures += decayed.failures * SELLER_WIDE_WEIGHT;
159
+ if (decayed.lastSuccessAt > sellerWide.lastSuccessAt)
160
+ sellerWide.lastSuccessAt = decayed.lastSuccessAt;
161
+ if (decayed.lastFailureAt > sellerWide.lastFailureAt) {
162
+ sellerWide.lastFailureAt = decayed.lastFailureAt;
163
+ sellerWide.lastFailureReason = decayed.lastFailureReason;
164
+ }
165
+ }
166
+ return sellerWide;
167
+ }
168
+ entries(now) {
169
+ return [...this._entries.entries()].map(([key, stats]) => {
170
+ const [peerId, serviceId] = key.split('|');
171
+ return { peerId: peerId, serviceId: serviceId || null, stats: this._decayed(stats, now) };
172
+ });
173
+ }
174
+ /** Forget a seller entirely, e.g. when an operator asks to give it another chance. */
175
+ forget(peerId) {
176
+ const prefix = sellerHealthKey(peerId, null);
177
+ for (const key of [...this._entries.keys()])
178
+ if (key.startsWith(prefix))
179
+ this._entries.delete(key);
180
+ }
181
+ serialize(now) {
182
+ return [...this._entries.entries()]
183
+ .filter(([, stats]) => now - Math.max(stats.lastSuccessAt, stats.lastFailureAt) < RETENTION_MS)
184
+ .map(([key, stats]) => [key, this._decayed(stats, now)]);
185
+ }
186
+ /** Restore persisted entries, dropping anything malformed or from the future. */
187
+ static parse(raw, now, halfLifeMs = SELLER_HEALTH_HALF_LIFE_MS) {
188
+ const book = new SellerHealthBook(halfLifeMs);
189
+ if (!Array.isArray(raw))
190
+ return book;
191
+ for (const item of raw.slice(-MAX_ENTRIES)) {
192
+ if (!Array.isArray(item) || typeof item[0] !== 'string' || !item[0].includes('|'))
193
+ continue;
194
+ const value = item[1];
195
+ if (!value || typeof value !== 'object')
196
+ continue;
197
+ const decayedAt = finiteNonNegative(value.decayedAt) ? Math.min(value.decayedAt, now) : now;
198
+ const lastSuccessAt = finiteNonNegative(value.lastSuccessAt) ? Math.min(value.lastSuccessAt, now) : 0;
199
+ const lastFailureAt = finiteNonNegative(value.lastFailureAt) ? Math.min(value.lastFailureAt, now) : 0;
200
+ if (now - Math.max(lastSuccessAt, lastFailureAt) >= RETENTION_MS)
201
+ continue;
202
+ book._entries.set(item[0], {
203
+ successes: finiteNonNegative(value.successes) ? Math.min(value.successes, 1e6) : 0,
204
+ failures: finiteNonNegative(value.failures) ? Math.min(value.failures, 1e6) : 0,
205
+ decayedAt,
206
+ firstTokenMs: finiteNonNegative(value.firstTokenMs) ? value.firstTokenMs : null,
207
+ tokensPerSecond: finiteNonNegative(value.tokensPerSecond) && value.tokensPerSecond > 0 ? value.tokensPerSecond : null,
208
+ lastSuccessAt,
209
+ lastFailureAt,
210
+ lastFailureReason: typeof value.lastFailureReason === 'string' ? value.lastFailureReason.slice(0, 200) : null,
211
+ });
212
+ }
213
+ return book;
214
+ }
215
+ }
216
+ export function successProbability(stats, prior = SELLER_SUCCESS_PRIOR) {
217
+ const successes = stats?.successes ?? 0;
218
+ const failures = stats?.failures ?? 0;
219
+ return (successes + SELLER_HEALTH_PRIOR_WEIGHT * prior) / (successes + failures + SELLER_HEALTH_PRIOR_WEIGHT);
220
+ }
221
+ function median(values) {
222
+ if (values.length === 0)
223
+ return null;
224
+ const sorted = [...values].sort((a, b) => a - b);
225
+ const middle = Math.floor(sorted.length / 2);
226
+ return sorted.length % 2 ? sorted[middle] : (sorted[middle - 1] + sorted[middle]) / 2;
227
+ }
228
+ /** Typical speed among sellers the buyer has measured, used for sellers it has not. */
229
+ export function networkSpeed(stats) {
230
+ return {
231
+ firstTokenMs: median(stats.flatMap((entry) => entry?.firstTokenMs != null ? [entry.firstTokenMs] : [])) ?? DEFAULT_FIRST_TOKEN_MS,
232
+ tokensPerSecond: median(stats.flatMap((entry) => entry?.tokensPerSecond != null ? [entry.tokensPerSecond] : [])) ?? DEFAULT_TOKENS_PER_SECOND,
233
+ };
234
+ }
235
+ export function scoreAdaptiveRoute(input, stats, shape, network, now, timeValueUsdPerSecond = DEFAULT_TIME_VALUE_USD_PER_SECOND) {
236
+ const probability = successProbability(stats);
237
+ const firstTokenMs = stats?.firstTokenMs ?? network.firstTokenMs;
238
+ const tokensPerSecond = stats?.tokensPerSecond ?? network.tokensPerSecond;
239
+ const expectedSeconds = firstTokenMs / 1000 + shape.outputTokens / Math.max(1, tokensPerSecond)
240
+ + (input.channelOpen === false ? NEW_RESERVE_SECONDS : 0);
241
+ const expectedPriceUsd = finiteNonNegative(input.requestUsd)
242
+ ? input.requestUsd
243
+ : input.inputUsdPerMillion !== null && input.outputUsdPerMillion !== null
244
+ ? (shape.inputTokens * input.inputUsdPerMillion + shape.outputTokens * input.outputUsdPerMillion) / 1_000_000
245
+ : null;
246
+ // Sellers with no advertised price rank after priced ones (see the ordering);
247
+ // among themselves, count them at a dollar per million tokens.
248
+ const pricePart = expectedPriceUsd ?? (shape.inputTokens + shape.outputTokens) / 1_000_000;
249
+ const lastObservedAt = Math.max(stats?.lastSuccessAt ?? 0, stats?.lastFailureAt ?? 0);
250
+ return {
251
+ successProbability: probability,
252
+ expectedSeconds,
253
+ expectedPriceUsd,
254
+ score: (pricePart + timeValueUsdPerSecond * expectedSeconds) / Math.max(probability, 0.01),
255
+ unhealthy: probability < UNHEALTHY_SUCCESS_PROBABILITY,
256
+ stale: now - lastObservedAt >= SELLER_STALE_AFTER_MS,
257
+ stats,
258
+ };
259
+ }
260
+ /**
261
+ * Order candidates for one request. Ready, healthy sellers come first: one is
262
+ * drawn from those within `spreadTolerance` of the best expected cost,
263
+ * weighted toward the cheapest; the rest follow by expected cost. Unhealthy
264
+ * sellers follow, then sellers cooling down. With `explorationRate`, a seller
265
+ * the buyer has no recent data on goes first instead, with the usual order
266
+ * behind it as the fallback.
267
+ */
268
+ export function orderAdaptiveRoutes(candidates, input, book, shape, options) {
269
+ const { now } = options;
270
+ const random = options.random ?? Math.random;
271
+ const tolerance = options.spreadTolerance ?? SELLER_SPREAD_TOLERANCE;
272
+ const explorationRate = options.explorationRate ?? SELLER_EXPLORATION_RATE;
273
+ const inputs = new Map(candidates.map((candidate) => [candidate, input(candidate)]));
274
+ const stats = new Map(candidates.map((candidate) => {
275
+ const { peerId, serviceId } = inputs.get(candidate);
276
+ return [candidate, book.stats(peerId, serviceId, now)];
277
+ }));
278
+ const network = networkSpeed([...stats.values()]);
279
+ const scores = new Map(candidates.map((candidate) => [
280
+ candidate,
281
+ scoreAdaptiveRoute(inputs.get(candidate), stats.get(candidate), shape, network, now, options.timeValueUsdPerSecond),
282
+ ]));
283
+ // Priced sellers first, then by expected cost; ties keep the incoming order.
284
+ const position = new Map(candidates.map((candidate, index) => [candidate, index]));
285
+ const byScore = (a, b) => Number(scores.get(a).expectedPriceUsd === null) - Number(scores.get(b).expectedPriceUsd === null)
286
+ || scores.get(a).score - scores.get(b).score
287
+ || position.get(a) - position.get(b);
288
+ const cooling = candidates.filter((candidate) => inputs.get(candidate).coolingDown).sort(byScore);
289
+ const ready = candidates.filter((candidate) => !inputs.get(candidate).coolingDown);
290
+ const saturated = (candidate) => inputs.get(candidate).saturated === true;
291
+ const healthy = ready.filter((candidate) => !scores.get(candidate).unhealthy)
292
+ .sort((a, b) => Number(saturated(a)) - Number(saturated(b)) || byScore(a, b));
293
+ const unhealthy = ready.filter((candidate) => scores.get(candidate).unhealthy).sort(byScore);
294
+ const leader = healthy[0];
295
+ const best = leader ? scores.get(leader).score : null;
296
+ const leaderPriced = leader ? scores.get(leader).expectedPriceUsd !== null : false;
297
+ let pool = best === null ? [] : healthy.filter((candidate) => scores.get(candidate).score <= best * (1 + tolerance)
298
+ && (scores.get(candidate).expectedPriceUsd !== null) === leaderPriced
299
+ && saturated(candidate) === saturated(leader));
300
+ // Spreading must not open payment channels for its own sake: share traffic
301
+ // among sellers the buyer already pays, and only reserve on a new seller
302
+ // when it is the best choice outright (or failover needs it).
303
+ const channelOpen = (candidate) => inputs.get(candidate).channelOpen;
304
+ if (pool.some((candidate) => channelOpen(candidate) === false)) {
305
+ const open = pool.filter((candidate) => channelOpen(candidate) !== false);
306
+ pool = open.length > 0 ? open : pool.slice(0, 1);
307
+ }
308
+ let ordered = [...healthy, ...unhealthy, ...cooling];
309
+ if (pool.length > 0) {
310
+ // Weight 1/score²: twice as expensive gets a quarter of the traffic. The
311
+ // pool may no longer hold the leader (it needed a new channel), so even a
312
+ // single remaining seller goes first.
313
+ const weights = pool.map((candidate) => 1 / Math.max(scores.get(candidate).score, 1e-9) ** 2);
314
+ const picked = pool.length === 1
315
+ ? pool[0]
316
+ : options.affinityKey
317
+ ? rendezvousPick(pool, weights, (candidate) => inputs.get(candidate).peerId, options.affinityKey)
318
+ : weightedPick(pool, weights, random());
319
+ ordered = [picked, ...ordered.filter((candidate) => candidate !== picked)];
320
+ }
321
+ let explored = null;
322
+ // Probes are separate requests, never a turn of an ongoing conversation
323
+ // (that would move it off its cached seller), never open a channel, and
324
+ // never go to a seller already at its concurrency limit.
325
+ if (pool.length > 0 && !options.affinityKey && explorationRate > 0 && random() < explorationRate) {
326
+ explored = ready.filter((candidate) => !pool.includes(candidate) && scores.get(candidate).stale
327
+ && channelOpen(candidate) !== false && !saturated(candidate)).sort(byScore)[0] ?? null;
328
+ if (explored)
329
+ ordered = [explored, ...ordered.filter((candidate) => candidate !== explored)];
330
+ }
331
+ return { ordered, scores, pool, explored };
332
+ }
333
+ function weightedPick(pool, weights, draw) {
334
+ let remaining = draw * weights.reduce((sum, weight) => sum + weight, 0);
335
+ for (const [index, weight] of weights.entries()) {
336
+ remaining -= weight;
337
+ if (remaining < 0)
338
+ return pool[index];
339
+ }
340
+ return pool[pool.length - 1];
341
+ }
342
+ /** FNV-1a over the key and seller, mapped to (0, 1]. */
343
+ function stableUnit(text) {
344
+ let hash = 0x811c9dc5;
345
+ for (let index = 0; index < text.length; index += 1) {
346
+ hash ^= text.charCodeAt(index);
347
+ hash = Math.imul(hash, 0x01000193) >>> 0;
348
+ }
349
+ return (hash + 1) / 0x1_0000_0001;
350
+ }
351
+ /**
352
+ * Weighted rendezvous hashing: each conversation maps to one seller, with
353
+ * sellers' shares proportional to their weights. When the pool changes, only
354
+ * the conversations of a seller that left (or the share a newcomer takes)
355
+ * move; everyone else stays where their cache is.
356
+ */
357
+ function rendezvousPick(pool, weights, peerId, key) {
358
+ let best = pool[0];
359
+ let bestScore = Number.NEGATIVE_INFINITY;
360
+ for (const [index, candidate] of pool.entries()) {
361
+ const score = Math.log(stableUnit(`${key}|${peerId(candidate)}`)) / weights[index];
362
+ if (score > bestScore) {
363
+ bestScore = score;
364
+ best = candidate;
365
+ }
366
+ }
367
+ return best;
368
+ }
369
+ /**
370
+ * How long to wait for a seller to start answering before trying the next
371
+ * one: four times what it usually takes, never under 30 s or over 2 min.
372
+ * Null when the buyer has too little data on the seller to judge.
373
+ */
374
+ export function adaptiveFirstTokenTimeoutMs(stats, expectedOutputTokens, streamed) {
375
+ if (!stats || stats.firstTokenMs === null || stats.successes < 2)
376
+ return null;
377
+ const generationMs = streamed ? 0 : (expectedOutputTokens / (stats.tokensPerSecond ?? DEFAULT_TOKENS_PER_SECOND)) * 1000;
378
+ return Math.round(Math.min(120_000, Math.max(30_000, 4 * (stats.firstTokenMs + generationMs))));
379
+ }
380
+ //# sourceMappingURL=seller-health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seller-health.js","sourceRoot":"","sources":["../../src/routing/seller-health.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antseed/node",
3
- "version": "0.2.145",
3
+ "version": "0.2.147",
4
4
  "description": "Antseed Network protocol SDK — P2P inference marketplace",
5
5
  "type": "module",
6
6
  "files": [
@@ -70,8 +70,8 @@
70
70
  "node-datachannel": "^0.7.0",
71
71
  "tokenx": "^1.3.0",
72
72
  "@antseed/api-adapter": "0.1.53",
73
- "@antseed/buyer-core": "0.1.22",
74
- "@antseed/protocol": "0.1.10"
73
+ "@antseed/protocol": "0.1.10",
74
+ "@antseed/buyer-core": "0.1.23"
75
75
  },
76
76
  "optionalDependencies": {
77
77
  "keytar": "^7.9.0"