Utiliser le node Code
// Code amélioré pour traiter les différentes structures de réponse de Mistral Pixtral
const items = $input.all();
const updatedItems = items.map((item) => {
try {
// On vérifie d'abord si la réponse suit la structure attendue
if (item.json && item.json.choices && item.json.choices[0] && item.json.choices[0].message && item.json.choices[0].message.content) {
const content = item.json.choices[0].message.content;
// Vérifier si content est déjà un objet (déjà parsé)
if (typeof content === 'object' && content !== null) {
// Le contenu est déjà un objet JSON, on le laisse tel quel
console.log("Content is already a parsed object");
}
// Vérifier si content est une chaîne qui contient du JSON
else if (typeof content === 'string') {
try {
// Tenter de parser le contenu comme JSON
item.json.choices[0].message.content = JSON.parse(content);
console.log("Successfully parsed content string as JSON");
} catch (parseErr) {
console.log(`Content is a string but not valid JSON: ${parseErr.message}`);
// On pourrait avoir un array mal formaté ou autre problème
// Tenter de nettoyer et reformater si nécessaire
if (content.includes('[') && content.includes(']')) {
try {
// Tentative de récupération si c'est un tableau
const cleanedContent = content.replace(/\\s+/g, ' ').trim();
const match = cleanedContent.match(/\\[(.*)\\]/);
if (match) {
const arrayContent = `[${match[1]}]`;
item.json.choices[0].message.content = JSON.parse(arrayContent);
console.log("Recovered array content from string");
}
} catch (recoveryErr) {
console.log(`Recovery attempt failed: ${recoveryErr.message}`);
}
}
}
}
// Normalisation: transformer le contenu en un format cohérent
// pour éviter les problèmes d'accès aux propriétés
const normalizedContent = item.json.choices[0].message.content;
// Si le contenu est un tableau, on crée une structure compatible avec les deux formats
if (Array.isArray(normalizedContent)) {
console.log("Content is an array, creating normalized structure");
// Extraire les données du premier élément du tableau s'il existe
const firstItem = normalizedContent[0] || {};
// Créer une structure normalisée qui combine les deux formats
const normalizedStructure = {
...firstItem, // Copier toutes les propriétés du premier élément
_array: normalizedContent // Garder aussi l'array original
};
// Remplacer le contenu par la structure normalisée
item.json.choices[0].message.content = normalizedStructure;
}
} else {
console.log("Response structure is not as expected");
}
} catch (err) {
console.log(`Error processing item: ${err.message}`);
}
return item;
});
return updatedItems;