summaryrefslogtreecommitdiff
path: root/cv/index.typ
blob: 04e3f7466d9c02b89918e4e17f16276946d4ccee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#import "@preview/basic-resume:0.2.9": *

// Put your personal information here, replacing mine
#let name = "Jayrup Nakawala"
#let location = "London, UK"
#let email = "jayrupnakawala@gmail.com"
#let github = "git.jayrup.me"
#let linkedin = "linkedin.com/in/jayrupnakawala"
#let personal-site = "jayrup.me"

#show: resume.with(
  author: name,
  location: location,
  email: email,
  github: github,
  linkedin: linkedin,
  personal-site: personal-site,
  accent-color: "#26428b",
  font: "New Computer Modern",
  paper: "a4",
  author-position: center,
  personal-info-position: center,
)

== Research Experience

#project(
  name: "Prime-Grokking: Pre-registered Grokking Study",
  url: "git.jayrup.me/c/prime-grokking.git",
  dates: dates-helper(start-date: "Aug 2026", end-date: "Present"),
)

- Tested whether minimal transformers and RNNs can grok next-prime prediction, running the study like production research: every experiment batch pre-registered with commit-locked interpretations before launch.
- Caught two experimental-design blockers (layout invariance, prereg-code drift) via hostile pre-run review; built an idempotent multi-cell sweep runner and batched the evaluation loop *46× faster*.
- Ran a 16-cell PyTorch CUDA/AMP sweep (architecture × weight decay) on a remote GPU node, then extended through 10× more data and a 20× longer horizon — following the negative result rather than tuning it away.
- Published a 3-part writeup at jayrup.me with a public, re-runnable repository (prereg addenda, eval code).

#project(
  name: "Stress-Testing the J-space Interpretability Lens",
  url: "jayrup.me/blog/jacobian-lens-frequency",
  dates: "Jul 2026 — Aug 2026",
)

- Independently reproduced a frontier interpretability method (Anthropic's July 2026 J-space/J-lens analysis) on a small PyTorch transformer and found its scores track token frequency.
- Designed a matched-frequency control showing contextual predictability remains detectable — framed and published as a control requirement for the method, not a refutation; shared with the mech-interp community.

#project(
  name: "Dissertation: Moral Cover and Watchful Eyes",
  url: "git.jayrup.me/c/dissertation.git",
  // Role is optional
  role: "",
  // Dates is optional
  dates: dates-helper(start-date: "Nov 2025", end-date: "May 2026"),
)

- Architected a sandboxed evaluation framework with a Virtual File System (VFS) to safely execute and monitor autonomous LLM tool-use across multiple providers (Anthropic, OpenAI, Google).
- Built a provider abstraction layer for glass-box reasoning extraction and a post-hoc interrogation system to adversarially probe agent intent.
- Designed a 3-prong automated judging pipeline (regex, LLM blackbox, LLM glassbox) and ran *960 experimental trials* across exploratory and confirmatory studies.
- Quantified a *"Stealth Gap"*: deceptive intent held steady (~62--67%) under high oversight while output-level detectability dropped (47.8%→35.6%), showing output-only monitoring underestimates risk.
- Code and evaluation harness publicly released under MIT license.

== Projects

#project(
  name: "Hybrid-Cloud Research Infrastructure & Zero-Trust Mesh",
  dates: dates-helper(start-date: "Jan 2024", end-date: "Present"),
)

- Operate a multi-node Linux estate (Void, Arch, Ubuntu) — always-on agent laptop, homelab server, remote GPU research node, VPS edge nodes — unified over a Tailscale/WireGuard zero-trust mesh.
- Run 15+ containerized services in production (Nextcloud, media, password vault, document tooling) via Docker Compose with automated backups, resource monitoring, and an NVMe-backed storage tier.
- Solved CGNAT reachability by deploying VPS nodes as forward proxies, restoring secure high-availability access to internal services without port forwarding.
- Built jayrup.me on this stack: Nginx dual-interface serving (HTML for browsers, plaintext for `curl`) with a Quarto pipeline rendering web and CLI docs from one Markdown source.

== Education

#edu(
  institution: "University of East London",
  location: "London, UK",
  dates: dates-helper(start-date: "Sept 2023", end-date: "May 2026"),
  degree: "BSc (Hons) Data Science & Artificial Intelligence — First-Class Honours (94%)",

  // Uncomment the line below if you want edu formatting to be consistent with everything else
  // consistent: true
)
- Relevant Coursework: Math for Computing, Data Structures & Algorithms, Networking, Databases, Big Data, AI

/*
== Extracurriculars

#extracurriculars(
  activity: "GDG on Campus UEL — hands-on dev workshops (developer-portfolio codelab: Antigravity + Firebase)",
  dates: "<DATES>",
)
*/

== Skills
*Programming*: Python, Bash, SQL\
*ML/AI*: PyTorch, Transformers, Hugging Face, llama.cpp (GGUF quant), LangChain, scikit-learn\
*Infrastructure*: Docker, Docker Compose, Nginx, Caddy, Tailscale, WireGuard, Quarto\
*Systems*: Linux (Arch, Void, Ubuntu), Git, rsync, Tmux, Neovim\