mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 17:30: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:
|
if not key:
|
||||||
raise NotFoundException(f"Key {self.key_id} 不存在")
|
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)
|
update_data = self.key_data.model_dump(exclude_unset=True)
|
||||||
if "api_key" in update_data:
|
if "api_key" in update_data:
|
||||||
update_data["api_key"] = crypto_service.encrypt(update_data["api_key"])
|
update_data["api_key"] = crypto_service.encrypt(update_data["api_key"])
|
||||||
@@ -244,6 +248,19 @@ class AdminUpdateEndpointKeyAdapter(AdminApiAdapter):
|
|||||||
db.commit()
|
db.commit()
|
||||||
db.refresh(key)
|
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 等影响权限和行为的字段
|
# 包括 is_active、allowed_models、capabilities 等影响权限和行为的字段
|
||||||
await ProviderCacheService.invalidate_provider_api_key_cache(self.key_id)
|
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}"
|
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)
|
return _build_key_response(new_key, api_key_plain=self.key_data.api_key)
|
||||||
|
|||||||
Reference in New Issue
Block a user