Model catalogue: extend to cover Ollama embedding models alongside HuggingFace models #57

Open
opened 2026-05-05 14:46:27 -07:00 by pyr0ball · 0 comments
Owner

Background

Avocet has a well-built model lifecycle system for HuggingFace models (lookup → queue → approve → snapshot_download → SSE progress). It checks installation, prevents duplicate downloads, and surfaces "not installed" in the UI before the user tries to use a model.

This pattern does not currently cover Ollama embedding models, which other menagerie products (pagepiper, and future products) use via LLMRouter.

Problem

When a product is configured with PAGEPIPER_OLLAMA_URL and PAGEPIPER_EMBED_MODEL=nomic-embed-text but that model has not been pulled, the failure is silent until ingest runs. The error message (All LLM backends exhausted) is opaque (tracked in cf-core#X for improvement).

Options

Option A — cf-core utility: Add a check_ollama_model(base_url, model_name) -> bool helper to cf-core that products can call at startup or at the first embed attempt. Returns False + logs ollama pull <model> hint if missing.

Option B — Avocet extension: Extend Avocet's model catalogue to include an "Ollama" tab alongside HuggingFace. Looks up available models via GET /api/tags, surfaces which ones are pulled, allows queuing a pull via POST /api/pull.

Option C — Both: cf-core utility for programmatic checks (used in ingest scripts); Avocet UI for human-facing model management.

Recommendation

Option A is a small addition to cf-core and unblocks all products immediately. Option B is a good stretch goal for when Avocet's model catalogue UI is extended. Avocet's existing _is_installed() / _is_queued() patterns are a clean template for Option A.

Context

Discovered while onboarding pagepiper to the cloud instance (2026-05-05). Avocet exploration surfaced that the HF catalogue pattern is solid and worth extending.

Labels

  • enhancement, models
## Background Avocet has a well-built model lifecycle system for HuggingFace models (lookup → queue → approve → snapshot_download → SSE progress). It checks installation, prevents duplicate downloads, and surfaces "not installed" in the UI before the user tries to use a model. This pattern does not currently cover Ollama embedding models, which other menagerie products (pagepiper, and future products) use via `LLMRouter`. ## Problem When a product is configured with `PAGEPIPER_OLLAMA_URL` and `PAGEPIPER_EMBED_MODEL=nomic-embed-text` but that model has not been pulled, the failure is silent until ingest runs. The error message (`All LLM backends exhausted`) is opaque (tracked in cf-core#X for improvement). ## Options **Option A — cf-core utility:** Add a `check_ollama_model(base_url, model_name) -> bool` helper to cf-core that products can call at startup or at the first embed attempt. Returns `False` + logs `ollama pull <model>` hint if missing. **Option B — Avocet extension:** Extend Avocet's model catalogue to include an "Ollama" tab alongside HuggingFace. Looks up available models via `GET /api/tags`, surfaces which ones are pulled, allows queuing a pull via `POST /api/pull`. **Option C — Both:** cf-core utility for programmatic checks (used in ingest scripts); Avocet UI for human-facing model management. ## Recommendation Option A is a small addition to cf-core and unblocks all products immediately. Option B is a good stretch goal for when Avocet's model catalogue UI is extended. Avocet's existing `_is_installed()` / `_is_queued()` patterns are a clean template for Option A. ## Context Discovered while onboarding pagepiper to the cloud instance (2026-05-05). Avocet exploration surfaced that the HF catalogue pattern is solid and worth extending. ## Labels - enhancement, models
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Circuit-Forge/avocet#57
No description provided.