Skip to content

Harsh Kamat

Final-year Computer Science Engineering student building applied AI systems in Python: retrieval-augmented LLM applications, ML evaluation, and the backend engineering, testing and deployment around them.

Open to AI/ML engineering internships, and to entry-level roles from 2027, in applied and generative AI, retrieval and RAG, and AI backend systems. Bengaluru or remote.

Selected work

Featured projects

NutriMind AI chat in IBM Live mode: a grounded answer from the Knowledge Agent with four sources, then a BMI answer from the Coordinator.

RAG application · IBM watsonx.ai · 2026

NutriMind AI

Multi-user RAG nutrition assistant on IBM watsonx.ai Granite. It answers from each user's own PDFs with page-level citations, routes requests rule-first to four specialist agents, and computes calories, BMI, macro targets and the health score in Python, not in the model.

Origin: Began as my IBM SkillsBuild internship project, then extended through five engineering milestones into the multi-user, deployed system described here.

Evidence

  • 472 automated tests at 91% line coverage
  • CI on every push: lint and tests, Alembic migrations on a real PostgreSQL server, and a boot check of the production Docker image
  • Rule-first routing to four specialist agents, with Granite classification only when no rule matches
  • Citations built from stored chunk metadata; nutrition calculations done deterministically in Python
  • Per-user isolation enforced down to vector search; asynchronous document ingestion
  • Deployed on Render in IBM Live mode

Public demo: do not upload personal health documents; treat stored demo data as disposable.

  • Python
  • Flask
  • IBM watsonx.ai
  • ChromaDB
  • PostgreSQL
  • Docker
  • pytest
  • GitHub Actions
How it works, key decision and limitations

How it works

  • Routing: six ordered regex rules route clear requests without an LLM call (small talk and BMI checks are answered directly). Granite classifies the rest at temperature 0 against an allow-list, and any failure falls back to the Knowledge agent. The agents are role-specific handlers, not an autonomous planning loop.
  • Retrieval: PDFs are split into page-bounded chunks (800 characters, 120 overlap), embedded, and searched in ChromaDB (top 5). Each embedding provider has its own collection and similarity threshold, and answers below it are labelled general knowledge.
  • Calculations: BMR and TDEE (Mifflin-St Jeor), macro targets, WHO BMI categories, meal totals from an 85-food table and the five-component health score are plain Python.
  • Engineering: Flask, SQLAlchemy and Alembic on SQLite or PostgreSQL. Uploads return 202 and are indexed on a bounded background pool. The multi-stage Docker image runs as a non-root user.
  • Security: CSRF protection, a nonce-based Content-Security-Policy, rate limits on authentication, chat, upload and account endpoints, and account export and deletion.

Key decision

One process with eight threads, deliberately. ChromaDB caches its vector-index reader per process, so a second worker would report the right chunk count and then find nothing when it searched. The app takes an advisory lock on the vector-store directory at startup and logs an explanation if a second process appears.

Limitations

  • Password-reset links are written to the application log, not emailed.
  • Single process only; scaling out needs ChromaDB moved out of the application.
  • No error tracking, alerting or uptime monitoring.
  • Live watsonx.ai calls are not exercised in CI; the test suite runs in demo mode.
  • No OCR for scanned PDFs. General nutrition information, not medical advice.
Risk–coverage curves for VeriQA's model (P1) and baselines B1 to B5: P1 has lower selective risk over most of the coverage range.

VTU Major Project · 2026

VeriQA — Selective Extractive Question Answering

Answers questions from a document collection and abstains when its calibrated risk of being wrong is too high, reporting which signals triggered the refusal. It runs on a laptop CPU, with no pretrained neural weights.

My part: Built the extractive reader, reliability layer and baselines.

Paper: IEEE-format manuscript submitted for publication; currently under review.

Evidence

  • Error-prediction ROC-AUC 0.524 → 0.639 when retrieval and agreement signals are added to a reader-only calibrator (3,585 held-out SQuAD 2.0 questions)
  • Risk–coverage improvement whose 95% bootstrap interval excludes zero (ΔAURC −0.035)
  • 3 of 7 pass/fail gates failed; the classical reader's base accuracy is 11.4%, and all failed gates are reported explicitly.
  • A clean re-run from the raw data reproduces every frozen result table except host-dependent latency; 19 tests
  • Python
  • scikit-learn
  • Gradient boosting
  • Isotonic calibration
  • SQuAD 2.0
  • pytest
