// Constante pour l'URL de base
const BASE_URL = window.location.origin; // Utiliser l'URL complète pour éviter les erreurs CORS
// Gestion des onglets
function openTab(tabName) {
// Liste des onglets disponibles
const tabs = ['summarize', 'answer-question', 'interpret-image', 'generate-visualization', 'translate-document'];
// Cacher/montrer les sections appropriées
tabs.forEach(tab => {
const element = document.getElementById(tab);
if (element) {
element.classList.toggle('hidden', tab !== tabName);
}
});
// Marquer l'onglet actif
document.querySelectorAll('.tab-btn').forEach(btn => {
btn.classList.toggle('active', btn.getAttribute('data-tab') === tabName);
btn.setAttribute('aria-selected', btn.getAttribute('data-tab') === tabName);
});
}
// Gestion optimisée des uploads de fichiers
function setupFileUpload(inputId) {
const input = document.getElementById(inputId);
if (!input) return;
const filenameDisplay = document.getElementById(`${inputId}-filename`);
input.addEventListener('change', function() {
if (this.files && this.files[0]) {
// Afficher le nom du fichier
const fileName = this.files[0].name;
if (filenameDisplay) {
filenameDisplay.textContent = fileName;
filenameDisplay.title = fileName;
}
// Changer le texte du label
const label = this.nextElementSibling;
const fileLabel = label?.querySelector('.file-label');
if (fileLabel) {
fileLabel.textContent = "Fichier sélectionné";
}
} else {
// Réinitialiser
if (filenameDisplay) {
filenameDisplay.textContent = "";
}
const label = this.nextElementSibling;
const fileLabel = label?.querySelector('.file-label');
if (fileLabel) {
fileLabel.textContent = "Sélectionner un fichier";
}
}
});
}
// Indicateur de chargement
function showLoading(resultDiv) {
resultDiv.innerHTML = `
Résumé de: ${data.filename}
${data.summary}
Longueur du texte original: ${data.text_length} caractères
`;
}
} catch (error) {
console.error('Erreur lors du résumé:', error);
// Message d'erreur plus descriptif
let errorMessage = error.message;
if (error.name === 'AbortError') {
errorMessage = "La requête a pris trop de temps. Veuillez réessayer avec un fichier plus petit.";
} else if (error.message.includes("Failed to fetch")) {
errorMessage = "Impossible de contacter le serveur. Veuillez vérifier votre connexion ou contactez l'administrateur.";
}
showError(resultDiv, `Erreur: ${errorMessage}`);
}
}
// Gestion du formulaire de question-réponse
async function handleQASubmit() {
const questionInput = document.getElementById('question-input');
const fileInput = document.getElementById('answer-question-file');
const resultDiv = document.getElementById('answer-question-result');
if (!questionInput || !resultDiv) return;
if (!questionInput.value.trim()) {
showError(resultDiv, "Veuillez entrer une question.");
return;
}
showLoading(resultDiv);
try {
const formData = new FormData();
formData.append('question', questionInput.value);
if (fileInput && fileInput.files && fileInput.files.length > 0) {
formData.append('file', fileInput.files[0]);
}
// Utiliser fetch avec timeout et gestion d'erreur améliorée
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 60000); // 60s timeout
const response = await fetch(`${BASE_URL}/answer-question`, {
method: 'POST',
body: formData,
signal: controller.signal
}).finally(() => clearTimeout(timeoutId));
if (!response.ok) {
const errorText = await response.text();
throw new Error(`Erreur: ${response.status} ${response.statusText}\n${errorText}`);
}
const data = await response.json();
if (data.warning) {
// Afficher l'avertissement
resultDiv.innerHTML = `
Réponse
Question: ${data.question}
Réponse: ${data.answer}
`;
}
} catch (error) {
console.error('Erreur de question-réponse:', error);
// Message d'erreur plus descriptif
let errorMessage = error.message;
if (error.name === 'AbortError') {
errorMessage = "La requête a pris trop de temps. Veuillez réessayer avec une question plus courte ou un fichier plus petit.";
} else if (error.message.includes("Failed to fetch")) {
errorMessage = "Impossible de contacter le serveur. Veuillez vérifier votre connexion ou contactez l'administrateur.";
}
showError(resultDiv, `Erreur: ${errorMessage}`);
}
}