|
|
package diff |
|
|
|
|
|
import ( |
|
|
"crypto/sha256" |
|
|
"encoding/hex" |
|
|
"sort" |
|
|
"strings" |
|
|
|
|
|
"github.com/router-for-me/CLIProxyAPI/v6/internal/config" |
|
|
) |
|
|
|
|
|
type GeminiModelsSummary struct { |
|
|
hash string |
|
|
count int |
|
|
} |
|
|
|
|
|
type ClaudeModelsSummary struct { |
|
|
hash string |
|
|
count int |
|
|
} |
|
|
|
|
|
type CodexModelsSummary struct { |
|
|
hash string |
|
|
count int |
|
|
} |
|
|
|
|
|
type VertexModelsSummary struct { |
|
|
hash string |
|
|
count int |
|
|
} |
|
|
|
|
|
|
|
|
func SummarizeGeminiModels(models []config.GeminiModel) GeminiModelsSummary { |
|
|
if len(models) == 0 { |
|
|
return GeminiModelsSummary{} |
|
|
} |
|
|
keys := normalizeModelPairs(func(out func(key string)) { |
|
|
for _, model := range models { |
|
|
name := strings.TrimSpace(model.Name) |
|
|
alias := strings.TrimSpace(model.Alias) |
|
|
if name == "" && alias == "" { |
|
|
continue |
|
|
} |
|
|
out(strings.ToLower(name) + "|" + strings.ToLower(alias)) |
|
|
} |
|
|
}) |
|
|
return GeminiModelsSummary{ |
|
|
hash: hashJoined(keys), |
|
|
count: len(keys), |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func SummarizeClaudeModels(models []config.ClaudeModel) ClaudeModelsSummary { |
|
|
if len(models) == 0 { |
|
|
return ClaudeModelsSummary{} |
|
|
} |
|
|
keys := normalizeModelPairs(func(out func(key string)) { |
|
|
for _, model := range models { |
|
|
name := strings.TrimSpace(model.Name) |
|
|
alias := strings.TrimSpace(model.Alias) |
|
|
if name == "" && alias == "" { |
|
|
continue |
|
|
} |
|
|
out(strings.ToLower(name) + "|" + strings.ToLower(alias)) |
|
|
} |
|
|
}) |
|
|
return ClaudeModelsSummary{ |
|
|
hash: hashJoined(keys), |
|
|
count: len(keys), |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func SummarizeCodexModels(models []config.CodexModel) CodexModelsSummary { |
|
|
if len(models) == 0 { |
|
|
return CodexModelsSummary{} |
|
|
} |
|
|
keys := normalizeModelPairs(func(out func(key string)) { |
|
|
for _, model := range models { |
|
|
name := strings.TrimSpace(model.Name) |
|
|
alias := strings.TrimSpace(model.Alias) |
|
|
if name == "" && alias == "" { |
|
|
continue |
|
|
} |
|
|
out(strings.ToLower(name) + "|" + strings.ToLower(alias)) |
|
|
} |
|
|
}) |
|
|
return CodexModelsSummary{ |
|
|
hash: hashJoined(keys), |
|
|
count: len(keys), |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func SummarizeVertexModels(models []config.VertexCompatModel) VertexModelsSummary { |
|
|
if len(models) == 0 { |
|
|
return VertexModelsSummary{} |
|
|
} |
|
|
names := make([]string, 0, len(models)) |
|
|
for _, model := range models { |
|
|
name := strings.TrimSpace(model.Name) |
|
|
alias := strings.TrimSpace(model.Alias) |
|
|
if name == "" && alias == "" { |
|
|
continue |
|
|
} |
|
|
if alias != "" { |
|
|
name = alias |
|
|
} |
|
|
names = append(names, name) |
|
|
} |
|
|
if len(names) == 0 { |
|
|
return VertexModelsSummary{} |
|
|
} |
|
|
sort.Strings(names) |
|
|
sum := sha256.Sum256([]byte(strings.Join(names, "|"))) |
|
|
return VertexModelsSummary{ |
|
|
hash: hex.EncodeToString(sum[:]), |
|
|
count: len(names), |
|
|
} |
|
|
} |
|
|
|