Vedaang Chopra

Research engineer. I build ways to check whether AI systems are right, and train them to be better.

5 years shipping production ML at Fortinet. Georgia Tech M.S. in machine learning, finishing Dec 2026. Moving into evals, post-training and RL.

Atlanta. F-1, OPT eligible Dec 2026. Open to full-time roles from January 2027.

What I am working on now

What I am building, and why

Open any project for a short walkthrough. Each one says what works and what does not yet.

Verifying an agent step by step (CAD)

A model that writes CAD code, and gets told exactly which step went wrong. Owner, CORE Robotics Lab
Ongoing
Interactive walkthrough of Verifying an agent step by step (CAD). Parts are marked built, partial, proposed or tried and did not work.
Details: what did not work, figures, how far along, evidence

Did not work: How often repair gets the shape right; Richer feedback did not help; A pre-registered gate that failed.

Figures from my notebooks
Three 3D views for CAD sample 00857821 at repair turn 4: ground truth, generated shape (a plain cylinder), and an overlay showing the mismatch. Same sample at repair turn 5: the generated shape now has a cylinder plus a wedge and overlaps the ground truth more closely.
Illustrative Sample 00857821 from an earlier run with up to 6 turns (the current loop uses at most 3), shown at turn 4; repair is guided by the ground-truth shape.
How far along is it?
  1. BuiltThe model writes CadQuery and the code runs in a sandbox
  2. PartialIntermediate representation: a feature tree plus the solid after each operation Fixes are done, the experiment is pending.
  3. BuiltOutcome check of the final part against the target
  4. BuiltProcess verifier: a verdict for every operation, correct, first error or inherited Tested on hand-made faults, not yet on real model errors.
  5. PartialRepair packet: what is wrong, where, how to fix it, what to keep
  6. BuiltBounded repair loop, up to 3 turns, keeping the best result Currently guided by the ground-truth shape.
  7. PartialLearn repair cards from labelled training samples Works offline and in tests.
  8. PartialReuse cards in later runs Not wired into the live loop yet.
  9. ProposedRepair without the ground-truth shape One small pilot only.
Early numbers, work in progress

CAD repair on a frozen LLM, shape overlap Verified

0.82 → 0.92 voxel IoU, expert prompts

Expert prompts

Beginner prompts

Caveat. Repair is ground-truth-assisted. The target shape scores each attempt. No result without the target exists.

Evidence and numbers
Baseline
One-shot generation, same model (gpt-5.4-mini)
Sample size
200 per group
Setting
LLM writes CadQuery, runs it, compares to the target part, repairs in at most 3 turns. Model is frozen.
Evidence tier
Verified. Re-read from a saved artifact (summary.csv).
  • Agentic minus self-debug, paired bootstrap: +0.053 [0.019, 0.092] expert, +0.051 [0.023, 0.082] beginner (notebook output only).
  • The three arms use different prompts.

Must-keep caveats

  • Repair runs in repair_evidence_mode=gt_assisted: the ground-truth STL scores attempts. No GT-free result exists (gt_free is code/spec only; one small component pilot, spec 033 step2, 11 samples).
  • Arms use different prompts (same LLM gpt-5.4-mini). Failed runs score IoU 0 and Hausdorff/Chamfer 2.0 (spec 024 sentinels).
  • IoU is voxel IoU (pitch 0.05, ICP-aligned) per deep dive; CAD session did not independently verify voxel-based.
  • Of 400 agentic runs: 393 evaluated, 7 runtime failures; geometry_correct 147/393; 83 of 230 loop 'successes' are geometry-wrong; turn 1 carries most of the gain.
CAD repair on a frozen LLM, shape overlap, voxel IoU
GroupBarRoleValue
Expert promptsOne-shotbaseline0.8227
Expert promptsSelf-debugcomparison0.8633
Expert promptsAgentic repairbeat the baseline0.9163
Beginner promptsOne-shotbaseline0.5688
Beginner promptsSelf-debugcomparison0.6478
Beginner promptsAgentic repairbeat the baseline0.699

How often repair gets the shape right Verified Did not work

147 of 393 evaluated agentic runs came out geometry-correct

Evaluated agentic runs

Caveat. 83 of 230 loop "successes" are geometry-wrong. Turn 1 carries most of the gain.

Evidence and numbers
Baseline
400 agentic runs, 393 evaluated, 7 runtime failures
Sample size
393
Setting
Same agentic repair runs as the IoU card.
Evidence tier
Verified. Re-read from a saved artifact (summary.csv).

