import { useState, useEffect } from "react"; import { Loader2, Rocket, ShieldCheck, Brain, ArrowUpRight, } from "lucide-react"; import type { LoadingStatus } from "../hooks/LLMContext"; import HfIcon from "./HfIcon"; interface LandingPageProps { onStart: () => void; status: LoadingStatus; isLoading: boolean; showChat: boolean; } const cards = [ { title: "Step-by-step reasoning", eyebrow: "REASONING MODEL", body: "LFM2.5-Thinking generates its reasoning process before producing final answers, improving accuracy on complex tasks like math, coding, and logic.", Icon: Rocket, }, { title: "Private edge inference", eyebrow: "LOCAL & PRIVATE", body: "WebGPU-accelerated browser inference ensures high performance. No data is sent to a server, and the demo can even run offline after the initial download.", Icon: ShieldCheck, }, { title: "Scaled reinforcement", eyebrow: "TRAINING PIPELINE", body: "The 1.2B parameter model benefits from extended pre-training on 28T tokens and large-scale multi-stage reinforcement learning for best-in-class performance.", Icon: Brain, }, ] as const; export function LandingPage({ onStart, status, isLoading, showChat }: LandingPageProps) { const [introFade, setIntroFade] = useState(true); useEffect(() => { const t = setTimeout(() => setIntroFade(false), 50); return () => clearTimeout(t); }, []); const hideMainContent = isLoading || showChat; const readyToStart = status.state === "ready"; return (
Liquid AI

LFM2.5 WebGPU Demo

Capable and efficient general-purpose AI systems at every scale

Capable reasoning.
Local inference.
WebGPU accelerated.

Run LFM2.5-1.2B-Thinking directly in your browser, powered by Transformers.js

{cards.map(({ eyebrow, title, body, Icon }, idx) => (

{eyebrow}

{title}

{body}

))}
{!readyToStart && (

~750 MB will be downloaded and cached locally for future sessions.

)}
Liquid AI

{status.state === "loading" ? (status.message ?? "Loading model…") : status.state === "error" ? "Error" : "Initializing…"}

{status.state === "error" && (

{status.error}

)}
); }