8 R"IRS({"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"urn:paperkiln:ir:1","title":"paperkiln IR document, version 1","description":"The structure of an IR document (spec/IR_SPEC.md sections 3, 5, 6 and 7). Keys starting with '_' are prose and allowed anywhere. The semantic rules (section 10.1) are checked by tools/ir_validate.py.","type":"object","required":["ir_version","family_hint","model","embed","block","head"],"properties":{"ir_version":{"type":"integer","minimum":0},"family_hint":{"type":"string"},"model":{"$ref":"#/$defs/model"},"tokenizer":{"$ref":"#/$defs/tokenizer"},"inputs":{"type":"array","items":{"anyOf":[{"type":"string"},{"$ref":"#/$defs/io"}]}},"outputs":{"type":"array","items":{"anyOf":[{"type":"string"},{"$ref":"#/$defs/io"}]}},"modes":{"type":"object","additionalProperties":{"type":"string"}},"embed":{"$ref":"#/$defs/section"},"block":{"$ref":"#/$defs/block"},"head":{"$ref":"#/$defs/section"}},"patternProperties":{"^_":true},"additionalProperties":false,"$defs":{"name":{"type":"string","minLength":1},"names":{"type":"array","items":{"$ref":"#/$defs/name"}},"posint":{"type":"integer","minimum":1},"nonneg":{"type":"integer","minimum":0},"per_layer":{"type":"object","required":["per_layer"],"properties":{"per_layer":{"type":"array"}},"patternProperties":{"^_":true},"additionalProperties":false},"apply":{"anyOf":[{"type":"boolean"},{"$ref":"#/$defs/per_layer"}]},"int_or_layers":{"anyOf":[{"$ref":"#/$defs/nonneg"},{"$ref":"#/$defs/per_layer"}]},"num_or_layers":{"anyOf":[{"type":"number"},{"$ref":"#/$defs/per_layer"}]},"io":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"kind":{"type":"string"},"note":{"type":"string"}},"patternProperties":{"^_":true},"additionalProperties":false},"model":{"type":"object","required":["vocab","d","n_layers","ctx"],"properties":{"vocab":{"$ref":"#/$defs/posint"},"d":{"$ref":"#/$defs/posint"},"n_layers":{"$ref":"#/$defs/posint"},"ctx":{"$ref":"#/$defs/posint"},"dtype":{"enum":["f32"]}},"patternProperties":{"^_":true},"additionalProperties":false},"tokenizer":{"type":"object","properties":{"type":{"type":"string"},"source":{"type":"string"},"bos":{"type":["integer","null"]},"specials":{"type":"object","additionalProperties":{"type":"integer"}}},"patternProperties":{"^_":true},"additionalProperties":false},"section":{"type":"object","required":["nodes"],"properties":{"nodes":{"type":"array","items":{"$ref":"#/$defs/node"}}},"patternProperties":{"^_":true},"additionalProperties":false},"block":{"type":"object","required":["repeat","nodes"],"properties":{"repeat":{"$ref":"#/$defs/posint"},"state":{"type":"array","items":{"$ref":"#/$defs/slot"}},"nodes":{"type":"array","items":{"$ref":"#/$defs/node"}},"weight_index":{"$ref":"#/$defs/per_layer"}},"patternProperties":{"^_":true},"additionalProperties":false},"slot":{"type":"object","required":["name","kind"],"properties":{"name":{"$ref":"#/$defs/name"},"kind":{"enum":["kv","recurrent"]}},"allOf":[{"if":{"properties":{"kind":{"const":"kv"}},"required":["kind"]},"then":{"$ref":"#/$defs/slot_kv"}},{"if":{"properties":{"kind":{"const":"recurrent"}},"required":["kind"]},"then":{"$ref":"#/$defs/slot_recurrent"}}]},"slot_kv":{"type":"object","required":["name","kind","heads","kv_heads","head_dim","max_len","window","sinks"],"properties":{"name":true,"kind":true,"heads":{"anyOf":[{"$ref":"#/$defs/posint"},{"$ref":"#/$defs/per_layer"}]},"kv_heads":{"anyOf":[{"$ref":"#/$defs/posint"},{"$ref":"#/$defs/per_layer"}]},"head_dim":{"anyOf":[{"$ref":"#/$defs/posint"},{"$ref":"#/$defs/per_layer"}]},"max_len":{"anyOf":[{"$ref":"#/$defs/posint"},{"$ref":"#/$defs/per_layer"}]},"window":{"$ref":"#/$defs/int_or_layers"},"sinks":{"$ref":"#/$defs/int_or_layers"},"dtype":{"enum":["f32"]},"evict":{"enum":["turn_state"]},"kv_rows":{"enum":["active"]},"kv_from":true},"patternProperties":{"^_":true},"additionalProperties":false},"slot_recurrent":{"type":"object","required":["name","kind","op","dtype","tensors"],"properties":{"nam)IRS",