veylant/internal/routing/templates.go
2026-02-23 13:35:04 +01:00

78 lines
2.5 KiB
Go

package routing
// Templates holds factory functions for pre-configured routing rules.
// Each function accepts a tenantID and returns a ready-to-use RoutingRule
// that can be passed directly to RuleStore.Create().
var Templates = map[string]func(tenantID string) RoutingRule{
// hr: sensitivity ≥ medium AND department=rh → ollama (on-prem), fallback openai
"hr": func(tenantID string) RoutingRule {
return RoutingRule{
TenantID: tenantID,
Name: "RH — données sensibles",
Description: "Requêtes RH avec sensibilité moyenne ou supérieure routées vers le modèle on-prem",
Priority: 10,
IsEnabled: true,
Conditions: []Condition{
{Field: "request.sensitivity", Operator: "gte", Value: "medium"},
{Field: "user.department", Operator: "eq", Value: "rh"},
},
Action: Action{
Provider: "ollama",
FallbackProviders: []string{"openai"},
},
}
},
// finance: sensitivity ≥ high → ollama (on-prem), fallback openai
"finance": func(tenantID string) RoutingRule {
return RoutingRule{
TenantID: tenantID,
Name: "Finance — données hautement sensibles",
Description: "Requêtes Finance avec haute sensibilité routées vers le modèle on-prem",
Priority: 20,
IsEnabled: true,
Conditions: []Condition{
{Field: "request.sensitivity", Operator: "gte", Value: "high"},
{Field: "user.department", Operator: "eq", Value: "finance"},
},
Action: Action{
Provider: "ollama",
FallbackProviders: []string{"openai"},
},
}
},
// engineering: department=engineering → anthropic
"engineering": func(tenantID string) RoutingRule {
return RoutingRule{
TenantID: tenantID,
Name: "Engineering — modèle avancé",
Description: "Requêtes Engineering routées vers Anthropic pour les tâches de code complexes",
Priority: 30,
IsEnabled: true,
Conditions: []Condition{
{Field: "user.department", Operator: "eq", Value: "engineering"},
},
Action: Action{
Provider: "anthropic",
FallbackProviders: []string{"openai"},
},
}
},
// catchall: no conditions → openai (lowest priority, always matches)
"catchall": func(tenantID string) RoutingRule {
return RoutingRule{
TenantID: tenantID,
Name: "Catch-all — OpenAI",
Description: "Règle par défaut : toutes les requêtes non routées vont vers OpenAI",
Priority: 9999,
IsEnabled: true,
Conditions: []Condition{},
Action: Action{
Provider: "openai",
},
}
},
}