121 lines · 2.8 KB · Go
RawDownload
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),	}}