feat: AI Interview Preparation Agent - Lamatic AgentKit Challenge#167
feat: AI Interview Preparation Agent - Lamatic AgentKit Challenge#167harshuldashora wants to merge 10 commits into
Conversation
|
Warning Review limit reached
More reviews will be available in 2 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Repository UI (base), Organization UI (inherited) Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (2)
WalkthroughThis submission adds a Lamatic kit for interview preparation: project docs and constitution, a resume-parser flow (trigger → LLM → response), model and prompt configurations enforcing a strict JSON output schema, and supporting templates and configs. ChangesAI Interview Preparation Agent Kit
Suggested reviewers
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
/validate |
|
📡 Running Studio validation — results will appear here shortly. |
|
Hello @harshuldashora Can you work on your PR? There are many files missing. |
|
Thank you for the feedback. I'm currently rebuilding the project in Lamatic Studio and updating the repository structure to align with AgentKit requirements. I'll update the PR with the required files shortly. |
|
Thanks for the feedback. The submission has been updated with:
I believe all requested changes have been addressed. I'd appreciate another review when convenient. |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@submissions/harshul-dashora/flows/resume-parser.ts`:
- Around line 111-112: The outputMapping currently stores
LLMNode_139.output.generatedResponse as a string under interviewPlan, which
violates the expected JSON schema (fields strengths, gaps, questions) declared
in the README/system prompt; update the mapping so the LLMNode_139 output is
interpreted/parsed as JSON and its top-level fields are emitted directly (or
mapped into interviewPlan as an object with strengths, gaps, questions) instead
of a quoted string—locate the outputMapping entry that references
"LLMNode_139.output.generatedResponse" and change it to produce a JSON object
(or parse the generatedResponse) that matches the schema.
In
`@submissions/harshul-dashora/model-configs/resume-parser_llmnode-139_generative-model-name.ts`:
- Around line 10-12: Remove the hardcoded credential metadata values
(credentialId and credential_name) from the committed config and replace usage
with environment-driven values (e.g., read process.env variables such as
GEMINI_CREDENTIAL_ID and GEMINI_CREDENTIAL_NAME where the config is loaded);
ensure provider_name remains generic or is also driven by an env var (e.g.,
GEMINI_PROVIDER_NAME) if environment-specific. Add a .env.example file with
placeholder keys (GEMINI_CREDENTIAL_ID, GEMINI_CREDENTIAL_NAME,
GEMINI_PROVIDER_NAME) and update any initialization/loading code that references
credentialId, credential_name, or provider_name to pull from those env vars
instead of literals. Commit the config with no real identifiers and include
.env.example for guidance.
In `@submissions/harshul-dashora/prompts/resume-parser_llmnode-139_user_1.md`:
- Around line 1-2: The markdown is missing a top-level heading and may have
incorrect EOF newlines; add a single H1 as the first line (for example a short
title above the template) and ensure exactly one trailing newline at EOF; keep
the existing template lines containing {{triggerNode_1.output.jobDescription}}
and {{triggerNode_1.output.resumeText}} unchanged and remove any extra blank
lines so MD041/MD047 are satisfied.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI (base), Organization UI (inherited)
Review profile: ASSERTIVE
Plan: Pro
Run ID: 95d51abe-986f-4d6c-add4-5c09fcf98609
⛔ Files ignored due to path filters (4)
screenshots/home.pngis excluded by!**/*.pngscreenshots/result.pngis excluded by!**/*.pngscreenshots/skill_gap.pngis excluded by!**/*.pngsubmissions/harshul-dashora/ss/deployed.pngis excluded by!**/*.png
📒 Files selected for processing (9)
submissions/harshul-dashora/.gitignoresubmissions/harshul-dashora/README.mdsubmissions/harshul-dashora/agent.mdsubmissions/harshul-dashora/constitutions/default.mdsubmissions/harshul-dashora/flows/resume-parser.tssubmissions/harshul-dashora/lamatic.config.tssubmissions/harshul-dashora/model-configs/resume-parser_llmnode-139_generative-model-name.tssubmissions/harshul-dashora/prompts/resume-parser_llmnode-139_system_0.mdsubmissions/harshul-dashora/prompts/resume-parser_llmnode-139_user_1.md
| "credentialId": "64ea54b7-4f9f-4ec2-af20-4a2c1f0f6dc5", | ||
| "provider_name": "gemini", | ||
| "credential_name": "aiinterview" |
There was a problem hiding this comment.
Mission directive: remove hardcoded credential identifiers from committed config.
Line 10 and Line 12 embed credential metadata directly. Even when not raw secrets, these identifiers leak internal tenancy details and make the kit non-portable across environments.
Suggested fix
- "credentialId": "64ea54b7-4f9f-4ec2-af20-4a2c1f0f6dc5",
"provider_name": "gemini",
- "credential_name": "aiinterview"
+ "credential_name": ""📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "credentialId": "64ea54b7-4f9f-4ec2-af20-4a2c1f0f6dc5", | |
| "provider_name": "gemini", | |
| "credential_name": "aiinterview" | |
| "provider_name": "gemini", | |
| "credential_name": "" |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@submissions/harshul-dashora/model-configs/resume-parser_llmnode-139_generative-model-name.ts`
around lines 10 - 12, Remove the hardcoded credential metadata values
(credentialId and credential_name) from the committed config and replace usage
with environment-driven values (e.g., read process.env variables such as
GEMINI_CREDENTIAL_ID and GEMINI_CREDENTIAL_NAME where the config is loaded);
ensure provider_name remains generic or is also driven by an env var (e.g.,
GEMINI_PROVIDER_NAME) if environment-specific. Add a .env.example file with
placeholder keys (GEMINI_CREDENTIAL_ID, GEMINI_CREDENTIAL_NAME,
GEMINI_PROVIDER_NAME) and update any initialization/loading code that references
credentialId, credential_name, or provider_name to pull from those env vars
instead of literals. Commit the config with no real identifiers and include
.env.example for guidance.
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (1)
submissions/harshul-dashora/flows/resume-parser.ts (1)
111-111:⚠️ Potential issue | 🟠 Major | ⚡ Quick winMission critical: keep response fields typed as JSON, not strings.
Your mission, should you choose to accept it: remove quote-wrapping around structured placeholders so
strengths,gaps, andquestionsstay arrays/objects per the system-schema contract.Suggested patch
- "outputMapping": "{\n \"strengths\": \"{{LLMNode_139.output.generatedResponse.strengths}}\",\n \"gaps\": \"{{LLMNode_139.output.generatedResponse.gaps}}\",\n \"questions\": \"{{LLMNode_139.output.generatedResponse.questions}}\"\n}" + "outputMapping": "{\n \"strengths\": {{LLMNode_139.output.generatedResponse.strengths}},\n \"gaps\": {{LLMNode_139.output.generatedResponse.gaps}},\n \"questions\": {{LLMNode_139.output.generatedResponse.questions}}\n}"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@submissions/harshul-dashora/flows/resume-parser.ts` at line 111, The outputMapping currently wraps structured placeholders in quotes so strengths, gaps, and questions become strings; update outputMapping to remove the surrounding quotes so the placeholders reference LLMNode_139.output.generatedResponse.* as raw JSON (e.g., strengths: {{LLMNode_139.output.generatedResponse.strengths}}) ensuring the fields remain arrays/objects per the system-schema contract; locate the outputMapping entry containing "LLMNode_139" and adjust strengths, gaps, and questions accordingly.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@submissions/harshul-dashora/prompts/resume-parser_llmnode-139_user_1.md`:
- Around line 1-3: The Markdown file's H1 "# Resume Parser Input" lacks a blank
line after it (MD022); insert a single empty line immediately after the H1 so
the file begins with "# Resume Parser Input" followed by a blank line before
"Job Description: {{triggerNode_1.output.jobDescription}}"; update the top of
the document containing the heading string "# Resume Parser Input" to satisfy
markdownlint spacing rules.
---
Duplicate comments:
In `@submissions/harshul-dashora/flows/resume-parser.ts`:
- Line 111: The outputMapping currently wraps structured placeholders in quotes
so strengths, gaps, and questions become strings; update outputMapping to remove
the surrounding quotes so the placeholders reference
LLMNode_139.output.generatedResponse.* as raw JSON (e.g., strengths:
{{LLMNode_139.output.generatedResponse.strengths}}) ensuring the fields remain
arrays/objects per the system-schema contract; locate the outputMapping entry
containing "LLMNode_139" and adjust strengths, gaps, and questions accordingly.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI (base), Organization UI (inherited)
Review profile: ASSERTIVE
Plan: Pro
Run ID: cbc77632-9fc6-444d-acea-783a110005dd
📒 Files selected for processing (3)
submissions/.env.examplesubmissions/harshul-dashora/flows/resume-parser.tssubmissions/harshul-dashora/prompts/resume-parser_llmnode-139_user_1.md
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (1)
submissions/harshul-dashora/prompts/resume-parser_llmnode-139_user_1.md (1)
4-4:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winMission: close out MD047 by restoring one trailing newline at EOF.
Line 4 currently ends the file without the required final newline; markdownlint will keep failing.
Patch
Candidate Resume: {{triggerNode_1.output.resumeText}} +🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@submissions/harshul-dashora/prompts/resume-parser_llmnode-139_user_1.md` at line 4, The file ends without the required final newline; add a single trailing newline at EOF so the last line "Candidate Resume: {{triggerNode_1.output.resumeText}}" (reference the template variable triggerNode_1.output.resumeText) is terminated by one newline character. Ensure only one newline is added (not multiple) and save the file so markdownlint will pass.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@submissions/harshul-dashora/flows/resume-parser.ts`:
- Line 111: The outputMapping is treating LLMNode_139.output.generatedResponse
as a parsed object (accessing .strengths/.gaps/.questions) but LLMNode_139 is a
dynamic text generator so generatedResponse is plain text; update the mapping to
map the whole generatedResponse into one string field (e.g., map to
generatedResponse.output) and parse/validate that JSON downstream, or replace
LLMNode_139 with a schema-enforcing node (e.g., an InstructorLLMNode configured
with a generatedResponse object schema) so strengths/gaps/questions become real
fields; modify the mapping in resume-parser.ts accordingly and ensure downstream
code expects the single-string field or the new typed fields.
---
Duplicate comments:
In `@submissions/harshul-dashora/prompts/resume-parser_llmnode-139_user_1.md`:
- Line 4: The file ends without the required final newline; add a single
trailing newline at EOF so the last line "Candidate Resume:
{{triggerNode_1.output.resumeText}}" (reference the template variable
triggerNode_1.output.resumeText) is terminated by one newline character. Ensure
only one newline is added (not multiple) and save the file so markdownlint will
pass.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI (base), Organization UI (inherited)
Review profile: ASSERTIVE
Plan: Pro
Run ID: 7aad757e-37b9-4dc4-a516-54d32d940839
📒 Files selected for processing (2)
submissions/harshul-dashora/flows/resume-parser.tssubmissions/harshul-dashora/prompts/resume-parser_llmnode-139_user_1.md
|
All requested CodeRabbit changes have been addressed and the automated checks are now passing successfully. The agent has been deployed and tested end-to-end. Documentation, screenshots, demo video, and exported AgentKit files have been included in the submission. Looking forward to your review. Thank you! |
Contribution Type
General Requirements
File Structure Validation
Validation
Lamatic Validation
Output Validation
NPM / Local Validation
Problem
Candidates often prepare for interviews using generic questions that do not match their resume or job requirements, resulting in inefficient preparation.
Solution
The AI Interview Preparation Agent analyzes a resume and job description to generate:
Demo
Video Walkthrough:
https://drive.google.com/file/d/1Da8nCZi_T6x1yJvCoDAsLesAXbICV1mh/view?usp=sharing
Screenshots
Included in the submission repository.
Security
Files Added
The submission adds 9 new files for the AI Interview Preparation Agent:
Configuration & Documentation
.lamatic/,node_modules/,.env, and.env.localFlow & Model Configuration
Prompts & Guardrails
strengths,gaps, andquestions(3–5 strengths, 3–5 gaps, exactly 5 interview questions)resumeTextandjobDescriptionfrom the trigger inputFlow Architecture & Node Types
The resume-parser flow is a three-node, single-pathway pipeline:
Trigger Node (triggerNode_1) — GraphQL API entry point
resumeText(string) andjobDescription(string)LLM Node (LLMNode_139) — Dynamic generative node (text generation)
generatedResponsecontaining strengths, gaps, and questionsResponse Node (responseNode_triggerNode_1) — GraphQL API response handler
Content-Type: application/jsonheaderstrengths,gaps,questionsData Flow: triggerNode → LLMNode → responseNode (+ direct response edge from trigger for real-time response handling)
Overall Purpose: Accepts a candidate's resume and job description, analyzes them through an LLM with expert interviewer instructions, and returns personalized interview preparation data (strengths, skill gaps, tailored questions with ideal answers).