AI/LLM Engineer, Phenom PeopleHyderabad

I build LLM systems that hold up in production.

Agent orchestration, fine-tuning and serving, and the evaluation gates that decide what ships. Mechanical engineer by degree, production ML by practice: every number on this page is one I measured, and each one is on my resume with its source.

chatbotCXAgent one request, twelve nodes
trace req_7f3a --nodes
conciergeintent job_search conf 0.9741 ms
dialogue-stateturn 3, slots resolved from history3 ms
tool-routerjobs.search(...) XGrammar schema-valid88 ms
graph-ragFAISS top-k + Neo4j policy hop112 ms
generateQwen (QLoRA) on vLLM, 142 tokens610 ms
eval-gatepass@k judge rubric traced to Langfuseok
median 1.0 s · P95 1.4 s · malformed tool calls 0 across 5,510 requests

Node timings are illustrative. The footer line is the real golden baseline the service is held to.

What I have shipped, with the number that mattered.

Phenom People is enterprise HR technology. Everything below runs in production for its customers.

chatbotCXAgent
A 12-node LangGraph multi-agent system: intent recognition, planning, dialogue state, tool routing, and Graph RAG over enterprise knowledge through FAISS and a Neo4j graph for multi-hop, policy-aware grounding.
12orchestrated nodes, live
Tool calls that cannot be malformed
Governed actions (database queries, structured extraction from documents) under XGrammar constrained decoding and schema-validated JSON.
91.9%tool-routing accuracy, zero malformed calls
Self-hosted models that beat the API on cost
Qwen fine-tuned with QLoRA (Unsloth, NF4) and served on vLLM on an AWS g5.xlarge, then hardened: custom chat template, deterministic tool choice, eager execution for the hybrid Mamba-attention architecture.
10.98 rpsat 98.6% success, about half the cost of GPT-4.1
An evaluation gate on every release
pass@k and an LLM-as-judge rubric across all twelve nodes, instrumented with LiteLLM and Langfuse for per-node cost, latency, and full-trace auditability.
12 / 12nodes gated before a change ships
Understanding what people actually asked
A multi-task ModernBERT (intent + NER) trained in PyTorch with differential learning rates, label smoothing, and uncertainty-weighted loss.
87 → 97%NLU accuracy
A hiring-integrity platform
The detection and decisioning layer: an LLM orchestration engine that investigates flagged candidate activity and writes reviewer-facing assessments, backed by a policy-driven rules engine, a greenfield FastAPI configuration service on MongoDB that Temporal workflows resolve at start, a React admin console behind Keycloak, and tenant provisioning shipped with Docker and Helm.
per-tenantpolicies, audited review workflows
The unglamorous parts
WhatsApp as a conversational channel through the Business API, conversation analytics APIs migrated to FastAPI, the inference service packaged with Helm and instrumented with OpenTelemetry, and production support from ClickHouse logs.
7 → 78%and 63 → 90% test coverage on two services

Two jobs, two kinds of shipping.

One agentic ML system at enterprise scale. One full-stack business platform built and run alone.

Phenom People AI/LLM Engineer II

Agentic conversational AI and the platform around it

I own the architecture of chatbotCXAgent and the release discipline behind it: the LangGraph orchestration, the constrained tool calling, the fine-tuned Qwen deployment on vLLM, and the evaluation framework that every prompt, retrieval, and orchestration change has to pass. Alongside that, the fraud-risk platform above and the integrations that keep the assistant reachable, including WhatsApp.

Day to day I work with MCP servers (ClickHouse, Playwright, Atlassian) through Claude Code for development, debugging, and issue tracking.

Three production bugs I am glad I found

  1. Parallel tool calls inside the agent loop generated spurious parameters.
    Fix: an isolated invocation context per branch.
  2. Recursive JSON Schema $ref loops crashed the pipeline on certain payloads.
    Fix: schemas flattened at the boundary.
  3. vLLM and Qwen's hybrid Mamba-attention model, undocumented at the time: CUDA graphs broke.
    Fix: merged weights and --enforce-eager, then a golden baseline of 1.0 s median and 1.4 s P95 with zero failures over 5,510 requests.
LangGraphLangChainXGrammarvLLMQwenQLoRA / UnslothModernBERTPyTorchFAISSNeo4jLangfuseLiteLLMFastAPIMongoDBTemporalKafkaKeycloakDockerHelmOpenTelemetryClickHouseAWS EC2 g5.xlargeMCP serversClaude Code

Blueleaves Farms Full Stack Engineer

POS, CRM, inventory, procurement and e-commerce for a multi-location business

Sole engineer on the whole stack. I scoped projects directly with the shareholders, company VPs, and partner businesses, then built what they needed: billing and checkout, SKU-grouped inventory, cash handling, Razorpay payments, thermal receipt printing, role-based accounts for the staff, a React web POS and a React Native mobile variant, and the Firebase Cloud Functions behind them.

