Files
gnoma/internal/router/task_test.go
T
vikingowl a9213ec382 feat(slm): Wave C — SLM classifier, MaxComplexity routing, CLI subcommands, TUI status
- slm.Classifier: openaicompat → llamafile, 2s timeout + heuristic fallback,
  heuristic baseline blended so Priority/RequiredEffort are never zeroed,
  extractJSON strips markdown fences from small-model responses
- router.ParseTaskType: case-insensitive string → TaskType, unknown → TaskGeneration
- router.Arm.MaxComplexity: zero = no ceiling (preserves existing arm behavior);
  filterFeasible excludes arms when task.ComplexityScore > MaxComplexity
- config.SLMSection: [slm] enabled / model_url / data_dir
- openaicompat.NewLlamafile: no API key, model = "default", no retries
- slm.Manager: DefaultDataDir() (XDG), Manifest() accessor
- cmd/gnoma: `gnoma slm setup` / `gnoma slm status` subcommands; SLM arm
  registered with MaxComplexity=0.3 when enabled + set up
- tui: /config shows slm status (ready/missing/not set up + base URL if running)
- docs: roadmap updated to reflect llamafile pivot from Ollama
2026-05-07 16:44:32 +02:00

45 lines
1.1 KiB
Go

package router
import "testing"
func TestParseTaskType(t *testing.T) {
cases := []struct {
input string
want TaskType
}{
{"Debug", TaskDebug},
{"debug", TaskDebug},
{"DEBUG", TaskDebug},
{"Explain", TaskExplain},
{"explain", TaskExplain},
{"Generation", TaskGeneration},
{"generation", TaskGeneration},
{"Refactor", TaskRefactor},
{"refactor", TaskRefactor},
{"UnitTest", TaskUnitTest},
{"unit_test", TaskUnitTest},
{"unitTest", TaskUnitTest},
{"Boilerplate", TaskBoilerplate},
{"boilerplate", TaskBoilerplate},
{"Planning", TaskPlanning},
{"planning", TaskPlanning},
{"Orchestration", TaskOrchestration},
{"orchestration", TaskOrchestration},
{"SecurityReview", TaskSecurityReview},
{"security_review", TaskSecurityReview},
{"Review", TaskReview},
{"review", TaskReview},
// unknown falls back to TaskGeneration
{"", TaskGeneration},
{"unknown", TaskGeneration},
{"gibberish", TaskGeneration},
}
for _, tc := range cases {
got := ParseTaskType(tc.input)
if got != tc.want {
t.Errorf("ParseTaskType(%q) = %s, want %s", tc.input, got, tc.want)
}
}
}