Expose available access programs in model discovery (#44893)

## What changed

Carry optional `available_access_programs` metadata through model information, presets, caches, and the TUI, and expose it as `availableAccessPrograms` in app-server `model/list` responses. Update the generated JSON schemas, TypeScript types, and Python models.

Preserve the distinction between missing metadata and an empty `cyber` list. Ignore unknown cyber program names when reading the catalog so new server programs do not prevent older clients from loading it. Discovery metadata does not grant access; inference still enforces authorization.

## Testing

Add coverage for absent, null, empty, and populated metadata, unknown program names, and app-server serialization. Extend cache tests and verify that online refreshes persist changed access metadata even when the catalog ETag stays unchanged.

GitOrigin-RevId: b3ef5805c1c61b8d64b9b896c9c0a79120143667
This commit is contained in:
faizan-oai authored and copyberry committed 2026-09-11 19:13:04 +00:00
1 parent 4dcce4f0c4
commit e3a52b87b2
31 files changed
+405 -44

No files matched your search

@@ -11162,6 +11162,18 @@
}
]
},
"availableAccessPrograms": {
"anyOf": [
{
"$ref": "#/definitions/ModelAccessPrograms"
},
{
"type": "null"
}
],
"default": null,
"description": "Null when the catalog does not provide access-program metadata."
},
"defaultReasoningEffort": {
"$ref": "#/definitions/ReasoningEffort"
},
@@ -11265,6 +11277,22 @@
],
"type": "object"
},
"ModelAccessPrograms": {
"description": "Caller-specific explicit access programs advertised by model discovery.",
"properties": {
"cyber": {
"description": "Accepted explicit selections.",
"items": {
"$ref": "#/definitions/CyberAccessProgram"
},
"type": "array"
}
},
"required": [
"cyber"
],
"type": "object"
},
"ModelAvailabilityNux": {
"properties": {
"message": {