f7a720204a
- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用 - 添加所有子项目的完整源代码 - 保留原始 .git 为 .git.bak 备份
113 lines
3.2 KiB
Go
113 lines
3.2 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|
"github.com/joho/godotenv"
|
|
)
|
|
|
|
func main() {
|
|
// 加载环境变量
|
|
_ = godotenv.Load("../../.env")
|
|
|
|
dbURL := os.Getenv("DATABASE_URL")
|
|
if dbURL == "" {
|
|
dbURL = "postgres://freedak:@localhost:5432/govai_portal?sslmode=disable"
|
|
}
|
|
|
|
pool, err := pgxpool.New(context.Background(), dbURL)
|
|
if err != nil {
|
|
log.Fatalf("无法连接数据库: %v", err)
|
|
}
|
|
defer pool.Close()
|
|
|
|
fmt.Println("=== 清空应用硬编码模型配置 ===")
|
|
fmt.Println("目标:让所有应用自动使用优先级最高的 Provider 的默认模型")
|
|
|
|
// 1. 查看当前状态
|
|
fmt.Println("【步骤1】查看当前应用模型配置...")
|
|
var totalApps, configuredApps int
|
|
err = pool.QueryRow(context.Background(), `
|
|
SELECT
|
|
COUNT(*) as total,
|
|
COUNT(CASE WHEN app_config->>'model' IS NOT NULL AND app_config->>'model' != '' THEN 1 END) as configured
|
|
FROM applications
|
|
WHERE status = 'approved'
|
|
`).Scan(&totalApps, &configuredApps)
|
|
|
|
if err != nil {
|
|
log.Fatalf("查询失败: %v", err)
|
|
}
|
|
|
|
fmt.Printf(" - 已批准应用总数: %d\n", totalApps)
|
|
fmt.Printf(" - 配置了模型的应用: %d\n", configuredApps)
|
|
fmt.Printf(" - 未配置模型的应用: %d\n\n", totalApps-configuredApps)
|
|
|
|
// 2. 清空所有应用的模型配置
|
|
fmt.Println("【步骤2】清空所有应用的模型配置...")
|
|
result, err := pool.Exec(context.Background(), `
|
|
UPDATE applications
|
|
SET app_config = app_config - 'model'
|
|
WHERE status = 'approved'
|
|
AND app_config ? 'model'
|
|
`)
|
|
|
|
if err != nil {
|
|
log.Fatalf("更新失败: %v", err)
|
|
}
|
|
|
|
rowsAffected := result.RowsAffected()
|
|
fmt.Printf("✅ 已清空 %d 个应用的模型配置\n\n", rowsAffected)
|
|
|
|
// 3. 验证结果
|
|
fmt.Println("【步骤3】验证结果...")
|
|
var remainingConfigured int
|
|
err = pool.QueryRow(context.Background(), `
|
|
SELECT COUNT(*)
|
|
FROM applications
|
|
WHERE status = 'approved'
|
|
AND app_config->>'model' IS NOT NULL
|
|
AND app_config->>'model' != ''
|
|
`).Scan(&remainingConfigured)
|
|
|
|
if err != nil {
|
|
log.Fatalf("验证查询失败: %v", err)
|
|
}
|
|
|
|
if remainingConfigured == 0 {
|
|
fmt.Println("✅ 所有应用的模型配置已清空")
|
|
} else {
|
|
fmt.Printf("⚠️ 还有 %d 个应用仍有模型配置\n", remainingConfigured)
|
|
}
|
|
|
|
// 4. 显示当前优先级最高的 Provider
|
|
fmt.Println("\n【步骤4】当前优先级最高的 Provider...")
|
|
var providerName, defaultModel string
|
|
var priority int
|
|
err = pool.QueryRow(context.Background(), `
|
|
SELECT name, COALESCE(config->>'default_model', '未配置'), priority
|
|
FROM model_providers
|
|
WHERE is_active = true
|
|
ORDER BY priority DESC, created_at
|
|
LIMIT 1
|
|
`).Scan(&providerName, &defaultModel, &priority)
|
|
|
|
if err != nil {
|
|
log.Printf("查询 Provider 失败: %v", err)
|
|
} else {
|
|
fmt.Printf(" Provider: %s\n", providerName)
|
|
fmt.Printf(" 默认模型: %s\n", defaultModel)
|
|
fmt.Printf(" 优先级: %d\n", priority)
|
|
}
|
|
|
|
fmt.Println("\n=== 配置清理完成 ===")
|
|
fmt.Println("\n说明:")
|
|
fmt.Println(" - 现在所有应用将自动使用优先级最高的 Provider 的默认模型")
|
|
fmt.Println(" - 当前会使用: " + providerName + " / " + defaultModel)
|
|
fmt.Println(" - 如需特殊应用使用指定模型,可在应用配置中单独设置")
|
|
}
|