Any model, several spaces, one request.
import { VectorClient } from "@schift-io/sdk";
const vectors = new VectorClient({
apiKey: process.env.SCHIFT_API_KEY!,
dataUrl: "https://gw.schift.io",
});
const where = "custom/catalog/items";
const model = "google/gemini-embedding-2"; // any model; every write asserts it
await vectors.declare(where, {
embedding: "external",
vectors: { text: { dimension: 2048, model } },
metadata: { sku: "string", year: "int64", tags: "string_list" },
});
await vectors.upsert(
where,
[{ id: "sku-1", text: "linen shirt, warm beige",
metadata: { sku: "S1", year: 2025, tags: ["summer"] },
vectors: { text: embedding } }], // Float32Array goes as base64 f32
{ models: { text: model } },
);
const { hits } = await vectors.search(where, {
vector: "text",
queryVector: queryEmbedding,
query: "linen shirt", // hybrid: cosine + BM25
filter: { year: { gte: 2024 }, tags: { contains: "summer" } },
topK: 10,
}); // [{ id, score, scores: { text, keyword }, text, metadata, updatedAt }]
import os
import numpy as np
from schift.vectors import VectorsClient
vectors = VectorsClient(os.environ["SCHIFT_API_KEY"], data_url="https://gw.schift.io")
where = "custom/catalog/items"
model = "google/gemini-embedding-2" # any model; every write asserts it
vectors.declare(
where,
vectors={"text": {"dimension": 2048, "model": model}},
metadata={"sku": "string", "year": "int64", "tags": "string_list"},
)
vectors.upsert(where, [{
"id": "sku-1",
"text": "linen shirt, warm beige",
"metadata": {"sku": "S1", "year": 2025, "tags": ["summer"]},
"vectors": {"text": np.asarray(embedding, dtype=np.float32)},
}], models={"text": model})
hits = vectors.search(
where,
vector="text",
queryVector=np.asarray(query_embedding, dtype=np.float32),
query="linen shirt",
filter={"year": {"gte": 2024}, "tags": {"contains": "summer"}},
topK=10,
)["hits"]
curl -X PUT https://gw.schift.io/v1/vectors/custom/catalog/items/schema \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"embedding":"external",
"vectors":{"text":{"dimension":2048,"model":"google/gemini-embedding-2"}},
"metadata":{"sku":"string","year":"int64","tags":"string_list"}}'
# 201 {"where":"custom/catalog/items","schema":{...},"created":true}
curl -X POST https://gw.schift.io/v1/vectors/custom/catalog/items/search \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"vector":"text","queryVector":[0.013, -0.021, ...],"topK":10,
"query":"linen shirt","filter":{"year":{"gte":2024}}}'
# {"hits":[{"id","score","scores":{"text":...,"keyword":...},"text","metadata","updatedAt"}],...}