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
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
provider_key | string | yes | ||
model_key | string | yes |
| |
display_name | string | null | |||
type | enum | yes |
| |
status | enum | yes |
| |
context_window | integer | null | |||
max_output | integer | null | |||
cost | object | yes | ||
cost.in_per_mtok | number | null | |||
cost.out_per_mtok | number | null | |||
cost.cached_per_mtok | number | null | |||
supports | object | yes | ||
supports.json | boolean | |||
supports.tools | boolean | |||
supports.streaming | boolean | |||
supports.vision | boolean | |||
metadata | object | |||
created_at | string | null | |||
updated_at | string | 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 }] }