Cloud Edition · v0.10
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 the configured model's dim differs from the namespace dim (default 768), the server pads with zeros or truncates automatically.
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