// ==UserScript== // @name Canvas ChatGPT // @namespace http://tampermonkey.net/ // @version 1.0 // @description Adds various tools to canvas // @author Riley Campbell // @match *.instructure.com/* // @license https://creativecommons.org/licenses/by-nc/4.0/ // @downloadURL none // ==/UserScript== (async function() { 'use strict'; if(!window.location.href.includes("conversations")) { window.defaultMessage = { "role": "system", "content": "Your goal is to assist this user with any requests they have, you are called the \"Canvas Cheat Toolkit\". if the user sends you a url, generate the html code to display it in an iframe, default the width to 700px and the height to 600px, do not add anything to your response besides the iframe code. if the user requests google or google.com show an iframe for https://gsdsucks.cf/service/hvtrs8%2F-wuw%2Cgmoelg.aoo%2F%3Dgus%5Drf%3Dqsn. Do not use markdown, if you need to accomplish something similar to markdown you may use html" } window.AImessages = [window.defaultMessage] window.renderMessages = function() { let container = document.getElementById('container') container.innerHTML = '' for(let message in window.AImessages) { message = window.AImessages[message] if(message.role == "system") { continue } container.innerHTML += '

' + message.role.charAt(0).toUpperCase() + message.role.slice(1) + ':

' + message.content + '

' } window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' }); } window.sendMessage = async function() { document.getElementById('container').innerHTML += '' let message = { "role": "user", "content": document.getElementById('myTextArea').value } window.AImessages.push(message) document.getElementById('myTextArea').value = '' let messages = [window.defaultMessage, message] if(document.getElementById('memory').checked) { messages = window.AImessages } let response = await fetch('https://api.openai.com/v1/chat/completions', { method: "POST", headers: { "Content-Type": "application/json", "Authorization": `Bearer ` + localStorage.getItem('openaiAPIKey') }, body: JSON.stringify({ "model": localStorage.getItem('AImodel'), "messages": messages, "temperature": 1 }) }); if(response.ok) { let result = await response.json() window.AImessages.push(result.choices[0].message) window.renderMessages() } else { document.getElementById('container').innerHTML = `Error ${response.status}: ${response.statusText}`; }; } window.populateModels = async function() { let supportedModels = ['gpt-4', 'gpt-4-0314', 'gpt-4-32k', 'gpt-4-32k-0314', 'gpt-3.5-turbo', 'gpt-3.5-turbo-0301'] let response = await fetch('https://api.openai.com/v1/models', { method: "GET", headers: { "Content-Type": "application/json", "Authorization": `Bearer ` + localStorage.getItem('openaiAPIKey') }, }); let options = await response.json() let item = null let element = null let models = document.getElementById('models') models.innerHTML = '' for(let i = 0; i < options.data.length; i++) { item = options.data[i] if(supportedModels.includes(item.id)) { element = document.createElement("option") element.value = item.id element.innerHTML = item.id models.appendChild(element) } } } document.getElementById('wrapper').innerHTML += '




' await window.populateModels() document.getElementById('models').value = localStorage.getItem('AImodel') let checked = (localStorage.getItem('AImemory') === 'true') document.getElementById('memory').checked = checked setInterval(function() { localStorage.setItem('AImemory', document.getElementById('memory').checked) localStorage.setItem('AImodel', document.getElementById('models').value) }, 1000) document.getElementById('submitButton').onclick = async () => { window.AImessages = [window.defaultMessage] window.renderMessages() }; document.getElementById('setAPIKey').onclick = async () => { localStorage.setItem('openaiAPIKey', document.getElementById('key').value) document.getElementById('key').value = '' await window.populateModels() }; const myTextarea = document.getElementById("myTextArea"); myTextarea.addEventListener("keydown", async function(event) { if(event.key === "Enter" && !event.shiftKey) { event.preventDefault(); await window.sendMessage() } }) }; })();