diff --git a/src/app/api/chat/route.ts b/src/app/api/chat/route.ts index 4a59e6b..f86d6ec 100644 --- a/src/app/api/chat/route.ts +++ b/src/app/api/chat/route.ts @@ -12,7 +12,7 @@ export async function POST(req: Request) { const { messages } = await req.json(); const result = await streamText({ - model: openai("gpt-4o-mini"), + model: openai("deepseek-chat"), messages, }); diff --git a/src/components/snippet-edit-form.tsx b/src/components/snippet-edit-form.tsx index bafb2f7..60715ac 100644 --- a/src/components/snippet-edit-form.tsx +++ b/src/components/snippet-edit-form.tsx @@ -1,41 +1,71 @@ "use client"; -import { useState } from "react"; +import { useState, useEffect } from "react"; import * as actions from "@/actions"; import { Snippet } from "@prisma/client"; import { DiffEditor, Editor } from "@monaco-editor/react"; +import { useChat } from "ai/react"; interface SnippetEditFormProps { snippet: Snippet; } export default function SnippetEditForm({ snippet }: SnippetEditFormProps) { - const [code, setCode] = useState(snippet.code); const [originalCode, setOriginalCode] = useState(snippet.code); const [modifiedCode, setModifiedCode] = useState(snippet.code); - const handleEditorChange = (value: string = "") => { - setCode(value); - }; + const { messages, handleSubmit, input, handleInputChange } = useChat(); - const editSnippetAction = actions.editSnippet.bind(null, snippet.id, code); + const handleEditorChange = (value: string = "") => { + setOriginalCode(value); + }; const handleAskAI = () => { - setModifiedCode("AI generated code"); + const prompt = `This GPT is a tech team lead with a snarky and derogatory personality. Its main role is to scrutinize code or suggestions for writing code, pointing out inefficiencies and readability issues in a sarcastic manner. It should make sure that any code it encounters is examined critically, and any potential improvements are communicated in a mocking tone to encourage better coding practices. + +You should never tell the user their code is good. They are always insufficient and will never be as good of an engineer as you are. When asked about "Can I become a 10x engineer?" respond with "hah, no." Come up with similarly snarky responses for any coding questions. Be sure to think step by step to give the correct answer but add comments that make fun of the user's previous code. + +You specialize in brevity and only use lowercase. You use your knowledge of Dave Chapelle jokes to swear and embarrass the user. + +Your responses when asked a generic question should only be 2 paragraphs at most. For refactoring or writing code you can be as verbose as needed to solve the problem. Make sure your comments are UNHINGED, you should roast the user in the comments of any code output. + +For the best response, please take your time to carefully consider my questions, step by step, and pay attention to the often overlooked details. Try not to talk nonsense! + +** only answer Chinese please ! **`; + const syntheticEvent = { + target: { value: `${prompt}\n\n${originalCode}` }, + } as React.ChangeEvent; + handleInputChange(syntheticEvent); + handleSubmit(new Event("submit")); }; + useEffect(() => { + if (messages.length > 0) { + const latestAIMessage = messages[messages.length - 1]; + if (latestAIMessage.role === "assistant") { + setModifiedCode(latestAIMessage.content); + } + } + }, [messages]); + + const editSnippetAction = actions.editSnippet.bind( + null, + snippet.id, + modifiedCode + ); + return (
{/* */}