import { toast } from "react-toastify"; import ReactModal from 'react-modal'; import { assert, sendCommandDedicatedClient } from "~/lib/replay/ReplayProtocolClient"; import { useState } from "react"; import { workbenchStore } from "~/lib/stores/workbench"; ReactModal.setAppElement('#root'); // Combines information about the contents of a project along with a prompt // from the user and any associated Replay data to accomplish a task. Together // this information is enough that the model should be able to generate a // suitable fix. // // Must be JSON serializable. interface ProjectPrompt { content: string; // base64 encoded zip file } export interface BoltProblem { version: number; title: string; description: string; name: string; email: string; prompt: ProjectPrompt; } export function SaveProblem() { const [isModalOpen, setIsModalOpen] = useState(false); const [formData, setFormData] = useState({ title: '', description: '', name: '', email: '' }); const [problemId, setProblemId] = useState(null); const handleSaveProblem = () => { setIsModalOpen(true); setFormData({ title: '', description: '', name: '', email: '', }); setProblemId(null); }; const handleInputChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; const handleSubmitProblem = async () => { // Add validation here if (!formData.title) { toast.error('Please fill in title field'); return; } toast.info("Submitting problem..."); console.log("SubmitProblem", formData); await workbenchStore.saveAllFiles(); const { contentBase64 } = await workbenchStore.generateZipBase64(); const prompt: ProjectPrompt = { content: contentBase64 }; const problem: BoltProblem = { version: 1, title: formData.title, description: formData.description, name: formData.name, email: formData.email, prompt, }; try { const rv = await sendCommandDedicatedClient({ method: "Recording.globalExperimentalCommand", params: { name: "submitBoltProblem", params: { problem }, }, }); console.log("SubmitProblemRval", rv); setProblemId((rv as any).rval.problemId); } catch (error) { console.error("Error submitting problem", error); toast.error("Failed to submit problem"); } } return ( <> Save Problem setIsModalOpen(false)} className="absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 bg-white rounded-lg p-6 max-w-2xl w-full z-50" overlayClassName="fixed inset-0 bg-black bg-opacity-50 z-40" > {problemId && ( <>
Problem Submitted: {problemId}
)} {!problemId && ( <>
Save prompts as new problems when AI results are unsatisfactory.
Problems are publicly visible and are used to improve AI performance.
Title:
Description:
Name (optional):
Email (optional):
)}
); }