Blacksburg, VA

Karthik Mandli

Computer science at Virginia Tech, class of 2028.Multimodal evaluation, LLM systems, and production data infrastructure.

Open to Summer 2027 SWE and AI internships.

Experience

  • 2026Independent research · Multimodal AI researcherTested whether vision-language models truly see fine-grained differences or just read the label.Evaluation
    Question
    Do vision-language models see fine-grained differences, or just read the names in the text?
    Built
    Evaluation pipelines with leakage guards and controls, refined across several framings of the question.
    Found
    Showed the model was reading, not seeing: removing species names cut accuracy from 86.7% to 25.4% on 5,794 images.
  • 2026 – nowVirginia Tech · Teaching assistant, Data Structures & AlgorithmsTeach students to debug data structures by writing the failing test first.

    Algorithm analysis, structure trade-offs, and test design on the course forum.

  • 2025HICE Lab · DBWorkout · Software developerDrove a live SQL-learning platform's move to TypeScript and fed its APIs malformed input to catch failures before release.

    Traced failures in database-backed REST workflows through Docker logs.

Things I've built

  • ScoutPulls fresh internship postings from company job boards on a schedule, and flags when a board silently returns nothing.Data infrastructure

    Live

    Scout, from a scheduled scan to your feedA scheduler starts the scanner, which reads 999 company job boards. A filter keeps recent US internships, merges repeats and skips deleted or applied roles; new roles land in the database and show up in your feed. On full scans, an empty-scan check opens an alert when a board that had 3 or more postings returns zero on two scans in a row.postingsnew rolesScheduler999 companyboardsScannerFilterDatabaseYour feedEmpty-scancheckAlert12345Scout, from a scheduled scan to your feedA scheduler starts the scanner, which reads 999 company job boards. A filter keeps recent US internships, merges repeats and skips deleted or applied roles; new roles land in the database and show up in your feed. On full scans, an empty-scan check opens an alert when a board that had 3 or more postings returns zero on two scans in a row.postingsnew rolesScheduler999 companyboardsScannerFilterDatabaseYour feedEmpty-scancheckAlert12345
    1. Step 1: A scheduler starts scans: 232 target-company boards every 30 minutes, all 999 every 3 hours.
    2. Step 2: The scanner reads each board's open postings.
    3. Step 3: The filter keeps recent US internships, merges repeats, and skips deleted or applied roles.
    4. Step 4: New roles land in the database and appear in your feed.
    5. Step 5: Check: a board that had 3+ postings, then zero on two full scans, opens an alert.
    Scout, from a scheduled scan to your feed
    Scout, from a scheduled scan to your feedA scheduler starts the scanner, which reads 999 company job boards. A filter keeps recent US internships, merges repeats and skips deleted or applied roles; new roles land in the database and show up in your feed. On full scans, an empty-scan check opens an alert when a board that had 3 or more postings returns zero on two scans in a row.postingsnew rolesScheduler999 companyboardsScannerFilterDatabaseYour feedEmpty-scancheckAlert12345
    Problem
    A job board can return HTTP 200 with zero postings. Nothing fails.
    Chose
    Each board keeps a baseline; one that returned 3 or more postings is flagged after two empty runs.
    Proof
    A canary watches 877 of 999 boards, a run where under half answer opens an outage issue, and 450+ tests cover it.
    • Supabase
    • GitHub Actions
    • MCP
  • ProspectPlans a student's courses and clubs toward a target job; models read, code decides.Agentic systems

    VTHacks 14

    Prospect, from a resume to a checked planYou upload a resume and transcript. Each agent passes a GoDaddy identity check, then models read both and propose courses, clubs and the kind of role you fit. Code drops any course or club that is not in the real catalog of 5,956 courses and 765 clubs, while code ranks recent US job listings against your target role. Your checked plan and ranked jobs are saved, and progress streams back to you.PDFsproposed plantarget rolematched jobschecked planResume +transcriptAgentidentityModelsread, proposeJob listingsUS, last 30 daysCode ranksjobsYour plan +matchesCatalogcheckReal catalog5,956 courses765 clubsDropped:not in catalog1234Prospect, from a resume to a checked planYou upload a resume and transcript. Each agent passes a GoDaddy identity check, then models read both and propose courses, clubs and the kind of role you fit. Code drops any course or club that is not in the real catalog of 5,956 courses and 765 clubs, while code ranks recent US job listings against your target role. Your checked plan and ranked jobs are saved, and progress streams back to you.PDFsproposed plantarget rolematched jobschecked planResume +transcriptAgentidentityModelsread,proposeJob listingsCoderanksjobsYour plan+ matchesCatalogcheckReal catalog5,956 courses765 clubsDropped:not in catalog1234
    1. Step 1: You upload a resume and transcript; each agent first passes a GoDaddy identity check.
    2. Step 2: Models read both, then propose courses and clubs and the kind of role you fit.
    3. Step 3: Check: code drops any course or club not in the real catalog, while code ranks jobs.
    4. Step 4: Your checked plan and ranked jobs are saved, and progress streams back to you.
    Prospect, from a resume to a checked plan
    Prospect, from a resume to a checked planYou upload a resume and transcript. Each agent passes a GoDaddy identity check, then models read both and propose courses, clubs and the kind of role you fit. Code drops any course or club that is not in the real catalog of 5,956 courses and 765 clubs, while code ranks recent US job listings against your target role. Your checked plan and ranked jobs are saved, and progress streams back to you.PDFsproposed plantarget rolematched jobschecked planResume +transcriptAgentidentityModelsread, proposeJob listingsUS, last 30 daysCode ranksjobsYour plan +matchesCatalogcheckReal catalog5,956 courses765 clubsDropped:not in catalog1234
    Problem
    A plan built by language models can name courses that do not exist or rank jobs by guesswork.
    Chose
    Models only read and propose; code ranks the jobs and checks every course and club against the real catalog.
    Proof
    Checked against 5,956 VT courses and 765 clubs; four agent identities active on GoDaddy ANS; 1,243 tests pass.
    • Databricks
    • TypeScript
  • WitnessTurns a photo of a housing problem into a complaint that cites the exact statute, and drops any citation that matches no real one.Multimodal AI

    Team of four · AWS hackathon · backend and architecture

    Witness, from a photo to a cited complaintYou upload a photo of a housing problem and enter its address. A vision model describes what it sees, by category. Statute matching pulls the provisions for those categories from 30+ Virginia provisions, and a model drafts violations. A citation check keeps a citation only if it exactly matches a provision retrieved for this request, which proves the provision exists, not that it applies; the rest are dropped. A model then writes the complaint letter with the enforcement contacts for your area.photoobservationsdraftviolationsmatchedcitationsno exactmatchYour photo+ addressVisionmodelStatutematching30+ VirginiaprovisionsCitationcheckDroppedLettermodelEnforcementcontactsComplaintletter12345Witness, from a photo to a cited complaintYou upload a photo of a housing problem and enter its address. A vision model describes what it sees, by category. Statute matching pulls the provisions for those categories from 30+ Virginia provisions, and a model drafts violations. A citation check keeps a citation only if it exactly matches a provision retrieved for this request, which proves the provision exists, not that it applies; the rest are dropped. A model then writes the complaint letter with the enforcement contacts for your area.photoobservationsdraftviolationsmatchedcitationsno exactmatchYour photo+ addressVisionmodelStatutematching30+ VirginiaprovisionsCitationcheckDroppedLettermodelEnforcementcontactsComplaintletter12345
    1. Step 1: You upload a photo of the housing problem and enter its address.
    2. Step 2: A vision model describes what it sees, tagging each observation with a category.
    3. Step 3: Matching pulls the provisions for each category, and a model drafts violations from them.
    4. Step 4: Check: a citation survives only if it exactly matches a provision retrieved for this request.
    5. Step 5: A model writes the complaint letter with the enforcement contacts for your area.
    Witness, from a photo to a cited complaint
    Witness, from a photo to a cited complaintYou upload a photo of a housing problem and enter its address. A vision model describes what it sees, by category. Statute matching pulls the provisions for those categories from 30+ Virginia provisions, and a model drafts violations. A citation check keeps a citation only if it exactly matches a provision retrieved for this request, which proves the provision exists, not that it applies; the rest are dropped. A model then writes the complaint letter with the enforcement contacts for your area.photoobservationsdraftviolationsmatchedcitationsno exactmatchYour photo+ addressVisionmodelStatutematching30+ VirginiaprovisionsCitationcheckDroppedLettermodelEnforcementcontactsComplaintletter12345
    Problem
    A model writing a legal complaint can cite a statute that does not exist.
    Chose
    Keep a model citation only if its section label exactly matches a statute row retrieved for that request.
    Proof
    Every citation the model proposes is checked against a statute store of 30+ Virginia provisions. It proves existence, not applicability.
    • AWS Lambda
    • Step Functions
    • DynamoDB

What I work with

  • Languages

    • Python
    • C/C++
    • Java
    • JavaScript
    • TypeScript
    • SQL
  • ML & vision

    • PyTorch
    • Hugging Face Transformers
  • LLM systems

    • RAG & semantic search
    • Agents & tool calling
    • MCP
    • LangChain
    • LLM evaluation
  • Web & data

    • React
    • Next.js
    • Node.js
    • PostgreSQL + pgvector
  • Cloud & tooling

    • AWS
    • Docker
    • CI/CD
    • Git
    • JUnit
    • Linux

Off the keyboard

I play golf, love traveling to new places, and watch a lot of movies.