From
bafyreictkdh3mbwekigwn3ri4czj6224gtnkkct46ajcka7qi3xumprfzy
indexed 2026-06-21 00:58 UTC
View this version
To
bafyreibqqioxzzuzwa7lf727c5ptw6s3xjcddmemfvd47peesdjkeanuoa
indexed 2026-07-26 20:05 UTC
View this version
Compatibility
breaking 3 breaking changes, 23 non-breaking changes.
Breaking changes (3)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.cocore.inference.submit:input.tools:items", src: "dev.cocore.inference.submit:input.tools:items", tgt: "dev.cocore.inference.submit:input.tools:items.type", kind: "prop", name: Some("type") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.cocore.inference.submit:input.tools:items", src: "dev.cocore.inference.submit:input.tools:items", tgt: "dev.cocore.inference.submit:input.tools:items.function", kind: "prop", name: Some("function") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.cocore.inference.submit:input.tools:items.function", src: "dev.cocore.inference.submit:input.tools:items.function", tgt: "dev.cocore.inference.submit:input.tools:items.function.name", kind: "prop", name: Some("name") }
Non-breaking changes (23)
- AddedVertex AddedVertex { vertex_id: "dev.cocore.inference.submit:input.outputSchema" }
- AddedVertex AddedVertex { vertex_id: "dev.cocore.inference.submit:input.outputSchema.name" }
- AddedVertex AddedVertex { vertex_id: "dev.cocore.inference.submit:input.outputSchema.schema" }
- AddedVertex AddedVertex { vertex_id: "dev.cocore.inference.submit:input.outputSchema.strict" }
- AddedVertex AddedVertex { vertex_id: "dev.cocore.inference.submit:input.toolChoice" }
- AddedVertex AddedVertex { vertex_id: "dev.cocore.inference.submit:input.toolChoiceFunction" }
- AddedVertex AddedVertex { vertex_id: "dev.cocore.inference.submit:input.tools" }
- AddedVertex AddedVertex { vertex_id: "dev.cocore.inference.submit:input.tools:items" }
- AddedVertex AddedVertex { vertex_id: "dev.cocore.inference.submit:input.tools:items.function" }
- AddedVertex AddedVertex { vertex_id: "dev.cocore.inference.submit:input.tools:items.function.description" }
- AddedVertex AddedVertex { vertex_id: "dev.cocore.inference.submit:input.tools:items.function.name" }
- AddedVertex AddedVertex { vertex_id: "dev.cocore.inference.submit:input.tools:items.function.parameters" }
- AddedVertex AddedVertex { vertex_id: "dev.cocore.inference.submit:input.tools:items.type" }
- AddedEdge AddedEdge { src: "dev.cocore.inference.submit:input", tgt: "dev.cocore.inference.submit:input.outputSchema", kind: "prop", name: Some("outputSchema") }
- AddedEdge AddedEdge { src: "dev.cocore.inference.submit:input", tgt: "dev.cocore.inference.submit:input.toolChoice", kind: "prop", name: Some("toolChoice") }
- AddedEdge AddedEdge { src: "dev.cocore.inference.submit:input", tgt: "dev.cocore.inference.submit:input.toolChoiceFunction", kind: "prop", name: Some("toolChoiceFunction") }
- AddedEdge AddedEdge { src: "dev.cocore.inference.submit:input", tgt: "dev.cocore.inference.submit:input.tools", kind: "prop", name: Some("tools") }
- AddedEdge AddedEdge { src: "dev.cocore.inference.submit:input.outputSchema", tgt: "dev.cocore.inference.submit:input.outputSchema.name", kind: "prop", name: Some("name") }
- AddedEdge AddedEdge { src: "dev.cocore.inference.submit:input.outputSchema", tgt: "dev.cocore.inference.submit:input.outputSchema.schema", kind: "prop", name: Some("schema") }
- AddedEdge AddedEdge { src: "dev.cocore.inference.submit:input.outputSchema", tgt: "dev.cocore.inference.submit:input.outputSchema.strict", kind: "prop", name: Some("strict") }
- AddedEdge AddedEdge { src: "dev.cocore.inference.submit:input.tools", tgt: "dev.cocore.inference.submit:input.tools:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "dev.cocore.inference.submit:input.tools:items.function", tgt: "dev.cocore.inference.submit:input.tools:items.function.description", kind: "prop", name: Some("description") }
- AddedEdge AddedEdge { src: "dev.cocore.inference.submit:input.tools:items.function", tgt: "dev.cocore.inference.submit:input.tools:items.function.parameters", kind: "prop", name: Some("parameters") }
Migration guidance
Added
AddedVertex { vertex_id: "dev.cocore.inference.submit:input.outputSchema" }AddedVertex { vertex_id: "dev.cocore.inference.submit:input.outputSchema.name" }AddedVertex { vertex_id: "dev.cocore.inference.submit:input.outputSchema.schema" }AddedVertex { vertex_id: "dev.cocore.inference.submit:input.outputSchema.strict" }AddedVertex { vertex_id: "dev.cocore.inference.submit:input.toolChoice" }AddedVertex { vertex_id: "dev.cocore.inference.submit:input.toolChoiceFunction" }AddedVertex { vertex_id: "dev.cocore.inference.submit:input.tools" }AddedVertex { vertex_id: "dev.cocore.inference.submit:input.tools:items" }AddedVertex { vertex_id: "dev.cocore.inference.submit:input.tools:items.function" }AddedVertex { vertex_id: "dev.cocore.inference.submit:input.tools:items.function.description" }AddedVertex { vertex_id: "dev.cocore.inference.submit:input.tools:items.function.name" }AddedVertex { vertex_id: "dev.cocore.inference.submit:input.tools:items.function.parameters" }AddedVertex { vertex_id: "dev.cocore.inference.submit:input.tools:items.type" }
Notes
- Breaking: RequiredEdgeAdded { vertex_id: "dev.cocore.inference.submit:input.tools:items", src: "dev.cocore.inference.submit:input.tools:items", tgt: "dev.cocore.inference.submit:input.tools:items.type", kind: "prop", name: Some("type") }
- Breaking: RequiredEdgeAdded { vertex_id: "dev.cocore.inference.submit:input.tools:items", src: "dev.cocore.inference.submit:input.tools:items", tgt: "dev.cocore.inference.submit:input.tools:items.function", kind: "prop", name: Some("function") }
- Breaking: RequiredEdgeAdded { vertex_id: "dev.cocore.inference.submit:input.tools:items.function", src: "dev.cocore.inference.submit:input.tools:items.function", tgt: "dev.cocore.inference.submit:input.tools:items.function.name", kind: "prop", name: Some("name") }
- Non-breaking: AddedEdge { src: "dev.cocore.inference.submit:input", tgt: "dev.cocore.inference.submit:input.outputSchema", kind: "prop", name: Some("outputSchema") }
- Non-breaking: AddedEdge { src: "dev.cocore.inference.submit:input", tgt: "dev.cocore.inference.submit:input.toolChoice", kind: "prop", name: Some("toolChoice") }
- Non-breaking: AddedEdge { src: "dev.cocore.inference.submit:input", tgt: "dev.cocore.inference.submit:input.toolChoiceFunction", kind: "prop", name: Some("toolChoiceFunction") }
- Non-breaking: AddedEdge { src: "dev.cocore.inference.submit:input", tgt: "dev.cocore.inference.submit:input.tools", kind: "prop", name: Some("tools") }
- Non-breaking: AddedEdge { src: "dev.cocore.inference.submit:input.outputSchema", tgt: "dev.cocore.inference.submit:input.outputSchema.name", kind: "prop", name: Some("name") }
- Non-breaking: AddedEdge { src: "dev.cocore.inference.submit:input.outputSchema", tgt: "dev.cocore.inference.submit:input.outputSchema.schema", kind: "prop", name: Some("schema") }
- Non-breaking: AddedEdge { src: "dev.cocore.inference.submit:input.outputSchema", tgt: "dev.cocore.inference.submit:input.outputSchema.strict", kind: "prop", name: Some("strict") }
- Non-breaking: AddedEdge { src: "dev.cocore.inference.submit:input.tools", tgt: "dev.cocore.inference.submit:input.tools:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "dev.cocore.inference.submit:input.tools:items.function", tgt: "dev.cocore.inference.submit:input.tools:items.function.description", kind: "prop", name: Some("description") }
- Non-breaking: AddedEdge { src: "dev.cocore.inference.submit:input.tools:items.function", tgt: "dev.cocore.inference.submit:input.tools:items.function.parameters", kind: "prop", name: Some("parameters") }
Changes
11
{22
"$type": "com.atproto.lexicon.schema",33
"defs": {44
"main": {55
"description": "Submit an inference request for the authenticated requester. Builds a (paymentAuthorization, job) pair scoped to the configured exchange, publishes both to the requester's PDS, and returns the job/authorization URIs so the caller can poll for a receipt via `dev.cocore.inference.status`.",66
"errors": [77
{88
"description": "The caller is not authenticated.",99
"name": "AuthRequired"1010
},1111
{1212
"description": "The body failed validation.",1313
"name": "InvalidRequest"1414
}1515
],1616
"input": {1717
"encoding": "application/json",1818
"schema": {1919
"properties": {2020
"maxTokensOut": {2121
"minimum": 1,2222
"type": "integer"2323
},2424
"model": {2525
"description": "Opaque model identifier honored by the provider.",2626
"minLength": 1,2727
"type": "string"2828
},29
"outputSchema": {30
"description": "Optional JSON Schema to constrain the model output. When present, the published job record carries this schema and the provider passes it to the inference engine as response_format guided decoding. The schema is public (not encrypted) — it describes the output shape, not the input.",31
"properties": {32
"name": {33
"description": "Schema name (maps to OpenAI response_format.json_schema.name).",34
"type": "string"35
},36
"schema": {37
"description": "The actual JSON Schema object that constrains the model output.",38
"type": "object"39
},40
"strict": {41
"description": "Whether to enforce strict schema adherence.",42
"type": "boolean"43
}44
},45
"type": "object"46
},2947
"priceCeiling": {3048
"description": "Maximum the requester will pay. Integer minor units plus an ISO 4217 / XBT-style currency code.",3149
"properties": {3250
"amount": {3351
"minimum": 0,3452
"type": "integer"3553
},3654
"currency": {3755
"minLength": 1,3856
"type": "string"3957
}4058
},4159
"required": [4260
"amount",4361
"currency"4462
],4563
"type": "object"4664
},4765
"prompt": {4866
"minLength": 1,4967
"type": "string"68
},69
"toolChoice": {70
"description": "Optional tool choice strategy. 'auto' (default), 'none', or 'required'. Additive.",71
"knownValues": [72
"auto",73
"none",74
"required"75
],76
"type": "string"77
},78
"toolChoiceFunction": {79
"description": "When toolChoice is 'required', force the model to call this specific function. Maps to OpenAI tool_choice object form. Additive.",80
"maxLength": 256,81
"type": "string"82
},83
"tools": {84
"description": "Optional list of tool/function definitions the model may call. Public (not encrypted). The published job record carries this list and the provider passes it to the inference engine.",85
"items": {86
"properties": {87
"function": {88
"properties": {89
"description": {90
"maxLength": 4096,91
"type": "string"92
},93
"name": {94
"maxLength": 256,95
"type": "string"96
},97
"parameters": {98
"description": "JSON Schema for the function's arguments.",99
"type": "object"100
}101
},102
"required": [103
"name"104
],105
"type": "object"106
},107
"type": {108
"knownValues": [109
"function"110
],111
"type": "string"112
}113
},114
"required": [115
"type",116
"function"117
],118
"type": "object"119
},120
"maxLength": 128,121
"type": "array"50122
}51123
},52124
"required": [53125
"model",54126
"prompt",55127
"maxTokensOut",56128
"priceCeiling"57129
],58130
"type": "object"59131
}60132
},61133
"output": {62134
"encoding": "application/json",63135
"schema": {64136
"properties": {65137
"authUri": {66138
"format": "at-uri",67139
"type": "string"68140
},69141
"inputCommitment": {70142
"description": "SHA-256 (lowercase hex) over the input bytes.",71143
"type": "string"72144
},73145
"jobUri": {74146
"format": "at-uri",75147
"type": "string"76148
}77149
},78150
"required": [79151
"jobUri",80152
"authUri",81153
"inputCommitment"82154
],83155
"type": "object"84156
}85157
},86158
"type": "procedure"87159
}88160
},89161
"id": "dev.cocore.inference.submit",90162
"lexicon": 191163
}