Demand forecasting, sales-trend and inventory models on the transaction data improved procurement and replenishment decisions. The on-site network and hardware at every location was mine too, with a three-hour solo SLA and no escalation path.

10,000+monthly transactions
5+locations, stock synced
~90%fewer manual operational errors
200+orders on a peak day
ReactReact Native / ExpoNode.jsFirebase Cloud FunctionsFirestoreREST APIsRazorpaythermal printer SDKGCP

Things I built because I wanted to know.

Side projects, mostly without frameworks. One of them got a motorcycle company's attention.

NorthStar, a navigation companion for the Royal Enfield Tripper Dash

Android, BLE, MapLibre, OSRM

The bike's instrument cluster can show turn-by-turn directions, but the official app mirrors your phone screen. I wanted the phone to stay in my pocket. So I reverse-engineered the dash's undocumented wire protocol and built an app that renders navigation off-screen and streams it to the cluster, with destinations arriving through Android's share sheet.

It grew an organic user base with no paid distribution, and the traction reached Royal Enfield directly: an on-site visit at their headquarters and a relationship that continues, including conversations about a role and about other motorcycle-accessory work.

RSA-1024 + AES-256handshake over UDP
H.264 / RTPvideo plane, separate port
MapLibre + OSRMoff-screen rendering

What it took

  • Protocol recovery with no spec: auto-discovery of any dash advertising on the local network, then the encrypted handshake.
  • Rendering without a screen: maps drawn to an off-screen surface with OpenFreeMap tiles, routed through OSRM.
  • Knowing when to stop: the app is archived at the manufacturer's request. The relationship is what continued.

IndexNotes, a knowledge graph of papers

Neo4j, Ollama, PyMuPDF, Docker

Reading a paper is not the same as seeing how its ideas connect to the last one. PDF in, local-LLM extraction, structured JSON out, into a Neo4j schema built for multi-hop traversal and cross-document retrieval. Quantized local models only, so no API in the loop.

40+concepts
17+typed relationships
3papers, one graph

Physics-informed neural networks, from scratch

PyTorch, autograd, L-BFGS

Three PDEs, one codebase, no PDE framework. The heat equation, Burgers' equation with two-phase Adam then L-BFGS reproducing the published benchmark, and the Schrödinger equation with complex-valued outputs, periodic boundaries, and Latin-hypercube sampling. The wave in this page's background is the same family of solution.

~3%heat equation error
Raissi et al.Burgers' parity
complex-valuedSchrödinger net

A GPT, written by hand

PyTorch, multi-head attention, teacher forcing

A full transformer following Karpathy's "Let's build GPT": Q/K/V projections, the attention product, LayerNorm, the actual gradient graph through create_graph. The point was not to ship it. It was to read papers differently afterwards.

4.39 → 1.86training loss
5,000steps
tiny shakespearecorpus

Corpus, a finance tracker that reads my SMS

Android, Kotlin, SQLite

Manual expense entry never survives a week. Corpus ingests payments automatically by parsing bank SMS and email, tracks instalment schedules, and has run on my own phone daily since. Small, shipped, useful.

SMS + emailingestion
on-deviceno server
dailyin use

How I work.

Evals gate releases, not confidence

Every prompt, retrieval, or orchestration change at Phenom passes pass@k and a judge rubric across all twelve nodes before it ships. I would rather find the regression in the gate than in a customer's conversation.

Measure before claiming

A number goes on this page only if I produced it: throughput under load, P95 against a golden baseline, accuracy against a held-out set. My resume is generated from the same evidence, so the two never drift apart.

Own it past the demo

The interesting work starts after the prototype: the enforce-eager flag nobody documented, the recursive schema that crashed at 2 a.m., the tenant that needed provisioning by Monday. Claude Code and MCP servers are part of how I move fast on that without cutting corners.

What I reach for, by where it lives.

Agents and LLM applications

LangGraphLangChaintool / function callingMCP serversprompt engineeringRAG and Graph RAGFAISSNeo4jClaude, GPT, open-weight models

Evaluation and observability

LLM-as-judgepass@kXGrammar constrained decodingschema validationLangfuseLiteLLMOpenTelemetryload testing

Training and serving

PyTorchQLoRA / SFTUnslothHuggingFace PEFTvLLMOllamaModernBERTphysics-informed neural networks

Backend and platform

PythonTypeScriptFastAPINode.jsREST APIsTemporalKafkaDockerHelmAWS (EC2, S3, SageMaker)PostgreSQLMongoDBClickHouseRedisKeycloak / OAuthReact

If you are building something that has to work in production, let's talk.