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