mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-02-03 13:00:52 +08:00
feat(diff): add support for model prefix changes in config diff logic
Enhance the configuration diff logic to include detection and reporting of `prefix` changes for all model types. Update related struct naming for consistency across the watcher module.
This commit is contained in:
@@ -81,6 +81,9 @@ func BuildConfigChangeDetails(oldCfg, newCfg *config.Config) []string {
|
|||||||
if strings.TrimSpace(o.ProxyURL) != strings.TrimSpace(n.ProxyURL) {
|
if strings.TrimSpace(o.ProxyURL) != strings.TrimSpace(n.ProxyURL) {
|
||||||
changes = append(changes, fmt.Sprintf("gemini[%d].proxy-url: %s -> %s", i, formatProxyURL(o.ProxyURL), formatProxyURL(n.ProxyURL)))
|
changes = append(changes, fmt.Sprintf("gemini[%d].proxy-url: %s -> %s", i, formatProxyURL(o.ProxyURL), formatProxyURL(n.ProxyURL)))
|
||||||
}
|
}
|
||||||
|
if strings.TrimSpace(o.Prefix) != strings.TrimSpace(n.Prefix) {
|
||||||
|
changes = append(changes, fmt.Sprintf("gemini[%d].prefix: %s -> %s", i, formatProxyURL(o.Prefix), formatProxyURL(n.Prefix)))
|
||||||
|
}
|
||||||
if strings.TrimSpace(o.APIKey) != strings.TrimSpace(n.APIKey) {
|
if strings.TrimSpace(o.APIKey) != strings.TrimSpace(n.APIKey) {
|
||||||
changes = append(changes, fmt.Sprintf("gemini[%d].api-key: updated", i))
|
changes = append(changes, fmt.Sprintf("gemini[%d].api-key: updated", i))
|
||||||
}
|
}
|
||||||
@@ -108,6 +111,9 @@ func BuildConfigChangeDetails(oldCfg, newCfg *config.Config) []string {
|
|||||||
if strings.TrimSpace(o.ProxyURL) != strings.TrimSpace(n.ProxyURL) {
|
if strings.TrimSpace(o.ProxyURL) != strings.TrimSpace(n.ProxyURL) {
|
||||||
changes = append(changes, fmt.Sprintf("claude[%d].proxy-url: %s -> %s", i, formatProxyURL(o.ProxyURL), formatProxyURL(n.ProxyURL)))
|
changes = append(changes, fmt.Sprintf("claude[%d].proxy-url: %s -> %s", i, formatProxyURL(o.ProxyURL), formatProxyURL(n.ProxyURL)))
|
||||||
}
|
}
|
||||||
|
if strings.TrimSpace(o.Prefix) != strings.TrimSpace(n.Prefix) {
|
||||||
|
changes = append(changes, fmt.Sprintf("claude[%d].prefix: %s -> %s", i, formatProxyURL(o.Prefix), formatProxyURL(n.Prefix)))
|
||||||
|
}
|
||||||
if strings.TrimSpace(o.APIKey) != strings.TrimSpace(n.APIKey) {
|
if strings.TrimSpace(o.APIKey) != strings.TrimSpace(n.APIKey) {
|
||||||
changes = append(changes, fmt.Sprintf("claude[%d].api-key: updated", i))
|
changes = append(changes, fmt.Sprintf("claude[%d].api-key: updated", i))
|
||||||
}
|
}
|
||||||
@@ -135,6 +141,9 @@ func BuildConfigChangeDetails(oldCfg, newCfg *config.Config) []string {
|
|||||||
if strings.TrimSpace(o.ProxyURL) != strings.TrimSpace(n.ProxyURL) {
|
if strings.TrimSpace(o.ProxyURL) != strings.TrimSpace(n.ProxyURL) {
|
||||||
changes = append(changes, fmt.Sprintf("codex[%d].proxy-url: %s -> %s", i, formatProxyURL(o.ProxyURL), formatProxyURL(n.ProxyURL)))
|
changes = append(changes, fmt.Sprintf("codex[%d].proxy-url: %s -> %s", i, formatProxyURL(o.ProxyURL), formatProxyURL(n.ProxyURL)))
|
||||||
}
|
}
|
||||||
|
if strings.TrimSpace(o.Prefix) != strings.TrimSpace(n.Prefix) {
|
||||||
|
changes = append(changes, fmt.Sprintf("codex[%d].prefix: %s -> %s", i, formatProxyURL(o.Prefix), formatProxyURL(n.Prefix)))
|
||||||
|
}
|
||||||
if strings.TrimSpace(o.APIKey) != strings.TrimSpace(n.APIKey) {
|
if strings.TrimSpace(o.APIKey) != strings.TrimSpace(n.APIKey) {
|
||||||
changes = append(changes, fmt.Sprintf("codex[%d].api-key: updated", i))
|
changes = append(changes, fmt.Sprintf("codex[%d].api-key: updated", i))
|
||||||
}
|
}
|
||||||
@@ -225,6 +234,9 @@ func BuildConfigChangeDetails(oldCfg, newCfg *config.Config) []string {
|
|||||||
if strings.TrimSpace(o.ProxyURL) != strings.TrimSpace(n.ProxyURL) {
|
if strings.TrimSpace(o.ProxyURL) != strings.TrimSpace(n.ProxyURL) {
|
||||||
changes = append(changes, fmt.Sprintf("vertex[%d].proxy-url: %s -> %s", i, formatProxyURL(o.ProxyURL), formatProxyURL(n.ProxyURL)))
|
changes = append(changes, fmt.Sprintf("vertex[%d].proxy-url: %s -> %s", i, formatProxyURL(o.ProxyURL), formatProxyURL(n.ProxyURL)))
|
||||||
}
|
}
|
||||||
|
if strings.TrimSpace(o.Prefix) != strings.TrimSpace(n.Prefix) {
|
||||||
|
changes = append(changes, fmt.Sprintf("vertex[%d].prefix: %s -> %s", i, formatProxyURL(o.Prefix), formatProxyURL(n.Prefix)))
|
||||||
|
}
|
||||||
if strings.TrimSpace(o.APIKey) != strings.TrimSpace(n.APIKey) {
|
if strings.TrimSpace(o.APIKey) != strings.TrimSpace(n.APIKey) {
|
||||||
changes = append(changes, fmt.Sprintf("vertex[%d].api-key: updated", i))
|
changes = append(changes, fmt.Sprintf("vertex[%d].api-key: updated", i))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,15 +10,15 @@ import (
|
|||||||
"github.com/router-for-me/CLIProxyAPI/v6/internal/config"
|
"github.com/router-for-me/CLIProxyAPI/v6/internal/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
type excludedModelsSummary struct {
|
type ExcludedModelsSummary struct {
|
||||||
hash string
|
hash string
|
||||||
count int
|
count int
|
||||||
}
|
}
|
||||||
|
|
||||||
// SummarizeExcludedModels normalizes and hashes an excluded-model list.
|
// SummarizeExcludedModels normalizes and hashes an excluded-model list.
|
||||||
func SummarizeExcludedModels(list []string) excludedModelsSummary {
|
func SummarizeExcludedModels(list []string) ExcludedModelsSummary {
|
||||||
if len(list) == 0 {
|
if len(list) == 0 {
|
||||||
return excludedModelsSummary{}
|
return ExcludedModelsSummary{}
|
||||||
}
|
}
|
||||||
seen := make(map[string]struct{}, len(list))
|
seen := make(map[string]struct{}, len(list))
|
||||||
normalized := make([]string, 0, len(list))
|
normalized := make([]string, 0, len(list))
|
||||||
@@ -32,18 +32,18 @@ func SummarizeExcludedModels(list []string) excludedModelsSummary {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
sort.Strings(normalized)
|
sort.Strings(normalized)
|
||||||
return excludedModelsSummary{
|
return ExcludedModelsSummary{
|
||||||
hash: ComputeExcludedModelsHash(normalized),
|
hash: ComputeExcludedModelsHash(normalized),
|
||||||
count: len(normalized),
|
count: len(normalized),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SummarizeOAuthExcludedModels summarizes OAuth excluded models per provider.
|
// SummarizeOAuthExcludedModels summarizes OAuth excluded models per provider.
|
||||||
func SummarizeOAuthExcludedModels(entries map[string][]string) map[string]excludedModelsSummary {
|
func SummarizeOAuthExcludedModels(entries map[string][]string) map[string]ExcludedModelsSummary {
|
||||||
if len(entries) == 0 {
|
if len(entries) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
out := make(map[string]excludedModelsSummary, len(entries))
|
out := make(map[string]ExcludedModelsSummary, len(entries))
|
||||||
for k, v := range entries {
|
for k, v := range entries {
|
||||||
key := strings.ToLower(strings.TrimSpace(k))
|
key := strings.ToLower(strings.TrimSpace(k))
|
||||||
if key == "" {
|
if key == "" {
|
||||||
@@ -87,15 +87,15 @@ func DiffOAuthExcludedModelChanges(oldMap, newMap map[string][]string) ([]string
|
|||||||
return changes, affected
|
return changes, affected
|
||||||
}
|
}
|
||||||
|
|
||||||
type ampModelMappingsSummary struct {
|
type AmpModelMappingsSummary struct {
|
||||||
hash string
|
hash string
|
||||||
count int
|
count int
|
||||||
}
|
}
|
||||||
|
|
||||||
// SummarizeAmpModelMappings hashes Amp model mappings for change detection.
|
// SummarizeAmpModelMappings hashes Amp model mappings for change detection.
|
||||||
func SummarizeAmpModelMappings(mappings []config.AmpModelMapping) ampModelMappingsSummary {
|
func SummarizeAmpModelMappings(mappings []config.AmpModelMapping) AmpModelMappingsSummary {
|
||||||
if len(mappings) == 0 {
|
if len(mappings) == 0 {
|
||||||
return ampModelMappingsSummary{}
|
return AmpModelMappingsSummary{}
|
||||||
}
|
}
|
||||||
entries := make([]string, 0, len(mappings))
|
entries := make([]string, 0, len(mappings))
|
||||||
for _, mapping := range mappings {
|
for _, mapping := range mappings {
|
||||||
@@ -107,25 +107,25 @@ func SummarizeAmpModelMappings(mappings []config.AmpModelMapping) ampModelMappin
|
|||||||
entries = append(entries, from+"->"+to)
|
entries = append(entries, from+"->"+to)
|
||||||
}
|
}
|
||||||
if len(entries) == 0 {
|
if len(entries) == 0 {
|
||||||
return ampModelMappingsSummary{}
|
return AmpModelMappingsSummary{}
|
||||||
}
|
}
|
||||||
sort.Strings(entries)
|
sort.Strings(entries)
|
||||||
sum := sha256.Sum256([]byte(strings.Join(entries, "|")))
|
sum := sha256.Sum256([]byte(strings.Join(entries, "|")))
|
||||||
return ampModelMappingsSummary{
|
return AmpModelMappingsSummary{
|
||||||
hash: hex.EncodeToString(sum[:]),
|
hash: hex.EncodeToString(sum[:]),
|
||||||
count: len(entries),
|
count: len(entries),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type vertexModelsSummary struct {
|
type VertexModelsSummary struct {
|
||||||
hash string
|
hash string
|
||||||
count int
|
count int
|
||||||
}
|
}
|
||||||
|
|
||||||
// SummarizeVertexModels hashes vertex-compatible models for change detection.
|
// SummarizeVertexModels hashes vertex-compatible models for change detection.
|
||||||
func SummarizeVertexModels(models []config.VertexCompatModel) vertexModelsSummary {
|
func SummarizeVertexModels(models []config.VertexCompatModel) VertexModelsSummary {
|
||||||
if len(models) == 0 {
|
if len(models) == 0 {
|
||||||
return vertexModelsSummary{}
|
return VertexModelsSummary{}
|
||||||
}
|
}
|
||||||
names := make([]string, 0, len(models))
|
names := make([]string, 0, len(models))
|
||||||
for _, m := range models {
|
for _, m := range models {
|
||||||
@@ -140,11 +140,11 @@ func SummarizeVertexModels(models []config.VertexCompatModel) vertexModelsSummar
|
|||||||
names = append(names, name)
|
names = append(names, name)
|
||||||
}
|
}
|
||||||
if len(names) == 0 {
|
if len(names) == 0 {
|
||||||
return vertexModelsSummary{}
|
return VertexModelsSummary{}
|
||||||
}
|
}
|
||||||
sort.Strings(names)
|
sort.Strings(names)
|
||||||
sum := sha256.Sum256([]byte(strings.Join(names, "|")))
|
sum := sha256.Sum256([]byte(strings.Join(names, "|")))
|
||||||
return vertexModelsSummary{
|
return VertexModelsSummary{
|
||||||
hash: hex.EncodeToString(sum[:]),
|
hash: hex.EncodeToString(sum[:]),
|
||||||
count: len(names),
|
count: len(names),
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user