新增: F-04多Provider负载均衡池(数据层+选择器+并发原语)+CR-52白项
This commit is contained in:
@@ -34,7 +34,7 @@ pub fn run(conn: &Connection) -> Result<()> {
|
||||
|
||||
// 迁移步骤链: 顺序执行,跳过已应用的版本(current_version < N 才跑)。
|
||||
// 新增版本时,在此数组追加一项 (N, migrate_vN) 即可,无需改逻辑。
|
||||
let steps: [(i32, fn(&Connection) -> Result<()>); 18] = [
|
||||
let steps: [(i32, fn(&Connection) -> Result<()>); 19] = [
|
||||
(1, migrate_v1),
|
||||
(2, migrate_v2),
|
||||
(3, migrate_v3),
|
||||
@@ -53,6 +53,7 @@ pub fn run(conn: &Connection) -> Result<()> {
|
||||
(16, migrate_v16),
|
||||
(17, migrate_v17),
|
||||
(18, migrate_v18),
|
||||
(19, migrate_v19),
|
||||
];
|
||||
|
||||
for (version, migrate_fn) in steps {
|
||||
@@ -328,6 +329,36 @@ fn migrate_v18(conn: &Connection) -> Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// V19: 幂等补 ai_providers.enabled + ai_providers.weight 列(F-260614-04 多 Provider 负载均衡池)
|
||||
///
|
||||
/// - `enabled INTEGER NOT NULL DEFAULT 1`:provider 是否进入负载均衡池。
|
||||
/// 老库行迁移后默认 1(所有现存 provider 默认启用,单 provider 路径零变化)。
|
||||
/// is_default 仍保留作启动兜底(get_active_provider 无 active_provider_id 时取 is_default)。
|
||||
/// - `weight INTEGER NOT NULL DEFAULT 50`:provider 在池中的选择权重(0-100)。
|
||||
/// 高权重 provider 优先被选为主;同权重时退化近似轮询。
|
||||
///
|
||||
/// 向后兼容:老库行 ALTER 后取 DEFAULT,from_row 经 i32→bool / i32→u32 解析。
|
||||
/// 用 PRAGMA 探测列存在性,缺失才 ALTER(同 v17/v18 模式),对新库/老库均安全。
|
||||
fn migrate_v19(conn: &Connection) -> Result<()> {
|
||||
if !column_exists(conn, "ai_providers", "enabled") {
|
||||
conn.execute(
|
||||
"ALTER TABLE ai_providers ADD COLUMN enabled INTEGER NOT NULL DEFAULT 1",
|
||||
[],
|
||||
)?;
|
||||
tracing::info!("v19: 补建 ai_providers.enabled 列(多 Provider 负载均衡池,F-260614-04)");
|
||||
}
|
||||
if !column_exists(conn, "ai_providers", "weight") {
|
||||
conn.execute(
|
||||
"ALTER TABLE ai_providers ADD COLUMN weight INTEGER NOT NULL DEFAULT 50",
|
||||
[],
|
||||
)?;
|
||||
tracing::info!("v19: 补建 ai_providers.weight 列(多 Provider 负载均衡池,F-260614-04)");
|
||||
}
|
||||
conn.execute("INSERT INTO schema_version (version) VALUES (?)", [19])?;
|
||||
tracing::info!("迁移 v19 完成");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// V1 建表 SQL
|
||||
const V1_SQL: &str = "
|
||||
-- 想法表
|
||||
@@ -512,7 +543,10 @@ CREATE TABLE IF NOT EXISTS ai_providers (
|
||||
is_default INTEGER NOT NULL DEFAULT 0,
|
||||
config TEXT,
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL
|
||||
updated_at TEXT NOT NULL,
|
||||
model_configs TEXT,
|
||||
enabled INTEGER NOT NULL DEFAULT 1,
|
||||
weight INTEGER NOT NULL DEFAULT 50
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ai_tool_executions (
|
||||
|
||||
Reference in New Issue
Block a user