Projects

Thumbnail for CUDA path tracer

CUDA path tracer

Pathtracing rendering engine written from low-level primitives in CUDA. The project implements the Cook-Torrance reflectance model to achieve photorealistic physically based rendering (PBR). Standard 3D mesh formats are supported through the Assimp library, allowing models to be rendered as they would appear in Maya or Blender.

C++CUDA
Thumbnail for NN-guided MCTS

NN-guided MCTS

Pytorch pipeline to train neural network guided MCTS algorithms to play TicTacToe and Ultimate TicTacToe. Neural architectures differ from typical MCTS in that they use a neural network to estimate the outcome/pick a move using their current position. To train these networks, two copies of the model play against each other to generate training data. Each position taken is considered an input with the subsequent move taken and eventual game outcome being considered the outputs. This cycle of self-play then training can be repeated until the resulting model achieves superhuman performance.

PythonPyTorchNumPy
Thumbnail for Rubik's Cube solver

Rubik's Cube solver

Interactive 3D Rubik's Cube and solving algorithm. This web app uses the Three.js to render a fully manipulatable Rubik's cube in the browser. The app can also communicate with a python based API server that implements the Thistlewaite solving algorithm. This allows the web app to provide step-by-step solve instructions for any Rubik's cube configuration in 52 moves or fewer.

TypescriptTailwindThree.jsReact Three FiberPythonFastAPI
Thumbnail for Outfit generation with RLHF

Outfit generation with RLHF

Python project meant to demonstrate the mechanics of RLHF by training a model to generate stylistically sound outfits from a corpus of pictures of clothing items. By using foundation LLMs as a proxy reward model for human style sensibilities, we can perform RLHF on a relatively small network that distills the LLMs capacity for style.

PythonPyTorchNumPy
Thumbnail for Live chatroom

Live chatroom

Real time chat and collaborative drawing app. The chatroom runs on a Golang HTTP server that multiplexes WebSocket connections in a star topology to coordinate replication of state across connected clients. Clients establish connections through a hosted React web application.

TypescriptGoReactTailwind
Thumbnail for Snek language playground

Snek language playground

"Snek" is a custom programming language and compiler built for the CSE 131 Compiler course at UCSD. This project takes my compiler from the course and hosts it on a cloud platform. A React web app connects the client with the compiler server which builds and runs a binary using Rust. The Snek language is capable of typical operation (arithmetic, comparison, equality), defining functions, variable assignment (both primitives and data structures), if-else statements, looping, and garbage collection.

RustTypescriptReactTailwind
Thumbnail for 2D isometric shooter (Godot)

2D isometric shooter (Godot)

Simple roguelite isometric shooter project built using Godot 3. This project sees you fighting off waves of enemies as you collect different powerups. The project was compiled to WASM and hosted online so the game can be played from the browser.

GDScriptGodotWASM
Thumbnail for SpellweaVR

SpellweaVR

SpellweaVR is a Unity VR project built for UCSD's CSE165 course, which explores the new kinds of user interactions being invented for VR and XR spaces. The project puts these ideas into practice by using hand gestures to "draw" commands in the air.

C#UnityUnity XR
Thumbnail for DocReader

DocReader

RAG system for inputting long documents to LLMs. The program takes documents like PDFs, Word docs, and powerpoints and divides their contents into manageable chunks; each is run through an embedding model that encodes the semantics of its text then saved to a vector database according to its embedding. This means that user queries can also be embedded to find semantic similarity to any text in the database. Any matching text can be used to augment a user's query with additional context without flooding the context window.

PythonNumPy