feat(agent): model sync improvements - deduplication and offline status

- Add Offline status to ModelStatus enum
- Sync marks all models offline first, then activates found ones
- Deduplicate by model name (ignoring provider)
- Deactivate orphaned models (offline -> deprecated)
- Add models_offline and models_deactivated to SyncModelsResponse
- Add deduplicate_existing_models() for cleanup
- Rename upsert_model to upsert_model_by_name
This commit is contained in:
ZhenYi 2026-04-27 16:40:10 +08:00
parent 52a0131b56
commit e022240757

View File

@ -67,12 +67,15 @@ impl std::str::FromStr for ModelCapability {
}
}
/// Model or model-version availability status. Stored as `"active"` or
/// `"deprecated"`.
/// Model or model-version availability status.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum ModelStatus {
/// Model is available and can be used.
Active,
/// Model is no longer available from the provider.
Deprecated,
/// Model was not found in the last upstream sync (offline).
Offline,
}
impl std::fmt::Display for ModelStatus {
@ -80,6 +83,7 @@ impl std::fmt::Display for ModelStatus {
match self {
ModelStatus::Active => write!(f, "active"),
ModelStatus::Deprecated => write!(f, "deprecated"),
ModelStatus::Offline => write!(f, "offline"),
}
}
}
@ -90,6 +94,7 @@ impl std::str::FromStr for ModelStatus {
match s {
"active" => Ok(ModelStatus::Active),
"deprecated" => Ok(ModelStatus::Deprecated),
"offline" => Ok(ModelStatus::Offline),
_ => Err("unknown model status"),
}
}