How it works, key decision and limitations

How it works

  • Retrieval: hybrid LSA and BM25 ranking over SQuAD 2.0 articles, with sibling masking so that retrieval cannot silently invalidate the dataset's unanswerable labels.
  • Reader: candidate spans of up to 8 tokens from the three sentences with the highest question overlap, scored by a gradient-boosted model over 20 span features, plus a separately trained null-answer head.
  • Reliability layer: 16 signals (7 retrieval, 5 reader, 4 cross-passage agreement) feed a gradient-boosted risk model. Isotonic regression calibrates it, and the abstention threshold is set on the calibration split only.
  • Evaluation: splits by article, bootstrap intervals over articles, a shuffled-label negative control, and seven pass/fail gates reported whether or not they passed.

Key decision

Baseline B5 re-implements the reader-only calibrator of Kamath, Jia and Liang (2020) with the same risk model, so it and VeriQA's model differ only in their features. The comparison isolates what the retrieval and agreement signals add.

Limitations

  • The reader is classical, not a transformer: pretrained weights could not be downloaded where the experiments ran. Base accuracy is 11.4%, and the finding may narrow with a stronger reader.
  • No method reaches the 0.70 error-prediction AUC gate.
  • SQuAD 2.0 only, 5,637 passages with an exact index; no deployment or user study.
  • No hosted demo: the Streamlit demo runs locally over the fixed SQuAD corpus.
More work

Challenge project and open source

Redrob × Hack2Skill INDIA.RUNS challenge · 2026

Redrob Ranker

Deterministic candidate ranking under hard resource constraints: the top 100 of 100,000 profiles against a job description, on CPU alone and with no trained model.

  • About 40 seconds and 21 MB peak memory for the full 100,000-profile pool, measured on 2 vCPUs (limits: 5 minutes, 16 GB RAM, no network)
  • Byte-identical output across repeated runs
  • Embeddings evaluated and rejected: the pool's ~300K career descriptions collapse to 44 templates, so an exact lookup table beats approximate similarity here

Caveat: the template shortcut relies on a property of the challenge's synthetic dataset; real free-text profiles would need an embedding layer.

  • Python
  • Algorithm design
  • Feature engineering
  • Deterministic scoring

Open-source contribution · AgentKit Challenge

Lamatic AgentKit — PR #408

Status: Open PR · under review · not merged (Sep 2026)

A roster-rules auditor template: language-model nodes read a staff roster and plain-English staffing rules, and deterministic JavaScript does every calculation.

  • LLM parsing: one node transcribes roster lines into shifts; another maps each rule onto one of three supported checks, or refuses it with a reason
  • Deterministic JavaScript evaluation: shift lengths, rest gaps and weekly totals are computed in code, not by the model
  • Provenance checks: each value is re-checked against the line it came from, and a line that fails is refused rather than guessed
  • PASS only when every line and rule was understood; FAIL on a computed violation; INCOMPLETE when anything could not be read
  • Lamatic AgentKit
  • LLM parsing
  • JavaScript
Earlier work

Earlier data and ML projects

Toolbox

Skills

AI & ML

  • LLM applications on IBM watsonx.ai (Granite)
  • RAG and retrieval
  • Embeddings
  • ChromaDB
  • Prompt design
  • scikit-learn
  • Gradient boosting
  • Probability calibration
  • Model evaluation

Engineering

  • Python
  • SQL
  • JavaScript
  • Flask
  • SQLAlchemy and Alembic
  • SQLite and PostgreSQL
  • pytest
  • GitHub Actions
  • Docker
  • Git

Data

  • Pandas
  • NumPy
  • Matplotlib
  • Google BigQuery
  • Power BI
About

About me

I'm a final-year Computer Science Engineering student at AMC Engineering College (VTU) in Bengaluru. I build applied AI systems in Python: retrieval-augmented LLM applications, retrieval and ML evaluation, and the backend engineering, testing and deployment around them.

I prefer systems a reviewer can check: citations assembled in code instead of generated, arithmetic kept out of the model, and results reported together with the checks they failed.

Background

Experience and education

Contact

Get in touch

Email me or connect on LinkedIn. Based in Bengaluru, India.