From f0c1658402218ae901e36d9e93534022ebf100a0 Mon Sep 17 00:00:00 2001 From: ricky zhao Date: Fri, 7 Apr 2023 15:59:34 -0700 Subject: [PATCH] feat: add history functionality to chatgpt --- src/pages/api/chatgpt.ts | 26 ++++++++++++++++++-------- src/pages/assistiveintel.tsx | 6 +++++- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/pages/api/chatgpt.ts b/src/pages/api/chatgpt.ts index 5507548..75aa57f 100644 --- a/src/pages/api/chatgpt.ts +++ b/src/pages/api/chatgpt.ts @@ -1,4 +1,4 @@ -import { Configuration, OpenAIApi } from "openai"; +import { Configuration, OpenAIApi, ChatCompletionRequestMessage } from "openai"; import {topics} from '../../constants/topic'; const configuration = new Configuration({ @@ -24,16 +24,26 @@ const constructPrompt = (topic: string, prompt='', language = 'javascript', leve return prompt; } } + export default async function chatGpt(req, res) { - const { prompt, language, level, position, topic } = req.body; + const { prompt, language, level, position, topic, history=[] } = req.body; const content = constructPrompt(topic, prompt, language, level, position); + const previousMessages = history.reverse(); + const messageLog: ChatCompletionRequestMessage[] = [{ role: 'system', content: 'You are a friendly chatbot.' }]; + previousMessages.forEach((message: string) => { + messageLog.push({ + role: 'user', + content: message, + }); + }); + + messageLog.push({ + role: "user", + content: content, + }); + const completion = await openai.createChatCompletion({ - messages: [ - { - role: "user", - content: content + '\n\n###\n\n', - } - ], + messages: messageLog, temperature: 0.7, max_tokens: 256, top_p: 1, diff --git a/src/pages/assistiveintel.tsx b/src/pages/assistiveintel.tsx index 75f4262..a84f390 100644 --- a/src/pages/assistiveintel.tsx +++ b/src/pages/assistiveintel.tsx @@ -44,6 +44,7 @@ export default function AssistiveIntel() { const [loading, setLoading] = useState(false) const [answer, setAnswer] = useState([]) const [tab, setTab] = useState('Tech Question') + const [history, setHistory] = useState([]) const [selectOptions, setSelectOptions] = useState<{ [key: string]: string }[]>([{position: 'frontend'}, {experience: 'junior'}]) const convertTabToTopic = (tab: string) => { @@ -70,21 +71,24 @@ export default function AssistiveIntel() { headers: { 'Content-Type': 'application/json', }, - body: JSON.stringify({ prompt: question, topic: convertTabToTopic(tab) }), + body: JSON.stringify({ prompt: question, topic: convertTabToTopic(tab), history }), }) const data = await response.json() setAnswer([...answer, {question: question, answer: data.result}]) + setHistory([...history, question, data.result]) setQuestion('') setLoading(false) } const clearResponse = async () => { setAnswer([]) + setHistory([]) } const changeTopic = (item: string) => { setTab(item); setAnswer([]); + setHistory([]); } const interviewRequest = async () => { setLoading(true)