- content_for :head do meta name="turbo-cache-control" content="no-cache" ruby: all_languages = Language.pluck(:code, :name).to_h asr_models = AsrModel.all model_mapping = asr_models.includes(:languages).each_with_object({}) { |m, h| h[m.value] = m.languages.pluck(:code) } translatable_models = asr_models.where(supports_translate: true).pluck(:value) div#respondentPopup v-cloak="" data-controller="respondent-popup" data-respondent-type="#{@respondent.respondent_type}" data-languages="#{all_languages.to_json}" data-manual-languages="#{all_languages.to_json}" data-model-mapping="#{model_mapping.to_json}" data-translatable-models="#{translatable_models.to_json}" data-project-id="#{@project.id}" data-respondent-category-id="#{@respondent_category.id}" = simple_form_for([@project, @respondent_category, @respondent]) do |f| = f.error_notification .container-fluid .d-flex.align-items-center.justify-content-between.mb-3 .fs-24.medium - if @respondent.new_record? | Upload a conversation - else | Edit conversation .form-actions = f.button :submit, "Done", class: "btn btn-primary fs-12 medium px-5", ":disabled" => "uploadState.isUploading" .form-inputs .input-group.mb-3 label.fs-12.col-sm-2.col-form-label Type .col-sm-10 select class="form-control border-0 bg-light fs-12" placeholder="Select file type" v-model="respondentType" option value="" disabled=true Select file type option value="audio" Audio option value="video" Video option value="transcript" Transcript div v-if="respondentType == 'audio'" - if !@respondent.audio_file_file_name.nil? .alert.alert-primary.my-2 strong | #{t(:current_audio_file)}: | #{@respondent.audio_file_file_name} .input-group label.fs-12.col-sm-2.col-form-label Audio .col-sm-10 = f.input :audio_file, label: false, input_html: { class: "form-control bg-light fs-12", accept: "audio/*", '@change': 'handleFileSelect($event, "audio")'} div v-if="respondentType == 'video'" - if !@respondent.video_file_file_name.nil? .alert.alert-primary.my-2 strong | #{t(:current_video_file)}: | #{@respondent.video_file_file_name} .input-group label.fs-12.col-sm-2.col-form-label Video .col-sm-10 = f.input :video_file, label: false, input_html: { class: "form-control bg-light fs-12", accept: "video/*", '@change': 'handleFileSelect($event, "video")' } div v-if="respondentType == 'transcript'" - if !@respondent.transcript_file_name.nil? .alert.alert-primary.my-2 strong | #{t(:current_transcript_file)}: | #{@respondent.transcript_file_name} .input-group label.fs-12.col-sm-2.col-form-label Transcript .col-sm-10 = f.input :transcript, label: false, input_html: { class: "form-control bg-light fs-12", accept: ".docx", '@change': 'handleFileSelect($event, "transcript")' } div v-show="respondentType != 'transcript'" - if current_user.feature_enabled?(:model_selection) .input-group label.fs-12.col-sm-2.col-form-label Model .col-sm-10 - hidden = ["Model 1", "Model 1B", "Model 2"] - visible_models = asr_models.reject { |m| hidden.include?(m.name) }.map { |m| [m.name, m.value] } = f.input :asr_model, collection: visible_models, label: false, include_blank: false, input_html: { class: "form-control border-0 bg-light fs-12", 'v-model': 'selectedModel' } .input-group.mb-2 label.fs-12.col-sm-2.col-form-label | Audio Language .col-sm-10 input type="hidden" data-initial-language="#{@respondent.language}" select.form-control.border-0.bg-light.fs-12 name="respondent[language]" v-model="selectedLanguage" style="margin-top: 0;" option v-for="lang in availableLanguages" :value="lang.value" v-text="lang.text" div v-if="translatableModels.includes(selectedModel)" .input-group.mb-2 label.fs-12.col-sm-2.col-form-label | Translate span.custom-tooltip i.ms-2.bi.bi-info-circle.tooltip-icon span.tooltip-text | The generated transcription will be in English .col-sm-10.form-switch.mt-1 = f.check_box :translate, class: "form-check-input", input_html: {'type': 'checkbox', 'role': 'switch'} .input-group.mb-2 label.fs-12.col-sm-2.col-form-label | Speaker Count span.custom-tooltip i.ms-2.bi.bi-info-circle.tooltip-icon span.tooltip-text | Number of speakers in the conversation. Improves diarization quality. Provide an accurate count. Leave empty if unsure. .col-sm-10 = f.input :speaker_count, label: false, input_html: { class: "form-control border-0 bg-light fs-12", type: "number", min: 1, step: 1 } div v-if="respondentType == 'transcript'" .input-group.mb-2 label.fs-12.col-sm-2.col-form-label | Language .col-sm-10 input type="hidden" data-initial-manual-language="#{@respondent.manual_language}" select.form-control.border-0.bg-light.fs-12 name="respondent[manual_language]" v-model="selectedManualLanguage" style="margin-top: 0;" option v-for="lang in manualLanguageOptions" :value="lang.value" v-text="lang.text" .input-group label.fs-12.col-sm-2.col-form-label Name .col-sm-10 = f.input :first_name, label: false, input_html: { class: "form-control border-0 bg-light fs-12", maxlength: 40 } .input-group.d-flex.align-items-center label.fs-12.col-sm-2.col-form-label Specify Proper Nouns .col-sm-10.custom-choices input name="respondent[proper_nouns][]" type="text" class="form-control" multiple="multiple" value="#{@respondent.proper_nouns.join(" ,")}" id="properNounChoices" // Upload Progress at bottom of form div v-if="uploadState.isUploading" class="mt-4 p-3 bg-light rounded" .d-flex.align-items-center.justify-content-between.mb-2 .fw-bold.text-primary i.bi.bi-upload.me-2 | Uploading Files... small.text-muted Uploading... .mb-2 .progress style="height: 6px;" .progress-bar.progress-bar-striped.progress-bar-animated.bg-primary role="progressbar" :style="'width: ' + uploadState.progress + '%'" .text-center small.text-muted | {{ Math.round(uploadState.progress) }}% complete - Please don't close this window - if @respondent_category.index_name.present? || @project.index_name.present? .d-flex.align-items-center.mt-3 i.bi.bi-exclamation-octagon.text-orange.fs-20 span.text-orange.ms-2 This will reset the assistant and the chats!