NERDDISCO's picture
feat: added getting-started, huggingface summarization, boxes
5786921
raw
history blame
2.74 kB
import {
Alert,
Button,
IconButton,
InputAdornment,
Paper,
Stack,
TextField,
} from "@mui/material";
import { useEffect, useRef, useState } from "react";
import { HfInference } from "@huggingface/inference";
import { Visibility, VisibilityOff } from "@mui/icons-material";
import { InferenceProps } from "../huggingface";
export default function Summarization(props: InferenceProps) {
const { model } = props;
const [token, setToken] = useState<string>("");
const [summary, setSummary] = useState<string>("");
const [error, setError] = useState<string>("");
const [showToken, setShowToken] = useState(false);
const inference = useRef<HfInference | null>(null);
useEffect(() => {
inference.current = new HfInference(token);
}, [token]);
const handleSubmit = (event: any) => {
event.preventDefault();
const data = new FormData(event.currentTarget);
setToken(data.get("token") as string);
const text = data.get("text") as string;
call(text);
};
const handleShowToken = () => setShowToken(!showToken);
const call = async (inputs: string) => {
try {
const response = await inference.current?.summarization({
model,
inputs,
parameters: {
max_length: 100,
},
});
setSummary(response?.summary_text as string);
setError("");
} catch (error) {
if (error instanceof Error) {
setError(error.message);
} else {
setError("An unknown error occurred");
}
}
};
return (
<>
<Paper component="form" onSubmit={handleSubmit} sx={{ padding: "1em" }}>
<Stack spacing={2}>
<TextField
variant="filled"
label="HF Token"
name="token"
type={showToken ? "text" : "password"}
InputProps={{
endAdornment: (
<InputAdornment position="end">
<IconButton onClick={handleShowToken}>
{showToken ? <Visibility /> : <VisibilityOff />}
</IconButton>
</InputAdornment>
),
}}
/>
<TextField
variant="filled"
label="Text to summarize"
multiline
required
minRows={4}
name="text"
/>
<Button type="submit" variant="contained">
Run
</Button>
{error && <Alert severity="error">{error}</Alert>}
<TextField
variant="outlined"
label="Summary"
multiline
minRows={2}
name="text"
value={summary}
/>
</Stack>
</Paper>
</>
);
}