From 491773cf9db225369fb22c06bfb07d391794329a Mon Sep 17 00:00:00 2001 From: nusquama Date: Sun, 15 Mar 2026 12:02:31 +0800 Subject: [PATCH] creation --- ...reen_and_score_cv_candidates_with_mistral_ocr_and_gemini.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 workflows/Screen and score CV candidates with Mistral OCR and Gemini-13990/screen_and_score_cv_candidates_with_mistral_ocr_and_gemini.json diff --git a/workflows/Screen and score CV candidates with Mistral OCR and Gemini-13990/screen_and_score_cv_candidates_with_mistral_ocr_and_gemini.json b/workflows/Screen and score CV candidates with Mistral OCR and Gemini-13990/screen_and_score_cv_candidates_with_mistral_ocr_and_gemini.json new file mode 100644 index 000000000..d757874bc --- /dev/null +++ b/workflows/Screen and score CV candidates with Mistral OCR and Gemini-13990/screen_and_score_cv_candidates_with_mistral_ocr_and_gemini.json @@ -0,0 +1 @@ +{"id":"qG6I4JtH5IcxCnAC","meta":{"instanceId":"f50c4225657041a867073dfd116003f9f3659e08e71fb6a5bb5c90807373de2c","templateCredsSetupCompleted":true},"name":"Candidate evaluation","tags":[],"nodes":[{"id":"fdefa89b-a5f1-4b12-8d0c-9977f7b423ca","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-432,-240],"parameters":{"color":6,"width":288,"height":416,"content":"### ๐Ÿ“ฅ Watch Inbox\n**Trigger:** Fires when a new email arrives in INBOX.\n\n- Format: `Resolved` (full data + binary)\n- Attachments: ON โ†’ store candidate resume as `attachment_0`\n- Action: Mark as Read"},"typeVersion":1},{"id":"e24bce3a-5be7-40ff-bcf9-046242e45423","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-128,-240],"parameters":{"color":7,"width":256,"height":416,"content":"### ๐Ÿ“„ OCR Extraction\n**Mistral OCR** reads the CV binary.\n\n- Model: `mistral-ocr-latest`\n- Input: Candidate Resume/CV \n- Output: Extracted info from PDF \n- Works on both digital & scanned PDFs"},"typeVersion":1},{"id":"b117d81a-5f42-4f44-ae52-75109be0bb3d","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[144,-240],"parameters":{"color":7,"width":384,"height":416,"content":"### ๐Ÿค– AI CV Scoring\n**Gemini** evaluates CV vs JD.\n\n- Model: `gemini-3.1-flash-lite-preview`\n- Input: Extracted info of Candidate from Mistral OCR\n- Returns JSON: score, decision, name, summary, key_skills\n- JSON Output mode: ON"},"typeVersion":1},{"id":"3586d228-3a05-4915-8120-68c102b1c3b4","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[544,-240],"parameters":{"width":256,"height":416,"content":"### โš™๏ธ Parse Response\n**Critical node** โ€” does 3 things:\n\n1. Strips Gemini markdown fences (` ```json `)\n2. Parses JSON into clean fields\n3. Passes `binary` from IMAP trigger forward so CV attachment survives into email nodes"},"typeVersion":1},{"id":"aa798038-c950-43bb-8b0e-4b55e0ecdecc","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[816,-240],"parameters":{"height":416,"content":"### ๐Ÿ”€ Route Decision\n**IF** \n`decision == \"shortlisted\"`\n\n- โœ… TRUE โ†’ HR email + candidate invite\n- โŒ FALSE โ†’ polite decline to candidate"},"typeVersion":1},{"id":"2209f484-41db-444c-9828-8b3cbbb441d9","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[1072,-304],"parameters":{"color":6,"width":352,"height":384,"content":"### ๐Ÿ“ง HR Notification\n**Sends to HR** on shortlist.\n\n- Includes: score, name, email, key skills, AI summary\n- Attachment: `attachment_0` (original CV PDF)\n- Subject has score in title for quick scanning"},"typeVersion":1},{"id":"5773fb5c-a56f-404f-9c24-d4f5e6305854","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[1440,-304],"parameters":{"color":6,"width":336,"height":384,"content":"### ๐Ÿ“ง Interview Invite\n**Sends to shortlisted candidate.**\n\n- Includes scheduling link (update `YOUR_CALENDLY_OR_CAL_LINK_HERE`)\n- 'What to Expect' section with 3 interview steps\n- Runs after Node 6 (sequential on TRUE branch)"},"typeVersion":1},{"id":"f7702b41-f029-4dd6-a9e0-cdb6622ed70c","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[1344,96],"parameters":{"color":6,"width":432,"content":"### ๐Ÿ“ง Polite Decline\n**Sends to rejected candidate.**\n\n- Empathetic tone, no harsh language\n- Links to appstonelab.com/career for future roles\n- No CV attachment needed here"},"typeVersion":1},{"id":"fee1c26f-feef-47f0-b827-b8db69bf41b5","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[-832,-240],"parameters":{"color":3,"width":384,"height":416,"content":"## ๐Ÿค– AI Hiring Pipeline\n\n**Purpose:** Automates end-to-end CV screening for a Specific role.\n\n**Flow:**\n1. Watches inbox for incoming CV emails\n2. Extracts CV text via Mistral OCR (works on scanned + digital PDFs)\n3. Scores CV against JD using Gemini AI (returns structured JSON)\n4. Parses response + preserves binary attachment\n5. Routes: Shortlisted โ†’ HR notified + candidate invited | Rejected โ†’ polite decline\n\n**Stack:** IMAP ยท Mistral OCR ยท Gemini 3.1 Flash Lite ยท SMTP\n\n**Threshold:** score โ‰ฅ shortlisted decision by Gemini"},"typeVersion":1},{"id":"007f091d-8989-4b97-8890-a39cf790a30d","name":"Watch Inbox for CV Emails","type":"n8n-nodes-base.emailReadImap","position":[-336,0],"parameters":{"format":"resolved","options":{"trackLastMessageId":true}},"credentials":{"imap":{"id":"stdqKq1FmB5nuOQM","name":"IMAP account"}},"typeVersion":2.1},{"id":"b38a7e72-3f95-4a68-a286-00805200131b","name":"OCR: Extract CV Text","type":"n8n-nodes-base.mistralAi","position":[-48,0],"parameters":{"options":{},"binaryProperty":"attachment_0"},"credentials":{"mistralCloudApi":{"id":"q2DbrHMhOsQdnhr4","name":"Mistral Cloud account"}},"typeVersion":1},{"id":"5baea769-a76e-4c5e-968e-d560039f300b","name":"AI Score CV","type":"@n8n/n8n-nodes-langchain.googleGemini","position":[224,0],"parameters":{"modelId":{"__rl":true,"mode":"list","value":"models/gemini-3-flash-preview","cachedResultName":"models/gemini-3-flash-preview"},"options":{"topK":20,"temperature":1},"messages":{"values":[{"content":"=You are an expert HR assistant for AppStoneLab Technologies. Evaluate the CV below against the job description and return ONLY a valid JSON object โ€” no markdown, no code blocks, no extra text.\n\nJOB DESCRIPTION:\nRole: AI Engineer at AppStoneLab Technologies (Surat, India)\nExperience: 0โ€“1 years\n\nResponsibilities:\n- Design and implement agentic workflows using LangGraph and LangChain\n- Build modular AI agents for multi-step task planning and execution\n- Create and optimize structured prompts for LLM-driven use cases\n- Integrate LLMs with tools via function calling for dynamic workflows\n- Build intelligent APIs using Flask or FastAPI\n- Work on NLP, computer vision, and recommendation tasks\n- Explore multi-agent setups, memory management, and RAG pipelines\n\nRequirements:\n- Bachelor's in Computer Science, Data Science, or related field\n- Experience with agentic AI frameworks (LangGraph, LangChain, AutoGen)\n- Solid Python development skills\n- Understanding of LLM architecture, prompt chaining, memory, tool calling\n- Bonus: RAG pipelines, vector databases (Pinecone, Weaviate), cloud (AWS/GCP)\n- Portfolio of AI projects on GitHub or Kaggle\n\nCV CONTENT:\n{{ $json.extractedText }}\n\nReturn this exact JSON structure:\n{\n \"score\": ,\n \"decision\": \"\",\n \"candidate_name\": \"\",\n \"summary\": \"<3-4 sentence professional summary focused on fit for this AI Engineer role>\",\n \"key_skills\": \"\"\n}"}]},"jsonOutput":true,"builtInTools":{}},"credentials":{"googlePalmApi":{"id":"KbJ7zta7PFGQpS8v","name":"Google Gemini(PaLM) Api account"}},"typeVersion":1.1},{"id":"ffe38dd7-159c-45de-b3b7-4fb6666511bf","name":"Parse AI Response + Pass Binary","type":"n8n-nodes-base.code","position":[624,0],"parameters":{"jsCode":"const item = $input.first();\nconst aiRaw = item.json.content.parts[0].text;\n\nconst cleaned = aiRaw\n .replace(/^```json\\s*/i, '')\n .replace(/^```\\s*/i, '')\n .replace(/```\\s*$/i, '')\n .trim();\n\nconst parsed = JSON.parse(cleaned);\n\nreturn [{\n json: {\n score: parsed.score,\n decision: parsed.decision,\n candidate_name: parsed.candidate_name,\n summary: parsed.summary,\n key_skills: parsed.key_skills,\n candidate_email: $('Watch Inbox for CV Emails').first().json.from.value[0].address,\n original_subject: $('Watch Inbox for CV Emails').first().json.subject\n },\n binary: $('Watch Inbox for CV Emails').first().binary\n}];"},"typeVersion":2},{"id":"7e42598e-b1ab-4930-acbd-7708f4330705","name":"Shortlisted or Rejected?","type":"n8n-nodes-base.if","position":[896,0],"parameters":{"options":{},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"b2e55467-74a7-49ce-9631-b6f61c9cee89","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.decision }}","rightValue":"shortlisted"}]}},"typeVersion":2.3},{"id":"72dc86a0-3a33-4e18-9e99-03c4b9bd717f","name":"Notify HR with CV Summary","type":"n8n-nodes-base.emailSend","position":[1200,-96],"webhookId":"3083e801-b64e-4ed4-ad9f-e0a967e4c6a6","parameters":{"html":"=\n\n\n\n \n \n \n \n
\n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n
\n \n \n \n \n \n
\n

AppStoneLab Technologies

\n

AI Hiring Pipeline

\n
\n
โœ“ SHORTLISTED
\n
\n
\n \n \n \n \n \n
\n

Candidate Score

\n

{{ $json.score }}/100

\n
\n

Position

\n

AI Engineer

\n

Surat, India

\n
\n
\n

Candidate Details

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n

Full Name

\n
\n

{{ $json.candidate_name }}

\n
\n

Email

\n
\n

{{ $json.candidate_email }}

\n
\n

Key Skills

\n
\n

{{ $json.key_skills }}

\n
\n

Applied Via

\n
\n

Email

\n
\n
\n

AI Assessment Summary

\n

{{ $json.summary }}

\n
\n \n \n \n \n \n
\n

๐Ÿ“Ž Original CV is attached to this email

\n
\n

Powered by AppStoneLab AI Pipeline

\n
\n
\n
\n\n","options":{"attachments":"attachment_0"},"subject":"=โœ… Shortlisted: {{ $json.candidate_name }} | AI Engineer | Score: {{ $json.score }}/100","toEmail":"{HR_EMAIL}","fromEmail":"{SENDER_EMAIL}"},"credentials":{"smtp":{"id":"YVepV5KZgoput1TW","name":"SMTP account"}},"typeVersion":2.1},{"id":"a40e915e-4935-49e7-9445-fa0477ee9d8f","name":"Send Interview Invite to Candidate","type":"n8n-nodes-base.emailSend","position":[1552,-96],"webhookId":"3083e801-b64e-4ed4-ad9f-e0a967e4c6a6","parameters":{"html":"=\n\n\n\n \n \n \n \n
\n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n
\n

AppStoneLab Technologies

\n

You've been
shortlisted.

\n
\n \n \n \n \n \n
\n

Congratulations

\n

{{ $('Parse AI Response + Pass Binary').item.json.candidate_name }}

\n
\n
AI ENGINEER ROLE
\n
\n
\n

\n Thank you for applying for the AI Engineer position at AppStoneLab Technologies. We've carefully reviewed your profile and are genuinely excited about what you bring to the table.\n

\n

\n We'd love to have a conversation with you. Please use the button below to schedule your interview at a time that works best for you.\n

\n\n \n \n \n \n \n
\n Schedule Interview โ†’\n
\n\n

\n If you have any questions or need to reschedule, simply reply to this email โ€” we're happy to help.\n

\n
\n

What to Expect

\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n

01

\n
\n

A 30โ€“45 min technical discussion about your experience and projects

\n
\n

02

\n
\n

Questions about AI/ML, LangChain, agentic systems, and your approach to problem-solving

\n
\n

03

\n
\n

Time for you to ask us anything about the role, team, and culture

\n
\n
\n \n \n \n \n \n
\n

Warm regards,

\n

HR Team, AppStoneLab

\n

hr@appstonelab.com ยท +91 78598 00422

\n
\n

We build, You grow.

\n
\n
\n
\n\n","options":{"attachments":"attachment_0"},"subject":"=Interview Invitation โ€” AI Engineer at AppStoneLab","toEmail":"={{ $('Parse AI Response + Pass Binary').item.json.candidate_email }}","fromEmail":"{HR_EMAIL}"},"credentials":{"smtp":{"id":"YVepV5KZgoput1TW","name":"SMTP account"}},"typeVersion":2.1},{"id":"78e89300-7984-4f53-913f-f59de720afc1","name":"Send Decline Email to Candidate","type":"n8n-nodes-base.emailSend","position":[1136,96],"webhookId":"3083e801-b64e-4ed4-ad9f-e0a967e4c6a6","parameters":{"html":"=\n\n\n\n \n \n \n \n
\n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n
\n

AppStoneLab Technologies

\n

Thank you for
your application.

\n
\n

Dear {{ $('Parse AI Response + Pass Binary').item.json.candidate_name }},

\n
\n

\n We sincerely appreciate the time and effort you invested in applying for the AI Engineer position at AppStoneLab Technologies. It means a great deal to us that you considered being part of our team.\n

\n

\n After carefully reviewing all applications, we have decided to move forward with candidates whose experience more closely aligns with our current requirements. This was not an easy decision โ€” we received many strong profiles.\n

\n

\n We genuinely encourage you to continue building on your skills and to apply again for future openings. Your background shows real promise, and the right opportunity may be just around the corner.\n

\n
\n \n \n \n \n \n
 \n

Keep an eye on us

\n

New roles open regularly as we grow. Visit our careers page to see what's next.

\n appstonelab.com/career โ†’\n
\n
\n

With warm wishes,

\n

HR Team, AppStoneLab Technologies

\n

hr@appstonelab.com ยท +91 78598 00422

\n

We build, You grow. ยท AppStoneLab Technologies ยท Surat, India

\n
\n
\n\n","options":{},"subject":"=Your Application โ€” AI Engineer at AppStoneLab","toEmail":"={{ $('Parse AI Response + Pass Binary').item.json.candidate_email }}","fromEmail":"{HR_EMAIL}"},"credentials":{"smtp":{"id":"YVepV5KZgoput1TW","name":"SMTP account"}},"typeVersion":2.1}],"active":false,"pinData":{},"settings":{"binaryMode":"separate","availableInMCP":false,"executionOrder":"v1"},"versionId":"23b7ebfe-c09c-4691-87f2-366d03cb0e76","connections":{"AI Score CV":{"main":[[{"node":"Parse AI Response + Pass Binary","type":"main","index":0}]]},"OCR: Extract CV Text":{"main":[[{"node":"AI Score CV","type":"main","index":0}]]},"Shortlisted or Rejected?":{"main":[[{"node":"Notify HR with CV Summary","type":"main","index":0}],[{"node":"Send Decline Email to Candidate","type":"main","index":0}]]},"Notify HR with CV Summary":{"main":[[{"node":"Send Interview Invite to Candidate","type":"main","index":0}]]},"Watch Inbox for CV Emails":{"main":[[{"node":"OCR: Extract CV Text","type":"main","index":0}]]},"Parse AI Response + Pass Binary":{"main":[[{"node":"Shortlisted or Rejected?","type":"main","index":0}]]}}} \ No newline at end of file