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
- Open the admin SPA → Settings → Embedding service.
- Pick a provider — the model dropdown updates with that provider's catalog.
- Paste credentials. For Azure: also set endpoint, deployment, api_version.
- Click Test — the server runs a real embed against the provider and reports OK or the error.
- 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 ofopenai,azure,gemini,voyage,cohere,ollama.modelstrModel name from the provider's catalog (seeGET /v1/admin/embedding_models).api_keystrStored in-memory only. Never echoed back on subsequent GETs.endpointstr?Azure only —https://<resource>.openai.azure.comdeploymentstr?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