Must-keep caveats

  • Repair runs in repair_evidence_mode=gt_assisted: the ground-truth STL scores attempts. No GT-free result exists (gt_free is code/spec only; one small component pilot, spec 033 step2, 11 samples).
  • Arms use different prompts (same LLM gpt-5.4-mini). Failed runs score IoU 0 and Hausdorff/Chamfer 2.0 (spec 024 sentinels).
  • IoU is voxel IoU (pitch 0.05, ICP-aligned) per deep dive; CAD session did not independently verify voxel-based.
  • Of 400 agentic runs: 393 evaluated, 7 runtime failures; geometry_correct 147/393; 83 of 230 loop 'successes' are geometry-wrong; turn 1 carries most of the gain.
How often repair gets the shape right, runs
GroupBarRoleValue
Evaluated agentic runsGeometry-correctbeat the baseline147
Evaluated agentic runsEvaluatedbaseline393

Richer feedback did not help Verified Did not work

4/12 in every arm A/B/C feedback ablation, a three-way tie

Successes out of 12

Caveat. Tiny sample. Reads as no measurable gain from operation-level tracing, nothing more.

Evidence and numbers
Baseline
Arm A, the plainest feedback
Sample size
12 samples x 3 arms
Setting
Operation-level tracing against two simpler feedback arms.
Evidence tier
Verified. Re-read from a saved artifact (phase4_abc_summary.csv).
Richer feedback did not help, samples succeeded
GroupBarRoleValue
Successes out of 12Arm Abaseline4
Successes out of 12Arm Bdid not beat the baseline4
Successes out of 12Arm Cdid not beat the baseline4

A pre-registered gate that failed Verified Did not work

14.84% vs 27.01% structural distance vs majority baseline

Gate A

Caveat. Gate failed (passed=False). Reported as failed. Result comes from notebook output.

Evidence and numbers
Baseline
Majority-class guess, 27.01%
Sample size
411 pairs
Setting
Gate A asked whether structural distance predicts the error class. It needed a 10 point margin.
Evidence tier
Verified. Re-read from a saved artifact (gate_a_structural_vs_error_class.ipynb).
A pre-registered gate that failed, percent
GroupBarRoleValue
Gate AMajority baselinebaseline27.01
Gate AStructural distancedid not beat the baseline14.84

Reusing agent work (SHASTRA)

Turning what AI agents did into maps of their steps. Team project, CS 8903, advisor Dr. Alexey Tumanov
Research prototype
Interactive walkthrough of Reusing agent work (SHASTRA). Parts are marked built, partial, proposed or tried and did not work.
Details: what did not work, figures, how far along, evidence
Figures from my notebooks
Workflow graph extracted from a GAIA question: identify game, find Wikipedia page, extract release date, fetch revision history, count revisions.
Illustrative One workflow dependency graph built from a single GAIA task trace; it shows the structure only and implies no accuracy or reuse result.
How far along is it?
  1. BuiltIngest traces from several agent benchmarks
  2. BuiltGroup events into blocks
  3. BuiltAn LLM labels each block with capabilities, checked by code, in an append-only label registry Label quality is not validated.
  4. BuiltBuild a task-dependency graph from the trace
  5. Tried, did not workReverse decomposition into subtasks 0 of 11 passed validation.
  6. PartialReplay a graph as compiled LangGraph code A few records done, two answers match.
  7. ProposedPairwise reuse across tasks Code exists, no results yet.
  8. ProposedWorkflow retrieval and adaptation

Routing each request to the right model (ARTEMIS)

Sending each request to the cheapest AI model that can answer it. Owner, research project
Ongoing
Interactive walkthrough of Routing each request to the right model (ARTEMIS). Parts are marked built, partial, proposed or tried and did not work.
Details: what did not work, figures, how far along, evidence

Did not work: ARTEMIS, a learned router that lost.

How far along is it?
  1. BuiltCollect answers from five models on 67,711 questions
  2. BuiltSplit by image so no picture appears in both train and test Found and removed 3,909 shared images that had inflated earlier numbers.
  3. BuiltCost and latency model per call
  4. BuiltBaselines: best single model, per-task lookup, oracle
  5. BuiltLearned router with cost and latency penalties set at decision time Did not beat the per-task lookup on the test split.
  6. PartialServing layer and verifier cascade Code only, never validated on live backends.
Early numbers, work in progress

ARTEMIS, a learned router that lost Verified Did not work

