7 comments

  • soycaporal an hour ago

    Hobby project, I wanted to "ship a useful model in a web browser". so I distilled a small sentence encoder from MiniLM with ternary quantization-aware training. Also wrote the inference engine from scratch and shipped in Rust → WASM SIMD.

    It's an embeddings model, not an LLM: text goes in, a 384-dim vector comes out, and cosine similarity between two vectors tells you how related the texts are — regardless of shared words ("reset my password" ↔ "I forgot my password" → 0.88). Used for semantic search, FAQ/intent matching, and clustering. Running it on-device means search-as-you-type semantic search is performant with no API dependencies.

    Demo (2k React docs, fully on-device): https://ternlight-demo.vercel.app

    Two tiers on npm: - @ternlight/base (7 MB, ~5 ms/embed, more capable embedings) - @ternlight/mini (5 MB wire, ~2.5 ms/embed).

    Bundled for Node and browsers.

    Repo - see technical details (MIT, training pipeline included): https://github.com/soycaporal/ternlight

    Curious if this is something useful, what are the use cases for on-device embeddings.

      fellowniusmonk 16 minutes ago

      Awesome! Besides size, how does this compare to gte-small?

        soycaporal 9 minutes ago

        gte-small outscores all-MiniLM-L6 on MTEB (~61 vs ~56 avg per the GTE paper). MiniLM is ternlight's teacher (ternlight holds 0.84 Spearman fidelity to teacher). I haven't run a head-to-head yet; STS-B/MTEB numbers are on the roadmap. Also on the roadmap is to distill gte-small as teacher.

  • dirteater_ 11 minutes ago

    This is cool!

    but also maybe you could put a button on the landing page to trigger the demo because it's a bit startling to hear my fans go crazy when opening a webpage.

  • aetherspawn 14 minutes ago

    Can the 30 second embedding time be done beforehand and sent to the browser?

    Inference is nice and quick after that.

      soycaporal 13 minutes ago

      yes, you could run a 1 time indexing run on the server side, and just ship the embeddings to frontend

  • esafak 5 minutes ago

    What we need is a W3C LLM API.