a9213ec382
- 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
45 lines
1.1 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|