mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-02-03 13:00:52 +08:00
122 lines
2.8 KiB
Go
122 lines
2.8 KiB
Go
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
|
|
}
|
|
|
|
// SummarizeGeminiModels hashes Gemini model aliases for change detection.
|
|
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),
|
|
}
|
|
}
|
|
|
|
// SummarizeClaudeModels hashes Claude model aliases for change detection.
|
|
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),
|
|
}
|
|
}
|
|
|
|
// SummarizeCodexModels hashes Codex model aliases for change detection.
|
|
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),
|
|
}
|
|
}
|
|
|
|
// SummarizeVertexModels hashes Vertex-compatible model aliases for change detection.
|
|
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),
|
|
}
|
|
}
|