pasting json code

{
“nodes”: [
{
“parameters”: {
“httpMethod”: “POST”,
“path”: “chatbot-plante”,
“responseMode”: “usingRespondToWebhookNode”,
“responseHeaders”: [
{ “name”: “Access-Control-Allow-Origin”, “value”: “*” },
{ “name”: “Access-Control-Allow-Headers”, “value”: “Content-Type” },
{ “name”: “Access-Control-Allow-Methods”, “value”: “POST, OPTIONS” },
{ “name”: “Access-Control-Allow-Credentials”, “value”: “true” }
],
“options”: {} // options: {} pour le Webhook
},
“id”: “webhook-main”,
“name”: “Webhook Chatbot Plante”,
“type”: “n8n-nodes-base.webhook”,
“typeVersion”: 1, // Les typeVersion des noeuds de base peuvent être plus récentes sur 1.95.x mais 1 est souvent compatible
“position”: [200, 300]
},
{
“parameters”: {
“functionCode”: “const userInput = $json.body?.message;\n\nif (userInput && typeof userInput === ‘string’ && userInput.trim() !== ‘’) {\n console.log(‘Message reçu :’, userInput);\n return [{ json: { message: userInput.trim() } }];\n} else {\n console.error(‘Erreur: Aucun message valide fourni dans $json.body.message. Corps reçu :’, JSON.stringify($json.body));\n return [{ json: { message_error: ‘Aucun message utilisateur fourni ou message vide.’, original_body: $json.body } }];\n}”,
“options”: {} // Ajout de options: {} pour le Function node
},
“id”: “logger-validator”,
“name”: “Logger et Valider Entrée”,
“type”: “n8n-nodes-base.function”,
“typeVersion”: 1,
“position”: [450, 300]
},
{
“parameters”: {
“url”: “https://api.together.xyz/v1/completions”,
“requestMethod”: “POST”,
“sendHeaders”: true,
“headerParametersUi”: {
“parameters”: [
{
“name”: “Authorization”,
“value”: “Bearer 309c55159629b97fb2af4c786df3827d694cf550e6db7daafa5c00bb415ca5a3”
},
{
“name”: “Content-Type”,
“value”: “application/json”
}
]
},
“sendBody”: true,
“bodyParametersJson”: “{\n "model": "mistralai/Mixtral-8x7B-Instruct-v0.1",\n "prompt": "[INST] Tu es un expert en plantes médicinales et remèdes naturels. Réponds de façon claire et utile, en français.\n\n{{ $json.message ? $json.message : 'ignore cette requête car aucun message valide n\‘a été fourni’ }} [/INST]",\n "max_tokens": 300,\n "temperature": 0.7\n}”,
“options”: {}
},
“id”: “together-ai-http”,
“name”: “Together Chat Model”,
“type”: “n8n-nodes-base.httpRequest”,
“typeVersion”: 4.2, // Conformément à votre export
“position”: [700, 300],
“disabled”: “={{$json.message_error ? true : false}}”
},
{
“parameters”: {
“conditions”: {
“boolean”: [
{
“value1”: “={{$json.choices[0].text}}”,
“operation”: “isNotEmpty”
},
{
“value1”: “={{$node["Logger et Valider Entrée"].json.message_error}}”,
“operation”: “isEmpty”
}
],
“combineOperation”: “AND”
},
“options”: {} // Ajout de options: {} pour le IF node
},
“id”: “if-validator”,
“name”: “Réponse Valide ?”,
“type”: “n8n-nodes-base.if”,
“typeVersion”: 1,
“position”: [950, 300]
},
{
“parameters”: {
“functionCode”: “let content = $json.choices[0].text.trim();\nif (content.startsWith(‘A:’)) {\n content = content.substring(2).trim();\n}\nreturn [{ json: { answer: content || ‘:x: Erreur : réponse vide après traitement.’ } }];”,
“options”: {} // Ajout de options: {} pour le Function node
},
“id”: “format-reply”,
“name”: “Format Reply”,
“type”: “n8n-nodes-base.function”,
“typeVersion”: 1,
“position”: [1200, 200]
},
{
“parameters”: {
“functionCode”: “let errorMessage = ':x: Erreur : Impossible d\‘obtenir une réponse valide du modèle.’;\nif ($node["Logger et Valider Entrée"].json.message_error) {\n errorMessage = ':x: Erreur : ’ + $node["Logger et Valider Entrée"].json.message_error;\n} else if ($node["Together Chat Model"].json.error) {\n errorMessage = ':x: Erreur API : ’ + ($node["Together Chat Model"].json.error.message || JSON.stringify($node["Together Chat Model"].json.error));\n} else if (!$json.choices || !$json.choices[0] || !$json.choices[0].text) {\n errorMessage = ‘:x: Erreur : Aucune réponse textuelle reçue du modèle.’;\n}\nreturn [{ json: { answer: errorMessage } }];”,
“options”: {} // Ajout de options: {} pour le Function node
},
“id”: “error-message”,
“name”: “Message Erreur”,
“type”: “n8n-nodes-base.function”,
“typeVersion”: 1,
“position”: [1200, 400]
},
{
“parameters”: {
“responseMode”: “lastNode”,
“options”: {} // options: {} pour le RespondToWebhook
},
“id”: “respond-main”,
“name”: “Répondre au Chat”,
“type”: “n8n-nodes-base.respondToWebhook”,
“typeVersion”: 1,
“position”: [1450, 300]
}
],
“connections”: {
“Webhook Chatbot Plante”: { “main”: [ [ { “node”: “Logger et Valider Entrée”, “type”: “main”, “index”: 0 } ] ] },
“Logger et Valider Entrée”: { “main”: [ [ { “node”: “Together Chat Model”, “type”: “main”, “index”: 0 } ] ] },
“Together Chat Model”: { “main”: [ [ { “node”: “Réponse Valide ?”, “type”: “main”, “index”: 0 } ] ] },
“Réponse Valide ?”: { “main”: [ [ { “node”: “Format Reply”, “type”: “main”, “index”: 0 } ], [ { “node”: “Message Erreur”, “type”: “main”, “index”: 0 } ] ] },
“Format Reply”: { “main”: [ [ { “node”: “Répondre au Chat”, “type”: “main”, “index”: 0 } ] ] },
“Message Erreur”: { “main”: [ [ { “node”: “Répondre au Chat”, “type”: “main”, “index”: 0 } ] ] }
},
“pinData”: {},
“meta”: { “instanceId”: “” }
}