0.509 < 0.564 learned router vs per-task lookup table

Test accuracy

Caveat. Gate G3 failed. The learned router did not beat a lookup table. Offline research only.

Evidence and numbers
Baseline
Per-task lookup, 0.5637. Best single model, 0.491.
Sample size
10,198 test questions
Setting
Leakage-corrected VLM routing benchmark, five-model pool. Oracle shows the headroom.
Evidence tier
Verified. Re-read from a saved artifact (E6_learned_vs_baselines_v2_dbase.json).
ARTEMIS, a learned router that lost, accuracy
GroupBarRoleValue
Test accuracyBest single modelbaseline0.491
Test accuracyPer-task lookupreference0.5637
Test accuracyLearned routerdid not beat the baseline0.509
Test accuracyOraclereference0.6543

Teaching a vision model to look at less (CERBERUS)

Teaching a vision-language model to read only the parts of an image that a question needs. Owner, research project
Ongoing
Interactive walkthrough of Teaching a vision model to look at less (CERBERUS). Parts are marked built, partial, proposed or tried and did not work.
Details: what did not work, figures, how far along, evidence
Figures from my notebooks
Line chart of image-to-text and text-to-image Recall@5 versus embedding dimension 128 to 4096 for attention and perceiver aligners.
Verified Recall@5 on paired PixMo validation data rises from about 63 percent at 128 dimensions to about 77.7 percent at 4096 for image-to-text retrieval for the attention model, while the perceiver variant stays near zero.
Two t-SNE scatter plots of image and text embeddings: attention aligner interleaved, perceiver aligner in two separate clusters.
Illustrative Qualitative t-SNE of image and text embeddings from the vision-text alignment notebook, where the attention model interleaves modalities and the perceiver variant does not.
How far along is it?
  1. BuiltFrozen CLIP image encoder and sentence text encoder
  2. BuiltLearned attention pooling into one shared 4096-dimension space
  3. BuiltMatryoshka nested sizes from 4096 down to 128 dimensions Shrinks the vector, not the number of patches.
  4. BuiltContrastive alignment on PixMo image-caption pairs
  5. Tried, did not workPerceiver compression of image tokens Retrieval stayed near random.
  6. PartialQwen decoder with LoRA reading the aligned tokens One 7B run, training loss only, no held-out answer metric yet.
  7. ProposedQuestion-conditioned choice of how many patches to keep
Early numbers, work in progress

CERBERUS retrieval, recall@5 Verified

62.9 → 77.7 image-to-text R@5, 128-d vs 4096-d

Image to text

Text to image

Caveat. Vision-text only. No held-out QA metric exists. Retrieval numbers are on the validation set.

Evidence and numbers
Baseline
The same model truncated to 128 dimensions
Sample size
paired PixMo validation set
Setting
Frozen CLIP ViT-L/14 image tower and sentence encoder with Matryoshka prefixes and InfoNCE. Attention model.
Evidence tier
Verified. Re-read from a saved artifact (alignment_metrics_all_models.csv).
CERBERUS retrieval, recall@5, recall@5, percent
GroupBarRoleValue
Image to text128-dbaseline62.9
Image to text512-dcomparison73.7
Image to text4096-dbeat the baseline77.68
Text to image128-dbaseline64.0
Text to image512-dcomparison74.9
Text to image4096-dbeat the baseline77.55
More projects6 smaller or older ones

ATHENA, from idea to storyboard

From a rough idea to an editable storyboard. Team project, Georgia Tech
Built, being hardened
Interactive walkthrough of ATHENA, from idea to storyboard. Parts are marked built, partial, proposed or tried and did not work.
Details: what did not work, figures, how far along, evidence
Figures from my notebooks
AI-generated storyboard frame of a woman sipping iced coffee in a cafe.
Illustrative One generated shot from a live ATHENA run of a coffee ad; some image calls in other runs fail and leave placeholders, and the evaluator is text-only.
How far along is it?
  1. BuiltEight LangGraph nodes from intent to project assembly
  2. BuiltPer-scene research, script, visual direction and shots run in a loop with failure isolation
  3. BuiltFive research tools exposed as an MCP server: web, page, image, YouTube search and transcripts
  4. BuiltResume and selective regeneration from the first invalid artifact
  5. PartialImage generation with a fallback model A fix for silent empty images is not yet re-verified end to end.
  6. PartialScene evaluator Text only.
  7. ProposedVideo generation from the storyboard

Sign reading for AR glasses

