# -*- coding: utf-8 -*- """ Analyse de documents televerses (PDF, DOCX, TXT, CSV) - Space edition. Le texte est traite en memoire pour la session, croise avec le contenu du site, puis oublie (aucune conservation). """ import io import gdpr def extract_text(file_name, file_bytes): name = file_name.lower() if name.endswith(".pdf"): from pypdf import PdfReader reader = PdfReader(io.BytesIO(file_bytes)) parts = [] for page in reader.pages: try: parts.append(page.extract_text() or "") except Exception: continue return "\n".join(parts).strip() if name.endswith(".docx"): import docx doc = docx.Document(io.BytesIO(file_bytes)) return "\n".join(p.text for p in doc.paragraphs).strip() if name.endswith((".txt", ".md", ".csv")): return file_bytes.decode("utf-8", errors="ignore") raise ValueError(f"Format non pris en charge : {file_name}") def analyze_document(file_name, file_bytes, question, lang="fr"): import rag_engine raw = extract_text(file_name, file_bytes) if not raw: msg = ("Impossible d'extraire du texte de ce document." if lang != "en" else "Could not extract text from this document.") return msg, [], "" clean = gdpr.safe_for_processing(raw) if not question: question = ("Resume ce document et indique ses liens avec les " "informations du site Vizyon Ayiti 360." if lang != "en" else "Summarize this document and relate it to the Vizyon " "Ayiti 360 website information.") response, sources = rag_engine.answer(question, lang=lang, extra_context=clean) preview = clean[:600] + ("..." if len(clean) > 600 else "") return response, sources, preview