fix: Hub 连接清理顺序修复、OAuth 类型常量提取、disassociate 逻辑优化

- Hub proxy/worker 连接关闭时先 unregister 再延迟 abort writer,确保缓冲消息排空
- 提取 OAUTH_AUTH_TYPES 常量,替代各处硬编码的 OAuth 类型列表
- auto-disassociate 跳过 OAuth Key,避免其动态 allowed_models 干扰判定
- 删除 Key 时传入 skip_disassociate=True,跳过不必要的解关联检查
- ModelMapper 缓存命中时将 ORM 实例脱离 Session,修复 DetachedInstanceError
This commit is contained in:
fawney19
2026-03-08 23:03:56 +08:00
parent f5f7a23bb0
commit 91b6e0a382
9 changed files with 40 additions and 12 deletions

View File

@@ -41,6 +41,7 @@ from src.database import create_session
from src.database.database import get_db
from src.models.database import Provider, ProviderAPIKey, User
from src.services.provider.pool.config import parse_pool_config
from src.services.provider_keys.auth_type import OAUTH_AUTH_TYPES
from src.utils.auth_utils import require_admin
router = APIRouter(prefix="/api/admin/provider-oauth", tags=["Provider OAuth"])
@@ -550,7 +551,7 @@ def _check_duplicate_oauth_account(
# 查询该 Provider 下所有 OAuth 类型的 Keys
query = db.query(ProviderAPIKey).filter(
ProviderAPIKey.provider_id == provider_id,
ProviderAPIKey.auth_type.in_(["oauth", "kiro"]), # kiro 也是 OAuth 类型
ProviderAPIKey.auth_type.in_(OAUTH_AUTH_TYPES),
)
if exclude_key_id:
query = query.filter(ProviderAPIKey.id != exclude_key_id)