diff --git a/README.md b/README.md index f1d477a..bbf7284 100644 --- a/README.md +++ b/README.md @@ -24,9 +24,9 @@ second -- with copy, regenerate, and fork controls that appear on hover. Settings keep model selection and generation defaults in one place, and the chat model doubles as the title model so there is only one choice to make: -![Cortex settings, AI Model section: top-p, top-k, and repeat penalty sliders, -context window and seed fields, a system instructions box, and a toggle to -bypass Cortex's default system prompt.](docs/images/settings.png) +![Cortex settings, AI Model section: the local model picker above grouped +Sampling and Context controls, with filled-track sliders and their current +values shown beside each label.](docs/images/settings.png) `Ctrl`/`Cmd`+`K` opens a command palette that reaches new chat, settings, theme, model switching, and recent conversations without leaving the keyboard: diff --git a/docs/images/settings.png b/docs/images/settings.png index 75e182f..4fc0692 100644 Binary files a/docs/images/settings.png and b/docs/images/settings.png differ diff --git a/frontend/src/features/settings/SettingsPanel.tsx b/frontend/src/features/settings/SettingsPanel.tsx index 402b04b..ebe7300 100644 --- a/frontend/src/features/settings/SettingsPanel.tsx +++ b/frontend/src/features/settings/SettingsPanel.tsx @@ -7,6 +7,7 @@ import type { ModelResponse, } from "../../../../contracts/cortex-api"; import { displayModelName, isGGUFModel, localModelNames } from "../../lib/localModels"; +import { RangeField } from "../../shared/ui/RangeField"; import { Select } from "../../shared/ui/Select"; import { MemoryPanel } from "./MemoryPanel"; import { ModelsPanel } from "../models/ModelsPanel"; @@ -184,18 +185,23 @@ export function SettingsPanel({ )} - - - - +
+
+ Sampling + How the model picks its next token. Defaults suit most local models. +
+
+ value.toFixed(1)} onChange={(temperature) => update({ generation: { ...generation, temperature } })} /> + value.toFixed(2)} onChange={(top_p) => update({ generation: { ...generation, top_p } })} /> + update({ generation: { ...generation, top_k } })} /> + value.toFixed(2)} onChange={(repeat_penalty) => update({ generation: { ...generation, repeat_penalty } })} /> +
+ +
+
+ Context + A larger window holds more conversation but uses more memory. Seed -1 keeps replies varied. +
+ +
+
+ System prompt + Standing instructions sent with every message in every chat. +