The routing decision is about reasoning capacity, not cost or provider. Fast model (koala/qwen35-9b-fast) handles high-pass-rate calls; thinking model (iguana/gemma4-26b) handles low-pass-rate calls. Removes the implicit Anthropic dependency from the routing pod — both models go through LiteLLM. Renames: HYPERGUILD_LOCAL_MODEL → HYPERGUILD_FAST_MODEL, HYPERGUILD_CLAUDE_MODEL → HYPERGUILD_THINKING_MODEL, Router.LocalModel → FastModel, Router.ClaudeModel → ThinkingModel, log decision "claude_fallback" → "thinking_fallback". Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
74 lines
2.6 KiB
Go
74 lines
2.6 KiB
Go
package config_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/mathiasbq/supervisor/internal/config"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestLoadRoutingDefaults(t *testing.T) {
|
|
for _, k := range []string{
|
|
"ROUTING_PORT", "ROUTING_MCP_TOKEN", "LITELLM_BASE_URL", "LITELLM_API_KEY",
|
|
"BRAIN_URL", "HYPERGUILD_FAST_MODEL", "HYPERGUILD_THINKING_MODEL",
|
|
"HYPERGUILD_ROUTE_LOCAL_FLOOR", "HYPERGUILD_ROUTE_LOCAL_CEIL",
|
|
"HYPERGUILD_PASS_RATE_TTL_SECONDS",
|
|
} {
|
|
t.Setenv(k, "")
|
|
}
|
|
|
|
cfg, err := config.LoadRouting()
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "3210", cfg.Port)
|
|
assert.Equal(t, "", cfg.MCPAuthToken)
|
|
assert.Equal(t, "http://piguard:4000", cfg.LiteLLMBaseURL)
|
|
assert.Equal(t, "http://ingestion.supervisor:3300", cfg.BrainURL)
|
|
assert.Equal(t, "koala/qwen35-9b-fast", cfg.FastModel)
|
|
assert.Equal(t, "iguana/gemma4-26b", cfg.ThinkingModel)
|
|
assert.InDelta(t, 0.90, cfg.RouteLocalFloor, 1e-9)
|
|
assert.InDelta(t, 0.70, cfg.RouteLocalCeil, 1e-9)
|
|
assert.Equal(t, 60, cfg.PassRateTTLSeconds)
|
|
assert.Equal(t, "", cfg.LiteLLMAPIKey)
|
|
}
|
|
|
|
func TestLoadRoutingFromEnv(t *testing.T) {
|
|
t.Setenv("ROUTING_PORT", "3250")
|
|
t.Setenv("ROUTING_MCP_TOKEN", "tok-xyz")
|
|
t.Setenv("LITELLM_BASE_URL", "http://localhost:4000")
|
|
t.Setenv("LITELLM_API_KEY", "lk")
|
|
t.Setenv("BRAIN_URL", "http://localhost:3300")
|
|
t.Setenv("HYPERGUILD_FAST_MODEL", "koala/phi4-14b")
|
|
t.Setenv("HYPERGUILD_THINKING_MODEL", "iguana/qwen3-14b-think")
|
|
t.Setenv("HYPERGUILD_ROUTE_LOCAL_FLOOR", "0.85")
|
|
t.Setenv("HYPERGUILD_ROUTE_LOCAL_CEIL", "0.65")
|
|
t.Setenv("HYPERGUILD_PASS_RATE_TTL_SECONDS", "30")
|
|
|
|
cfg, err := config.LoadRouting()
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "3250", cfg.Port)
|
|
assert.Equal(t, "tok-xyz", cfg.MCPAuthToken)
|
|
assert.Equal(t, "http://localhost:4000", cfg.LiteLLMBaseURL)
|
|
assert.Equal(t, "lk", cfg.LiteLLMAPIKey)
|
|
assert.Equal(t, "http://localhost:3300", cfg.BrainURL)
|
|
assert.Equal(t, "koala/phi4-14b", cfg.FastModel)
|
|
assert.Equal(t, "iguana/qwen3-14b-think", cfg.ThinkingModel)
|
|
assert.InDelta(t, 0.85, cfg.RouteLocalFloor, 1e-9)
|
|
assert.InDelta(t, 0.65, cfg.RouteLocalCeil, 1e-9)
|
|
assert.Equal(t, 30, cfg.PassRateTTLSeconds)
|
|
}
|
|
|
|
func TestLoadRoutingRejectsBadFloat(t *testing.T) {
|
|
t.Setenv("HYPERGUILD_ROUTE_LOCAL_FLOOR", "not-a-number")
|
|
_, err := config.LoadRouting()
|
|
require.Error(t, err)
|
|
assert.Contains(t, err.Error(), "HYPERGUILD_ROUTE_LOCAL_FLOOR")
|
|
}
|
|
|
|
func TestLoadRoutingRejectsBadInt(t *testing.T) {
|
|
t.Setenv("HYPERGUILD_PASS_RATE_TTL_SECONDS", "not-a-number")
|
|
_, err := config.LoadRouting()
|
|
require.Error(t, err)
|
|
assert.Contains(t, err.Error(), "HYPERGUILD_PASS_RATE_TTL_SECONDS")
|
|
}
|