refactor: 拆分 gateway 单体为独立 crate,新增 systemd 部署方案

将 gateway 内部的 model-fetch、provider-transport、scheduler-core、
usage-runtime、video-tasks-core 模块提取为独立 crate;重构 gateway
内部模块结构(state/router/cache/data/query 等);移除大量遗留模块
文件;新增 systemd 二进制部署骨架及相关文档;更新前端 usage 相关
API 和组件。
This commit is contained in:
fawney19
2026-04-05 20:23:16 +08:00
parent cbc811f6ce
commit 763ff03a7b
777 changed files with 42654 additions and 21464 deletions
@@ -538,6 +538,7 @@ const loadingKeys = ref(false)
const saving = ref(false)
const SAVE_CONCURRENCY = 6
const PRIORITY_REQUEST_TIMEOUT_MS = 5 * 60 * 1000
let originalProviderPriorityById = new Map<string, number>()
let originalPoolPriorityByProviderId = new Map<string, number | null>()
@@ -761,6 +762,11 @@ function snapshotKeyBaseline() {
)
}
function snapshotCurrentPriorityBaseline() {
snapshotProviderBaseline(sortedProviders.value)
snapshotKeyBaseline()
}
function arePriorityMapsEqual(
left: Record<string, number> | undefined,
right: Record<string, number> | undefined,
@@ -1035,7 +1041,9 @@ async function loadKeysByFormat() {
try {
loadingKeys.value = true
const { default: client } = await import('@/api/client')
const response = await client.get('/api/admin/endpoints/keys/grouped-by-format')
const response = await client.get('/api/admin/endpoints/keys/grouped-by-format', {
timeout: PRIORITY_REQUEST_TIMEOUT_MS,
})
// 每个格式独立管理优先级,额外做一次前端归一化兜底,避免历史数据导致重复格式/脏键
const data: Record<string, KeyWithMeta[]> = {}
@@ -1475,7 +1483,11 @@ async function save() {
}
if (Object.keys(payload).length > 0) {
providerTasks.push(() => updateProvider(provider.id, payload))
providerTasks.push(() => updateProvider(
provider.id,
payload,
{ timeout: PRIORITY_REQUEST_TIMEOUT_MS },
))
}
})
@@ -1487,7 +1499,11 @@ async function save() {
priorityByFormat,
))
.map(([keyId, priorityByFormat]) => () =>
updateProviderKey(keyId, { global_priority_by_format: priorityByFormat })
updateProviderKey(
keyId,
{ global_priority_by_format: priorityByFormat },
{ timeout: PRIORITY_REQUEST_TIMEOUT_MS },
)
)
await runTasksWithConcurrency([...providerTasks, ...keyTasks])
@@ -1497,16 +1513,16 @@ async function save() {
await adminApi.updateSystemConfig(
'provider_priority_mode',
newMode,
'Provider/Key 优先级策略:provider(提供商优先模式) 或 global_key(全局Key优先模式)'
'Provider/Key 优先级策略:provider(提供商优先模式) 或 global_key(全局Key优先模式)',
{ timeout: PRIORITY_REQUEST_TIMEOUT_MS },
)
await adminApi.updateSystemConfig(
'scheduling_mode',
schedulingMode.value,
'调度模式:cache_affinity(缓存亲和模式) 或 load_balance(负载均衡模式) 或 fixed_order(固定顺序模式)'
'调度模式:cache_affinity(缓存亲和模式) 或 load_balance(负载均衡模式) 或 fixed_order(固定顺序模式)',
{ timeout: PRIORITY_REQUEST_TIMEOUT_MS },
)
await loadAllProviders()
await loadKeysByFormat()
snapshotCurrentPriorityBaseline()
success('优先级已保存')
emit('saved')