Skip to content

Semlith 0.49.0

Choose a tag to compare

@github-actions github-actions released this 28 Oct 05:59
· 8 commits to develop since this release
79c72e9

A machine with no network indexes and searches a folder that holds images,
once its model cache is copied from a connected machine. No store format
change and no re-index.

Added

  • semlith setup --all-models. Beside the embedding model it fetches the
    rescoring model and both CLIP encoders, pinned and digest-checked, into the
    model cache (SEMLITH_MODEL_CACHE when set). It states the total and asks
    first; --yes answers. A model already cached is skipped, so a second run
    downloads nothing. With --airgap or SEMLITH_AIRGAP it exits non-zero
    before any step runs. Without the flag setup downloads what 0.48.0 did.
  • The Privacy page lists every model weight. Rows for the rescoring model,
    CLIP's vision encoder and CLIP's text encoder, each with its source, size,
    when it is fetched and whether it is on disk.
  • tests/airgap.sh. A local gate, never run in CI: given a Linux release
    archive it seeds a cache with setup --all-models in a connected container,
    then indexes and searches by CLI and stdio MCP in a --network none
    container with SEMLITH_AIRGAP=1 and the cache mounted read-only.

Fixed

  • A pictured query no longer fails when CLIP's text encoder is missing.
    Under airgap, or offline, a query that describes something seen ("logo",
    "a red circle") failed the whole search with the airgap refusal or a DNS
    error, and the text results went with it. The image lane's error now costs
    the pictures only: the search answers from its other lists with one note
    naming why, on stderr for the CLI, in the result text for semlith_search
    and semlith_brief, and above the portal's results. Nothing is remembered,
    so the next search after the cache is seeded finds images again.
  • Indexing an image fetches both CLIP encoders. The text encoder waited
    for the first pictured query, so a cache seeded by indexing on a connected
    machine had only half of CLIP, although docs/security.md said both came
    with the first image. It is now fetched and digest-checked with the vision
    encoder, and still loaded only at the first pictured query. Under airgap a
    missing text encoder is not an indexing error.
  • A cached rescoring model loads under airgap. The airgap check asked
    about the reranker by its display name, which no cache directory carries,
    so SEMLITH_AIRGAP refused a reranker that was on disk. It now asks by
    repository.

Install

macOS and Linux

curl --proto '=https' --tlsv1.2 -fsSL https://raw.githubusercontent.com/semlith/semlith/main/install.sh | sh

Windows

irm https://raw.githubusercontent.com/semlith/semlith/main/install.ps1 | iex

Or download the archive for your platform below, unpack it, and put
semlith on your PATH. Intel macOS has no prebuilt binary: ONNX
Runtime no longer publishes x86_64 macOS builds.

Verify a download against SHA256SUMS before running it, SHA256SUMS
against its signature (release key
SHA256:a5oJmrakIwDHEWTDWqWe51Ttt6m2tQ0dsGzIqyxDuxs) with
echo "semlith-release ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICMTHiHMzeSHzzc+8UDZHUzJcvb6XGUBb+TJdFes91xm" > allowed_signers
and ssh-keygen -Y verify -f allowed_signers -I semlith-release -n file -s SHA256SUMS.sig < SHA256SUMS,
and its provenance with gh attestation verify <file> --repo semlith/semlith --signer-workflow semlith/semlith/.github/workflows/release.yml.