import { useState, useEffect } from "react"; import Link from "next/link"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogBody, } from "@/src/components/ui/dialog"; import { Input } from "@/src/components/ui/input"; import { Button } from "@/src/components/ui/button"; import { api } from "@/src/utils/api"; import { UsageDetailsEditor } from "./UsageDetailsEditor"; import { MatchedModelCard } from "./MatchedModelCard"; import { MatchedTierCard } from "./MatchedTierCard"; import { NoMatchDisplay } from "./NoMatchDisplay"; import { Loader2, CheckCircle, SquareArrowOutUpRight } from "lucide-react"; type TestModelMatchDialogProps = { projectId: string; open: boolean; onOpenChange: (open: boolean) => void; }; export type { TestModelMatchDialogProps }; export function TestModelMatchDialog({ projectId, open, onOpenChange, }: TestModelMatchDialogProps) { const [modelName, setModelName] = useState(""); const [usageDetails, setUsageDetails] = useState>({}); const [hasSubmitted, setHasSubmitted] = useState(false); // Query for match result - only enabled after submit const { data, isLoading, error, refetch } = api.models.testMatch.useQuery( { projectId, modelName, usageDetails, }, { enabled: false, // Manual trigger only }, ); // Handle form submission const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (modelName.trim()) { setHasSubmitted(true); void refetch(); } }; // Reset state when dialog closes useEffect(() => { if (!open) { setModelName(""); setUsageDetails({}); setHasSubmitted(false); } }, [open]); return (
Test Model Match Test which model and pricing tier your ingestion data would match against. {/* Left Column: Input Form */}
{/* Model Name Input */}
Model Name *
The model name on your generations.
setModelName(e.target.value.trim())} autoFocus required />
{/* Usage Details Editor */}
{/* Buttons at bottom of left column */}
{/* Vertical Divider */}
{/* Right Column: Results Panel */}
{hasSubmitted && ( <> {isLoading && (
Testing match...
)} {error && (
Error: {error.message}
)} {!isLoading && !error && data && ( <> {data.matched ? ( <>
Match Found
) : ( )} )} )}
{/* View Model Details button at bottom */} {hasSubmitted && !isLoading && !error && data?.matched && (
)}
); }