const themodel = "gpt-3.5-turbo"; // the OpenAI model we are going to talk to
const openaiURL = "https://api.openai.com/v1/chat/completions"; // can POST to this 3rd party URL
// default API key and prompt:
var apikey = "";
var theprompt = "hello";
document.write(`
// Cloned by Aarekh Rana on 22 Nov 2023 from World "Chat with GPT model" by Starter user
// Please leave this clone trail here.
// talk to OpenAI GPT model (ChatGPT)
// adapted from: https://platform.openai.com/docs/api-reference/making-requests
// default body is margin 0 and padding 0
// give it more whitespace:
$('body').css("margin", "20px");
$('body').css("padding", "20px");
document.write(
<h1> Chat with GPT model </h1>
Running World:
<a href='https://ancientbrain.com/world.php?world=2850716357'>Chat with GPT model</a>.
<br>
Chat with
<a href="https://platform.openai.com/docs/models/overview">GPT 3.5</a>
using the
<a href="https://en.wikipedia.org/wiki/OpenAI">OpenAI </a> API.
<br>
This is the model
<a href="https://en.wikipedia.org/wiki/ChatGPT">ChatGPT</a> uses.
<pre></pre>
<h3> Enter API key </h3>
The crucial thing is you need an "API key" to talk to OpenAI. <br>
Register for free and get your API key
<a href='https://platform.openai.com/account/api-keys'>here</a>.
<br>
You enter your API key below and then chat away.
Then communications to OpenAI come from your IP address using your API key.
<br>
This World will never store your API key.
You can view the <a href='https://ancientbrain.com/viewjs.php?world=2850716357'> source code</a> to see that is true!
<p>
<div id=enterkey>
Enter API key:
<input style='width:25vw;' maxlength='2000' NAME="apikey" id="apikey" VALUE=''>
<button onclick='setkey();' class=ab-normbutton >Set API key</button>
</div>
<pre></pre>
<div style="width:60vw; background-color:white; border: 1px solid black; margin:20; padding: 20px;">
<h3> Enter a "prompt" </h3>
<input style="width:50vw;" id=me value="Enter the URL of a cricketer's image" >
<button onclick="sendchat();" class=ab-normbutton > Send </button>
</div>
<div style="width:60vw; background-color:#ffffcc; border: 1px solid black; margin:20; padding: 20px;">
<h3> GPT replies </h3>
<div id=them> </div>
</div>
<button onclick="clearScreen();" class=ab-normbutton >Clear Screen</button>
<p> <i> Be warned that GPT replies are often completely inaccurate.<br>
All LLM systems <a href="https://www.google.com/search?q=llm+hallucination"> "hallucinate"</a>.
It is how they work. </i> </p>
<pre></pre>
<div id="drawing-section" style="width: 60vw; background-color: #ccffff; border: 1px solid black; margin: 20; padding: 20px;">
<h3> Drawing Section </h3>
<!-- Add your drawing elements here -->
</div>
`);
function setkey() {
apikey = jQuery("input#apikey").val();
apikey = apikey.trim();
$("#enterkey").html("<b> API key has been set. </b>");
}
function parseCricketerDetails(details) {
try {
// Attempt to parse the details as JSON
var cricketerData = JSON.parse(details);
return cricketerData;
} catch (error) {
console.error("Error parsing cricketer details:", error);
return null;
}
}
// Enter will also send chat:
document.getElementById('me').onkeydown = function (event) { if (event.keyCode == 13) sendchat(); };
// --- Send my line of text ----------------------------------------------------------------
function sendchat() {
theprompt = $("#me").val();
// construct request as JSON
var thedata = {
"model": themodel,
"temperature": 0.7,
"messages": [{
"role": "user",
"content": theprompt
}]
};
// then as string representing that JSON:
var thedatastring = JSON.stringify(thedata);
// HTTP headers must be set up with API key:
$.ajaxSetup({
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer " + apikey
}
});
// POST to 3rd party URL:
$.ajax({
type: "POST",
url: openaiURL,
data: thedatastring,
dataType: "json",
success: function (d, rc) { successfn(d, rc); },
error: function () { errorfn(); }
});
}
// global variable to examine return data in console
var a;
function successfn(data, rc) {
a = data;
var answer = a["choices"][0].message.content;
// Display the name, runs, and ranking in the drawing section
displayCricketerDetails(answer);
// Run the code received from GPT and display the result in the drawing section
runReceivedCode(answer);
}
function errorfn() {
if (apikey == "") $("#them").html("<font color=red><b> Enter API key to be able to chat. </b></font>");
else $("#them").html("<font color=red><b> Unknown error. </b></font>");
}
function clearScreen() {
$("#them").html("");
$("#drawing-section").html(""); // Clear the drawing section
}
function runReceivedCode(code) {
// Implement the logic to run the received code and display the result in the drawing section
// For example, you can use eval() to execute the code
try {
eval(code);
} catch (error) {
console.error("Error executing received code:", error);
$("#drawing-section").html(`<p style="color: red;">Error executing received code. See console for details.</p>`);
}
}
function displayCricketerDetails(details) {
// Extract cricketer details from the GPT response and display in the drawing section
// You may need to parse the details based on the format of the GPT response
var cricketerDetails = parseCricketerDetails(details);
// Display the cricketer details in the drawing section
}