Glasses that read signs aloud. Team of two
Prototype
Interactive walkthrough of Sign reading for AR glasses. Parts are marked built, partial, proposed or tried and did not work.
Details: what did not work, figures, how far along, evidence
How far along is it?
  1. BuiltOn-device frame gate on web, Android and iOS
  2. BuiltVision-language model call with a swappable provider
  3. BuiltStructured scene JSON, then speech
  4. PartialMeta Ray-Ban hardware path Not validated. No latency figures.

Mutual-fund consensus platform

Do mutual funds agree on what to buy? Independent
In progress
Interactive walkthrough of Mutual-fund consensus platform. Parts are marked built, partial, proposed or tried and did not work.
Details: what did not work, figures, how far along, evidence
How far along is it?
  1. BuiltGather every fund's monthly holdings in one place
  2. BuiltCount how many fund houses hold each stock
  3. BuiltSee when funds came into a stock, against its price
  4. Tried, did not workTest whether fund picks predict later returns Not so far, and the test is under review for bias.

Malware detection from memory forensics

Can a computer's memory reveal malware? Paper with a co-author, B.Tech. Dataset and code are public.
Finished
Interactive walkthrough of Malware detection from memory forensics. Parts are marked built, partial, proposed or tried and did not work.
Details: what did not work, figures, how far along, evidence
Figures from my notebooks
Flowchart: lab setup, sample generation, memory analysis, dataset creation, then exploratory analysis, machine learning and deep learning.
Verified Three-phase pipeline from malware collection through memory dumps to a labelled dataset and classifiers, from a paper written with a co-author.
Bar chart of test scores for nine classifiers, with Gradient Boosting highest near 0.89.
Verified Test scores of nine classifiers on the memory-forensics window dataset, with Gradient Boosting best at about 0.887; this is an exploratory row-level split with a leakage caveat.
How far along is it?
  1. BuiltIsolated lab to run malware and capture memory
  2. BuiltRansomware samples executed and memory dumped, including WannaCry, Cerber, GandCrab and others
  3. BuiltMemory analysis with Volatility 2 and a public YARA rule set
  4. BuiltRaw forensic findings converted into a labelled dataset of memory windows
  5. BuiltPCA and t-SNE to study the feature space
  6. BuiltNine scikit-learn classifiers compared Exploratory, with a leakage caveat. Does not match the paper table.
Early numbers, work in progress

Malware detection from memory dumps Verified

88.74% best classifier, 260 of 293 test windows

Best classifier (gradient boosting)

Caveat. Exploratory, with a leakage caveat. Does not match the paper table.

Evidence and numbers
Baseline
Eight other scikit-learn classifiers on the same windows
Sample size
976 windows (521 / 455)
Setting
Volatility 2 features from memory dumps, vendored YARA rules, nine scikit-learn classifiers.
Evidence tier
Verified. Re-read from a saved artifact.
Malware detection from memory dumps, test windows
GroupBarRoleValue
Best classifier (gradient boosting)Windows in testbaseline293
Best classifier (gradient boosting)Gradient boosting correctbeat the baseline260

Neural-Malware-Shield

Graph networks that spot malware. Team of 4, the graph-network work is mine
Finished
Details: what did not work, figures, how far along, evidence
Early numbers, work in progress

Malware graphs, GraphSAGE vs GAT Verified

0.7813 vs 0.7080 accuracy on MalNet-tiny

MalNet-tiny accuracy

Caveat. Team result. Macro-F1 for GraphSAGE is 0.7770. Do not quote the autoencoder figure alone.

Evidence and numbers
Baseline
GAT, the other graph model
Sample size
not reported
Setting
Team of 4. The GNN work is mine.
Evidence tier
Verified. Re-read from a saved artifact.
Malware graphs, GraphSAGE vs GAT, accuracy
GroupBarRoleValue
MalNet-tiny accuracyGATbaseline0.708
MalNet-tiny accuracyGraphSAGEbeat the baseline0.7813

RL Soccer

A reinforcement-learning soccer team. Coursework, team project
Finished
Details: what did not work, figures, how far along, evidence
Figures from my notebooks
Learning curves of mean episode reward versus timesteps for four PPO runs; the v3 curriculum run reaches about 1.97 over 30 million steps.
Verified Training reward (not win rate) for four PPO runs in a team project; the v3 curriculum run ends near 1.97 after about 30 million steps.
Early numbers, work in progress

RL Soccer, ten-episode evaluations Verified

8-2 and 6-4 wins and losses against two opponents

