CoolFace
Apppublic

frammartina/pubmedqa-chatbot-2

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
script.js130 linesDownload Raw Back to root
1document.addEventListener("DOMContentLoaded", () => {2  const recordBtn = document.getElementById("start-recording");3  const sendBtn = document.getElementById("send-btn");4  const userInput = document.getElementById("question");5  const chatLog = document.getElementById("chat-log");6 7  let recognition;8  let isRecording = false;9 10  // Funzione per aggiungere messaggi al log11  function addMessage(text, sender) {12    const message = document.createElement("div");13    message.classList.add("message", sender);14    message.textContent = text;15    chatLog.appendChild(message);16    chatLog.scrollTop = chatLog.scrollHeight; // Auto-scroll17    // Scroll con animazione18  chatLog.scrollTo({19    top: chatLog.scrollHeight,20    behavior: "smooth"21  });22  }23 24  // Evento: invio input testuale25  sendBtn.addEventListener("click", () => {26    const text = userInput.value.trim();27    if (text) {28      addMessage(text, "user");29      userInput.value = ""; // Pulisce l'input30      fetchResponse(text);31    }32  });33 34  // Evento: start/stop registrazione vocale35  recordBtn.addEventListener("click", () => {36    if (!('webkitSpeechRecognition' in window)) {37      addMessage("Riconoscimento vocale non supportato nel browser.", "bot");38      return;39    }40 41    if (!isRecording) {42      recognition = new webkitSpeechRecognition();43      recognition.lang = "en-US";44      recognition.continuous = false;45      recognition.interimResults = false;46 47      // Aggiungo classe animazione al bottone48      recordBtn.classList.add("recording");49 50  51      recognition.onstart = () => {52        isRecording = true;53        recordBtn.textContent = "Stop Recording";54        addMessage("Recording question...", "bot");55      };56 57      recognition.onresult = (event) => {58        const transcript = event.results[0][0].transcript;59        addMessage(transcript, "user");60        fetchResponse(transcript);61      };62 63      recognition.onerror = (event) => {64        addMessage("Errore nel riconoscimento vocale: " + event.error, "bot");65      };66 67      recognition.onend = () => {68        isRecording = false;69        recordBtn.textContent = "Start Recording";70        addMessage("Recording stopped.", "bot");71         // Rimuovo animazione quando finisce la registrazione72        recordBtn.classList.remove("recording");73      };74     75 76      recognition.start();77 78    } else {79      // Stop registrazione se è già in corso80      recognition.stop();81    }82  });83 84  // Funzione per inviare la domanda al backend85 // Funzione per inviare la domanda al backend e leggere la risposta86async function fetchResponse(question) {87  addMessage("I'm thinking, be patient...", "bot");88 89  const context = "Fornisci il contesto dinamico o fisso qui";90  const longAnswer = "Fornisci la risposta lunga dinamica o fissa qui";91 92  try {93    const response = await fetch("https://frammartina-pubmedqa-chatbot-2.hf.space/chat", { 94    method: "POST",95    headers: { "Content-Type": "application/json" },96    body: JSON.stringify({97      question: question,98      context: context,99      long_answer: long_answer100  })101      })102    });103 104    if (response.ok) {105      const data = await response.json();106      addMessage(data.answer, "bot");107      // --- Sintesi vocale della risposta ---108      speakText(data.answer);109    } else {110      addMessage("Spiacente, non sono riuscito a processare la tua domanda.", "bot");111    }112  } catch (error) {113    addMessage("Si è verificato un errore durante la connessione al server.", "bot");114    console.error(error);115  }116}117 118// Funzione per leggere il testo con sintesi vocale119function speakText(text) {120  if ('speechSynthesis' in window) {121    const utterance = new SpeechSynthesisUtterance(text);122    utterance.lang = "en-US"; // Cambia lingua se necessario123    window.speechSynthesis.cancel(); // Ferma eventuali letture precedenti124    window.speechSynthesis.speak(utterance);125  } else {126    alert("La sintesi vocale non è supportata da questo browser.");127  }128}129  130});