Anyone can get a model to answer in a notebook.
The work is everything after that — grounding it, guarding it,
proving it, shipping it, and keeping it standing under load.
Senior AI Data Scientist @ Solventum · Dublin, Ireland · since March 2026
2026 ──── 🟣 Senior AI Data Scientist ───── Solventum · Dublin, Ireland
now │ AI & data science for healthcare technology
│
2024-25 ── 🔵 Lead AI & Data Engineer ───── Virgin Media · Ireland
│ GenAI solutions for 5M+ customers across UK & Ireland
│
2022 ───── 🟢 Sr. ML Engineer / MLOps ───── Wayfair · Ireland
│ ML models for a $12B+ e-commerce platform
│
2022 ───── 🟡 Data Scientist ────────────── Habitus Health · Ireland
│ Predictive models for healthcare compliance
│
2018 ───── 🟠 Data Analyst & Consultant ─── Adobe Systems · India
│ Analytics for 50+ Fortune 500 clients
│
2016 ───── 🔴 Analyst ───────────────────── Google · India
Data analysis for advertising & search products
Education · 🎓 MSc AI & Big Data, Distinction — ATU, Ireland · 🎓 BE Computer Science Engineering — Amity University, India
🧠 Agentic AI & GenAI
Orchestration & agent patterns
Models & gateway
Retrieval & grounding
Safety & contracts
🚀 MLOps & LLMOps
LLM tracing & evaluation
Experiment & data versioning
Monitoring & load
Build & delivery
Three systems, each solving a problem that only shows up once you try to run the thing for real.
Enterprise document Q&A where a confidently wrong answer is worse than no answer.
| Problem | Retrieval over a mixed corpus returns plausible-looking noise. Off-topic and jailbreak prompts reach the model. Nothing proves the answer was grounded. |
| Approach | A LangGraph agent graph — planner, retriever, responder — behind a NeMo Guardrails gate that blocks inputs before any retrieval spend. Qdrant vector search, Jina reranking to separate signal from noise, Portkey gateway for automatic OpenAI → Anthropic failover, and a RAGAS eval suite so quality is measured rather than asserted. |
| Shipped | AWS ECS Fargate across two AZs behind an ALB, auto-scaling 2→10 tasks on request count and CPU. Secrets in Secrets Manager, state in managed Qdrant/Neon/Upstash so every task stays stateless. GitHub Actions builds to ECR and rolls the service. Prometheus, Logfire and LangSmith on every node. |
LangGraph NeMo Guardrails Portkey Qdrant Jina RAGAS FastAPI AWS Fargate GitHub Actions
Routing, research and analysis as separate agents — not one overloaded prompt.
| Problem | A single-prompt chatbot has nowhere to put intent classification, tool use, or failure handling. Real agentic work needs a state machine, not a chain. |
| Approach | A LangGraph state machine with specialised nodes: a router that classifies intent, a research agent doing grounded Tavily web search, an analysis agent that reasons over the results, and a response agent that composes the answer — with conditional routing and loops between them. |
| Shipped | Containerised and deployed to AWS Fargate through a Jenkins pipeline (lint → test → build → ECR → deploy). Serverless containers, auto-scaling, zero server management. |
LangGraph LangChain Tavily Docker Jenkins AWS ECR + Fargate
Most recommender demos stop at the notebook. This one has dashboards.
| Problem | Classic collaborative filtering can't answer "a lightweight laptop for travel under €1000". And a recommender you can't observe is a recommender you can't operate. |
| Approach | Replace the user-item matrix with agents that reason in natural language — intent routing, semantic catalogue search, then LLM-generated personalised recommendations through a Flask conversational UI. |
| Shipped | Kubernetes deployment with pods, services, load balancing and horizontal pod autoscaling. Prometheus scrapes the app; Grafana dashboards track latency, error rate and throughput in real time. |
LangChain Flask Kubernetes HPA Prometheus Grafana Docker
More work — agents, MLOps pipelines and deep learning
| Project | What it is |
|---|---|
| Supervisor Agent + Guardrails + HITL | Supervisor-pattern multi-agent system with guardrails and a human-in-the-loop approval step |
| TripMate AI — MCP travel planner | Flight, hotel, itinerary and response agents coordinated by LangGraph; FastAPI + Postgres state, Groq inference |
| Agentic HR Copilot | End-to-end HR copilot on Azure with an LLMOps pipeline |
| Multi-Agent with LangSmith | Multi-agent graphs instrumented end-to-end with LangSmith tracing |
| Network Security Threat Detection | Full MLOps lifecycle for phishing/malicious-URL detection — MongoDB ETL, schema-drift validation, model factory with GridSearchCV, MLflow on DagsHub, GitHub Actions → ECR → EC2 |
| RAG Medical Chatbot | Retrieval-augmented assistant over medical literature |
| Chest Disease Classification | VGG16 transfer learning for medical imaging, versioned with DVC and tracked in MLflow |
| US Visa Approval Prediction | End-to-end MLOps classification pipeline with automated training and deployment |
| ML Recommender on GCP | Jenkins → Docker → Cloud Run, with MLflow experiment tracking |
| PDF QA Engine | Document question-answering service on LangChain + FastAPI |
The same loop, whatever the problem is. The parts on the right are the ones that decide whether it survives.
flowchart LR
A["Frame the<br/>problem"] --> B["Design retrieval<br/>& data contracts"]
B --> C["Agent graph<br/>LangGraph"]
C --> D["Guardrails +<br/>evaluation"]
D --> E["Containerise<br/>Docker"]
E --> F["CI/CD<br/>Actions · Jenkins"]
F --> G["Cloud runtime<br/>Fargate · K8s · Cloud Run"]
G --> H["Observe<br/>Prometheus · Grafana · LangSmith"]
H -- "what the traces<br/>actually show" --> D
style A fill:#6C63FF,stroke:none,color:#fff
style B fill:#6C63FF,stroke:none,color:#fff
style C fill:#3B82F6,stroke:none,color:#fff
style D fill:#3B82F6,stroke:none,color:#fff
style E fill:#10B981,stroke:none,color:#fff
style F fill:#10B981,stroke:none,color:#fff
style G fill:#F59E0B,stroke:none,color:#fff
style H fill:#EF4444,stroke:none,color:#fff
Three rules I keep coming back to
- Verify, don't trust. If a model claims something, something deterministic should be able to check it.
- Block early. Guardrails belong in front of retrieval, not in front of the response — it's cheaper and safer.
- Ship it stateless. State goes in managed services so the compute layer can scale without carrying opinions.
|
🤖 Agentic AI Multi-agent systems with LangGraph and LangChain that route, reason, call tools and recover from failure. |
🔍 RAG Systems Grounded retrieval with vector search, reranking and evidence verification — answers that cite something real. |
⚙️ MLOps CI/CD, Docker, Kubernetes, MLflow and DVC. The pipeline between a trained model and a running one. |
|
🧠 ML Applications Classification, regression and recommender systems built for production serving, not leaderboard scores. |
🏥 Deep Learning CNNs and transfer learning for medical imaging and computer vision. |
☁️ Cloud Deployment AWS (Fargate, ECS, ECR, EC2, S3), GCP Cloud Run, Azure, Kubernetes — with the monitoring attached. |
Open to conversations about agentic AI, applied ML in healthcare, and anything involving the word “production”.