Spaces:
Runtime error
Runtime error
| function finetune_ui_blocks_js() { | |
| // Auto load options | |
| setTimeout(function () { | |
| document.getElementById('finetune_reload_selections_button').click(); | |
| }, 100); | |
| // Add tooltips | |
| setTimeout(function () { | |
| tippy('#finetune_reload_selections_button', { | |
| placement: 'bottom-end', | |
| delay: [500, 0], | |
| animation: 'scale-subtle', | |
| content: 'Press to reload options.', | |
| }); | |
| tippy('#finetune_template', { | |
| placement: 'bottom-start', | |
| delay: [500, 0], | |
| animation: 'scale-subtle', | |
| content: | |
| 'Select a template for your prompt. <br />To see how the selected template work, select the "Preview" tab and then check "Show actual prompt". <br />Templates are loaded from the "templates" folder of your data directory.', | |
| allowHTML: true, | |
| }); | |
| tippy('#finetune_load_dataset_from', { | |
| placement: 'bottom-start', | |
| delay: [500, 0], | |
| animation: 'scale-subtle', | |
| content: | |
| '<strong>Text Input</strong>: Paste the dataset directly in the UI.<br/><strong>Data Dir</strong>: Select a dataset in the data directory.', | |
| allowHTML: true, | |
| }); | |
| tippy('#finetune_dataset_preview_show_actual_prompt', { | |
| placement: 'bottom-start', | |
| delay: [500, 0], | |
| animation: 'scale-subtle', | |
| content: | |
| 'Check to show the prompt that will be feed to the language model.', | |
| }); | |
| tippy('#dataset_plain_text_input_variables_separator', { | |
| placement: 'bottom', | |
| delay: [500, 0], | |
| animation: 'scale-subtle', | |
| content: | |
| 'Define a separator to separate input variables. Use "\\n" for new lines.', | |
| }); | |
| tippy('#dataset_plain_text_input_and_output_separator', { | |
| placement: 'bottom', | |
| delay: [500, 0], | |
| animation: 'scale-subtle', | |
| content: | |
| 'Define a separator to separate the input (prompt) and the output (completion). Use "\\n" for new lines.', | |
| }); | |
| tippy('#dataset_plain_text_data_separator', { | |
| placement: 'bottom', | |
| delay: [500, 0], | |
| animation: 'scale-subtle', | |
| content: | |
| 'Define a separator to separate different rows of the train data. Use "\\n" for new lines.', | |
| }); | |
| tippy('#finetune_dataset_text_load_sample_button', { | |
| placement: 'bottom-start', | |
| delay: [500, 0], | |
| animation: 'scale-subtle', | |
| content: | |
| 'Press to load a sample dataset of the current selected format into the textbox.', | |
| }); | |
| tippy('#finetune_evaluate_data_count', { | |
| placement: 'bottom', | |
| delay: [500, 0], | |
| animation: 'scale-subtle', | |
| content: | |
| 'While setting a value larger than 0, the checkpoint with the lowest loss on the evaluation data will be saved as the final trained model, thereby helping to prevent overfitting.', | |
| }); | |
| tippy('#finetune_save_total_limit', { | |
| placement: 'bottom', | |
| delay: [500, 0], | |
| animation: 'scale-subtle', | |
| content: | |
| 'Total amount of checkpoints to preserve. Older checkpoints will be deleted.', | |
| }); | |
| tippy('#finetune_save_steps', { | |
| placement: 'bottom', | |
| delay: [500, 0], | |
| animation: 'scale-subtle', | |
| content: | |
| 'Number of updates steps before two checkpoint saves.', | |
| }); | |
| tippy('#finetune_logging_steps', { | |
| placement: 'bottom', | |
| delay: [500, 0], | |
| animation: 'scale-subtle', | |
| content: | |
| 'Number of update steps between two logs.', | |
| }); | |
| tippy('#finetune_model_name', { | |
| placement: 'bottom', | |
| delay: [500, 0], | |
| animation: 'scale-subtle', | |
| content: | |
| 'The name of the new LoRA model. Must be unique.', | |
| }); | |
| tippy('#finetune_continue_from_model', { | |
| placement: 'bottom', | |
| delay: [500, 0], | |
| animation: 'scale-subtle', | |
| content: | |
| 'Select a LoRA model to train a new model on top of that model. You can also type in a model name on Hugging Face Hub, such as <code>tloen/alpaca-lora-7b</code>.<br /><br />π‘ To reload the training parameters of one of your previously trained models, select it here and click the <code>Load training parameters from selected model</code> button, then un-select it.', | |
| allowHTML: true, | |
| }); | |
| tippy('#finetune_continue_from_checkpoint', { | |
| placement: 'bottom', | |
| delay: [500, 0], | |
| animation: 'scale-subtle', | |
| content: | |
| 'If a checkpoint is selected, training will resume from that specific checkpoint, bypassing any previously completed steps up to the checkpoint\'s moment. <br /><br />π‘ Use this option to resume an unfinished training session. Remember to click the <code>Load training parameters from selected model</code> button and select the same dataset for training.', | |
| allowHTML: true, | |
| }); | |
| }, 100); | |
| // Show/hide start and stop button base on the state. | |
| setTimeout(function () { | |
| // Make the '#finetune_training_indicator > .wrap' element appear | |
| // if (!document.querySelector('#finetune_training_indicator > .wrap')) { | |
| // document.getElementById('finetune_confirm_stop_btn').click(); | |
| // } | |
| setTimeout(function () { | |
| let resetStopButtonTimer; | |
| document | |
| .getElementById('finetune_stop_btn') | |
| .addEventListener('click', function () { | |
| if (resetStopButtonTimer) clearTimeout(resetStopButtonTimer); | |
| resetStopButtonTimer = setTimeout(function () { | |
| document.getElementById('finetune_stop_btn').style.display = 'block'; | |
| document.getElementById('finetune_confirm_stop_btn').style.display = | |
| 'none'; | |
| }, 5000); | |
| document.getElementById('finetune_confirm_stop_btn').style['pointer-events'] = | |
| 'none'; | |
| setTimeout(function () { | |
| document.getElementById('finetune_confirm_stop_btn').style['pointer-events'] = | |
| 'inherit'; | |
| }, 300); | |
| document.getElementById('finetune_stop_btn').style.display = 'none'; | |
| document.getElementById('finetune_confirm_stop_btn').style.display = | |
| 'block'; | |
| }); | |
| // const training_indicator_wrap_element = document.querySelector( | |
| // '#finetune_training_indicator > .wrap' | |
| // ); | |
| const training_indicator_element = document.querySelector( | |
| '#finetune_training_indicator' | |
| ); | |
| let isTraining = undefined; | |
| function handle_training_indicator_change() { | |
| // const wrapperHidden = Array.from(training_indicator_wrap_element.classList).includes('hide'); | |
| const hidden = Array.from(training_indicator_element.classList).includes('hidden'); | |
| const newIsTraining = !(/* wrapperHidden && */ hidden); | |
| if (newIsTraining === isTraining) return; | |
| isTraining = newIsTraining; | |
| if (!isTraining) { | |
| if (resetStopButtonTimer) clearTimeout(resetStopButtonTimer); | |
| document.getElementById('finetune_start_btn').style.display = 'block'; | |
| document.getElementById('finetune_stop_btn').style.display = 'none'; | |
| document.getElementById('finetune_confirm_stop_btn').style.display = | |
| 'none'; | |
| } else { | |
| document.getElementById('finetune_start_btn').style.display = 'none'; | |
| document.getElementById('finetune_stop_btn').style.display = 'block'; | |
| document.getElementById('finetune_confirm_stop_btn').style.display = | |
| 'none'; | |
| } | |
| } | |
| // new MutationObserver(function (mutationsList, observer) { | |
| // handle_training_indicator_change(); | |
| // }).observe(training_indicator_wrap_element, { | |
| // attributes: true, | |
| // attributeFilter: ['class'], | |
| // }); | |
| new MutationObserver(function (mutationsList, observer) { | |
| handle_training_indicator_change(); | |
| }).observe(training_indicator_element, { | |
| attributes: true, | |
| attributeFilter: ['class'], | |
| }); | |
| handle_training_indicator_change(); | |
| }, 500); | |
| }, 0); | |
| return []; | |
| } | |