import { useState, useEffect } from "react"; import { api, getErrorMessage } from "../api"; import StatusMessage from "./StatusMessage"; import LogViewer from "./LogViewer"; interface Props { onReady: (ready: boolean, info?: { vocab_size: number; sentences: number; vector_size: number }) => void; } export default function Word2VecPanel({ onReady }: Props) { const [statusChecked, setStatusChecked] = useState(false); const [vectorSize, setVectorSize] = useState(100); const [windowSize, setWindowSize] = useState(5); const [w2vEpochs, setW2vEpochs] = useState(50); const [showAdvanced, setShowAdvanced] = useState(false); const [initLoading, setInitLoading] = useState(false); const [error, setError] = useState(""); useEffect(() => { api.w2vStatus().then(res => { if (res.ready) { onReady(true, { vocab_size: res.vocab_size!, sentences: res.sentences!, vector_size: res.vector_size! }); } setStatusChecked(true); }).catch(() => setStatusChecked(true)); }, []); async function handleTrainFromEngine() { setInitLoading(true); setError(""); try { const res = await api.w2vInitFromEngine({ vector_size: vectorSize, window: windowSize, epochs: w2vEpochs, }); onReady(true, { vocab_size: res.vocab_size, sentences: res.sentences, vector_size: res.vector_size }); } catch (err) { setError(getErrorMessage(err)); } finally { setInitLoading(false); } } if (!statusChecked) { return
Checking Word2Vec status...
Static embeddings trained on all documents loaded in the engine. Training runs once and persists across restarts.
{showAdvanced && (