@f-inverse/jammi-client
v0.46.0
Published
Official TypeScript gRPC-web client for the Jammi engine, generated from the canonical jammi.v1 proto. Runs on fetch (Cloudflare Workers / V8 isolates).
Downloads
2,781
Readme
@f-inverse/jammi-client
The official TypeScript gRPC-web client for the Jammi engine.
It is generated from the canonical proto at crates/jammi-wire/proto/jammi/v1
(the single codegen source for every language binding — Rust, Python, and this
one) using buf + protobuf-es (protoc-gen-es) + Connect-ES. The transport
is gRPC-web over fetch, so the client runs unchanged in a browser, a
Cloudflare Worker / V8 isolate (no native code), or Node — interoperating
with the server's tonic-web surface.
Use
import { connect, Modality } from "@f-inverse/jammi-client";
// One transport, one session-scoped tenant binding, a client per service.
const jammi = connect("https://engine.example.com");
await jammi.session.setTenant({ tenant: { id: tenantUuid } });
const hits = await jammi.embedding.search({
sourceId: "corpus",
query: { case: "rowKey", value: "track-42" },
k: 10,
});
// Server-streaming subscribe is an async iterable.
for await (const batch of jammi.trigger.subscribe({ topic: { name: "events" } })) {
// ...
}connect(endpoint, opts?) builds the gRPC-web transport and returns a
JammiClient with one client per service (session, embedding, inference,
eval, fineTune, mutableTable, channel, trigger, audit). Each
connection mints an opaque session id (overridable via opts.sessionId) and
injects it as the jammi-session-id header on every request — the key the
server binds tenant state against. Pass extra interceptors via
opts.interceptors.
Regenerate the client surface
The generated code lives in src/gen/ and is never committed — it is
emitted at build time from the repo proto, so it cannot drift. One command:
npm run generate # == buf generate ../../crates/jammi-wire/protonpm run build (and typecheck / test) regenerate first, so you rarely call
generate directly. After changing a .proto, just rebuild.
Develop
npm install
npm run typecheck # tsc --noEmit (strict), regenerates first
npm run test # vitest (hermetic — no network), regenerates first
npm run build # clean + generate + tsc → dist/Versioned in lockstep with the engine (workspace.package.version); the npm
publish runs only on the engine's release tag.
