|
| 1 | +--- |
| 2 | +name: QA Checklist |
| 3 | +about: QA Checklist |
| 4 | +title: 'QA: [VERSION]' |
| 5 | +labels: 'type: QA checklist' |
| 6 | +assignees: '' |
| 7 | +--- |
| 8 | +**QA details:** |
| 9 | + |
| 10 | +Version: `v1.0.x-xxx` |
| 11 | + |
| 12 | +OS (select one) |
| 13 | +- [ ] Windows 11 (online & offline) |
| 14 | +- [ ] Ubuntu 24, 22 (online & offline) |
| 15 | +- [ ] Mac Silicon OS 14/15 (online & offline) |
| 16 | +- [ ] Mac Intel (online & offline) |
| 17 | + |
| 18 | +-------- |
| 19 | + |
| 20 | +# 1. Manual QA |
| 21 | +## Installation |
| 22 | +- [ ] it should install with network installer |
| 23 | +- [ ] it should install with local installer |
| 24 | +- [ ] it should install 2 binaries (cortex and cortex-server) |
| 25 | +- [ ] it should install with correct folder permissions |
| 26 | +- [ ] it should install with folders: /engines /logs (no /models folder until model pull) |
| 27 | + |
| 28 | + |
| 29 | +## Data/Folder structures |
| 30 | +- [ ] cortex.so models are stored in `cortex.so/model_name/variants/`, with .gguf and model.yml file |
| 31 | +- [ ] huggingface models are stored `huggingface.co/author/model_name` with .gguf and model.yml file |
| 32 | +- [ ] downloaded models are saved in cortex.db (view via SQL) |
| 33 | +- [ ] [to add] tests for copying models data folder & relative paths |
| 34 | + |
| 35 | + |
| 36 | +## Cortex Update |
| 37 | +- [ ] cortex -v should check output current version and check for updates |
| 38 | +- [ ] cortex update replaces the app, installer, uninstaller and binary file (without installing cortex.llamacpp) |
| 39 | +- [ ] cortex update should update from ~3-5 versions ago to latest (+3 to 5 bump) |
| 40 | +- [ ] cortex update should update from the previous version to latest (+1 bump) |
| 41 | +- [ ] cortex update should update from previous stable version to latest (stable checking) |
| 42 | +- [ ] it should gracefully update when server is actively running |
| 43 | + |
| 44 | +## Overall / App Shell |
| 45 | +- [ ] cortex returns helpful text in a timely* way |
| 46 | +- [ ] `cortex` or `cortex -h` displays help commands |
| 47 | +- [ ] CLI commands should start the API server, if not running [WIP `cortex pull`, `cortex engines install`] |
| 48 | +- [ ] it should correctly log to cortex-cli.log and cortex.log |
| 49 | +- [ ] There should be no stdout from inactive shell session |
| 50 | + |
| 51 | +## Engines |
| 52 | +- [ ] llama.cpp should be installed by default |
| 53 | +- [ ] it should run gguf models on llamacpp |
| 54 | +- [ ] it should install engines |
| 55 | +- [ ] it should list engines (Compatible, Ready, Not yet installed) |
| 56 | +- [ ] it should get engines |
| 57 | +- [ ] it should uninstall engines |
| 58 | +- [ ] it should gracefully continue engine installation if interrupted halfway (partial download) |
| 59 | +- [ ] it should gracefully handle when users try to CRUD incompatible engines (No variant found for xxx) |
| 60 | +- [ ] it should run trtllm models on trt-llm [WIP, not tested] |
| 61 | +- [ ] it shoud handle engine variants [WIP, not tested] |
| 62 | +- [ ] it should update engines versions [WIP, not tested] |
| 63 | + |
| 64 | +## Server |
| 65 | +- [ ] `cortex start` should start server and output API documentation page |
| 66 | +- [ ] users can see API documentation page |
| 67 | +- [ ] `cortex stop` should stop server |
| 68 | +- [ ] it should correctly log to cortex logs |
| 69 | +- [ ] `cortex ps` should return server status and running models (or no model loaded) |
| 70 | + |
| 71 | +## Model Pulling |
| 72 | +- [ ] Pulling a model should pull .gguf and model.yml file |
| 73 | +- [ ] Model download progress should appear (with accurate %, total time, download size, speed) |
| 74 | +### cortex.so |
| 75 | +- [ ] it should pull by built in model_ID |
| 76 | +- [ ] pull by model_ID should recommend default variant at the top (set in HF model.yml) |
| 77 | +- [ ] it should pull by built-in model_id:variant |
| 78 | +### huggingface.co |
| 79 | +- [ ] it should pull by HF repo/model ID |
| 80 | +- [ ] it should pull by full HF url (ending in .gguf) |
| 81 | +### Interrupted Download |
| 82 | +- [ ] it should allow user to interrupt / stop download |
| 83 | +- [ ] pulling again after interruption should accurately calculates remainder of model file size neeed to be downloaded (`Found unfinished download! Additional XGB needs to be downloaded`) |
| 84 | +- [ ] it should allow to continue downloading the remainder after interruption |
| 85 | + |
| 86 | +## Model Management |
| 87 | +- [ ] it should list downloaded models |
| 88 | +- [ ] it should get info of a local model |
| 89 | +- [ ] it should update models |
| 90 | +- [ ] it should delete a model |
| 91 | +- [ ] it should import models with model_id and model_path |
| 92 | +- [ ] [To deprecate] it should alias models (deprecate once `cortex run` with regex is implemented) |
| 93 | + |
| 94 | +## Model Running |
| 95 | +- [ ] `cortex run <cortexso model>` - if no local models detected, shows `pull` model menu |
| 96 | +- [ ] `cortex run` - if local model detected, runs the local model |
| 97 | +- [ ] `cortex run` - if multiple local models detected, shows list of local models for users to select |
| 98 | +- [ ] `cortex run <invalid model id>` should return gracefully `Model not found!` |
| 99 | +- [ ] run should autostart server |
| 100 | +- [ ] `cortex run <model>` starts interactive chat (by default) |
| 101 | +- [ ] `cortex run <model> -d` runs in detached mode |
| 102 | +- [ ] `cortex models start <model>` |
| 103 | +- [ ] terminate StdIn or `exit()` should exit interactive chat |
| 104 | + |
| 105 | +## Hardware Detection / Acceleration [WIP] |
| 106 | +- [ ] it should auto offload max ngl |
| 107 | +- [ ] it should correctly detect available GPUs |
| 108 | +- [ ] it should gracefully detect missing dependencies/drivers |
| 109 | +CPU Extension (e.g. AVX-2, noAVX, AVX-512) |
| 110 | +GPU Acceleration (e.g. CUDA11, CUDA12, Vulkan, sycl, etc) |
| 111 | + |
| 112 | +## Uninstallation / Reinstallation |
| 113 | +- [ ] it should uninstall 2 binaries (cortex and cortex-server) |
| 114 | +- [ ] it should uninstall with 2 options to delete or not delete data folder |
| 115 | +- [ ] it should gracefully uninstall when server is still running |
| 116 | +- [ ] uninstalling should not leave any dangling files |
| 117 | +- [ ] uninstalling should not leave any dangling processes |
| 118 | +- [ ] it should reinstall without having conflict issues with existing cortex data folders |
| 119 | + |
| 120 | +-- |
| 121 | +# 2. API QA |
| 122 | + |
| 123 | +## Overall API |
| 124 | +- [ ] API page is updated at localhost:port endpoint (upon `cortex start`) |
| 125 | +- [ ] OpenAI compatibility for below |
| 126 | +- [ ] https://cortex.so/api-reference is updated |
| 127 | + |
| 128 | +## Endpoints |
| 129 | +### Chat Completions |
| 130 | +- [ ] POST `v1/chat/completions` |
| 131 | + |
| 132 | +### Engines |
| 133 | +- [ ] GET `/v1/engines` |
| 134 | +- [ ] DELETE `/v1/engines/install/{name}` |
| 135 | +- [ ] POST `/v1/engines/install/{name}` |
| 136 | +- [ ] GET `/v1/engines/{name}` |
| 137 | + |
| 138 | +### Models |
| 139 | +- [ ] GET `/v1/models` lists models |
| 140 | +- [ ] POST `/v1/models/pull` starts download (websockets) |
| 141 | +- [ ] `websockets /events` emitted when model pull starts |
| 142 | +- [ ] DELETE `/v1/models/pull` stops download (websockets) |
| 143 | +- [ ] `websockets /events` stopped when model pull stops |
| 144 | +- [ ] POST `/v1/models/start` starts model |
| 145 | +- [ ] POST `/v1/models/stop` stops model |
| 146 | +- [ ] DELETE `/v1/models/{id}` deletes model |
| 147 | +- [ ] GET `/v1/models/{id}` gets model |
| 148 | +- [ ] PATCH `/v1/models/{model}` updates model.yaml params |
| 149 | + |
| 150 | +---- |
| 151 | +#### Test list for reference: |
| 152 | +- #1357 e2e tests for APIs in CI |
| 153 | +- #1147, #1225 for starting QA list |
0 commit comments