A browser client for the Ollaya decision server. Built with Vite + React + Tailwind v4 + shadcn (Nova preset), no backend.
npm install
npm run devOpen http://localhost:5173. The UI expects an Ollaya server at
http://127.0.0.1:11435 by default; change it from the Settings dialog in the
header (values live in localStorage).
Point the UI at any Ollaya server, on this machine or elsewhere — cross-origin
requests must be allowed by the server (OLLAYA_ORIGINS), and if the server has
OLLAYA_API_KEY set, paste the key into Settings so it's sent as
Authorization: Bearer <key>.
- Decide — build typed questions (choice,score,noul), send them to/api/decidewith a state, and inspect answers with calibrated probability bars, confidence badges, routing info, and timings. A "Sample" button loads the ticket-triage example from the API docs.
- Models — browse local models from /api/tagsin a table, pull new ones with streamed per-layer progress, delete, copy, and create derived models with built-in questions. "Show details" wraps/api/show, including the Modelfile and license text.
- Running — snapshot of /api/pswith auto-refresh every 5 s. Each row has an "Unload" button that calls/api/decidewithkeep_alive: 0.
src/
App.jsx root: SettingsProvider + Toaster
main.jsx entry
index.css tailwind + theme tokens (shadcn Nova)
lib/
ollaya.js fetch wrapper + NDJSON streaming
settings.js baseUrl + apiKey persisted in localStorage
theme.js light / dark / system toggle
hooks.js useModels, useRunning
format.js bytes, nanoseconds, percentages, timestamps
utils.js shadcn cn re-export
components/
ui/ shadcn primitives (Tailwind under the hood)
AppShell.jsx sticky header + tabs
ServerStatus.jsx version ping every 30 s
SettingsDialog.jsx baseUrl + apiKey editor
SettingsContext.jsx
ThemeToggle.jsx
decide/ ProbBar, AnswerCard, QuestionEditor
models/ PullDialog, CreateDialog, ShowDialog,
CopyDialog, DeleteDialog, StreamProgress
pages/
DecidePage.jsx
ModelsPage.jsx
RunningPage.jsx
AboutPage.jsx
- npm run dev— Vite dev server on :5173
- npm run build— production bundle in- dist/
- npm run preview— serve the built bundle
- npm run lint— oxlint