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

+1
View File
@@ -626,6 +626,7 @@ fn remote_model_with_auto_review_override(slug: &str, review_model: &str) -> Mod
additional_speed_tiers: Vec::new(),
service_tiers: Vec::new(),
default_service_tier: None,
available_access_programs: None,
upgrade: None,
model_messages: None,
include_skills_usage_instructions: false,
@@ -143,6 +143,7 @@ fn test_model_info(
additional_speed_tiers: Vec::new(),
service_tiers: Vec::new(),
default_service_tier: None,
available_access_programs: None,
upgrade: None,
model_messages: None,
include_skills_usage_instructions: false,
@@ -1509,6 +1510,7 @@ async fn model_switch_to_smaller_model_updates_token_context_window() -> Result<
additional_speed_tiers: Vec::new(),
service_tiers: Vec::new(),
default_service_tier: None,
available_access_programs: None,
upgrade: None,
model_messages: None,
include_skills_usage_instructions: false,
@@ -534,6 +534,7 @@ fn test_remote_model(slug: &str, priority: i32) -> ModelInfo {
additional_speed_tiers: Vec::new(),
service_tiers: Vec::new(),
default_service_tier: None,
available_access_programs: None,
upgrade: None,
model_messages: Some(ModelMessages {
persistent_instructions: None,
+2
View File
@@ -633,6 +633,7 @@ async fn remote_model_friendly_personality_instructions_with_feature() -> anyhow
additional_speed_tiers: Vec::new(),
service_tiers: Vec::new(),
default_service_tier: None,
available_access_programs: None,
upgrade: None,
model_messages: Some(ModelMessages {
persistent_instructions: None,
@@ -765,6 +766,7 @@ async fn user_turn_personality_remote_model_template_includes_update_message() -
additional_speed_tiers: Vec::new(),
service_tiers: Vec::new(),
default_service_tier: None,
available_access_programs: None,
upgrade: None,
model_messages: Some(ModelMessages {
persistent_instructions: None,
@@ -624,6 +624,7 @@ async fn remote_models_remote_model_uses_unified_exec() -> Result<()> {
additional_speed_tiers: Vec::new(),
service_tiers: Vec::new(),
default_service_tier: None,
available_access_programs: None,
upgrade: None,
model_messages: None,
include_skills_usage_instructions: false,
@@ -897,6 +898,7 @@ async fn remote_models_apply_legacy_instructions(auth: CodexAuth) -> Result<()>
additional_speed_tiers: Vec::new(),
service_tiers: Vec::new(),
default_service_tier: None,
available_access_programs: None,
upgrade: None,
model_messages: Some(ModelMessages {
persistent_instructions: None,
@@ -1488,6 +1490,7 @@ fn test_remote_model_with_policy(
additional_speed_tiers: Vec::new(),
service_tiers: Vec::new(),
default_service_tier: None,
available_access_programs: None,
upgrade: None,
model_messages: None,
include_skills_usage_instructions: false,
+1
View File
@@ -2815,6 +2815,7 @@ async fn stdio_image_responses_are_sanitized_for_text_only_model() -> anyhow::Re
additional_speed_tiers: Vec::new(),
service_tiers: Vec::new(),
default_service_tier: None,
available_access_programs: None,
upgrade: None,
model_messages: None,
include_skills_usage_instructions: false,
@@ -104,6 +104,7 @@ fn test_model_info(
additional_speed_tiers: Vec::new(),
service_tiers,
default_service_tier: None,
available_access_programs: None,
upgrade: None,
model_messages: None,
include_skills_usage_instructions: false,
+1
View File
@@ -1636,6 +1636,7 @@ async fn view_image_tool_returns_unsupported_message_for_text_only_model() -> an
additional_speed_tiers: Vec::new(),
service_tiers: Vec::new(),
default_service_tier: None,
available_access_programs: None,
upgrade: None,
model_messages: None,
include_skills_usage_instructions: false,