From d05ca4732710dd9cef7fffd998a03615ad2cb58c Mon Sep 17 00:00:00 2001 From: Ben Sima Date: Sun, 30 Nov 2025 00:27:55 -0500 Subject: Add task complexity field and model selection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All tests pass. Let me summarize the changes made: - Added `taskComplexity :: Maybe Int` field to the `Task` data type (1-5 - Updated SQL schema to include `complexity INTEGER` column - Updated `FromRow` and `ToRow` instances to handle the new field - Updated `tasksColumns` migration spec for automatic schema migration - Updated `saveTask` to include complexity in SQL INSERT - Updated `createTask` signature to accept `Maybe Int` for complexity - Added `--complexity=` option to the docopt help string - Added complexity parsing in `create` command (validates 1-5 range) - Added complexity parsing in `edit` command - Updated `modifyFn` in edit to handle complexity updates - Updated all unit tests to use new `createTask` signature with complexi - Added CLI tests for `--complexity` flag parsing - Added unit tests for complexity field storage and persistence - Updated `selectModel` to use `selectModelByComplexity` based on task c - Added `selectModelByComplexity :: Maybe Int -> Text` function with map - `Nothing` or 3-4 → `anthropic/claude-sonnet-4-20250514` (default) - 1-2 → `anthropic/claude-haiku` (trivial/low complexity) - 5 → `anthropic/claude-opus-4-20250514` (expert complexity) - Updated `createTask` calls to include `Nothing` for complexity Task-Id: t-141.5 --- Omni/Task/Core.hs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'Omni/Task/Core.hs') diff --git a/Omni/Task/Core.hs b/Omni/Task/Core.hs index 07c74fc..92936bb 100644 --- a/Omni/Task/Core.hs +++ b/Omni/Task/Core.hs @@ -35,6 +35,7 @@ data Task = Task taskNamespace :: Maybe Text, -- Optional namespace (e.g., "Omni/Task", "Biz/Cloud") taskStatus :: Status, taskPriority :: Priority, -- Priority level (0-4) + taskComplexity :: Maybe Int, -- Complexity 1-5 for model selection taskDependencies :: [Dependency], -- List of dependencies with types taskDescription :: Text, -- Required description taskComments :: [Comment], -- Timestamped comments for extra context @@ -292,6 +293,7 @@ instance SQL.FromRow Task where <*> SQL.field <*> SQL.field <*> SQL.field + <*> SQL.field -- complexity <*> SQL.field <*> (fromMaybe "" SQL.field -- comments @@ -307,6 +309,7 @@ instance SQL.ToRow Task where SQL.toField (taskNamespace t), SQL.toField (taskStatus t), SQL.toField (taskPriority t), + SQL.toField (taskComplexity t), SQL.toField (taskDependencies t), SQL.toField (taskDescription t), SQL.toField (taskComments t), @@ -444,6 +447,7 @@ initTaskDb = do \ namespace TEXT, \ \ status TEXT NOT NULL, \ \ priority TEXT NOT NULL, \ + \ complexity INTEGER, \ \ dependencies TEXT NOT NULL, \ \ description TEXT, \ \ comments TEXT NOT NULL DEFAULT '[]', \ @@ -531,6 +535,7 @@ tasksColumns = ("namespace", "TEXT"), ("status", "TEXT"), ("priority", "TEXT"), + ("complexity", "INTEGER"), ("dependencies", "TEXT"), ("description", "TEXT"), ("comments", "TEXT"), @@ -639,13 +644,13 @@ saveTask task = SQL.execute conn "INSERT OR REPLACE INTO tasks \ - \ (id, title, type, parent, namespace, status, priority, dependencies, description, comments, created_at, updated_at) \ - \ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" + \ (id, title, type, parent, namespace, status, priority, complexity, dependencies, description, comments, created_at, updated_at) \ + \ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" task -- Create a new task -createTask :: Text -> TaskType -> Maybe Text -> Maybe Text -> Priority -> [Dependency] -> Text -> IO Task -createTask title taskType parent namespace priority deps description = +createTask :: Text -> TaskType -> Maybe Text -> Maybe Text -> Priority -> Maybe Int -> [Dependency] -> Text -> IO Task +createTask title taskType parent namespace priority complexity deps description = withTaskLock <| do let parent' = fmap normalizeId parent deps' = map normalizeDependency deps @@ -665,6 +670,7 @@ createTask title taskType parent namespace priority deps description = taskNamespace = namespace, taskStatus = Open, taskPriority = priority, + taskComplexity = complexity, taskDependencies = deps', taskDescription = description, taskComments = [], -- cgit v1.2.3