import { useEffect, useState } from "react"; import { apiPost } from "../../lib/api"; interface DataPreviewModalProps { onGenerate: () => void; onClose: () => void; isGenerating: boolean; sessionId: number; selectedIndices: number[]; } interface PreviewResponse { student_name: string; total_questions: number; wrong_count: number; markdown_prompt: string; } export function DataPreviewModal({ onGenerate, onClose, isGenerating, sessionId, selectedIndices, }: DataPreviewModalProps) { const [previewIdx, setPreviewIdx] = useState( selectedIndices.length > 0 ? selectedIndices[0] : 0 ); const [loading, setLoading] = useState(false); const [preview, setPreview] = useState(null); const [error, setError] = useState(""); useEffect(() => { setLoading(true); setError(""); setPreview(null); apiPost( `/api/sessions/${sessionId}/preview-student-prompt`, { student_index: previewIdx } ) .then(setPreview) .catch((e) => setError(e instanceof Error ? e.message : "Failed to load preview") ) .finally(() => setLoading(false)); }, [previewIdx, sessionId]); return (

🔍 最終提示詞預覽

{preview && ( <> {preview.student_name} 總題數 {preview.total_questions} 錯 {preview.wrong_count} )}

以下是實際送給 LLM 的完整提示詞(僅含該學生答錯的題目)

{loading ? (
) : error ? (
{error}
) : (