const response = await openai.createCompletion({
/*
Challenge 1:
1. Add the newline character '\n' and separator
' ->' as a stop sequence.
*/
model: 'davinci:ft-scrimba-2023-03-29-13-42-07',
prompt: conversationStr,
presence_penalty: 0,
frequency_penalty: 0.3,
max_tokens: 100,
temperature: 0,
})
/*
Challenge 2:
2. Add something to the line below where we
update conversationStr.
*/
conversationStr += ` ${response.data.choices[0].text}`
renderTypewriterText(response.data.choices[0].text)
console.log(conversationStr)
}
function renderTypewriterText(text) {
const newSpeechBubble = document.createElement('div')
newSpeechBubble.classList.add('speech', 'speech-ai', 'blinking-cursor')
chatbotConversation.appendChild(newSpeechBubble)
let i = 0
const interval = setInterval(() => {
newSpeechBubble.textContent += text.slice(i-1, i)
if (text.length === i) {
clearInterval(interval)
newSpeechBubble.classList.remove('blinking-cursor')
}
i++
chatbotConversation.scrollTop = chatbotConversation.scrollHeight
}, 50)
}
import { Configuration, OpenAIApi } from 'openai'
import { process } from './env'
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
})
const openai = new OpenAIApi(configuration)
const chatbotConversation = document.getElementById('chatbot-conversation')
let conversationStr = ''
document.addEventListener('submit', (e) => {
e.preventDefault()
const userInput = document.getElementById('user-input')
conversationStr += ` ${userInput.value} ->`
fetchReply()
const newSpeechBubble = document.createElement('div')
newSpeechBubble.classList.add('speech', 'speech-human')
chatbotConversation.appendChild(newSpeechBubble)
newSpeechBubble.textContent = userInput.value
userInput.value = ''
chatbotConversation.scrollTop = chatbotConversation.scrollHeight
})
async function fetchReply(){