@antseed/node 0.1.2 → 0.1.4

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.
Files changed (55) hide show
  1. package/README.md +8 -0
  2. package/dist/discovery/announcer.d.ts +14 -0
  3. package/dist/discovery/announcer.d.ts.map +1 -1
  4. package/dist/discovery/announcer.js +128 -68
  5. package/dist/discovery/announcer.js.map +1 -1
  6. package/dist/discovery/index.d.ts +1 -1
  7. package/dist/discovery/index.d.ts.map +1 -1
  8. package/dist/discovery/index.js +1 -1
  9. package/dist/discovery/index.js.map +1 -1
  10. package/dist/discovery/metadata-codec.d.ts +7 -0
  11. package/dist/discovery/metadata-codec.d.ts.map +1 -1
  12. package/dist/discovery/metadata-codec.js +151 -0
  13. package/dist/discovery/metadata-codec.js.map +1 -1
  14. package/dist/discovery/metadata-validator.d.ts +4 -0
  15. package/dist/discovery/metadata-validator.d.ts.map +1 -1
  16. package/dist/discovery/metadata-validator.js +142 -1
  17. package/dist/discovery/metadata-validator.js.map +1 -1
  18. package/dist/discovery/peer-metadata.d.ts +9 -1
  19. package/dist/discovery/peer-metadata.d.ts.map +1 -1
  20. package/dist/discovery/peer-metadata.js +11 -1
  21. package/dist/discovery/peer-metadata.js.map +1 -1
  22. package/dist/index.d.ts +2 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +2 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/interfaces/seller-provider.d.ts +5 -0
  27. package/dist/interfaces/seller-provider.d.ts.map +1 -1
  28. package/dist/node.d.ts +12 -0
  29. package/dist/node.d.ts.map +1 -1
  30. package/dist/node.js +175 -59
  31. package/dist/node.js.map +1 -1
  32. package/dist/p2p/message-protocol.js +3 -3
  33. package/dist/p2p/message-protocol.js.map +1 -1
  34. package/dist/proxy/index.d.ts +1 -0
  35. package/dist/proxy/index.d.ts.map +1 -1
  36. package/dist/proxy/index.js +1 -0
  37. package/dist/proxy/index.js.map +1 -1
  38. package/dist/proxy/model-api-adapter.d.ts +20 -0
  39. package/dist/proxy/model-api-adapter.d.ts.map +1 -0
  40. package/dist/proxy/model-api-adapter.js +514 -0
  41. package/dist/proxy/model-api-adapter.js.map +1 -0
  42. package/dist/types/index.d.ts +1 -0
  43. package/dist/types/index.d.ts.map +1 -1
  44. package/dist/types/index.js +1 -0
  45. package/dist/types/index.js.map +1 -1
  46. package/dist/types/model-api.d.ts +4 -0
  47. package/dist/types/model-api.d.ts.map +1 -0
  48. package/dist/types/model-api.js +10 -0
  49. package/dist/types/model-api.js.map +1 -0
  50. package/dist/types/peer.d.ts +11 -0
  51. package/dist/types/peer.d.ts.map +1 -1
  52. package/dist/types/peer.js.map +1 -1
  53. package/dist/types/plugin-config.d.ts +1 -1
  54. package/dist/types/plugin-config.d.ts.map +1 -1
  55. package/package.json +1 -1
package/README.md CHANGED
@@ -34,6 +34,9 @@ const myProvider: Provider = {
34
34
  outputUsdPerMillion: 10,
35
35
  },
36
36
  },
37
+ modelCategories: {
38
+ 'my-model-v1': ['coding', 'privacy'],
39
+ },
37
40
  maxConcurrency: 10,
