From 017963d8c4899d31d9a5b43574ec8915512ffeec Mon Sep 17 00:00:00 2001 From: "Steve L. Nyemba" <steve.l.nyemba@vumc.org> Date: Fri, 28 Mar 2025 03:09:43 +0000 Subject: [PATCH] Upload files to "www/html" --- www/html/index.html | 125 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 102 insertions(+), 23 deletions(-) diff --git a/www/html/index.html b/www/html/index.html index c314d9f..20a7de3 100644 --- a/www/html/index.html +++ b/www/html/index.html @@ -1,24 +1,28 @@ <link href="www/html/_assets/themes/common.css" type="text/css" rel="stylesheet"> <script src="www/html/_assets/js/assistant.js"></script> +<script src="www/html/_assets/js/audio.js"></script> <script> var chat = {get:{}} // var _assistant = new Assistant() chat.get.id = function (_index){ return (['.llm-pane-',_index,' .answer .llm-answer']).join('') } - chat.read = function (_index){ - var _id = (['.llm-pane-',_index,' .answer .llm-answer']).join('') - var text = $(_id).text() + chat.read = function (_data, uri){ + // var _id = (['.llm-pane-',_index,' .answer .llm-answer']).join('') + // var text = $(_id).text() // Assistant.speak(text) // // We need to submit the box to retrieve the audio file and transcript // - _args = {title:'{{layout.header.title}} Transcript Reader',uri:'www/html/transcript.html',context:'{{system.context}}'} - uri = '{{system.context}}/api/medix/audio?token='+$('.chat').attr('token')+'&index='+_index - uri = uri.replace(/\/\//g,'/') + _args = {title:'{{layout.header.title}} Transcript Reader','uri':'www/html/transcript.html',context:'{{system.context}}'} + // uri = '{{system.context}}/api/medix/audio?token='+$('.chat').attr('token')+'&index='+_index + // uri = uri.replace(/\/\//g,'/') dialog.show(_args,()=>{ - + text = (_data.constructor == String)?_data :_data.summary $('.jxmodal .text').html(text) + // const audioBlob = getAudio(uri); + // const uri = URL.createObjectURL(audioBlob); + $('audio').attr('src',uri) $('audio')[0].play() @@ -27,7 +31,6 @@ }) - // console.log(uri) } chat.print = function (){ @@ -62,9 +65,12 @@ chat.delete = function (_index){ var _id = '.llm-pane-'+_index $(_id).remove() - if ($(_id).children().length == 0){ + if ($('.logs').children().length == 0){ $('.logs').animate({'height':'42%'}) } + $('.logs').children().each((_index)=>{ + $('.logs').children()[_index].className = 'llm-pane-'+_index + }) } chat.support = function(_index){ // dialog.show({message:'Work in progress'}) @@ -80,6 +86,7 @@ var height = $('.chat').height() - $('.question-input').height() - 16 - 48 $('.logs').animate({'height':height}) var _index = $('.logs').children().length + var _index = $('.logs').attr('count') == null? 0 : parseInt($('.logs').attr('count')) var _q = $('textarea').val().trim() var uri = '{{system.context}}/api/medix/answer' // @@ -103,6 +110,9 @@ var _data = JSON.parse(x.responseText) $('.chat').attr('token',_data.token) chat.answer.render(_data) + $('.logs').attr('count', _index + 1) + + } }) }else{ @@ -118,45 +128,114 @@ if (_q.length > 0){ // // Add read, documents, delete buttons - _delete = ['<div class="active" align="center" title="Delete Question" onclick="chat.delete(',_index,')"><i class="fa-solid fa-trash"></i></div>'] - var _html = ['<div class="llm-pane-',_index,'"> <div class="border-round border question-frame"><div><i class="fa-solid fa-user fa-2x"></i></div><div class="question">',_q,'</div>',_delete.join(''),'</div> <div class="answer-frame"> </div></div>'] - _html = _html.join('') + _rmclick = $('<div class="active" align="center" title="Delete Question"><i class="fa-solid fa-trash"></i></div>').on('click',function(){ + var _parent = $(this).parent () + $($(_parent).parent()).remove() + if ($('.logs').children().length == 0){ + $('.logs').animate({'height':'42%'}) + } + }) + _pane = $('<div></div>').attr('class','llm-pane-'+_index) + _qframe = $('<div></div>').attr('class','border-round border question-frame') + _qframe.append( $('<div><i class="fa-solid fa-user fa-2x"></i></div>'),$('<div class="question">'+_q+'</div>'), $(_rmclick) ) - $('.logs').append(_html) + _aframe = $('<div class="answer-frame"></div>') + + $(_pane).append(_qframe,_aframe) + + $('.logs').append(_pane) $('textarea').val('') + } } chat.answer = {} - chat.answer.render = function (_answer){ + chat.answer.render = function (data){ var _index = $('.answer-frame').length - 1 - if (_answer == null){ + // _id = '.llm-pane-'+_index+' ' + if (data == null){ var _html = ['<div class="answer border-round border"><div class="answer-status"><i class="fa-solid fa-cog fa-spin fa-2x" style="color:gray"></i></div></div>'] _html =$( _html.join('')) $($('.answer-frame')[_index]).append(_html) }else{ - _action = ['<div class="active" align="center" title="read out" onclick="chat.read(',_index,')"><i class="fa-solid fa-volume-high"></i></div>'] - _action.push('<div class="active" align="center" title="supporting documents" onclick="chat.support(',_index,')"><i class="fa-solid fa-file"></i></div>') + // _action = ['<div class="active" align="center" title="read out" onclick="chat.read("',data.answer+'","'+data.stream,'")"><i class="fa-solid fa-volume-high"></i></div>'] + _readclick = $('<div class="active" align="center" title="read out"> <i class="fa-solid fa-volume-high"></i></div>').attr('data', JSON.stringify(data)).on('click',function(){ + var _data = JSON.parse( $( this).attr('data')) + + chat.read(_data.answer,_data.stream) + }) + + + _suppclick = $('<div class="active" align="center" title="supporting documents" ><i class="fa-solid fa-file"></i></div>').attr('_index',_index).on('click',function(){ + var _index = parseInt($(this).attr('_index')) + chat.support(_index) + }) + + _expandclick = $('<div class="active" align="center" title="detailed answer"><i class="fa-solid fa-plus"></i></div>').attr('data', JSON.stringify(data)).attr('_index',_index).on('click',function (){ + // + // Expand or life up + var _child = $(this).children()[0] + var _stat = $(_child).attr('class') + var _index= parseInt($(this).attr('_index')) + $(_child).remove() + var _detail = $('.llm-pane-'+_index+' .llm-detail') + if (_stat.match(/.*fa-plus$/ig)){ + $(this).attr('title','collpase detail') + $(this).append('<i class="fa-solid fa-minus"></i>') + $(_detail).slideDown() + }else{ + $(this).attr('title','expand for detail') + $(this).append('<i class="fa-solid fa-plus"></i>') + $(_detail).slideUp() + } + // + // + + }) + + _buttons = $('<div class="border-left"></div>') + if (data.answer.constructor == String){ + $(_buttons).append(_readclick,_suppclick ) + }else{ + $(_buttons).append(_readclick,_expandclick, _suppclick ) + } + + // _action.push('<div class="active" align="center" title="supporting documents" onclick="chat.support(',_index,')"><i class="fa-solid fa-file"></i></div>') var _div = $('.answer')[_index] - var _html = ['<div class="llm-answer">',_answer.answer,'</div><div class="border-left">',_action.join(''), '</div>'] + // var _html = ['<div class="llm-answer">',data.answer,'</div><div class="border-left">',_action.join(''), '</div>'] - _html = $( _html.join('')) - $(_div).append(_html) - // $(_div).attr('data',_answer) - _div.data = _answer + var text = (data.answer.constructor == String)?data.answer: data.answer.summary + _html = $('<div class="llm-answer"></div>').html(text) //(data.answer) + if (data.answer.answer) { + _html.append( $('<div class="llm-detail"></div>').html('<br><div class="bold border-bottom">Details</div><br>'+data.answer.answer)) + } + // _html.append(_buttons) + + // _html = $( _html.join('')) + + $(_div).append(_html,_buttons) + // $('.llm-pane-'+_index+' .llm-detail').slideUp() + _div.data = data $('.answer-status').html('<i class="fa-solid fa-user-doctor fa-2x" style="color:#4682B4"></i>') + // + + + } // } - $(document).ready(()=>{ + $(document).ready(function(){ $('.logs').animate({'height':'42%'}) }) </script> +<style> + .llm-detail {display:none} +</style> <div class="chat border-round border"> <div align="right" style="background-color: #f3f3f3;" class="border-round-top-left border-round-top-right"> <div class="active" onclick="chat.print()" title="Print conversation" style="justify-self: right; width:100px" align="center"><i class="fa-solid fa-print"></i></div>