A selection of personal open source projects spanning AI tooling, NLP, music information retrieval, and data science. All code is available on GitHub.
AI & LLM Tools
mcp-local-agent
MCP server to connect Claude Code to local LLMs
An MCP server that delegates code generation tasks from Claude Code to local models (via LM Studio or Ollama), with an iterative feedback loop to maintain quality. Saves 60–90% on API costs by routing simple and medium tasks to a free local model while Claude handles architecture and complex decisions (to be challenged).
Python · MCP · Ollama · LM Studio · Claude Code
graphrag-neo4j
Graph RAG with Neo4j storage
Lightweight Graph Retrieval-Augmented Generation (RAG) demo using Neo4j for structured context storage, SentenceTransformers for embeddings, and HuggingFace for text generation. Stores document graphs with vector embeddings, retrieves relevant nodes by similarity and graph expansion, and generates answers from the retrieved context.
Python · Neo4j · SentenceTransformers · HuggingFace · RAG
visualize-embeddings
Interactive word embedding visualiser
A full-stack web application for computing and visualising word and sentence embeddings using transformer models (all-MiniLM-L6-v2). Displays raw 384-dim vectors and projects them to 2D via UMAP for interactive exploration of semantic relationships. Deployed with Docker Compose (FastAPI backend + nginx frontend).
Python · FastAPI · sentence-transformers · UMAP · Docker
biases-llm
LLM bias testing tool
A web application for testing and comparing biases across different language models (OpenAI, Anthropic, local LLMs via LM Studio/Ollama). Supports side-by-side multi-model comparison, pre-built bias test prompts (gender, professional, cultural), visual highlighting of bias indicators, and CSV/JSON export for further analysis. Built for educational use in the “Biases in AI” course.
Python · FastAPI · JavaScript · OpenAI · Anthropic · Ollama
chatbot-dash
Minimal chatbot template with Plotly Dash
A clean, reusable template for building a chatbot interface with Plotly Dash. Useful as a starting point for deploying LLM-backed chat applications in Python without a JavaScript frontend.
Python · Dash · LLM
Machine Learning & Data Science
rfgroove-py
Grouped variable importance and selection with random forests
Python implementation of grouped feature importance measures and Recursive Feature Elimination (RFE) for random forests, based on two peer-reviewed articles. Allows computing importance scores for groups of features — particularly useful for functional and multivariate data where variables are naturally grouped. Compatible with scikit-learn.
Python · scikit-learn · random forests · feature selection
Based on: Gregorutti et al. (2017), Gregorutti et al. (2015) — see Publications.
Music Technology
reharmonizer
Chord substitution and reharmonisation tool
A full-stack web application implementing music theory algorithms for chord substitution and reharmonisation. Supports diatonic, tritone, circle-of-fifths, chromatic approach, and modal interchange substitution techniques, with a database of 15,000+ chord substitution pairs. Renders music notation via VexFlow and provides improvisation note recommendations.
Python · FastAPI · React · TypeScript · PostgreSQL · VexFlow · Docker
music-genre-classification
Music genre classification using deep CNNs
End-to-end music genre classifier trained on the GTZAN dataset using a 2D convolutional network over spectrograms derived via Short-Time Fourier Transform. Achieves 94.6% mean accuracy across 10 genres. Served via a Flask/Dash web app with real-time prediction during audio playback, containerised with Docker.
Python · TensorFlow · Flask · Dash · Docker · GTZAN
