<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>LLM Clinical Data</title> <script src="//cdnjs.cloudflare.com/ajax/libs/annyang/2.6.1/annyang.min.js"></script> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script> "use strict"; var mode_pesanan = false; var mode_tanya = false; var bicara=annyang // first we make sure annyang started succesfully if (bicara) { // define the functions our commands will run. var hello = function(text) { $("#prompt-input").slideDown("slow"); scrollTo("#prompt-input"); if (mode_tanya==false) { $("#prompt-input").val(""+text) mode_tanya = true } else { let prev= $("#prompt-input").val() $("#prompt-input").val(prev+" "+text) } //console.log($("#prompt-input").val()) $("#AppTitle").val("Tanya") }; var pesanan = function(text) { console.log("|"+text+"|") if (text=="lanjut" || text=="masuk") { submitButton(); } else { $("#prompt-input").slideDown("slow"); scrollTo("#prompt-input"); if (mode_pesanan==false) { $("#prompt-input").val("@ "+text) mode_pesanan = true } else { let prev= $("#prompt-input").val() $("#prompt-input").val(prev+" "+text) } } }; var warna = function() { $("#warna").slideDown("slow"); scrollTo("#section_warna"); }; var warna_minuman = function() { $("#warna_minuman").slideDown("slow"); scrollTo("#section_warna_minuman"); }; var rasa = function() { $("#rasa").slideDown("slow"); scrollTo("#section_rasa"); }; var aroma = function() { $("#aroma").slideDown("slow"); scrollTo("#section_aroma"); }; var tutup = function() { $("#hello1").hide(); $("#section_hello").hide(); $("#section_warna").hide(); $("#section_rasa").hide(); $("#section_aroma").hide(); scrollTo("#section_hello"); }; var submitButton = function() { $("#button-input").slideDown("slow"); scrollTo("#button-input"); $("#button-input").click() console.log("LANJUT") mode_pesanan = false mode_tanya = false }; var getStarted = function() { window.location.href = 'https://arafaasia.com'; } // define our commands. // * The key is the phrase you want your users to say. // * The value is the action to do. // You can pass a function, a function name (as a string), or write your function as part of the commands object. var commands = { 'halo *teman': hello, 'tanya *teman': hello, 'pesanan *teman': pesanan, '*teman': pesanan, 'lanjut': submitButton, 'masuk': submitButton, }; // OPTIONAL: activate debug mode for detailed logging in the console bicara.debug(); bicara.addCommands(commands); bicara.setLanguage('id-ID'); // en // Start listening. You can call this here, or attach this call to an event, button, etc. bicara.start(); } else { $(document).ready(function() { $('#unsupported').fadeIn('fast'); }); } var scrollTo = function(identifier, speed=1000) { //console.log(identifier, speed) $(identifier).show(); $('html, body').animate({ // scrollTop: $(identifier).offset().top }, speed || 1000); } </script> <style> .table { display:table; height:100%; border:1px solid #000; } .row2 { display:table-row; height:100%; } .cell1, .cell2, .cell3 { display:table-cell; width:33%; height:auto; border:1px solid #CCC; } #section_warna { background-color: #ADAD03; color: #fff; } #section_rasa { background-color: #03AD77; color: #fff; } #section_aroma { background-color: #6503AD; color: #fff; } </style> <style> figure { display: flex inline; justify-content: space-between; border: 1px #cccccc solid; padding: 4px; margin: auto; } figcaption { background-color: #ADAD03; color: white; font-style: italic; padding: 0px; text-align: center; font-size: 14px; } .container { background: white; margin: 0 auto; padding: 5%; width: 90%; } .img_ds1 { width: 80%; height: auto horizontal-align: center; } .img_ds { width: 100%; height: 100%; // auto vertical-align: middle; } .pics_in_a_row { display: flex; } .img1 { flex: 1.5; } .img2 { flex: 1.5; } .img3 { flex: 1.5; } .pics_in_a_row { margin: 25px 0; } .pics_in_a_row > div:not(:last-child) { margin-right: 2%; } </style> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <style> main { max-width: 700px; } #conversation .user::before { content: 'Anda: '; font-weight: bold; display: block; } #conversation .model::before { content: 'AI: '; font-weight: bold; display: block; } #spinner { opacity: 0; transition: opacity 500ms ease-in; width: 30px; height: 30px; border: 3px solid #222; border-bottom-color: transparent; border-radius: 50%; animation: rotation 1s linear infinite; } @keyframes rotation { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } #spinner.active { opacity: 1; } </style> <style> {box-sizing: border-box;} /* Button used to open the contact form - fixed at the bottom of the page */ .open-button { background-color: #555; color: white; padding: 10px 10px; border: none; cursor: pointer; opacity: 0.8; position: fixed; bottom: 23px; right: 30%; width: 280px; } /* The popup form - hidden by default */ .form-popup { display: none; position: fixed; bottom: 0; right: 30%; border: 3px solid #f1f1f1; z-index: 9; } /* Add styles to the form container */ .form-container { max-width: 300px; padding: 10px; background-color: white; font-size: 12px; } /* Full-width input fields */ .form-container input[type=text], .form-container input[type=password] { width: 100%; padding: 2px; margin: 1px 0 2px 0; border: none; background: #f1f1f1; } /* When the inputs get focus, do something */ .form-container input[type=text]:focus, .form-container input[type=password]:focus { background-color: #ddd; outline: none; } /* Set a style for the submit/login button */ .form-container .btn { background-color: #04AA6D; color: white; padding: 10px 10px; border: none; cursor: pointer; width: 100%; margin-bottom:10px; opacity: 0.8; } /* Add a red background color to the cancel button */ .form-container .cancel { background-color: red; } .form-container .umum { background-color: grey; } /* Add some hover effects to buttons */ .form-container .btn:hover, .open-button:hover { opacity: 1; } </style> <script> function openForm() { document.getElementById("myForm").style.display = "block"; } function closeForm() { document.getElementById("myForm").style.display = "none"; } function closeAiForm(id) { document.getElementById("myaiForm"+id).style.display = "none"; document.getElementById("myaiForm2"+id).style.display = "block"; } function openAiForm(id) { document.getElementById("myaiForm"+id).style.display = "block"; document.getElementById("myaiForm2"+id).style.display = "none"; } function abcde(id) { alert("abcde:"+id); } </script> </head> <body> <main class="border rounded mx-auto my-5 p-4"> <h1 id="AppTitle">Clinical Data</h1> <p>Mengubah text tentang konsultasi pasien ke dokter, menjadi JSON atau Form</p> <p>Ucapkan misalnya "Budiman hari ini konsultasi ke dokter mengeluh sudah batuk selama dua hari dan belum reda batuknya, dia merasa sedikit pusing dan mual", lanjutkan dengan "masuk" atau "lanjut"</p> <div id="conversation" class="px-2"></div> <div class="d-flex justify-content-center mb-3"> <div id="spinner"></div> </div> <form method="post"> <input id="prompt-input" name="prompt" class="form-control"/> <div class="d-flex justify-content-end"> <button id="button-input" class="btn btn-primary mt-2">Send</button> </div> </form> <div id="error" class="d-none text-danger"> Erro occurred, check the browser developer console for more information. </div> </main> </body> </html> <script src="https://cdnjs.cloudflare.com/ajax/libs/typescript/5.6.3/typescript.min.js" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script type="module"> // to let me write TypeScript, without adding the burden of npm we do a dirty, non-production-ready hack // and transpile the TypeScript code in the browser // this is (arguably) A neat demo trick, but not suitable for production! async function loadTs() { const response = await fetch('/chat_app.ts'); const tsCode = await response.text(); const jsCode = window.ts.transpile(tsCode, { target: "es2015" }); let script = document.createElement('script'); script.type = 'module'; script.text = jsCode; document.body.appendChild(script); } loadTs().catch((e) => { console.error(e); document.getElementById('error').classList.remove('d-none'); document.getElementById('spinner').classList.remove('active'); }); </script>