GitHub - dnys1/embedding_explorer: Experiment with text embedding models locally in your browser.

3 min read Original article ↗

Embedding Explorer

Minimal web app for experimenting with and comparing text embedding models. It lets you ingest data, generate embeddings using different providers, store them, and run fast similarity searches so you can evaluate model quality side‑by‑side. All local to your browser.

Live Demo

🔗 Try it live

How It Works

Choosing an embedding model is tedious: you repeat ad‑hoc scripts, switch endpoints, and copy/paste vectors into notebooks. This tool gives you a consistent 4-step workflow:

1. Connect Your Data Sources

Data Sources Configuration

Start by connecting to your data - upload CSV files, connect to SQLite databases, or use sample datasets. Configure how your data should be processed and prepared for embedding generation.

2. Create Embedding Templates

Template Configuration

Design templates that structure your data for optimal input to embedding models. Define how fields should be combined, formatted, and preprocessed before being sent to embedding providers.

3. Configure Embedding Providers

Provider Configuration

Set up multiple embedding providers and models you want to test. Configure API keys, model parameters, and provider-specific settings to compare different approaches side-by-side.

4. Run Jobs and Analyze Results

Job Management

Results Analysis

Execute embedding jobs across your chosen providers, monitor progress, and analyze results. Compare model performance through similarity searches, inspect vector distances, and evaluate which models work best for your specific use case.

Tech Stack

  • Dart – Single language for UI, background workers, and data tasks
  • Jaspr – Dart web framework for rendering + interactive components
  • libSQL – Persistent store for documents, metadata, and embedding vectors
    • Uses the experimental libSQL WASM package for browser storage via OPFS

Core Features

  • Multi‑model embedding generation
  • Vector storage & similarity (k‑NN / cosine) queries
  • Interactive comparison view (result lists per model)
  • Batch ingestion & re‑embedding jobs with progress tracking

Development

This project uses a pnpm workspace to manage infrastructure, JavaScript bundling, and Tailwind CSS, but the core web application is written in Dart using the Jaspr framework.

Prerequisites

  1. Dart SDK - Install from dart.dev
  2. pnpm - For managing the JavaScript toolchain

Getting Started

# Install all dependencies (JS toolchain + Dart packages)
pnpm install

# Start development server (uses Dart webdev under the hood)
pnpm dev

# Build for production (generates Vite bundle + compiles Dart)
pnpm build

The development workflow uses pnpm as a command runner, but the actual web application runs on Dart's webdev server. The JavaScript bundles generated by Vite are consumed by the Dart application via FFI bindings.

Project Layout

lib/
	database/        # libSQL pool, migrations, transactions
	embeddings/      # Embedding services & interop
	data_sources/    # Data acquisition & ingest logic
	jobs/            # Background / batch job abstractions
	storage/         # Storage service abstractions
	util/            # Shared helpers (logging, retry, etc.)
	workers/         # Generated worker entrypoints
web/                 # Front-end entrypoint & static assets
infra/               # Pulumi infrastructure code
src/ 				 # JS dependency entrypoints
test/                # Unit & integration tests