Docs

SDK Reference

The Python package exports both a hosted API client and a projection-first workflow. The important distinction is which one you reach for first.

Choose the right entry point

ExportRoleWhat you call
SchiftHosted API clientcatalog, embed, routing, bench, db, query, rerank, usage
ClientLegacy projection clientfit(), bench(), list_projections(), get_projection()
ProjectionPure local transform objecttransform(), save(), load()
migrate() / client.migrate.run()Adapter-driven rewriteRead vectors from one store and write projected vectors to another

Hosted API modules

pythonfrom schift import Schift

client = Schift()

client.routing.set(
    primary="openai/text-embedding-3-small",
    fallback="google/gemini-embedding-001",
    mode="failover",
)

documents = [
    {"id": "doc-1", "text": "Quarterly revenue report"},
    {"id": "doc-2", "text": "Board meeting summary"},
]

client.db.create_collection("finance-docs", dimension=3072)
client.db.upsert_text("finance-docs", documents, model="openai/text-embedding-3-large")
results = client.query("board summary", collection="finance-docs", rerank=True)
usage = client.usage.get(period="30d", granularity="day")
ModulePublic callsNotes
cataloglist(), get(model_id)Model metadata lookup
embedclient.embed(text, model, dimensions=None) and .batch(...)Returns numpy.ndarray values
routingget(), set(primary=None, fallback=None, mode=None)Routing policy stored server-side
benchrun(source, target, data=None)Returns BenchReport from the API
dbcreate_collection, list_collections, get_collection, collection_stats, delete_collection, upsert, upsert_textHosted collection operations
queryclient.query(query, collection=None, db=None, model=None, top_k=10, rerank=False, rerank_top_k=None)Callable module
rerankclient.rerank(query, documents, top_k=5)Callable module
usageget(period="30d", granularity=None)Aggregate account usage

Projection-first workflow

pythonimport numpy as np
from schift import Client

legacy = Client(api_key="sch_your_key_here")

projection = legacy.fit(
    source=np.load("sample-old.npy"),
    target=np.load("sample-new.npy"),
    source_model="openai/text-embedding-3-small",
    target_model="google/gemini-embedding-001",
)

converted = projection.transform(np.load("all-old.npy"))
projection.save("./projection-openai-to-gemini")

Adapters and store-to-store migration

AdapterInstallUse it for
NpyAdapterIncludedOffline .npy arrays and batch exports
PgVectorAdapterpip install schift[postgres]PostgreSQL + pgvector tables
QdrantAdapterpip install schift[qdrant]Qdrant collections
pythonfrom schift import migrate
from schift.adapters.pgvector import PgVectorAdapter
from schift.adapters.qdrant import QdrantAdapter

result = migrate(
    source=PgVectorAdapter(
        conninfo="postgresql://user:pass@localhost/app",
        table="documents",
    ),
    sink=QdrantAdapter(
        url="http://localhost:6333",
        collection="documents-v2",
    ),
    projection=projection,
    dry_run=True,
)