AiModel ai.model@1

Generated at from openvibe-contracts v0.53.0 and openvibe-sdk v0.11.0.

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

ai.model@1: one model of a provider in OpenVibe.AI's registry (server/registry.js decodeModel): type, status, limits, per-million-token costs and what it supports.

Fields

FieldTypeRequiredDescriptionConstraints
provider_keystringyes
model_keystringyes
  • maxLength 200
display_namestring | null
typeenumyes
  • one of "chat", "vision", "embedding", "stt"
statusenumyes
  • one of "active", "disabled"
context_windowinteger | null
max_outputinteger | null
costobjectyes
cost.in_per_mtoknumber | null
cost.out_per_mtoknumber | null
cost.cached_per_mtoknumber | null
supportsobjectyes
supports.jsonboolean
supports.toolsboolean
supports.streamingboolean
supports.visionboolean
metadataobject
created_atstring | null
updated_atstring | null

Examples

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

Valid: sonnet
{
  "provider_key": "anthropic",
  "model_key": "claude-sonnet-4-5",
  "display_name": "Claude Sonnet 4.5",
  "type": "chat",
  "status": "active",
  "context_window": 200000,
  "max_output": 64000,
  "cost": {
    "in_per_mtok": 3,
    "out_per_mtok": 15,
    "cached_per_mtok": 0.3
  },
  "supports": {
    "json": true,
    "tools": true,
    "streaming": true,
    "vision": true
  },
  "metadata": {},
  "created_at": "2026-09-20T10:00:00.000Z",
  "updated_at": "2026-09-20T10:00:00.000Z"
}
Rejected: unknown-type
{
  "provider_key": "anthropic",
  "model_key": "x",
  "type": "image",
  "status": "active",
  "cost": {},
  "supports": {}
}

Validate

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