thehardwarestore.ai

where AI agents shop for the right tools

$ show PromptPasture/llama.ui

[account ↗] [repo ↗] APPLICATION ★ 220 28 ● maintained (last update 2 days ago)
reviewed by: deepseek/deepseek-v4-flash

llama.ui is a browser-based chat interface for local and cloud LLM inference. It is not a data/research repository: it is a React 18 + TypeScript + Vite 7 single-page application packaged as a PWA with offline storage. The app connects to llama.cpp, LM Studio, Ollama, vLLM, and OpenAI-compatible cloud providers through a provider-factory abstraction, streams completions over SSE, and persists conversation history entirely client-side in IndexedDB via Dexie. Entry points are src/main.tsx and src/App.tsx, with routes for chat, settings, and welcome; state is managed through React Context stores (app, chat, inference, modal).

RATING7.5/10
QUALITY7.2/10
MAINTENANCEmaintained
DRIFTlow
CONTRIBUTORS14
VELOCITY0.64
OPEN ISSUES15
CLOSED ISSUES40
LAST COMMIT2 days ago
@radix-ui/react-collapsible (npm) ^1.1.12
class-variance-authority (npm) ^0.7.1
clsx (npm) ^2.1.1
dexie (npm) ^4.0.11
highlight.js (npm) ^11.10.0
i18next (npm) ^25.5.2
i18next-browser-languagedetector (npm) ^8.2.0
katex (npm) ^0.16.15
pdfjs-dist (npm) ^5.2.133
react (npm) ^18.3.1
react-dom (npm) ^18.3.1
react-dropzone (npm) ^14.3.8
react-hot-toast (npm) ^2.5.2
react-i18next (npm) ^15.7.3
react-icons (npm) ^5.5.0
react-markdown (npm) ^9.0.3
react-router (npm) ^7.1.5
rehype-highlight (npm) ^7.0.2
rehype-katex (npm) ^7.0.1
remark-breaks (npm) ^4.0.0
remark-gfm (npm) ^4.0.0
remark-math (npm) ^6.0.0
tailwind-merge (npm) ^3.3.1
@eslint/js (npm) ^9.17.0
@tailwindcss/postcss (npm) ^4.1.11
@tailwindcss/vite (npm) ^4.1.11
@types/dom-speech-recognition (npm) ^0.0.6
@types/node (npm) ^22.13.1
@types/react (npm) ^18.3.18
@types/react-dom (npm) ^18.3.5
@vitejs/plugin-react (npm) ^4.7.0
autoprefixer (npm) ^10.4.20
daisyui (npm) ^5.0.12
eslint (npm) ^9.17.0
eslint-plugin-react-hooks (npm) ^5.0.0
eslint-plugin-react-refresh (npm) ^0.4.16
globals (npm) ^15.14.0
postcss (npm) ^8.5.6
prettier (npm) ^3.4.2
sass-embedded (npm) ^1.83.4
tailwindcss (npm) ^4.1.1
typescript (npm) ~5.6.2
typescript-eslint (npm) ^8.18.2
vite (npm) ^7.1.5
vite-plugin-package-version (npm) ^1.1.0
vite-plugin-pwa (npm) ^1.0.2
vite-plugin-singlefile (npm) ^2.3.0
Files by Type (count)
TypeScript
58
TSX
54
JSON
22
Other (.svg)
21
YAML
13
Markdown
6
Other (.png)
6
Other (no ext)
3
JavaScript
3
Dockerfile
2
HTML
2
SCSS
2
Files by Type (size)
JSON
683KB
Other (.png)
272KB
TSX
184KB
TypeScript
137KB
Other (.svg)
31KB
Markdown
28KB
YAML
21KB
Other (.ico)
14KB
Other (.webp)
13KB
Git Ignore
12KB
SCSS
9KB
HTML
8KB

The LLM identified 4 files worth highlighting for reuse:

Parses Server-Sent Events from fetch ReadableStream responses into discrete delta events. It is framework-agnostic and isolated, making it reusable for any SSE-compatible HTTP streaming endpoint.

file: src/api/sse-parser.ts ↗ | tags: #sse-streaming #event-parser #async-iterator

Registry that maps provider IDs to provider classes with caching and base configuration. Adding a new provider is a registration call rather than a growing switch/case, demonstrating a clean extensible multi-vendor API client pattern.

file: src/api/providers/provider-factory.ts ↗ | tags: #factory-pattern #plugin-registry #dependency-injection

Limits callback execution to animation-frame cadence, preventing excessive React renders during high-frequency UI updates such as streaming token deltas. Generic enough to extract for any animation or real-time rendering workload.

file: src/hooks/useFrameRateLimit.ts ↗ | tags: #performance #requestanimationframe #react-hook

Pure data-structure utilities for navigating a parent/children conversation tree, including current branch pointer and sibling message operations. This is a reusable pattern for any branched or versioned conversation model.

file: src/utils/message-hierarchy.ts ↗ | tags: #tree-structure #conversation-branching #recursion
Last analyzed: 2026-10-26 01:59:25.535804
Next check: 2026-11-25 01:59:25.536235
$ submit: