mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 17:30:23 +08:00
fix(admin): 补齐 key 自动获取模型的即时刷新场景 (#295)
- 新增 key 且开启自动获取时立即抓取并写回 allowed_models - 自动获取已开启时修改包含/排除规则后立即刷新 allowed_models - 补充创建与过滤规则变更场景的控制层回归测试
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use crate::handlers::admin::provider::shared::paths::admin_provider_id_for_keys;
|
||||
use crate::handlers::admin::provider::shared::payloads::AdminProviderKeyCreateRequest;
|
||||
use crate::handlers::admin::request::{AdminAppState, AdminRequestContext};
|
||||
use crate::GatewayError;
|
||||
use crate::{model_fetch::perform_model_fetch_for_key, GatewayError};
|
||||
use axum::{
|
||||
body::{Body, Bytes},
|
||||
http,
|
||||
@@ -63,6 +63,32 @@ pub(super) async fn maybe_handle(
|
||||
let Some(created) = state.create_provider_catalog_key(&record).await? else {
|
||||
return Ok(None);
|
||||
};
|
||||
let key_id = created.id.clone();
|
||||
let created = if created.auto_fetch_models {
|
||||
let summary =
|
||||
perform_model_fetch_for_key(state.as_ref(), &provider.id, &created.id).await?;
|
||||
if summary.succeeded == 0 {
|
||||
let detail = state
|
||||
.read_provider_catalog_keys_by_ids(std::slice::from_ref(&key_id))
|
||||
.await?
|
||||
.into_iter()
|
||||
.next()
|
||||
.and_then(|key| key.last_models_fetch_error)
|
||||
.unwrap_or_else(|| "未获取到可用上游模型".to_string());
|
||||
return Err(GatewayError::Internal(format!(
|
||||
"开启自动获取模型后同步上游模型失败: {detail}"
|
||||
)));
|
||||
}
|
||||
|
||||
state
|
||||
.read_provider_catalog_keys_by_ids(std::slice::from_ref(&key_id))
|
||||
.await?
|
||||
.into_iter()
|
||||
.next()
|
||||
.unwrap_or(created)
|
||||
} else {
|
||||
created
|
||||
};
|
||||
let now_unix_secs = SystemTime::now()
|
||||
.duration_since(UNIX_EPOCH)
|
||||
.ok()
|
||||
|
||||
@@ -81,8 +81,12 @@ pub(super) async fn maybe_handle(
|
||||
let Some(updated) = state.update_provider_catalog_key(&updated_record).await? else {
|
||||
return Ok(None);
|
||||
};
|
||||
let should_overwrite_allowed_models_immediately =
|
||||
!existing_key.auto_fetch_models && updated.auto_fetch_models;
|
||||
let auto_fetch_filters_changed = existing_key.model_include_patterns
|
||||
!= updated.model_include_patterns
|
||||
|| existing_key.model_exclude_patterns != updated.model_exclude_patterns;
|
||||
// 自动获取开启后,调整过滤规则也要立即刷新 allowed_models。
|
||||
let should_overwrite_allowed_models_immediately = updated.auto_fetch_models
|
||||
&& (!existing_key.auto_fetch_models || auto_fetch_filters_changed);
|
||||
let updated = if should_overwrite_allowed_models_immediately {
|
||||
let summary =
|
||||
perform_model_fetch_for_key(state.as_ref(), &provider.id, &updated.id).await?;
|
||||
|
||||
Reference in New Issue
Block a user