mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-03-30 13:09:59 +00:00
* feat: channel affinity * feat: channel affinity -> model setting * fix: channel affinity * feat: channel affinity op * feat: channel_type setting * feat: clean * feat: cache supports both memory and Redis. * feat: Optimise ui/ux * feat: Optimise ui/ux * feat: Optimise codex usage ui/ux * feat: Optimise ui/ux * feat: Optimise ui/ux * feat: Optimise ui/ux * feat: If the affinitized channel fails and a retry succeeds on another channel, update the affinity to the successful channel
39 lines
682 B
Go
39 lines
682 B
Go
package cachex
|
|
|
|
import "strings"
|
|
|
|
// Namespace isolates keys between different cache use-cases. (e.g. "channel_affinity:v1").
|
|
type Namespace string
|
|
|
|
func (n Namespace) prefix() string {
|
|
ns := strings.TrimSpace(string(n))
|
|
ns = strings.TrimRight(ns, ":")
|
|
if ns == "" {
|
|
return ""
|
|
}
|
|
return ns + ":"
|
|
}
|
|
|
|
func (n Namespace) FullKey(key string) string {
|
|
key = strings.TrimSpace(key)
|
|
if key == "" {
|
|
return ""
|
|
}
|
|
p := n.prefix()
|
|
if p == "" {
|
|
return strings.TrimLeft(key, ":")
|
|
}
|
|
if strings.HasPrefix(key, p) {
|
|
return key
|
|
}
|
|
return p + strings.TrimLeft(key, ":")
|
|
}
|
|
|
|
func (n Namespace) MatchPattern() string {
|
|
p := n.prefix()
|
|
if p == "" {
|
|
return "*"
|
|
}
|
|
return p + "*"
|
|
}
|