mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 01:10:23 +08:00
feat: 增强 provider query 端点选择逻辑,支持 openai:responses 格式与 key 级 api_formats 过滤
- provider_query_selected_fetch_endpoints 支持按 key.api_formats 过滤可用端点 - 端点选择增加 endpoint_supports_rust_models_fetch 检查 - 支持优先级列表之外的自定义 api_format 端点 - 新增 openai:responses 端点的 provider query 集成测试 - 各 crate 补充缺失的 tracing instrument 和小修正 - 前端 Pool 管理页面补充状态逻辑
This commit is contained in:
@@ -3,6 +3,7 @@ import { beforeEach, describe, expect, it } from 'vitest'
|
||||
import {
|
||||
buildPoolManagementQueryPatch,
|
||||
readPoolManagementViewState,
|
||||
resolvePoolManagementPageAfterLoad,
|
||||
writePoolManagementViewState,
|
||||
} from '@/features/pool/utils/poolManagementState'
|
||||
|
||||
@@ -100,4 +101,24 @@ describe('poolManagementState', () => {
|
||||
pageSize: undefined,
|
||||
})
|
||||
})
|
||||
|
||||
it('clamps a restored page to the last available page after load', () => {
|
||||
expect(
|
||||
resolvePoolManagementPageAfterLoad({
|
||||
requestedPage: 5,
|
||||
pageSize: 50,
|
||||
total: 120,
|
||||
}),
|
||||
).toBe(3)
|
||||
})
|
||||
|
||||
it('resets an out-of-range empty result page back to page 1', () => {
|
||||
expect(
|
||||
resolvePoolManagementPageAfterLoad({
|
||||
requestedPage: 4,
|
||||
pageSize: 50,
|
||||
total: 0,
|
||||
}),
|
||||
).toBe(1)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -127,3 +127,23 @@ export function buildPoolManagementQueryPatch(
|
||||
: String(normalized.pageSize),
|
||||
}
|
||||
}
|
||||
|
||||
export function resolvePoolManagementPageAfterLoad(input: {
|
||||
requestedPage: number
|
||||
pageSize: number
|
||||
total: number
|
||||
}): number {
|
||||
const requestedPage = normalizePositiveInteger(
|
||||
input.requestedPage,
|
||||
DEFAULT_POOL_MANAGEMENT_VIEW_STATE.page,
|
||||
)
|
||||
const pageSize = normalizePositiveInteger(
|
||||
input.pageSize,
|
||||
DEFAULT_POOL_MANAGEMENT_VIEW_STATE.pageSize,
|
||||
)
|
||||
const total = Math.max(0, Number.parseInt(String(input.total ?? 0), 10) || 0)
|
||||
const lastPage =
|
||||
total > 0 ? Math.ceil(total / pageSize) : DEFAULT_POOL_MANAGEMENT_VIEW_STATE.page
|
||||
|
||||
return Math.min(requestedPage, lastPage)
|
||||
}
|
||||
|
||||
@@ -1201,6 +1201,7 @@ import {
|
||||
import {
|
||||
buildPoolManagementQueryPatch,
|
||||
readPoolManagementViewState,
|
||||
resolvePoolManagementPageAfterLoad,
|
||||
type PoolManagementViewState,
|
||||
writePoolManagementViewState,
|
||||
} from '@/features/pool/utils/poolManagementState'
|
||||
@@ -1790,6 +1791,15 @@ async function loadKeys() {
|
||||
status,
|
||||
})
|
||||
if (requestId !== keysRequestId || selectedProviderId.value !== providerId) return
|
||||
const resolvedPage = resolvePoolManagementPageAfterLoad({
|
||||
requestedPage: page,
|
||||
pageSize: pageSizeValue,
|
||||
total: nextPage.total,
|
||||
})
|
||||
if (resolvedPage !== page) {
|
||||
currentPage.value = resolvedPage
|
||||
return
|
||||
}
|
||||
keyPage.value = nextPage
|
||||
} catch (err) {
|
||||
if (requestId !== keysRequestId || selectedProviderId.value !== providerId) return
|
||||
|
||||
Reference in New Issue
Block a user