mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-12 12:09:50 +08:00
fix(providers): 修复 Key 表单状态同步与 streaming 候选状态码处理
前端: - KeyAllowedModelsEditDialog 同时监听 open 和 apiKey 变化,避免切换 key 时状态未刷新 - KeyFormDialog 新增 api_formats 过滤与默认值逻辑,可用格式变化时自动同步表单 - ProviderDetailDrawer 合并 provider 和 endpoint 的 api_formats 传递给 Key 表单, 数据刷新后同步 currentEndpoint 和 editingKey 引用 后端: - mark_candidate_streaming 移除 status_code 参数,streaming 阶段不再提前写入状态码 - 简化 active_requests 中 streaming 请求的完成判断,不再依赖 status_code 条件
This commit is contained in:
@@ -717,49 +717,44 @@ function parseAllowedModels(allowed: AllowedModels): string[] {
|
||||
return [...allowed]
|
||||
}
|
||||
|
||||
// 监听对话框打开
|
||||
watch(() => props.open, async (open) => {
|
||||
if (open && props.apiKey) {
|
||||
loadingCancelled = false
|
||||
async function initializeDialogState(apiKey: EndpointAPIKey) {
|
||||
loadingCancelled = false
|
||||
|
||||
const parsed = parseAllowedModels(props.apiKey.allowed_models ?? null)
|
||||
selectedModels.value = [...parsed]
|
||||
initialSelectedModels.value = [...parsed]
|
||||
const parsed = parseAllowedModels(apiKey.allowed_models ?? null)
|
||||
selectedModels.value = [...parsed]
|
||||
initialSelectedModels.value = [...parsed]
|
||||
|
||||
// 加载锁定的模型
|
||||
const locked = props.apiKey.locked_models ?? []
|
||||
lockedModels.value = [...locked]
|
||||
initialLockedModels.value = [...locked]
|
||||
const locked = apiKey.locked_models ?? []
|
||||
lockedModels.value = [...locked]
|
||||
initialLockedModels.value = [...locked]
|
||||
|
||||
searchQuery.value = ''
|
||||
upstreamModels.value = []
|
||||
upstreamModelsLoaded.value = false
|
||||
allCustomModels.value = []
|
||||
searchQuery.value = ''
|
||||
upstreamModels.value = []
|
||||
upstreamModelsLoaded.value = false
|
||||
allCustomModels.value = []
|
||||
|
||||
// 自动获取模式下展开上游模型,其他收缩;非自动获取模式下全部展开
|
||||
if (props.apiKey.auto_fetch_models) {
|
||||
collapsedGroups.value = new Set(['global', 'custom'])
|
||||
} else {
|
||||
collapsedGroups.value = new Set()
|
||||
}
|
||||
if (apiKey.auto_fetch_models) {
|
||||
collapsedGroups.value = new Set(['global', 'custom'])
|
||||
} else {
|
||||
collapsedGroups.value = new Set()
|
||||
}
|
||||
|
||||
// 加载该 Provider 已关联模型
|
||||
await loadProviderModels()
|
||||
await loadProviderModels()
|
||||
|
||||
// 自动获取模式下,获取上游模型用于显示(但选中状态使用已保存的 allowed_models)
|
||||
if (props.apiKey.auto_fetch_models) {
|
||||
await fetchUpstreamModels()
|
||||
// 注意:不再将所有上游模型自动标记为选中
|
||||
// 因为后端有过滤规则,实际保存的 allowed_models 是过滤后的结果
|
||||
// selectedModels 已在上面从 props.apiKey.allowed_models 初始化
|
||||
}
|
||||
if (apiKey.auto_fetch_models) {
|
||||
await fetchUpstreamModels()
|
||||
}
|
||||
|
||||
// 提取自定义模型(不在提供商模型和上游模型中的)
|
||||
const upstreamModelIdsSet = new Set(upstreamModels.value.map(m => m.id))
|
||||
// 自定义模型是用户手动添加的、不在已知模型列表中的
|
||||
allCustomModels.value = selectedModels.value.filter(m =>
|
||||
!providerModelNamesSet.value.has(m) && !upstreamModelIdsSet.has(m)
|
||||
)
|
||||
const upstreamModelIdsSet = new Set(upstreamModels.value.map(m => m.id))
|
||||
allCustomModels.value = selectedModels.value.filter(m =>
|
||||
!providerModelNamesSet.value.has(m) && !upstreamModelIdsSet.has(m)
|
||||
)
|
||||
}
|
||||
|
||||
// 监听对话框打开 / 当前 key 变化
|
||||
watch([() => props.open, () => props.apiKey], async ([open, apiKey]) => {
|
||||
if (open && apiKey) {
|
||||
await initializeDialogState(apiKey)
|
||||
} else {
|
||||
loadingCancelled = true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user