Experience
Hindustan Aeronautics LimitedInternship Training · Bangalore, India · January - April 2026January - April 2026
- Stack
- Python, PySide6, SQL, MVC
- Type
- Onsite
A desktop application designed for aircraft LRU test data by consolidating the complete test history into a single queryable store, with filterable dashboards for cross-referencing records and an on-device AI assistant for querying data in natural language.
- Engineered the system on a Model-View-Controller architecture, keeping the data layer, business logic and user interface independent so each could evolve without affecting the others.
- Built real-time, multi-column filtering dashboards over the complete test history, replacing manual, spreadsheet-based record lookup with instant cross-referencing.
- Built an AI assistant that grounds every answer in the database's own records rather than the model's memory alone - keeping responses accurate to the actual test data instead of guesswork.
- Automated the data ingestion pipeline from source to store, with input validation and error handling built into every entry point.
BOCKAI Intern · Bangalore, India · April - July 2026April - July 2026
- Stack
- Python, PyTorch, Transformers, Vision-Language Models, LoRA, 4-bit Quantization, Gradient Checkpointing, CUDA
- Type
- Hybrid
Built a document intelligence pipeline that extracts structured, page-level data from complex documents - from textbooks to medical and clinical reports - paired with a domain-tuned language model trained on the extracted content.
- Built a multimodal extraction pipeline using a 4-bit quantized vision-language model, converting complex documents into clean, structured page-level data at production scale.
- Designed a two-tier inference strategy - a fine-tuned local checkpoint preferred, falling back to larger vision-language models on GPU or CPU - so extraction quality and hardware cost trade off automatically instead of failing on constrained machines.
- Added resume-aware batch processing so multi-hour extraction jobs recover from interruption and resume exactly where they left off, instead of reprocessing the entire corpus from scratch.
- Fine-tuned an 8B-parameter language model with LoRA under 4-bit quantization, adapting it to the domain at a fraction of the compute and memory cost of full fine-tuning.
- Shipped a fully offline local inference client that loads the base model and fine-tuned adapter from disk, with configurable sampling and zero network dependency.
- Documented the system's architecture, pipeline flow and scalability characteristics across a set of technical diagrams, capturing behavior at scale rather than just the happy path.
Things I've Built
FLUX - Agentic Finance SystemForecasting agent · Applied AI · 20262026
Stack
Python, FastAPI, Uvicorn, APScheduler, XGBoost, scikit-learn, statsmodels, arch, hmmlearn, Chronos, Ollama, ChromaDB, SQLite, MySQL, MCP, pytest
Documentation
- Data sources
- 13 providers
- Datasets
- 10 datasets
- Architecture
- modules, data flow
- Agent training
- 9 evaluation gates
- Deployment record
- Pages, Render, Groq
AI-powered finance platform: a FastAPI + XGBoost prediction agent with purged walk-forward CV and conformal uncertainty bands, behind a full digital-wallet frontend.
- The model does not beat an always-up baseline on raw daily direction - 0.5264 against 0.5329 - and a cheap ARIMA beats them both. That is the finding, not a bug: daily bars are near-efficient, and every technique below exists to stop the pipeline from faking a better number.
- Refused to leak the future into training. Purged and embargoed walk-forward cross-validation, triple-barrier labeling, fractional differentiation tuned per asset by ADF test - and the leakage audit ships in the repo rather than in a claim: zero overlapping labels across 118,278 evaluation events.
- Made the model's stated confidence mean something. Expected calibration error falls from 0.0298 to effectively zero, and forecasts come out as GARCH-shaped conformal bands instead of point estimates: the 80% band realizes 80.0% coverage, the 90% band 90.0%.
- Put the edge in selectivity instead of accuracy, since the accuracy was never going to arrive. A meta-labeler decides whether to act at all, lifting precision on taken trades from 0.534 to 0.559; cross-sectional construction with vol targeting returns a net-of-cost Sharpe of 0.84 against an equal-weight benchmark's 0.75, and regime gating holds maximum drawdown to -30.8% where buy-and-hold takes -77.5%.
- Let the system overrule itself, in both directions. The LLM verifier may veto or downgrade a call but never raise it, a greedy answer is clamped to the model's own ceiling, and an outage leaves confidence untouched; a regime mixture-of-experts that lost in cross-validation ships disabled, and the stacked ensemble serves only while it beats the best single base learner.
- Ran it as a product, not a notebook. Thirteen market, macro and fundamentals providers behind optional keys, portfolio and paper trading over a Python API, deployed on Cloudflare Pages and Render with hosted inference, resolved outcomes feeding back into live calibration, a rate-limited retrain when it drifts, and 67 tests plus standing audits on two Python versions every push.
Sift - In-Memory Query EngineIn-memory database · System · 20262026
Stack
C#, .NET, BenchmarkDotNet
Dataset
- Name
- FMCG Daily Sales Data (2022-2024)
- Shape
- 190,757 rows x 14 columns
- Size
- 17 MB CSV
- Source
- Kaggle
A SQL query engine built from scratch in C#, featuring a cost-based planner, a B+ tree index and a lazy Volcano-style execution model. Performance is validated via BenchmarkDotNet.
- Implemented the B+ tree index - node splitting, linked leaves, range scans. The hash index beside it is capability-aware, so the planner can never route a range predicate to an index that cannot serve one.
- Built a cost-based planner that compares SeqScan and IndexScan cost from table statistics and declines its own index once a predicate matches most of the table: 880x faster at selectivity 0.001, marginally slower at 1.0.
- Executed queries through a lazy, pull-based Volcano operator tree, so LIMIT 10 over 190k rows never materializes the full scan - roughly 8,300x faster than the eager path, and allocating by the same margin less.
- Verified correctness by differential testing against SQLite as an oracle: 500 randomly generated queries plus targeted cases for three-valued NULL logic, run on every invocation against the real dataset rather than a fixture.
- Parallelized GROUP BY aggregation across partitions with zero shared mutable state, measured across 1 to 8 threads for a 6.1x speedup.
Semantic Query EngineAnalytics agent · Applied AI · 20262026
Stack
Python, DuckDB, Streamlit
Dataset
- Name
- FMCG Daily Sales Data (2022-2024)
- Shape
- 190,757 rows x 14 columns
- Size
- 17 MB CSV
- Source
- Kaggle
Natural-language analytics assistant for FMCG sales data - a 5-agent pipeline that turns plain-English questions into governed DuckDB SQL and structured business answers.
- Enforced governance in the validator rather than trusting the model: generated SQL is parsed to an AST with sqlglot, checked against table and column allow-lists, stripped of DDL and DML, and LIMIT-bounded before it ever reaches the database.
- Grounded generation in a semantic layer of table and column descriptions and three certified business-metric formulas, then checked that a metric named in the question was genuinely computed through its registered formula, with a bounded repair loop feeding validator errors back to the generator.
- Gave every LLM-calling stage a deterministic fallback - a template bank for SQL, keyword overlap for retrieval, rule-based synthesis - so the pipeline still answers with no API key configured, and returned each answer with its per-agent trace and SQL so any result can be reproduced.
- Locked the behaviour down with 51 tests, including a committed 11-query gold set the orchestrator runs on every invocation, asserting both shape and values.
Video Editor MCPMCP server · Products & Tooling · 20262026
AI-native video editing framework built on MCP - Claude orchestrates 19 specialized tools into full editing pipelines from a single natural-language prompt.
- Replaced the manual timeline loop with a sentence. One prompt - upscale the intro, cut the character out, put them on a gradient, reveal the text on the beat drop, grade it teal-orange, export for TikTok - is decomposed by the model into the right tool calls in the right order and executed without anyone opening a timeline.
- Made that possible by shipping each capability as its own standalone MCP server: 19 servers exposing 56 tools, none of which knows the others exist. Composition is the model's job, so a new capability is a new server rather than a change to the framework, and the assistant connects to all of them at once and mixes them freely.
- Covered every stage from raw footage to finished cut - scene-cut detection and frame extraction, Real-ESRGAN upscaling, ONNX ISNet foreground segmentation, stabilization, chroma key, speed ramps, BPM and downbeat detection, compositing, text overlay, LUT grading and export presets - each one automating a task that is otherwise manual clicking.
- Drove DaVinci Resolve programmatically for timeline assembly, so the automated edit lands in a real editor a human can keep working in rather than in a bespoke renderer.
Vinci - Scroll-Driven Brand SiteLanding page · Products & Tooling · 20262026
Stack
JavaScript, three.js, GSAP, Lenis, React, Vite
Documentation
- Design reference
- tokens, motion, states
3D scrollytelling landing page for a fictional construction studio - three.js, GSAP and a React photo gallery.
- Baked the hero geometry offline - a 116 MB source model reduced to a few hundred KB of phase-tagged wireframe edges, so the house draws itself in build order.
- Built the page on one small token set - near-black ground, off-white type, a single accent, one easing curve - with three typefaces each scoped to one job.
- Lenis drives GSAP ScrollTrigger and scroll velocity feeds a global distortion shader, with all five sections sharing one WebGL stage and one draw loop.
- Reduced motion is tiered rather than switched off, and React loads only for the two photo components that need it.