curl --request POST \
--url https://api.vainona.ai/v1/namespaces/{ns}/judgments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"question": "<string>",
"type": "bool",
"criteria": "<string>",
"context": {
"fields": [
"<string>"
],
"last_n": {},
"window": {},
"max_tokens": 2,
"related": {}
},
"horizon": "0s",
"applies_to": {},
"thresholds": {},
"parts": [
{
"name": "<string>",
"question": "<string>"
}
],
"features": [
"<string>"
],
"freshness": {
"debounce_ms": 0,
"interval": "<string>",
"max_wait_ms": 2,
"fanout": {
"scope": {
"created_within": "<string>",
"where": {}
},
"debounce_ms": 600000,
"max_wait_ms": 2,
"job_above": 1,
"confirm_jobs": true,
"auto_daily_limit": 100000
}
},
"activate": true,
"confirm": false
}
'import requests
url = "https://api.vainona.ai/v1/namespaces/{ns}/judgments"
payload = {
"name": "<string>",
"question": "<string>",
"type": "bool",
"criteria": "<string>",
"context": {
"fields": ["<string>"],
"last_n": {},
"window": {},
"max_tokens": 2,
"related": {}
},
"horizon": "0s",
"applies_to": {},
"thresholds": {},
"parts": [
{
"name": "<string>",
"question": "<string>"
}
],
"features": ["<string>"],
"freshness": {
"debounce_ms": 0,
"interval": "<string>",
"max_wait_ms": 2,
"fanout": {
"scope": {
"created_within": "<string>",
"where": {}
},
"debounce_ms": 600000,
"max_wait_ms": 2,
"job_above": 1,
"confirm_jobs": True,
"auto_daily_limit": 100000
}
},
"activate": True,
"confirm": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
question: '<string>',
type: 'bool',
criteria: '<string>',
context: {fields: ['<string>'], last_n: {}, window: {}, max_tokens: 2, related: {}},
horizon: '0s',
applies_to: {},
thresholds: {},
parts: [{name: '<string>', question: '<string>'}],
features: ['<string>'],
freshness: {
debounce_ms: 0,
interval: '<string>',
max_wait_ms: 2,
fanout: {
scope: {created_within: '<string>', where: {}},
debounce_ms: 600000,
max_wait_ms: 2,
job_above: 1,
confirm_jobs: true,
auto_daily_limit: 100000
}
},
activate: true,
confirm: false
})
};
fetch('https://api.vainona.ai/v1/namespaces/{ns}/judgments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.vainona.ai/v1/namespaces/{ns}/judgments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'question' => '<string>',
'type' => 'bool',
'criteria' => '<string>',
'context' => [
'fields' => [
'<string>'
],
'last_n' => [
],
'window' => [
],
'max_tokens' => 2,
'related' => [
]
],
'horizon' => '0s',
'applies_to' => [
],
'thresholds' => [
],
'parts' => [
[
'name' => '<string>',
'question' => '<string>'
]
],
'features' => [
'<string>'
],
'freshness' => [
'debounce_ms' => 0,
'interval' => '<string>',
'max_wait_ms' => 2,
'fanout' => [
'scope' => [
'created_within' => '<string>',
'where' => [
]
],
'debounce_ms' => 600000,
'max_wait_ms' => 2,
'job_above' => 1,
'confirm_jobs' => true,
'auto_daily_limit' => 100000
]
],
'activate' => true,
'confirm' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.vainona.ai/v1/namespaces/{ns}/judgments"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"question\": \"<string>\",\n \"type\": \"bool\",\n \"criteria\": \"<string>\",\n \"context\": {\n \"fields\": [\n \"<string>\"\n ],\n \"last_n\": {},\n \"window\": {},\n \"max_tokens\": 2,\n \"related\": {}\n },\n \"horizon\": \"0s\",\n \"applies_to\": {},\n \"thresholds\": {},\n \"parts\": [\n {\n \"name\": \"<string>\",\n \"question\": \"<string>\"\n }\n ],\n \"features\": [\n \"<string>\"\n ],\n \"freshness\": {\n \"debounce_ms\": 0,\n \"interval\": \"<string>\",\n \"max_wait_ms\": 2,\n \"fanout\": {\n \"scope\": {\n \"created_within\": \"<string>\",\n \"where\": {}\n },\n \"debounce_ms\": 600000,\n \"max_wait_ms\": 2,\n \"job_above\": 1,\n \"confirm_jobs\": true,\n \"auto_daily_limit\": 100000\n }\n },\n \"activate\": true,\n \"confirm\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.vainona.ai/v1/namespaces/{ns}/judgments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"question\": \"<string>\",\n \"type\": \"bool\",\n \"criteria\": \"<string>\",\n \"context\": {\n \"fields\": [\n \"<string>\"\n ],\n \"last_n\": {},\n \"window\": {},\n \"max_tokens\": 2,\n \"related\": {}\n },\n \"horizon\": \"0s\",\n \"applies_to\": {},\n \"thresholds\": {},\n \"parts\": [\n {\n \"name\": \"<string>\",\n \"question\": \"<string>\"\n }\n ],\n \"features\": [\n \"<string>\"\n ],\n \"freshness\": {\n \"debounce_ms\": 0,\n \"interval\": \"<string>\",\n \"max_wait_ms\": 2,\n \"fanout\": {\n \"scope\": {\n \"created_within\": \"<string>\",\n \"where\": {}\n },\n \"debounce_ms\": 600000,\n \"max_wait_ms\": 2,\n \"job_above\": 1,\n \"confirm_jobs\": true,\n \"auto_daily_limit\": 100000\n }\n },\n \"activate\": true,\n \"confirm\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vainona.ai/v1/namespaces/{ns}/judgments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"question\": \"<string>\",\n \"type\": \"bool\",\n \"criteria\": \"<string>\",\n \"context\": {\n \"fields\": [\n \"<string>\"\n ],\n \"last_n\": {},\n \"window\": {},\n \"max_tokens\": 2,\n \"related\": {}\n },\n \"horizon\": \"0s\",\n \"applies_to\": {},\n \"thresholds\": {},\n \"parts\": [\n {\n \"name\": \"<string>\",\n \"question\": \"<string>\"\n }\n ],\n \"features\": [\n \"<string>\"\n ],\n \"freshness\": {\n \"debounce_ms\": 0,\n \"interval\": \"<string>\",\n \"max_wait_ms\": 2,\n \"fanout\": {\n \"scope\": {\n \"created_within\": \"<string>\",\n \"where\": {}\n },\n \"debounce_ms\": 600000,\n \"max_wait_ms\": 2,\n \"job_above\": 1,\n \"confirm_jobs\": true,\n \"auto_daily_limit\": 100000\n }\n },\n \"activate\": true,\n \"confirm\": false\n}"
response = http.request(request)
puts response.read_body{
"replay": {
"replayed_days": 15,
"entities": 1,
"judgments_per_month": 1,
"judgment_units_per_month": 1,
"cost_usd_per_month": 1,
"bulk_pool_share": 1,
"lower_bound": true,
"excludes": [
"fanout"
]
}
}{
"name": "<string>",
"version": 2,
"active": true,
"warnings": [
"<string>"
],
"job_id": "<string>",
"job_ids": [
"<string>"
]
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}Create a judgment, or a new version of an existing name
Posting a name that exists creates version n+1; versions are
immutable. The first version of a name is active on creation; a later
version is inactive until activated, unless activate: true, which
implies force and skips the shadow report (§6.5, §6.9).
Thresholds are a setting of the judgment, not part of the version
(§6.5). Thresholds given here replace the judgment’s thresholds when
this version becomes active, because they are written for its type; a
version created without them keeps the current thresholds. After that,
change them with PATCH.
On a prefix path (acme%2Fprod%2F*) this creates a template that every
namespace under the prefix inherits (§7.7). A namespace cannot create a
judgment with the name of one it inherits (conflict).
A composite judgment (a bool with parts, §6.5.1) is never active on
creation, not even as the first version, and activate: true is
invalid_request for one: it cannot answer until its combiner is
fitted on your labels by the shadow job that activation starts.
An entity judgment (entities, E1) has context.related (§6.5.2).
Creating a version of one on a judgment whose policy will be
on_change needs confirm: true. Without it, the response is 200
with the replay estimate of its monthly cost, and nothing is created
(§6.9). A confirmed request whose estimate is more than the
namespace’s monthly budget is budget_exceeded. When the version
joins on attributes with no reference index yet, job_ids names the
reference_index job that builds each one, and job_id the first.
A fourth reference index in a namespace is invalid_request, and
details.reference_indexes names the current ones.
A relation that reads a referenced document (entities, E3a) joins with
{theirs: "id", mine: "attributes.<name>"}. It needs a reference
index on the judged documents’ mine attribute, built by a
reference_index job like any other and counted toward the same 3.
Its replay estimate cannot count fan-out, so it has
excludes: ["fanout"] and lower_bound: true. A join with an
attribute on both sides (shared keys, E3b) is invalid_request, and
warnings names a relation that renders a referenced document’s
updated_at, which changes on every write to it.
curl --request POST \
--url https://api.vainona.ai/v1/namespaces/{ns}/judgments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"question": "<string>",
"type": "bool",
"criteria": "<string>",
"context": {
"fields": [
"<string>"
],
"last_n": {},
"window": {},
"max_tokens": 2,
"related": {}
},
"horizon": "0s",
"applies_to": {},
"thresholds": {},
"parts": [
{
"name": "<string>",
"question": "<string>"
}
],
"features": [
"<string>"
],
"freshness": {
"debounce_ms": 0,
"interval": "<string>",
"max_wait_ms": 2,
"fanout": {
"scope": {
"created_within": "<string>",
"where": {}
},
"debounce_ms": 600000,
"max_wait_ms": 2,
"job_above": 1,
"confirm_jobs": true,
"auto_daily_limit": 100000
}
},
"activate": true,
"confirm": false
}
'import requests
url = "https://api.vainona.ai/v1/namespaces/{ns}/judgments"
payload = {
"name": "<string>",
"question": "<string>",
"type": "bool",
"criteria": "<string>",
"context": {
"fields": ["<string>"],
"last_n": {},
"window": {},
"max_tokens": 2,
"related": {}
},
"horizon": "0s",
"applies_to": {},
"thresholds": {},
"parts": [
{
"name": "<string>",
"question": "<string>"
}
],
"features": ["<string>"],
"freshness": {
"debounce_ms": 0,
"interval": "<string>",
"max_wait_ms": 2,
"fanout": {
"scope": {
"created_within": "<string>",
"where": {}
},
"debounce_ms": 600000,
"max_wait_ms": 2,
"job_above": 1,
"confirm_jobs": True,
"auto_daily_limit": 100000
}
},
"activate": True,
"confirm": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
question: '<string>',
type: 'bool',
criteria: '<string>',
context: {fields: ['<string>'], last_n: {}, window: {}, max_tokens: 2, related: {}},
horizon: '0s',
applies_to: {},
thresholds: {},
parts: [{name: '<string>', question: '<string>'}],
features: ['<string>'],
freshness: {
debounce_ms: 0,
interval: '<string>',
max_wait_ms: 2,
fanout: {
scope: {created_within: '<string>', where: {}},
debounce_ms: 600000,
max_wait_ms: 2,
job_above: 1,
confirm_jobs: true,
auto_daily_limit: 100000
}
},
activate: true,
confirm: false
})
};
fetch('https://api.vainona.ai/v1/namespaces/{ns}/judgments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.vainona.ai/v1/namespaces/{ns}/judgments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'question' => '<string>',
'type' => 'bool',
'criteria' => '<string>',
'context' => [
'fields' => [
'<string>'
],
'last_n' => [
],
'window' => [
],
'max_tokens' => 2,
'related' => [
]
],
'horizon' => '0s',
'applies_to' => [
],
'thresholds' => [
],
'parts' => [
[
'name' => '<string>',
'question' => '<string>'
]
],
'features' => [
'<string>'
],
'freshness' => [
'debounce_ms' => 0,
'interval' => '<string>',
'max_wait_ms' => 2,
'fanout' => [
'scope' => [
'created_within' => '<string>',
'where' => [
]
],
'debounce_ms' => 600000,
'max_wait_ms' => 2,
'job_above' => 1,
'confirm_jobs' => true,
'auto_daily_limit' => 100000
]
],
'activate' => true,
'confirm' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.vainona.ai/v1/namespaces/{ns}/judgments"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"question\": \"<string>\",\n \"type\": \"bool\",\n \"criteria\": \"<string>\",\n \"context\": {\n \"fields\": [\n \"<string>\"\n ],\n \"last_n\": {},\n \"window\": {},\n \"max_tokens\": 2,\n \"related\": {}\n },\n \"horizon\": \"0s\",\n \"applies_to\": {},\n \"thresholds\": {},\n \"parts\": [\n {\n \"name\": \"<string>\",\n \"question\": \"<string>\"\n }\n ],\n \"features\": [\n \"<string>\"\n ],\n \"freshness\": {\n \"debounce_ms\": 0,\n \"interval\": \"<string>\",\n \"max_wait_ms\": 2,\n \"fanout\": {\n \"scope\": {\n \"created_within\": \"<string>\",\n \"where\": {}\n },\n \"debounce_ms\": 600000,\n \"max_wait_ms\": 2,\n \"job_above\": 1,\n \"confirm_jobs\": true,\n \"auto_daily_limit\": 100000\n }\n },\n \"activate\": true,\n \"confirm\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.vainona.ai/v1/namespaces/{ns}/judgments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"question\": \"<string>\",\n \"type\": \"bool\",\n \"criteria\": \"<string>\",\n \"context\": {\n \"fields\": [\n \"<string>\"\n ],\n \"last_n\": {},\n \"window\": {},\n \"max_tokens\": 2,\n \"related\": {}\n },\n \"horizon\": \"0s\",\n \"applies_to\": {},\n \"thresholds\": {},\n \"parts\": [\n {\n \"name\": \"<string>\",\n \"question\": \"<string>\"\n }\n ],\n \"features\": [\n \"<string>\"\n ],\n \"freshness\": {\n \"debounce_ms\": 0,\n \"interval\": \"<string>\",\n \"max_wait_ms\": 2,\n \"fanout\": {\n \"scope\": {\n \"created_within\": \"<string>\",\n \"where\": {}\n },\n \"debounce_ms\": 600000,\n \"max_wait_ms\": 2,\n \"job_above\": 1,\n \"confirm_jobs\": true,\n \"auto_daily_limit\": 100000\n }\n },\n \"activate\": true,\n \"confirm\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vainona.ai/v1/namespaces/{ns}/judgments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"question\": \"<string>\",\n \"type\": \"bool\",\n \"criteria\": \"<string>\",\n \"context\": {\n \"fields\": [\n \"<string>\"\n ],\n \"last_n\": {},\n \"window\": {},\n \"max_tokens\": 2,\n \"related\": {}\n },\n \"horizon\": \"0s\",\n \"applies_to\": {},\n \"thresholds\": {},\n \"parts\": [\n {\n \"name\": \"<string>\",\n \"question\": \"<string>\"\n }\n ],\n \"features\": [\n \"<string>\"\n ],\n \"freshness\": {\n \"debounce_ms\": 0,\n \"interval\": \"<string>\",\n \"max_wait_ms\": 2,\n \"fanout\": {\n \"scope\": {\n \"created_within\": \"<string>\",\n \"where\": {}\n },\n \"debounce_ms\": 600000,\n \"max_wait_ms\": 2,\n \"job_above\": 1,\n \"confirm_jobs\": true,\n \"auto_daily_limit\": 100000\n }\n },\n \"activate\": true,\n \"confirm\": false\n}"
response = http.request(request)
puts response.read_body{
"replay": {
"replayed_days": 15,
"entities": 1,
"judgments_per_month": 1,
"judgment_units_per_month": 1,
"cost_usd_per_month": 1,
"bulk_pool_share": 1,
"lower_bound": true,
"excludes": [
"fanout"
]
}
}{
"name": "<string>",
"version": 2,
"active": true,
"warnings": [
"<string>"
],
"job_id": "<string>",
"job_ids": [
"<string>"
]
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}Authorizations
An organization API key. Keys carry a role (read_write or
read_only) and may be restricted to a namespace prefix such as
acme/*, or to one namespace such as acme/prod/tenant_1. A prefix
matches on a / boundary: acme/prod/tenant_1* covers
acme/prod/tenant_1 and everything under acme/prod/tenant_1/,
never acme/prod/tenant_12.
Headers
Returns the original response verbatim while the node still caches it. Correctness never depends on it.
1Path Parameters
A namespace name, or a template prefix ending in /* (§7.7), with any
/ sent as %2F: acme%2Fprod%2Ftenant_123 or acme%2Fprod%2F*.
A namespace name, or a template prefix: a namespace path ending in
/*, such as acme/prod/*, which every namespace under acme/prod/
inherits judgments from (§7.7). Up to 256 bytes.
1 - 256^[A-Za-z0-9._:/-]+(/\*)?$Body
- Option 1
- Option 2
- Option 3
A definition plus its initial freshness settings.
A judgment, attribute or threshold name. Names are path segments in field references, so they never contain ..
1 - 128^[A-Za-z0-9_-]+$1What the engine sees. Omitting it sends the whole state, subject to
the engine limit; allowed but not recommended.
Show child attributes
Show child attributes
Must be active in the registry. May be omitted only when the namespace has a default_engine.
Show child attributes
Show child attributes
How far before observed_at an outcome's prediction was made, such
as 30d for "churned within 30 days". Part of the definition, so
changing it creates a version. Defaults to 0s, which joins
labelled examples to current answers.
^(0|[1-9][0-9]*)[smhd]$Entities, E1 (§6.5). The judgment judges, answers and bills only
documents whose attributes match. A document that does not match
has no answer for it: answers omits it. Part of the definition,
so changing it creates a version.
Show child attributes
Show child attributes
Each threshold is true when p is at least the value.
Show child attributes
Show child attributes
Composite judgments only: 2 to 8 narrow yes/no questions with
names unique within the judgment. They share the judgment's
context recipe and engine, so they go in one engine request with
its other questions, and each counts toward the 32 questions per
request. question then documents what the combination means and
is not sent to the engine. Parts are part of the version. They
cannot reference other judgments. Each part is billed as a
judgment (§9). With features, one part is enough.
1 - 8 elementsShow child attributes
Show child attributes
Entities, E1 (§6.5.1). Composite judgments only: aggregates over
related documents that the combiner takes as numeric inputs beside
the parts. Each names an aggregate the recipe's related
declares. The combiner takes sign(x) × ln(1 + |x|) of each value
and standardises it with the parts' log-odds; a missing value
counts as the feature's mean. Features add no questions, so they
add no judgment units.
1 - 8 elementsEntities, E1 (§6.5.1). An aggregate the recipe declares, as
<relation>.count or <relation>.<sum|min|max|latest>(<path>), such
as tickets.count or invoices.sum(state.amount).
^[A-Za-z0-9_-]+\.(count|(sum|min|max|latest)\((state|attributes)(\.[^.()]+)+\))$Settings, not part of the definition. Changing them creates no version.
Show child attributes
Show child attributes
Activate this version on creation. In v1 this implies force. Refused for a composite judgment, which activation fits on your labels first (§6.5.1).
Entities, E1 (§6.9). Required to create a version with
context.related on a judgment whose policy will be on_change.
Without it, the response is the replay estimate of the monthly
cost, and nothing is created. Ignored for other judgments.
Response
An entity judgment that needs confirm was not confirmed. Nothing was created; this is its replay estimate.
Entities, E1 (§6.9). An unconfirmed create of an entity judgment that runs on_change. Nothing was created.
Entities, E1 (§6.9). What an entity judgment would cost a month,
from the namespace's last 30 days of writes run through its touch,
debounce and ceiling rules. Storage keeps each document's newest
version, so the replay sees each related document's creation, its
newest write and the deletes still recorded: exact for documents
written once, the last edit only for documents edited many times, when
the figures are a lower bound (lower_bound). It does not credit
dedup, which only lowers the bill.
Show child attributes
Show child attributes