/** Texte brut pour embeddings et similarité (HTML clippé, persan, arabe, etc.). */ /** Taille d'un chunk API embedding (~2500 tokens, safe pour le persan). */ export const EMBEDDING_CHUNK_CHARS = 6000 export const EMBEDDING_CHUNK_OVERLAP = 300 /** @deprecated Utiliser le découpage multi-chunks — conservé pour compat. */ export const MAX_EMBEDDING_CHARS = EMBEDDING_CHUNK_CHARS const CLIP_FOOTER_PATTERN = /
]*>\s*[\s\S]*?<\/small>\s*<\/p>\s*$/i /** Seuil serveur : en dessous, pas de génération de titre (clic volontaire inclus). */ export const MIN_WORDS_FOR_TITLE_SUGGESTION = 10 /** Seuil automatique — aligné sur le texte des réglages (« après 50+ mots »). */ export const MIN_WORDS_FOR_AUTO_TITLE = 50 export function countPlainWords(htmlOrText: string): number { const plain = stripHtmlToPlainText(htmlOrText) if (!plain) return 0 return plain.split(/\s+/).filter((w) => w.length > 0).length } export function stripHtmlToPlainText(html: string): string { if (!html) return '' return html .replace(/