AiOfferPool ai.offer-pool@1

Generated at from openvibe-contracts v0.419.0 and openvibe-sdk v0.161.0.

Version
1.0.0
Owner
ai
Visibility
first-party
Status
active
Compatibility
backward
Schema
https://openvibe.network/contracts/ai/offer-pool.v1.json

ai.offer-pool@1 (the pooled machines design, 2026-11-06): the `pool` part of a community AI offer (ai.offer@1) served by several of one owner's machines together (bot.machine-pool@1). Network adds it from its own approved pool record, never from what a machine reports: the offer is the head's, `head` equals the offer's `machine_id`, and while a machine is in a pool it advertises no offer of its own. It names machines only; no address, key or certificate reaches AI. AI routes the request to the head, runs the same verification as for one machine (canaries, the model fingerprint, spot re-runs) on the pool's answers, keys that verification on this exact membership (another member or head is a new, unverified pool), keeps a pool that is new or failed to the free tier only, and labels its answers "Community pool (N machines)".

Fields

FieldTypeRequiredDescriptionConstraints
machinesarray of stringyesThe pool's machines, head included (Bot device ids), two to eight.
  • minItems 2
  • maxItems 8
  • unique items
  • items: pattern ^dev_[0-9A-HJKMNP-TV-Z]{26}$
headstringyesThe machine that answers: one of `machines`, and the offer's own `machine_id`.
  • pattern ^dev_[0-9A-HJKMNP-TV-Z]{26}$

Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

Valid: three-machines
{
  "machines": [
    "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D1",
    "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D2",
    "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D3"
  ],
  "head": "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D2"
}
Valid: two-machines
{
  "machines": [
    "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D1",
    "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D2"
  ],
  "head": "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D1"
}
Rejected: address-field
{
  "machines": [
    "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D1",
    "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D2"
  ],
  "head": "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D1",
  "address": "192.168.1.20/24"
}
Rejected: certificate-field
{
  "machines": [
    "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D1",
    "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D2"
  ],
  "head": "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D1",
  "certificates": [
    "-----BEGIN CERTIFICATE-----\nMIIBRDCB96ADAgECAhQ1F6qS8nQmfA4Z1EQWbuTK6c+/CDAFBgMrZXAwGDEWMBQG\nA1UEAwwNT3BlblZpYmUtcG9vbDAeFw0yNjExMDcwMjE1NThaFw0zNjExMDQwMjE1\nNThaMBgxFjAUBgNVBAMMDU9wZW5WaWJlLXBvb2wwKjAFBgMrZXADIQBzzRaEd6ZR\nqYbsbYK3W8CCJPIAbsNTlIXZYgPEC9yf76NTMFEwHQYDVR0OBBYEFPiGTnP9vRST\nUlo0W1Eh0xcOxA49MB8GA1UdIwQYMBaAFPiGTnP9vRSTUlo0W1Eh0xcOxA49MA8G\nA1UdEwEB/wQFMAMBAf8wBQYDK2VwA0EAOlCHoX3ONMZYTHx4GSAlxP4EQase+99L\nGykZvgPSVDs2alKLXW5fBxvn7OcEJ3g/EMmk9iZ+AL+CmLxdcYBLCw==\n-----END CERTIFICATE-----\n"
  ]
}
Rejected: duplicate-member
{
  "machines": [
    "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D1",
    "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D1"
  ],
  "head": "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D1"
}
Rejected: missing-head
{
  "machines": [
    "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D1",
    "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D2"
  ]
}
Rejected: one-machine
{
  "machines": [
    "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D1"
  ],
  "head": "dev_01J8Z3Q4R5S6T7V8W9X0Y1Z2D1"
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('ai.offer-pool@1', value);   // { valid, errors: [{ path, message }] }