Hi @spraveenitpro thank you for the answer. Here is the JSON code for the workflow :
{“nodes”: [{“parameters”: {“promptType”: “define”,“text”: “={{ $json.chatInput }}”,“options”: {“systemMessage”: “## Role\nYou are an HR interviewer conducting structured job interviews. Keep conversations interactive and clarify questions when asked using the Think tool.\nCV Verification Protocol\n\nName Collection: Ask for candidate’s full name\nDatabase Query: Use “Supabase Vector Store - get” with their name as metadata filter\nName Mismatch Handling: If filter fails, retry with variations (first name only, last name only, common nicknames)\nCV Missing Protocol: If no CV found after retries, state: “I don’t see your CV in our system. Please return to our application form and upload your CV before we can proceed with the interview.”\nName Verification: If CV found but name doesn’t match, ask for clarification and retry with correct spelling\n\nInterview Structure (Only proceed if CV verified)\nOpening\n\nGreet and collect name → verify CV\nAsk position they’re applying for\nAcknowledge their background briefly\n\nQuestion Sequence (Exactly 9 questions)\nSoft Skills (3): Communication, teamwork, motivation from different experiences\nHard Skills (3): Technical competencies across their full skill set\nCritical Thinking (3): Problem-solving in varied contexts from their background\nClosing\n\nBrief positive feedback (1-2 strengths)\n"You’ll receive confirmation email with our decision"\n\nKey Rules\n\nDiversify questions across all experiences (internships, projects, education)\nOne question at a time - simple, open-ended format\nUse CV data from Supabase tool to personalize each question\nProfessional but conversational tone\nComprehensive assessment of technical skills, soft skills, and cultural fit\n\nStop interview immediately if CV cannot be verified. Otherwise, use retrieved CV data to create targeted questions that evaluate complete candidate profile for the specific position.”}},“type”: “/n8n-nodes-langchain.agent”,“typeVersion”: 2.2,“position”: [2608,80],“id”: “63f399e7-a7b5-4ffb-bf63-b2ee8a2a7546”,“name”: “AI Agent”,“onError”: “continueRegularOutput”},{“parameters”: {“options”: {}},“type”: “/n8n-nodes-langchain.lmChatGoogleGemini”,“typeVersion”: 1,“position”: [2432,336],“id”: “5de707b7-6b46-435d-af8d-f9303f764e78”,“name”: “Google Gemini Chat Model”,“credentials”: {“googlePalmApi”: {“id”: “cTtf3UMRl9M7YilL”,“name”: “Google Gemini(PaLM) Api account”}}},{“parameters”: {“content”: “## chatbot workflow\n\n”,“height”: 752,“width”: 896},“type”: “n8n-nodes-base.stickyNote”,“position”: [2320,-16],“typeVersion”: 1,“id”: “fd5160ae-0741-4bab-9908-cb1fbb88dc37”,“name”: “Sticky Note”},{“parameters”: {“formTitle”: “Enter your resume”,“formDescription”: “Enter your resume in PDF format only.”,“formFields”: {“values”: [{“fieldLabel”: “Resume”,“fieldType”: “file”,“multipleFiles”: false,“acceptFileTypes”: “.pdf”,“requiredField”: true}]},“options”: {}},“type”: “n8n-nodes-base.formTrigger”,“typeVersion”: 2.3,“position”: [176,304],“id”: “23234d27-2e18-49ac-afc8-5a114a7cb041”,“name”: “On form submission”,“webhookId”: “259654d0-69b0-4bf2-9506-e6fc1414a231”},{“parameters”: {},“type”: “/n8n-nodes-langchain.embeddingsGoogleGemini”,“typeVersion”: 1,“position”: [1616,288],“id”: “69e080d9-783d-4b60-879c-cdd666ec8f2f”,“name”: “Embeddings Google Gemini”,“credentials”: {“googlePalmApi”: {“id”: “cTtf3UMRl9M7YilL”,“name”: “Google Gemini(PaLM) Api account”}}},{“parameters”: {“dataType”: “binary”,“textSplittingMode”: “custom”,“options”: {“metadata”: {“metadataValues”: [{“name”: “candidat_name”,“value”: “={{ $json.name }}”}]}}},“type”: “/n8n-nodes-langchain.documentDefaultDataLoader”,“typeVersion”: 1.1,“position”: [1824,288],“id”: “e5d5eb75-219b-4df3-9087-109d371faa16”,“name”: “Default Data Loader”},{“parameters”: {“contextWindowLength”: 10},“type”: “/n8n-nodes-langchain.memoryPostgresChat”,“typeVersion”: 1.3,“position”: [2592,336],“id”: “7421191d-d102-468c-9ff5-e9ee171982b5”,“name”: “Postgres Chat Memory”,“credentials”: {“postgres”: {“id”: “LROq45Ut5SIUr3bI”,“name”: “Postgres account”}}},{“parameters”: {“chunkSize”: 500,“chunkOverlap”: 100,“options”: {}},“type”: “/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter”,“typeVersion”: 1,“position”: [1824,464],“id”: “e991f121-aa86-4658-896e-5f5dbb37ef32”,“name”: “Recursive Character Text Splitter”},{“parameters”: {“content”: "## RAG workflow + Adding Metadata\nhere the resume is uploaded to be vectorized and stored in the supabase VS ",“height”: 1040,“width”: 2032,“color”: 4},“type”: “n8n-nodes-base.stickyNote”,“position”: [96,-304],“typeVersion”: 1,“id”: “47bff67f-2dde-4b84-afbd-72f856aec8a4”,“name”: “Sticky Note1”},{“parameters”: {“mode”: “insert”,“tableName”: {“__rl”: true,“value”: “documents”,“mode”: “list”,“cachedResultName”: “documents”},“options”: {}},“type”: “/n8n-nodes-langchain.vectorStoreSupabase”,“typeVersion”: 1.3,“position”: [1696,64],“id”: “028fd2b3-2080-45f8-9f51-208dc5a05fee”,“name”: “Supabase Vector Store - insert”,“credentials”: {“supabaseApi”: {“id”: “GyPYEo8Ho8iFM8LB”,“name”: “Supabase account”}}},{“parameters”: {“mode”: “retrieve-as-tool”,“toolDescription”: “Work with the candidat’s data in supabase “,“tableName”: {“__rl”: true,“value”: “documents”,“mode”: “list”,“cachedResultName”: “documents”},“options”: {}},“type”: “/n8n-nodes-langchain.vectorStoreSupabase”,“typeVersion”: 1.3,“position”: [2752,336],“id”: “2cf71885-f86e-430b-ae12-f9d69c253b06”,“name”: “Supabase Vector Store - get”,“notesInFlow”: false,“credentials”: {“supabaseApi”: {“id”: “GyPYEo8Ho8iFM8LB”,“name”: “Supabase account”}}},{“parameters”: {},“type”: “/n8n-nodes-langchain.toolThink”,“typeVersion”: 1.1,“position”: [3040,336],“id”: “634ef35f-722f-4095-8ee4-787362c23e31”,“name”: “Think”},{“parameters”: {“options”: {“allowFileUploads”: true,“allowedFilesMimeTypes”: “.pdf”}},“type”: “/n8n-nodes-langchain.chatTrigger”,“typeVersion”: 1.3,“position”: [2384,80],“id”: “99b5ad27-4705-444b-bbe7-43cd5bf1b222”,“name”: “When chat message received”,“webhookId”: “2dcc8b93-c5bd-4d20-8264-f560345e313d”},{“parameters”: {“options”: {}},“type”: “/n8n-nodes-langchain.lmChatGoogleGemini”,“typeVersion”: 1,“position”: [720,0],“id”: “981ea764-42a9-4e58-9480-30ac63a58d17”,“name”: “Google Gemini Chat Model1”,“credentials”: {“googlePalmApi”: {“id”: “cTtf3UMRl9M7YilL”,“name”: “Google Gemini(PaLM) Api account”}}},{“parameters”: {“promptType”: “define”,“text”: “=Extract the name from this chunck of text, be precise and return the full name only in a variable called name”,“options”: {“systemMessage”: “=You are an information extraction assistant.\n\nYour task is to read the provided text and extract the candidate’s full name. \n- Be precise and return only the full name (no extra words, no explanations). \n- The output must be a string, ex : name = John doe\n\nText to analyze:{{ $json.text }} \n”}},“type”: “/n8n-nodes-langchain.agent”,“typeVersion”: 2.2,“position”: [720,-192],“id”: “6c142f08-882b-43e7-bdb3-185a639a24db”,“name”: “AI Agent1”},{“parameters”: {“assignments”: {“assignments”: [{“id”: “35b19070-5d8a-4451-9b16-063661d41e0e”,“name”: “name”,“value”: “={{ $json.output.split(”=”)[1].trim().toLowerCase() }}”,“type”: “string”}]},“options”: {}},“type”: “n8n-nodes-base.set”,“typeVersion”: 3.4,“position”: [1056,-112],“id”: “9b8cbb15-67c0-4cd7-93c4-dca62eed698a”,“name”: “Edit Fields”},{“parameters”: {“operation”: “pdf”,“binaryPropertyName”: “Resume”,“options”: {}},“type”: “n8n-nodes-base.extractFromFile”,“typeVersion”: 1,“position”: [496,-192],“id”: “7b7df198-d9e5-49f0-8bcd-25918b2465d9”,“name”: “Extract from File”},{“parameters”: {},“type”: “n8n-nodes-base.merge”,“typeVersion”: 3.2,“position”: [1264,288],“id”: “2aa41f4d-942e-4db9-9a77-c256d8a767a6”,“name”: “Merge1”},{“parameters”: {“jsCode”: “const item1 = items[0].json; // first row (name)\nconst item2 = items[1]; // second row (resume + other fields)\n\n// Merge JSON\nconst mergedJson = {\n name: item1.name,\n submittedAt: item2.json.submittedAt,\n formMode: item2.json.formMode\n};\n\n// Merge binary\nconst mergedBinary = item2.binary ? { Resume: item2.binary.Resume } : undefined;\n\nreturn [\n {\n json: mergedJson,\n binary: mergedBinary\n }\n];\n”},“type”: “n8n-nodes-base.code”,“typeVersion”: 2,“position”: [1504,64],“id”: “9e882748-f2d1-4bed-bc3a-ce93f7e6348f”,“name”: “Code in JavaScript”}],“connections”: {“AI Agent”: {“main”: []},“Google Gemini Chat Model”: {“ai_languageModel”: [[{“node”: “AI Agent”,“type”: “ai_languageModel”,“index”: 0}]]},“On form submission”: {“main”: [[{“node”: “Extract from File”,“type”: “main”,“index”: 0},{“node”: “Merge1”,“type”: “main”,“index”: 1}]]},“Embeddings Google Gemini”: {“ai_embedding”: [[{“node”: “Supabase Vector Store - get”,“type”: “ai_embedding”,“index”: 0},{“node”: “Supabase Vector Store - insert”,“type”: “ai_embedding”,“index”: 0}]]},“Default Data Loader”: {“ai_document”: [[{“node”: “Supabase Vector Store - insert”,“type”: “ai_document”,“index”: 0}]]},“Postgres Chat Memory”: {“ai_memory”: [[{“node”: “AI Agent”,“type”: “ai_memory”,“index”: 0}]]},“Recursive Character Text Splitter”: {“ai_textSplitter”: [[{“node”: “Default Data Loader”,“type”: “ai_textSplitter”,“index”: 0}]]},“Supabase Vector Store - insert”: {“main”: []},“Supabase Vector Store - get”: {“ai_tool”: [[{“node”: “AI Agent”,“type”: “ai_tool”,“index”: 0}]]},“Think”: {“ai_tool”: [[{“node”: “AI Agent”,“type”: “ai_tool”,“index”: 0}]]},“When chat message received”: {“main”: [[{“node”: “AI Agent”,“type”: “main”,“index”: 0}]]},“Google Gemini Chat Model1”: {“ai_languageModel”: [[{“node”: “AI Agent1”,“type”: “ai_languageModel”,“index”: 0}]]},“AI Agent1”: {“main”: [[{“node”: “Edit Fields”,“type”: “main”,“index”: 0}]]},“Edit Fields”: {“main”: [[{“node”: “Merge1”,“type”: “main”,“index”: 0}]]},“Extract from File”: {“main”: [[{“node”: “AI Agent1”,“type”: “main”,“index”: 0}]]},“Merge1”: {“main”: [[{“node”: “Code in JavaScript”,“type”: “main”,“index”: 0}]]},“Code in JavaScript”: {“main”: [[{“node”: “Supabase Vector Store - insert”,“type”: “main”,“index”: 0}]]}},“pinData”: {},“meta”: {“templateCredsSetupCompleted”: true,“instanceId”: “c9656d0a1506227e10dff943ca39282eb8c12129a168431af571504bf86ed15b”}}