Code viewer for World: New World
 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
       
}