/** * Utilitaires de nettoyage des réponses IA * Certains modèles (DeepSeek-R1, MiniMax, etc.) génèrent des blocs * qui corrompent le parsing JSON si non supprimés. */ /** * Supprime les blocs ... d'une réponse IA. * Gère aussi les blocs non fermés (balise ouvrante sans fermeture). * Supprime ensuite les fences Markdown (```json ... ```) éventuelles. */ export function cleanAIJsonResponse(text: string): string { // 1. Supprimer les blocs ... fermés (greedy-safe) let cleaned = text.replace(/[\s\S]*?<\/think>/gi, '').trim() // 2. Si un reste (non fermé), chercher le premier '[' ou '{' if (//i.test(cleaned)) { const jsonStart = cleaned.search(/[\[{]/) if (jsonStart !== -1) { cleaned = cleaned.slice(jsonStart) } else { // Aucun JSON trouvé après le think → vider pour provoquer une erreur propre cleaned = '' } } // 3. Supprimer les fences Markdown cleaned = cleaned.replace(/^```(?:json)?\n?/, '').replace(/\n?```$/, '').trim() return cleaned } /** * Supprime les blocs d'une réponse texte libre (non-JSON). */ export function cleanAITextResponse(text: string): string { let cleaned = text.replace(/[\s\S]*?<\/think>/gi, '').trim() if (//i.test(cleaned)) { // Supprimer tout ce qui précède la fermeture du think ou jusqu'à la fin cleaned = cleaned.replace(/[\s\S]*/i, '').trim() } return cleaned }