import { AxiosError } from "axios"; import { MagicWandIcon, ReloadIcon } from "@radix-ui/react-icons"; import { useState } from "react"; import { useMutation } from "@tanstack/react-query"; import { getClient } from "@/api/AxiosClient"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; import { SwitchBar } from "@/components/SwitchBar"; import { toast } from "@/components/ui/use-toast"; import { useCredentialGetter } from "@/hooks/useCredentialGetter"; import { ImprovePromptForWorkflowResponse } from "@/routes/workflows/types/workflowTypes"; interface Props { context?: Record; isVisible?: boolean; onBegin?: () => void; onEnd?: () => void; onImprove: (improvedPrompt: string) => void; prompt: string; size?: "small" | "large"; useCase: string; } function ImprovePrompt(props: Props) { const { size = "large" } = props; const credentialGetter = useCredentialGetter(); const [showImproveDialog, setShowImproveDialog] = useState(false); const [improvedPrompt, setImprovedPrompt] = useState(""); const [originalPrompt, setOriginalPrompt] = useState(""); const [selectedPromptVersion, setSelectedPromptVersion] = useState< "improved" | "original" >("improved"); const improvePromptMutation = useMutation({ mutationFn: async ({ prompt }: { prompt: string }) => { props.onBegin?.(); const client = await getClient(credentialGetter, "sans-api-v1"); const result = await client.post< { prompt: string }, { data: ImprovePromptForWorkflowResponse } >(`/prompts/improve?use-case=${props.useCase}`, { context: props.context, prompt, }); return result; }, onSuccess: ({ data: { error, improved, original } }) => { props.onEnd?.(); if (error) { console.error("Error improving prompt:", error); toast({ variant: "default", title: "We're sorry - we could not improve upon the prompt at this time.", description: `Please try again later.\n\n[${error}]`, }); return; } setImprovedPrompt(improved); setOriginalPrompt(original); setSelectedPromptVersion("improved"); setShowImproveDialog(true); }, onError: (error: AxiosError) => { props.onEnd?.(); toast({ variant: "destructive", title: "Error improving prompt", description: error.message, }); }, }); return (
{improvePromptMutation.isPending ? ( ) : ( { improvePromptMutation.mutate({ prompt: props.prompt, }); }} />

Have AI improve your prompt!

)} Choose Your Prompt Select which version of the prompt you'd like to use
setSelectedPromptVersion(value as "improved" | "original") } />

{selectedPromptVersion === "improved" ? improvedPrompt : originalPrompt}

); } export { ImprovePrompt };