Something went wrong. Try again.
sloproxy
Something went wrong. Try again.
3.6 kB · 137 lines
Go
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138package diff
import ( "crypto/sha256" "encoding/hex" "sort" "strings"
"github.com/router-for-me/CLIProxyAPI/v7/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 } isCompat := "false" if model.IsCompat { isCompat = "true" } out(strings.ToLower(name) + "|" + strings.ToLower(alias) + "|" + strings.TrimSpace(model.DisplayName) + "|is-compat=" + isCompat + thinkingHashSuffix(model.Thinking)) } }) 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 } isCompat := "false" if model.IsCompat { isCompat = "true" } out(strings.ToLower(name) + "|" + strings.ToLower(alias) + "|" + strings.TrimSpace(model.DisplayName) + "|is-compat=" + isCompat + thinkingHashSuffix(model.Thinking)) } }) 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 } forceMapping := "false" if model.ForceMapping { forceMapping = "true" } isCompat := "false" if model.IsCompat { isCompat = "true" } out(strings.ToLower(name) + "|" + strings.ToLower(alias) + "|" + strings.TrimSpace(model.DisplayName) + "|force-mapping=" + forceMapping + "|is-compat=" + isCompat + thinkingHashSuffix(model.Thinking)) } }) 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+"|"+strings.TrimSpace(model.DisplayName)+thinkingHashSuffix(model.Thinking)) } 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), }}