next-client/app/classifier.js (30 lines of code) (raw):

"use client"; import { useEffect, useState, useRef } from "react"; import { pipeline } from "@huggingface/transformers"; export default function Classifier() { const [text, setText] = useState("I love Transformers.js!"); const [result, setResult] = useState(null); const ref = useRef(); useEffect(() => { ref.current ??= pipeline( "text-classification", "Xenova/distilbert-base-uncased-finetuned-sst-2-english", ); }, []); useEffect(() => { ref.current.then(async (classifier) => { const result = await classifier(text); setResult(result[0]); }); }, [text]); return ( <> <input value={text} onChange={(e) => setText(e.target.value)} className="border border-gray-300 rounded p-2 dark:bg-black dark:text-white w-full" ></input> <pre className="border border-gray-300 rounded p-2 dark:bg-black dark:text-white w-full min-h-[120px]"> {result ? JSON.stringify(result, null, 2) : "Loading…"} </pre> </> ); }