Search docs…⌘K
v0.16.0 · MIT

Feather Core is open source. Star us and ship fast.

View on GitHub →
Home/Docs/Cloud Edition/Embedding Providers
Cloud Edition · v0.16

Pluggable embeddings.

Six providers in the box. Configure once in the admin SPA, then call /v1/{ns}/ingest_text and the server handles embed + store in one round trip.

The six providers

OpenAI
  • text-embedding-3-small (1536d)
  • text-embedding-3-large (3072d)
  • ada-002 (1536d, legacy)
Fields: api_key
Azure OpenAI
  • any deployment of text-embedding-3 family
Fields: endpoint · deployment · api_version · api_key
Google AI · Gemini
  • gemini-embedding-001 (current)
  • gemini-embedding-exp
  • text-embedding-004 (deprecated)
Fields: api_key
Voyage
  • voyage-3
  • voyage-3-lite
  • voyage-large-2
  • voyage-code-2
Fields: api_key
Cohere
  • embed-english-v3
  • embed-multilingual-v3
  • embed-english-light-v3
Fields: api_key
Ollama
  • nomic-embed-text
  • mxbai-embed-large
  • all-minilm
Fields: base_url (no key required)

Configure via the admin SPA

Settings → Embedding service

  1. Open the admin SPA → SettingsEmbedding service.
  2. Pick a provider — the model dropdown updates with that provider's catalog.
  3. Paste credentials. For Azure: also set endpoint, deployment, api_version.
  4. Click Test — the server runs a real embed against the provider and reports OK or the error.
  5. Click Save. Stored in-memory only; the API key is never echoed back.

If a namespace was created with an explicit dim (via POST /v1/namespaces { "dim": 1536 }), the server enforces that dimension per-namespace and returns a clear error on mismatch — no silent padding or truncation. Namespaces without an explicit dim default to 768.

Configure via REST

PUT /v1/admin/embedding_config

curl -X PUT http://localhost:8000/v1/admin/embedding_config \
  -H "X-API-Key: $FEATHER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "openai",
    "model":    "text-embedding-3-small",
    "api_key":  "sk-..."
  }'
Parameters
  • providerstrOne of openai, azure, gemini, voyage, cohere, ollama.
  • modelstrModel name from the provider's catalog (see GET /v1/admin/embedding_models).
  • api_keystrStored in-memory only. Never echoed back on subsequent GETs.
  • endpointstr?Azure only — https://<resource>.openai.azure.com
  • deploymentstr?Azure only — your deployment name.
  • api_versionstr?Azure only — e.g. 2024-02-01.
  • base_urlstr?Ollama only — e.g. http://localhost:11434.

One-call embed + store

POST /v1/{ns}/ingest_text

The headline endpoint. Server takes raw text, embeds it via the configured provider, and stores the vector + metadata in one round trip.

import requests

r = requests.post(
    "http://localhost:8000/v1/acme/ingest_text",
    headers={"X-API-Key": FEATHER_API_KEY},
    json={
        "text": "Summer 2026 Instagram ad — sandals, 30% off, women 25–40.",
        "metadata": {
            "namespace_id": "acme",
            "entity_id":    "creative_001",
            "attributes":   {
                "brand":    "acme",
                "channel":  "instagram",
                "campaign": "summer-2026",
            },
        },
    },
)
print(r.json())
# → {"id": 1729..., "namespace": "acme", "embedded": true, "dim": 768}

Inspect the catalog

GET /v1/admin/embedding_models

Returns the curated dropdown the admin SPA uses. Handy if you're building a custom settings UI.

curl -H "X-API-Key: $FEATHER_API_KEY" \
  http://localhost:8000/v1/admin/embedding_models