fix(codex): serve versioned dynamic model catalogs

This commit is contained in:
zhefox
2026-08-14 18:41:44 +08:00
parent a1d64e5239
commit 810c3dfe2b
39 changed files with 6147 additions and 362 deletions
File diff suppressed because it is too large Load Diff
@@ -1,8 +1,15 @@
mod catalog;
mod runtime;
#[cfg(test)]
mod tests;
pub(crate) use aether_model_fetch::ModelFetchRunSummary;
pub(crate) use catalog::{
codex_catalog_credential_scope_from_stored_key, codex_catalog_targets, load_codex_catalogs,
normalize_codex_client_version, read_recent_codex_catalog_client_version,
refresh_codex_catalog_target, CodexCatalogLoad, CodexCatalogRuntime, CodexCatalogTarget,
NormalizedCodexClientVersion,
};
pub(crate) use runtime::state::ModelFetchRuntimeState;
pub(crate) use runtime::{
perform_model_fetch_for_key, perform_model_fetch_for_keys, perform_model_fetch_once,
+20 -2
View File
@@ -7,7 +7,7 @@ use aether_data_contracts::repository::provider_catalog::{
StoredProviderCatalogKey, StoredProviderCatalogProvider,
};
use aether_model_fetch::{
apply_model_filters, fetch_models_from_transports, json_string_list,
apply_model_filters, fetch_models_from_transports_for_client_version, json_string_list,
model_catalog_upstream_metadata, model_fetch_interval_minutes,
model_fetch_startup_delay_seconds, model_fetch_startup_enabled, preset_models_for_provider,
selected_models_fetch_endpoints, sync_provider_model_whitelist_associations,
@@ -315,7 +315,25 @@ async fn fetch_and_persist_key_models(
return Ok(KeyFetchDisposition::Skipped);
}
let result = match fetch_models_from_transports(state, &transports).await {
let codex_client_version = if target
.provider
.provider_type
.trim()
.eq_ignore_ascii_case("codex")
{
state
.read_recent_codex_catalog_client_version(&target.provider.id, &target.key.id)
.await
} else {
None
};
let result = match fetch_models_from_transports_for_client_version(
state,
&transports,
codex_client_version.as_deref(),
)
.await
{
Ok(result) => result,
Err(err) => {
persist_key_fetch_failure(state, &target.key, now_unix_secs, err.clone()).await?;
@@ -43,6 +43,14 @@ pub(crate) trait ModelFetchRuntimeState:
plan: &ExecutionPlan,
) -> Result<ExecutionResult, GatewayError>;
async fn read_recent_codex_catalog_client_version(
&self,
_provider_id: &str,
_key_id: &str,
) -> Option<String> {
None
}
async fn update_provider_catalog_key_model_fetch_state(
&self,
key_id: &str,