PraxaLing / lib /hf /client.ts
Reubencf's picture
Use signed-in user's HF OAuth token for inference
a84aedc
Raw
History Blame Contribute Delete
1.14 kB
import { InferenceClient } from "@huggingface/inference";
const JWT_SHAPE = /^eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/;
export function createInferenceClient(userAccessToken?: string) {
// Prefer the signed-in user's HF OAuth access token (granted via the
// `inference-api` scope on sign-in). Falls back to a server-side
// HF_TOKEN env var if no user token is present (e.g. background jobs).
if (userAccessToken) {
return new InferenceClient(userAccessToken);
}
const serverToken = process.env.HF_TOKEN?.trim();
if (!serverToken) {
throw new Error(
"No HuggingFace token available. Sign in to use your OAuth token, or set HF_TOKEN to a Personal Access Token (starts with `hf_`) from https://huggingface.co/settings/tokens.",
);
}
if (JWT_SHAPE.test(serverToken)) {
throw new Error(
"HF_TOKEN looks like an OAuth access token (JWT). For server-side inference set HF_TOKEN to a long-lived Personal Access Token starting with `hf_` from https://huggingface.co/settings/tokens, or remove HF_TOKEN and rely on per-user OAuth.",
);
}
return new InferenceClient(serverToken);
}