RAG
I have built retrieval workflows with hybrid vector search and source attribution, so an answer can be checked against the documents behind it.
Tools and methods for RAG | Frameworks | |
|---|
| Retrieval | - Vector databases
- Hybrid vector retrieval
|
|---|
| Interfaces | - React
- PDF line-level attribution
|
Fine-tuning
I fine-tuned enterprise-domain language models on real and synthetic data, while comparing them with zero-shot and few-shot baselines through reproducible benchmarks.
Tools and methods for Fine-tuning | Frameworks | - PyTorch
- Hugging Face Transformers
|
|---|
| Methods | - LoRA
- Supervised fine-tuning
- Synthetic training data
|
|---|
| Evaluation | |
|---|
| Platforms | |
Agents
I built execution harnesses in Python and evaluated orchestration frameworks, choosing the approach according to the engagement and its operating requirements.
Tools and methods for Agents | Orchestration | - Python
- LangGraph
- CrewAI
- Asynchronous execution
|
|---|
| Services | |
|---|
| Observability | |
Language & vision
My projects include language classification, computer vision, and forecasting, with preprocessing and error analysis forming part of the modelling workflow.
Tools and methods for Language & vision | Frameworks | - PyTorch
- TensorFlow
- scikit-learn
- OpenCV
- NLTK
|
|---|
| Language models | |
|---|
| Tasks | - Sentiment analysis
- Natural-language inference
- Computer vision
- Time-series forecasting
|
Model monitoring
I developed monitoring and retraining workflows around client data infrastructure, including batch monitoring that connected existing Hadoop and Hive clusters to Watson OpenScale.
Tools and methods for Model monitoring | Platforms | - Watson OpenScale
- watsonx.governance
- Cloud Pak for Data
- OpenShift
|
|---|
| Processing | - PySpark
- Apache Livy
- Hadoop
- Hive
|
|---|
| Methods | - Drift detection
- Stratified cross-validation
- Automated retraining
|
Model compression
I have used pruning and distillation in enterprise and research settings, where reducing the model size needs to be evaluated alongside its behaviour.
Tools and methods for Model compression | Frameworks | |
|---|
| Methods | - Layer pruning
- Knowledge distillation
- Sparse connectivity
|
|---|
| Checks | - Parameter-count comparisons
- Reproducible benchmarks
- Human review
|
Languages
I use programming and query languages across application code, data processing, and modelling, according to the system I am working on.
Tools and methods for Languages | Programming | |
|---|
| Data | |
|---|
| Web | |
|---|
| Exposure | |
Interfaces
I have built interfaces for inspecting model answers and configuring data workflows, so users can work with a system and understand its outputs.
Tools and methods for Interfaces | Libraries | - React
- Streamlit
- Carbon Design System
|
|---|
| Web | |
|---|
| Workflows | - PDF source attribution
- Data-workflow configuration
|
APIs & automation
I have exposed AI workflows as services and automated data-processing tasks, with execution and integration forming part of the software work.
Tools and methods for APIs & automation | Services | |
|---|
| Automation | - Apache Airflow
- Asynchronous execution
- Ansible
|
|---|
| Data access | - Natural-language-to-SQL interfaces
|
Data engineering
I built pipelines over healthcare and enterprise data, while working on query optimisation, partitioning, and distributed processing to make the workflows usable.
Tools and methods for Data engineering | Processing | - PySpark
- Spark
- Hadoop
- Hive
- Apache Livy
|
|---|
| Data access | |
|---|
| Methods | - Query optimisation
- Partitioning
- Distributed processing
|
|---|
| Platforms | - watsonx.data
- Cloud Pak for Data
|
Deployment
The software around a model needs to fit its operating environment, so deployment and client infrastructure have been part of my engineering work.
Tools and methods for Deployment | Containers | - Docker
- Kubernetes
- OpenShift
|
|---|
| Platforms | - IBM Code Engine
- Cloud Pak for Data
|
|---|
| Delivery | |
Testing & delivery
I built test automation around production workflows and documented changes, because delivery includes checking the system as well as implementing a feature.
Tools and methods for Testing & delivery | Testing | - Python
- pytest
- Unit tests
- Integration tests
- Black-box tests
|
|---|
| Delivery | - Git
- GitHub
- Jenkins
- Jira
- Agile sprint delivery
|
|---|
| Operations | - Production support
- Change documentation
|
Scientific ML
My dissertation compared inverse models for microbial dynamics, testing whether models trained on synthetic ecosystems could transfer to real mouse data.
Tools and methods for Scientific ML | Framework | |
|---|
| Models | - PINNs
- PI-DION
- Graph decoders
- Attention-based decoders
|
|---|
| Simulation | - Generalised Lotka–Volterra dynamics
- Hybrid quantum-classical PINN
|
Reinforcement learning
I have worked on policy optimisation for sequence infilling and simulated agents, while checking the relationship between rewards, policy divergence, and independent evaluation.
Tools and methods for Reinforcement learning | Frameworks | - PyTorch
- ProteinTuneRL
- MuJoCo
|
|---|
| Methods | - PPO
- REINFORCE
- Token-level A2C
- GAE
- KL regularisation
|
|---|
| Architectures | - NCAP
- MLPs
- Sparse connectivity
|
Single-cell data
I built a drug-response pipeline over single-cell expression data and examined whether replicate noise allowed the benchmark to support model comparisons.
Tools and methods for Single-cell data | Tools | - Scanpy
- AnnData
- PyTorch
- scikit-learn
|
|---|
| Processing | - Streamed expression data
- Control-relative pseudobulk responses
|
|---|
| Checks | - Replicate noise floors
- Compound-held-out splits
- Multi-seed comparisons
|
Molecular modelling
I have used compound and protein representations in research pipelines, alongside independent sequence and structure checks rather than treating a training reward as biological validation.
Tools and methods for Molecular modelling | Compounds | - RDKit
- ChEMBL
- Morgan fingerprints
- AutoDock Vina
|
|---|
| Sequences | |
|---|
| Structure checks | - Reference-PDB alignment
- RMSD
- SASA
|
Evaluation & statistics
I use baselines, repeated runs, and held-out comparisons to understand what a result supports, particularly when measurement noise or distribution shift makes an average misleading.
Tools and methods for Evaluation & statistics | Tools | - scikit-learn
- Pandas
- SciPy
- Matplotlib
|
|---|
| Methods | - Paired bootstrap intervals
- Cross-validation
- Held-out splits
- Multiple random seeds
|
|---|
| Measurements | - F1
- ROUGE
- BLEU
- Signal-to-noise ratios
- Human review
|
Signals & computation
My ECoG project connected signal processing with prediction of cursor movement, and my broader toolkit includes GPU programming and tools for inspecting data.
Tools and methods for Signals & computation | Tools | - scikit-learn
- Pandas
- Matplotlib
|
|---|
| Signal methods | - Frequency filtering
- PCA
- Signal processing
|
|---|
| Computation | |