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); }