38
41
  async handleRequest(req: SerializedHttpRequest): Promise<SerializedHttpResponse> {
39
42
  // Forward the request to your LLM backend and return the response
@@ -96,6 +99,7 @@ if (peers.length > 0) {
96
99
  ```ts
97
100
  interface NodeConfig {
98
101
  role: 'seller' | 'buyer';
102
+ displayName?: string; // Optional human-readable name announced in metadata
99
103
  dataDir?: string; // Default: ~/.antseed
100
104
  dhtPort?: number; // Default: 6881 for seller, 0 (OS-assigned) for buyer
101
105
  signalingPort?: number; // Default: 6882 for seller
@@ -115,6 +119,7 @@ interface NodeConfig {
115
119
  | Option | Default | Description |
116
120
  |---|---|---|
117
121
  | `role` | (required) | `'seller'` to serve requests, `'buyer'` to consume them |
122
+ | `displayName` | unset | Optional node label included in discovery metadata |
118
123
  | `dataDir` | `~/.antseed` | Directory for identity keys, metering DB, and config |
119
124
  | `dhtPort` | `6881` / `0` | UDP port for DHT. Seller defaults to 6881, buyer uses OS-assigned |
120
125
  | `signalingPort` | `6882` | TCP port for P2P signaling and incoming connections (seller only) |
@@ -225,6 +230,9 @@ interface Provider {
225
230
  models?: Record<string, { inputUsdPerMillion: number; outputUsdPerMillion: number }>;
226
231
  };
227
232
 
233
+ /** Optional per-model discovery tags (e.g., coding/privacy/legal) */
234
+ modelCategories?: Record<string, string[]>;
235
+
228
236
  /** Maximum concurrent requests this provider can handle */
229
237
  maxConcurrency: number;
230
238
 
@@ -2,6 +2,7 @@ import type { Identity } from "../p2p/identity.js";
2
2
  import type { DHTNode } from "./dht-node.js";
3
3
  import type { PeerOffering } from "../types/capability.js";
4
4
  import type { PeerMetadata } from "./peer-metadata.js";
5
+ import type { ModelApiProtocol } from "../types/model-api.js";
5
6
  import type { BaseEscrowClient } from "../payments/evm/escrow-client.js";
6
7
  export interface AnnouncerConfig {
7
8
  identity: Identity;
@@ -9,8 +10,11 @@ export interface AnnouncerConfig {
9
10
  providers: Array<{
10
11
  provider: string;
11
12
  models: string[];
13
+ modelCategories?: Record<string, string[]>;
14
+ modelApiProtocols?: Record<string, ModelApiProtocol[]>;
12
15
  maxConcurrency: number;
13
16
  }>;
17
+ displayName?: string;
14
18
  region: string;
15
19
  pricing: Map<string, {
16
20
  defaults: {
@@ -36,9 +40,19 @@ export declare class PeerAnnouncer {
36
40
  private _latestMetadata;
37
41
  constructor(config: AnnouncerConfig);
38
42
  announce(): Promise<void>;
43
+ /**
44
+ * Refresh signed metadata snapshot without announcing to DHT.
45
+ * Useful for high-frequency fields like current provider load.
46
+ */
47
+ refreshMetadata(): Promise<void>;
39
48
  startPeriodicAnnounce(): void;
40
49
  stopPeriodicAnnounce(): void;
41
50
  updateLoad(providerName: string, currentLoad: number): void;
42
51
  getLatestMetadata(): PeerMetadata | null;
52
+ private _buildSignedMetadata;
53
+ private _announceTopics;
54
+ private _tryAnnounceTopic;
55
+ private _normalizeModelCategories;
56
+ private _normalizeModelApiProtocols;
43
57
  }
44
58
  //# sourceMappingURL=announcer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"announcer.d.ts","sourceRoot":"","sources":["../../src/discovery/announcer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAwB,MAAM,oBAAoB,CAAC;AAK7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;IACH,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,GAAG,CACV,MAAM,EACN;QACE,QAAQ,EAAE;YAAE,kBAAkB,EAAE,MAAM,CAAC;YAAC,mBAAmB,EAAE,MAAM,CAAA;SAAE,CAAC;QACtE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,kBAAkB,EAAE,MAAM,CAAC;YAAC,mBAAmB,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtF,CACF,CAAC;IACF,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAC1D,OAAO,CAAC,eAAe,CAA6B;gBAExC,MAAM,EAAE,eAAe;IAI7B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA4F/B,qBAAqB,IAAI,IAAI;IAe7B,oBAAoB,IAAI,IAAI;IAO5B,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAI3D,iBAAiB,IAAI,YAAY,GAAG,IAAI;CAGzC"}
1
+ {"version":3,"file":"announcer.d.ts","sourceRoot":"","sources":["../../src/discovery/announcer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAwB,MAAM,oBAAoB,CAAC;AAE7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAK9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3C,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACvD,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,GAAG,CACV,MAAM,EACN;QACE,QAAQ,EAAE;YAAE,kBAAkB,EAAE,MAAM,CAAC;YAAC,mBAAmB,EAAE,MAAM,CAAA;SAAE,CAAC;QACtE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,kBAAkB,EAAE,MAAM,CAAC;YAAC,mBAAmB,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtF,CACF,CAAC;IACF,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAC1D,OAAO,CAAC,eAAe,CAA6B;gBAExC,MAAM,EAAE,eAAe;IAI7B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/B;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAItC,qBAAqB,IAAI,IAAI;IAe7B,oBAAoB,IAAI,IAAI;IAO5B,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAI3D,iBAAiB,IAAI,YAAY,GAAG,IAAI;YAI1B,oBAAoB;YA0EpB,eAAe;YAcf,iBAAiB;IAS/B,OAAO,CAAC,yBAAyB;IA+BjC,OAAO,CAAC,2BAA2B;CA8BpC"}
@@ -1,6 +1,7 @@
1
1
  import { signData } from "../p2p/identity.js";
2
2
  import { providerTopic, capabilityTopic, topicToInfoHash } from "./dht-node.js";
3
3
  import { METADATA_VERSION } from "./peer-metadata.js";
4
+ import { isKnownModelApiProtocol } from "../types/model-api.js";
4
5
  import { encodeMetadataForSigning } from "./metadata-codec.js";
5
6
  import { debugWarn } from "../utils/debug.js";
6
7
  import { bytesToHex } from "../utils/hex.js";
@@ -14,6 +15,44 @@ export class PeerAnnouncer {
14
15
  this.config = config;
15
16
  }
16
17
  async announce() {
18
+ const metadata = await this._buildSignedMetadata(true);
19
+ this._latestMetadata = metadata;
20
+ await this._announceTopics(metadata.providers);
21
+ }
22
+ /**
23
+ * Refresh signed metadata snapshot without announcing to DHT.
24
+ * Useful for high-frequency fields like current provider load.
25
+ */
26
+ async refreshMetadata() {
27
+ this._latestMetadata = await this._buildSignedMetadata(false);
28
+ }
29
+ startPeriodicAnnounce() {
30
+ if (this.intervalHandle) {
31
+ return;
32
+ }
33
+ // Announce immediately, then on interval
34
+ void this.announce().catch((err) => {
35
+ debugWarn(`[Announcer] Initial announce failed: ${err instanceof Error ? err.message : err}`);
36
+ });
37
+ this.intervalHandle = setInterval(() => {
38
+ void this.announce().catch((err) => {
39
+ debugWarn(`[Announcer] Periodic announce failed: ${err instanceof Error ? err.message : err}`);
40
+ });
41
+ }, this.config.reannounceIntervalMs);
42
+ }
43
+ stopPeriodicAnnounce() {
44
+ if (this.intervalHandle) {
45
+ clearInterval(this.intervalHandle);
46
+ this.intervalHandle = null;
47
+ }
48
+ }
49
+ updateLoad(providerName, currentLoad) {
50
+ this.loadMap.set(providerName, currentLoad);
51
+ }
52
+ getLatestMetadata() {
53
+ return this._latestMetadata;
54
+ }
55
+ async _buildSignedMetadata(includeOnChainReputation = true) {
17
56
  const providers = this.config.providers.map((p) => {
18
57
  const pricing = this.config.pricing.get(p.provider) ?? {
19
58
  defaults: {
@@ -21,109 +60,130 @@ export class PeerAnnouncer {
21
60
  outputUsdPerMillion: 0,
22
61
  },
23
62
  };
24
- return {
63
+ const providerAnnouncement = {
25
64
  provider: p.provider,
26
65
  models: p.models,
27
66
  defaultPricing: pricing.defaults,
28
- ...(pricing.models ? { modelPricing: pricing.models } : {}),
29
67
  maxConcurrency: p.maxConcurrency,
30
68
  currentLoad: this.loadMap.get(p.provider) ?? 0,
31
69
  };
70
+ if (pricing.models) {
71
+ providerAnnouncement.modelPricing = pricing.models;
72
+ }
73
+ const normalizedModelCategories = this._normalizeModelCategories(p.modelCategories, p.models);
74
+ if (normalizedModelCategories) {
75
+ providerAnnouncement.modelCategories = normalizedModelCategories;
76
+ }
77
+ const normalizedModelApiProtocols = this._normalizeModelApiProtocols(p.modelApiProtocols, p.models);
78
+ if (normalizedModelApiProtocols) {
79
+ providerAnnouncement.modelApiProtocols = normalizedModelApiProtocols;
80
+ }
81
+ return providerAnnouncement;
32
82
  });
33
83
  const metadata = {
34
84
  peerId: this.config.identity.peerId,
35
85
  version: METADATA_VERSION,
86
+ ...(this.config.displayName ? { displayName: this.config.displayName } : {}),
36
87
  providers,
37
- ...(this.config.offerings && this.config.offerings.length > 0
38
- ? { offerings: this.config.offerings }
39
- : {}),
40
- ...(this.config.stakeAmountUSDC != null
41
- ? { stakeAmountUSDC: this.config.stakeAmountUSDC }
42
- : {}),
43
- ...(this.config.trustScore != null
44
- ? { trustScore: this.config.trustScore }
45
- : {}),
46
88
  region: this.config.region,
47
89
  timestamp: Date.now(),
48
90
  signature: "",
49
91
  };
50
- // Populate EVM address and on-chain reputation if escrow client is available
92
+ if (this.config.offerings && this.config.offerings.length > 0) {
93
+ metadata.offerings = this.config.offerings;
94
+ }
95
+ if (this.config.stakeAmountUSDC != null) {
96
+ metadata.stakeAmountUSDC = this.config.stakeAmountUSDC;
97
+ }
98
+ if (this.config.trustScore != null) {
99
+ metadata.trustScore = this.config.trustScore;
100
+ }
51
101
  if (this.config.escrowClient) {
52
- try {
53
- const evmAddress = identityToEvmAddress(this.config.identity);
54
- metadata.evmAddress = evmAddress;
55
- const reputation = await this.config.escrowClient.getReputation(evmAddress);
56
- metadata.onChainReputation = reputation.weightedAverage;
57
- metadata.onChainSessionCount = reputation.sessionCount;
58
- metadata.onChainDisputeCount = reputation.disputeCount;
102
+ const evmAddress = identityToEvmAddress(this.config.identity);
103
+ metadata.evmAddress = evmAddress;
104
+ if (includeOnChainReputation) {
105
+ try {
106
+ const reputation = await this.config.escrowClient.getReputation(evmAddress);
107
+ metadata.onChainReputation = reputation.weightedAverage;
108
+ metadata.onChainSessionCount = reputation.sessionCount;
109
+ metadata.onChainDisputeCount = reputation.disputeCount;
110
+ }
111
+ catch {
112
+ // Silently continue without reputation data
113
+ }
59
114
  }
60
- catch {
61
- // Silently continue without reputation data
115
+ else if (this._latestMetadata) {
116
+ metadata.onChainReputation = this._latestMetadata.onChainReputation;
117
+ metadata.onChainSessionCount = this._latestMetadata.onChainSessionCount;
118
+ metadata.onChainDisputeCount = this._latestMetadata.onChainDisputeCount;
62
119
  }
63
120
  }
64
- // Sign metadata
65
121
  const dataToSign = encodeMetadataForSigning(metadata);
66
122
  const signature = await signData(this.config.identity.privateKey, dataToSign);
67
123
  metadata.signature = bytesToHex(signature);
68
- this._latestMetadata = metadata;
69
- // Announce under each provider topic (continue on failure)
124
+ return metadata;
125
+ }
126
+ async _announceTopics(providers) {
70
127
  for (const p of providers) {
71
- try {
72
- const topic = providerTopic(p.provider);
73
- const infoHash = topicToInfoHash(topic);
74
- await this.config.dht.announce(infoHash, this.config.signalingPort);
75
- }
76
- catch {
77
- // DHT may not have peers yet — will retry on next cycle
128
+ await this._tryAnnounceTopic(providerTopic(p.provider));
129
+ }
130
+ await this._tryAnnounceTopic(providerTopic("*"));
131
+ if (this.config.offerings) {
132
+ for (const offering of this.config.offerings) {
133
+ await this._tryAnnounceTopic(capabilityTopic(offering.capability, offering.name));
78
134
  }
79
135
  }
80
- // Also announce under the wildcard topic for generic discovery
136
+ }
137
+ async _tryAnnounceTopic(topic) {
81
138
  try {
82
- const wildcardInfoHash = topicToInfoHash(providerTopic("*"));
83
- await this.config.dht.announce(wildcardInfoHash, this.config.signalingPort);
139
+ const infoHash = topicToInfoHash(topic);
140
+ await this.config.dht.announce(infoHash, this.config.signalingPort);
84
141
  }
85
142
  catch {
86
143
  // DHT may not have peers yet — will retry on next cycle
87
144
  }
88
- // Announce under each capability topic
89
- if (this.config.offerings) {
90
- for (const offering of this.config.offerings) {
91
- try {
92
- const topic = capabilityTopic(offering.capability, offering.name);
93
- const infoHash = topicToInfoHash(topic);
94
- await this.config.dht.announce(infoHash, this.config.signalingPort);
95
- }
96
- catch {
97
- // DHT may not have peers yet — will retry on next cycle
98
- }
145
+ }
146
+ _normalizeModelCategories(modelCategories, supportedModels) {
147
+ if (!modelCategories) {
148
+ return undefined;
149
+ }
150
+ const hasWildcardModels = supportedModels.length === 0;
151
+ const supportedModelSet = new Set(supportedModels);
152
+ const normalized = {};
153
+ for (const [model, categories] of Object.entries(modelCategories)) {
154
+ if (!hasWildcardModels && !supportedModelSet.has(model)) {
155
+ continue;
156
+ }
157
+ const deduped = Array.from(new Set(categories
158
+ .map((category) => category.trim().toLowerCase())
159
+ .filter((category) => category.length > 0)));
160
+ if (deduped.length === 0) {
161
+ continue;
99
162
  }
163
+ normalized[model] = deduped;
100
164
  }
165
+ return Object.keys(normalized).length > 0 ? normalized : undefined;
101
166
  }
102
- startPeriodicAnnounce() {
103
- if (this.intervalHandle) {
104
- return;
167
+ _normalizeModelApiProtocols(modelApiProtocols, supportedModels) {
168
+ if (!modelApiProtocols) {
169
+ return undefined;
105
170
  }
106
- // Announce immediately, then on interval
107
- void this.announce().catch((err) => {
108
- debugWarn(`[Announcer] Initial announce failed: ${err instanceof Error ? err.message : err}`);
109
- });
110
- this.intervalHandle = setInterval(() => {
111
- void this.announce().catch((err) => {
112
- debugWarn(`[Announcer] Periodic announce failed: ${err instanceof Error ? err.message : err}`);
113
- });
114
- }, this.config.reannounceIntervalMs);
115
- }
116
- stopPeriodicAnnounce() {
117
- if (this.intervalHandle) {
118
- clearInterval(this.intervalHandle);
119
- this.intervalHandle = null;
171
+ const hasWildcardModels = supportedModels.length === 0;
172
+ const supportedModelSet = new Set(supportedModels);
173
+ const normalized = {};
174
+ for (const [model, protocols] of Object.entries(modelApiProtocols)) {
175
+ if (!hasWildcardModels && !supportedModelSet.has(model)) {
176
+ continue;
177
+ }
178
+ const deduped = Array.from(new Set(protocols
179
+ .map((protocol) => protocol.trim().toLowerCase())
180
+ .filter((protocol) => isKnownModelApiProtocol(protocol))));
181
+ if (deduped.length === 0) {
182
+ continue;
183
+ }
184
+ normalized[model] = deduped;
120
185
  }
121
- }
122
- updateLoad(providerName, currentLoad) {
123
- this.loadMap.set(providerName, currentLoad);
124
- }
125
- getLatestMetadata() {
126
- return this._latestMetadata;
186
+ return Object.keys(normalized).length > 0 ? normalized : undefined;
127
187
  }
128
188
  }
129
189
  //# sourceMappingURL=announcer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"announcer.js","sourceRoot":"","sources":["../../src/discovery/announcer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"announcer.js","sourceRoot":"","sources":["../../src/discovery/announcer.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ export { scorePeer, rankPeers, selectBestPeer, selectDiversePeers, DEFAULT_SCORI
5
5
  export { OFFICIAL_BOOTSTRAP_NODES, parseBootstrapList, mergeBootstrapNodes, toBootstrapConfig, type BootstrapNode } from './bootstrap.js';
6
6
  export { encodeMetadata, encodeMetadataForSigning, decodeMetadata } from './metadata-codec.js';
7
7
  export { validateMetadata, MAX_METADATA_SIZE, MAX_PROVIDERS, type ValidationError } from './metadata-validator.js';
8
- export { METADATA_VERSION, type PeerMetadata, type ProviderAnnouncement } from './peer-metadata.js';
8
+ export { METADATA_VERSION, WELL_KNOWN_MODEL_CATEGORIES, type PeerMetadata, type ProviderAnnouncement } from './peer-metadata.js';
9
9
  export { type MetadataResolver, type PeerEndpoint } from './metadata-resolver.js';
10
10
  export { DefaultMetadataResolver } from './default-metadata-resolver.js';
11
11
  export { HttpMetadataResolver, type HttpMetadataResolverConfig } from './http-metadata-resolver.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAChH,OAAO,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3G,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACjL,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC1I,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACnH,OAAO,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACpG,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,KAAK,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACpG,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC7H,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC5G,OAAO,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAChH,OAAO,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3G,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACjL,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC1I,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACnH,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,KAAK,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACjI,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,KAAK,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACpG,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC7H,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC5G,OAAO,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -5,7 +5,7 @@ export { scorePeer, rankPeers, selectBestPeer, selectDiversePeers, DEFAULT_SCORI
5
5
  export { OFFICIAL_BOOTSTRAP_NODES, parseBootstrapList, mergeBootstrapNodes, toBootstrapConfig } from './bootstrap.js';
6
6
  export { encodeMetadata, encodeMetadataForSigning, decodeMetadata } from './metadata-codec.js';
7
7
  export { validateMetadata, MAX_METADATA_SIZE, MAX_PROVIDERS } from './metadata-validator.js';
8
- export { METADATA_VERSION } from './peer-metadata.js';
8
+ export { METADATA_VERSION, WELL_KNOWN_MODEL_CATEGORIES } from './peer-metadata.js';
9
9
  export { DefaultMetadataResolver } from './default-metadata-resolver.js';
10
10
  export { HttpMetadataResolver } from './http-metadata-resolver.js';
11
11
  export { DHTHealthMonitor, DEFAULT_HEALTH_THRESHOLDS } from './dht-health.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAsB,MAAM,eAAe,CAAC;AAChH,OAAO,EAAE,aAAa,EAAwB,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAwC,MAAM,kBAAkB,CAAC;AAC3G,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,uBAAuB,EAA4D,MAAM,oBAAoB,CAAC;AACjL,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAsB,MAAM,gBAAgB,CAAC;AAC1I,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAwB,MAAM,yBAAyB,CAAC;AACnH,OAAO,EAAE,gBAAgB,EAAgD,MAAM,oBAAoB,CAAC;AAEpG,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAmC,MAAM,6BAA6B,CAAC;AACpG,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAiD,MAAM,iBAAiB,CAAC;AAC7H,OAAO,EAAE,cAAc,EAA6B,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAqD,MAAM,qBAAqB,CAAC;AAC5G,OAAO,EAAE,gBAAgB,EAA+B,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAsB,MAAM,eAAe,CAAC;AAChH,OAAO,EAAE,aAAa,EAAwB,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAwC,MAAM,kBAAkB,CAAC;AAC3G,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,uBAAuB,EAA4D,MAAM,oBAAoB,CAAC;AACjL,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAsB,MAAM,gBAAgB,CAAC;AAC1I,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAwB,MAAM,yBAAyB,CAAC;AACnH,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAgD,MAAM,oBAAoB,CAAC;AAEjI,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAmC,MAAM,6BAA6B,CAAC;AACpG,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAiD,MAAM,iBAAiB,CAAC;AAC7H,OAAO,EAAE,cAAc,EAA6B,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAqD,MAAM,qBAAqB,CAAC;AAC5G,OAAO,EAAE,gBAAgB,EAA+B,MAAM,0BAA0B,CAAC"}
@@ -6,8 +6,15 @@ import type { PeerMetadata } from "./peer-metadata.js";
6
6
  * [providerLen:1][provider:N][modelCount:1][models...]
7
7
  * [defaultInputPrice:4][defaultOutputPrice:4]
8
8
  * [modelPricingCount:1][modelPricingEntries...]
9
+ * [modelCategoryCount:1][modelCategoryEntries...] (v3+ only)
10
+ * [modelApiProtocolCount:1][modelApiProtocolEntries...] (v4+ only)
9
11
  * [maxConcurrency:2][currentLoad:2]
10
12
  * modelPricingEntry: [modelLen:1][model:N][inputPrice:4][outputPrice:4]
13
+ * modelCategoryEntry(v3+): [modelLen:1][model:N][categoryCount:1][categories...]
14
+ * category(v3+): [categoryLen:1][category:N]
15
+ * modelApiProtocolEntry(v4+): [modelLen:1][model:N][protocolCount:1][protocols...]
16
+ * protocol(v4+): [protocolLen:1][protocol:N]
17
+ * [displayNameFlag:1][displayNameLen:1][displayName:N] (v3+ only)
11
18
  * [signature:64]
12
19
  */
13
20
  export declare function encodeMetadata(metadata: PeerMetadata): Uint8Array;
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-codec.d.ts","sourceRoot":"","sources":["../../src/discovery/metadata-codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKvD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,CAQjE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,CAE3E;AAkKD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAgQ7D"}
1
+ {"version":3,"file":"metadata-codec.d.ts","sourceRoot":"","sources":["../../src/discovery/metadata-codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUvD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,CAQjE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,CAE3E;AA0OD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAsV7D"}