Files
2026-08-16 16:57:36 +02:00

82 lines
2.1 KiB
Go

package processing
import "strings"
// Analytics provider mode labels (must match aiprovider.AnalyticsMode contract).
const (
AIProviderInternal = "internal"
AIProviderCustom = "custom"
AIProviderUnknown = "unknown"
)
// ProviderLabeler optionally reports the analytics mode for a Completer.
type ProviderLabeler interface {
ProviderModeLabel() string
}
// CompleterProviderMode returns the analytics label for a Completer.
func CompleterProviderMode(c Completer) string {
if c == nil {
return AIProviderUnknown
}
if p, ok := c.(ProviderLabeler); ok {
return normalizeProviderMode(p.ProviderModeLabel())
}
// Historical env-backed OpenAI clients without an explicit label.
return AIProviderInternal
}
// EngineProviderMode returns Engine.ProviderMode when set, else CompleterProviderMode.
func (e *Engine) EngineProviderMode() string {
if e == nil {
return AIProviderUnknown
}
if label := strings.TrimSpace(e.ProviderMode); label != "" {
return normalizeProviderMode(label)
}
return CompleterProviderMode(e.Completer)
}
func normalizeProviderMode(label string) string {
m := strings.ToLower(strings.TrimSpace(label))
switch {
case m == "" || m == AIProviderUnknown:
return AIProviderUnknown
case m == AIProviderInternal:
return AIProviderInternal
case m == AIProviderCustom:
return AIProviderCustom
case strings.HasPrefix(m, "popular:"):
name := strings.TrimSpace(strings.TrimPrefix(m, "popular:"))
if name == "" {
name = "unknown"
}
return "popular:" + name
default:
return AIProviderUnknown
}
}
// isUnknownProviderMode reports empty or the sentinel "unknown" analytics label.
func isUnknownProviderMode(label string) bool {
m := strings.ToLower(strings.TrimSpace(label))
return m == "" || m == AIProviderUnknown
}
// preferKnownProviderMode returns the first non-unknown label, else unknown.
func preferKnownProviderMode(candidates ...string) string {
for _, c := range candidates {
if !isUnknownProviderMode(c) {
return normalizeProviderMode(c)
}
}
return AIProviderUnknown
}
func lastResultAIProviderMode(r *StepResult) string {
if r == nil {
return ""
}
return r.AIProviderMode
}