Against the baseline agent

Against curriculum v1

Caveat. Ten episodes is a small sample. Final training reward 1.969 is a training reward, not a win rate.

Evidence and numbers
Baseline
The baseline agent and curriculum v1
Sample size
10 episodes each
Setting
PPO curriculum v3, 30,011,592 steps. Coursework, team project.
Evidence tier
Verified. Re-read from a saved artifact.
RL Soccer, ten-episode evaluations, episodes won out of 10
GroupBarRoleValue
Against the baseline agentLostdid not beat the baseline2
Against the baseline agentWonbeat the baseline8
Against curriculum v1Lostdid not beat the baseline4
Against curriculum v1Wonbeat the baseline6

Tools I built along the way

6 toolssmall things I built to get the work done
  • ATHENA research server

    An MCP server with five research tools (web, page, image, YouTube search and transcripts) usable by any MCP agent.

    Built
  • SHASTRA label registry and replay

    An append-only vocabulary of agent capabilities, and a compiler that turns a task graph into a runnable LangGraph.

    Built, team project
  • Job-tracking agent

    A LangGraph app that reads job email, classifies it, detects referrals, de-duplicates, and writes a spreadsheet and a daily digest.

    Built
  • jobhunt-engine

    A human-in-the-loop job search system: discovery, scoring, drafting and tracking, with a dashboard.

    Built
  • AI-Coding-System

    Shared rules, skills and checkpoints so the same coding standards apply across Claude Code, Codex, Hermes and Pi.

    Open source
  • Personal knowledge compiler

    A local-first knowledge graph builder over notes and wikis. Only the deterministic first milestone is built.

    Partial

Where I have worked

Georgia Tech, CORE Robotics Lab

Graduate Research Assistant Jan 2026 to present

A closed-loop CAD agent that writes, runs, checks and repairs code on a frozen model, with a geometry-grounded process verifier. Ongoing.

  • Designing a feature-tree and B-Rep intermediate representation that records the part after every construction step, and a process verifier that localises the first wrong operation.
  • Built the repair loop around LangGraph with sandboxed CadQuery execution and geometric checks, guided by the ground-truth shape so far. See the measurement
  • Reporting the failures too: a feedback ablation that tied, and a pre-registered gate that failed. See the measurement
  • Test suite of about 2.5k collected tests. No pass count is claimed.

Fortinet, AIOps R&D

Software Development Engineer I, then II (ML/AI track), AIOps R&D Feb 2021 to Jul 2025

Production ML at network scale: log ingestion, agentic diagnostics, edge inference, anomaly detection. Figures are self-reported.

All Fortinet figures are self-reported. No repo artifacts back them.

  • Redesigned OpenSearch log ingestion with async I/O and Go, from under 50 to 2,000+ events per second (self-reported). See the measurement
  • Agentic RAG diagnostics: LLM tool-calling over telemetry for root-cause analysis. 2023 hackathon top-5 finalist, then production. About 70% faster mean resolution (self-reported).
  • Edge inference with ONNX Runtime and quantization, CPU-only, on access points and switches. About 40% lower latency (self-reported).
  • SLA forecasting: 60+ classifiers across 4 categories, 7-day horizon, automated evaluation and retraining.
  • Filed a patent on distributional-thresholding anomaly detection (PCT/IN2022/058026, pending). About 75% less manual troubleshooting (self-reported).

Earlier, in 2020: internships in security research at NCIIPC, data science at Mu Sigma, and security architecture at Cyber Boxer.

Skills

Skills and how well each is backedpick one to highlight where I used it

Tier A: Backed by work above Used in a result or project on this page.

Tier B: Qualified Coursework or code paths only.

Tier C: Coursework only Studied, not used in my own results.

School, one accepted paper, one filed patent

  • Georgia Institute of Technology. M.S. Computer Science, Machine Learning. GPA 3.8/4.0. Aug 2024 to Dec 2026.
  • Maharaja Surajmal Institute of Technology. B.Tech. Information Technology. CGPA 8.8/10.0. Aug 2016 to Aug 2020.
  • Integrating Machine Learning and Memory Forensics for Enhancing Cybersecurity in IoT-Enabled Energy Systems. IEEE ICAIA 2026. Accepted, presenting Nov 16, 2026.
  • Patent PCT/IN2022/058026, distributional-thresholding anomaly detection. Fortinet. Filed, pending.

Take the resume for your role, or write to me

Built from my fact bank, last updated October 30, 2026.