mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 01:10:23 +08:00
feat(keys): trigger immediate model fetch when auto_fetch_models is enabled
This commit is contained in:
@@ -212,6 +212,10 @@ class AdminUpdateEndpointKeyAdapter(AdminApiAdapter):
|
||||
if not key:
|
||||
raise NotFoundException(f"Key {self.key_id} 不存在")
|
||||
|
||||
# 检查是否开启了 auto_fetch_models(用于后续立即获取模型)
|
||||
auto_fetch_enabled_before = key.auto_fetch_models
|
||||
auto_fetch_enabled_after = self.key_data.auto_fetch_models if "auto_fetch_models" in self.key_data.model_fields_set else auto_fetch_enabled_before
|
||||
|
||||
update_data = self.key_data.model_dump(exclude_unset=True)
|
||||
if "api_key" in update_data:
|
||||
update_data["api_key"] = crypto_service.encrypt(update_data["api_key"])
|
||||
@@ -244,6 +248,19 @@ class AdminUpdateEndpointKeyAdapter(AdminApiAdapter):
|
||||
db.commit()
|
||||
db.refresh(key)
|
||||
|
||||
# 如果刚刚开启了 auto_fetch_models,立即触发一次模型获取
|
||||
if not auto_fetch_enabled_before and auto_fetch_enabled_after:
|
||||
logger.info("[AUTO_FETCH] Key %s 开启自动获取模型,立即触发模型获取", self.key_id)
|
||||
try:
|
||||
from src.services.model.fetch_scheduler import get_model_fetch_scheduler
|
||||
scheduler = get_model_fetch_scheduler()
|
||||
# 在后台异步执行,不阻塞当前请求
|
||||
import asyncio
|
||||
asyncio.create_task(scheduler._fetch_models_for_key_by_id(self.key_id))
|
||||
except Exception as e:
|
||||
logger.error(f"触发模型获取失败: {e}")
|
||||
# 不抛出异常,避免影响 Key 更新操作
|
||||
|
||||
# 任何字段更新都清除缓存,确保缓存一致性
|
||||
# 包括 is_active、allowed_models、capabilities 等影响权限和行为的字段
|
||||
await ProviderCacheService.invalidate_provider_api_key_cache(self.key_id)
|
||||
@@ -574,4 +591,17 @@ class AdminCreateProviderKeyAdapter(AdminApiAdapter):
|
||||
f"Formats={self.key_data.api_formats}, Key=***{self.key_data.api_key[-4:]}, ID={new_key.id}"
|
||||
)
|
||||
|
||||
# 如果开启了 auto_fetch_models,立即触发一次模型获取
|
||||
if self.key_data.auto_fetch_models:
|
||||
logger.info("[AUTO_FETCH] 新 Key %s 开启自动获取模型,立即触发模型获取", new_key.id)
|
||||
try:
|
||||
from src.services.model.fetch_scheduler import get_model_fetch_scheduler
|
||||
scheduler = get_model_fetch_scheduler()
|
||||
# 在后台异步执行,不阻塞当前请求
|
||||
import asyncio
|
||||
asyncio.create_task(scheduler._fetch_models_for_key_by_id(new_key.id))
|
||||
except Exception as e:
|
||||
logger.error(f"触发模型获取失败: {e}")
|
||||
# 不抛出异常,避免影响 Key 创建操作
|
||||
|
||||
return _build_key_response(new_key, api_key_plain=self.key_data.api_key)
|
||||
|
||||
Reference in New Issue
Block a user