MCPcopy Create free account
hub / github.com/chainreactors/EvilProxy / openAICompatSignature

Function openAICompatSignature

internal/watcher/diff/openai_compat.go:139–186  ·  view source on GitHub ↗
(entry config.OpenAICompatibility)

Source from the content-addressed store, hash-verified

137}
138
139func openAICompatSignature(entry config.OpenAICompatibility) string {
140 var parts []string
141
142 if v := strings.TrimSpace(entry.Name); v != "" {
143 parts = append(parts, "name="+strings.ToLower(v))
144 }
145 if v := strings.TrimSpace(entry.BaseURL); v != "" {
146 parts = append(parts, "base="+v)
147 }
148
149 models := make([]string, 0, len(entry.Models))
150 for _, model := range entry.Models {
151 name := strings.TrimSpace(model.Name)
152 alias := strings.TrimSpace(model.Alias)
153 if name == "" && alias == "" {
154 continue
155 }
156 models = append(models, strings.ToLower(name)+"|"+strings.ToLower(alias)+"|"+fmt.Sprintf("image=%t", model.Image))
157 }
158 if len(models) > 0 {
159 sort.Strings(models)
160 parts = append(parts, "models="+strings.Join(models, ","))
161 }
162
163 if len(entry.Headers) > 0 {
164 keys := make([]string, 0, len(entry.Headers))
165 for k := range entry.Headers {
166 if trimmed := strings.TrimSpace(k); trimmed != "" {
167 keys = append(keys, strings.ToLower(trimmed))
168 }
169 }
170 if len(keys) > 0 {
171 sort.Strings(keys)
172 parts = append(parts, "headers="+strings.Join(keys, ","))
173 }
174 }
175
176 // Intentionally exclude API key material; only count non-empty entries.
177 if count := countAPIKeys(entry); count > 0 {
178 parts = append(parts, fmt.Sprintf("api_keys=%d", count))
179 }
180
181 if len(parts) == 0 {
182 return ""
183 }
184 sum := sha256.Sum256([]byte(strings.Join(parts, "|")))
185 return hex.EncodeToString(sum[:])
186}

Calls 1

countAPIKeysFunction · 0.85