Srinivas Sivaratri
Places 0/10 Details 0/17

Srinivas Sivaratri: a tiny island to explore. Walk around with the arrow keys, open buildings with E, or use the Index button for a plain list of everything.

Srinivas Sivaratri

I measure whether a model is actually right, and refuse to act when it is not.

Profile

Software engineer building practical AI systems and developer tools across Python, Go, and TypeScript.

Available: remote full-time or contract · UTC+5:30 (IST)

Experience

Independent engineering

Software Engineer

May 2025–present Remote

  • Proposed a request-scoped skip flag and regression test for an email-enumeration leak in better-auth; maintainers adopted the approach and shipped it in #5998.
  • Designed a go-ethereum archive-node command that binary-searches the merge block, preserves headers and hashes, and drops pre-merge bodies; revised it across three core-maintainer review rounds, after which the core team built its own version.

Accenture

Software Engineer

Jul 2021–Jul 2022 Bangalore

  • Developed a Python ETL script that automated data-processing workflows, saved 50 labor hours monthly, and reduced processing errors.
  • Implemented a GitHub Actions CI/CD pipeline.

Education

  • MS Computer Science University of Alabama at Birmingham · 2023–25
  • BS Computer Science BV Raju Institute of Technology · 2017–21

Open source

better-auth: email enumeration at sign-in

2025 Security

Signing in with an unregistered email and a compromised password returned PASSWORD_COMPROMISED instead of the generic error, revealing which emails were registered. Traced it to the Have I Been Pwned plugin throwing during the dummy-password hash, and proposed a request-scoped skip flag plus a regression test.

Status Maintainers adopted the approach and shipped it in #5998.

go-ethereum: geth db truncate-freezer

2025 Systems

A subcommand for archive nodes that binary-searches the merge block, preserves headers and hashes, and drops pre-merge bodies. Reviewed across three rounds by core maintainers (s1na, jwasinger, MariusVanDerWijden); revised it to batch-process rather than hold roughly 15 GB in memory on mainnet, to move headers into a fresh freezer instead of assuming equal table lengths, and to look up merge blocks per network.

Status The core team built its own version of the command.

Projects

unmaze

  • Measured
What
A small diffusion model that solves hedge mazes by turning random noise into the path from the entrance to the centre. It trains on a plain CPU, and a browser page replays the model’s real frames so you can watch it work.
Why
Image models turn noise into pictures. This tests whether the same idea can turn noise into the one correct path through a maze, and measures where it stops working.
How

Python, PyTorch, and NumPy. Mazes come from Wilson’s algorithm and their solutions from BFS. A 2.7M-parameter U-Net with self-attention denoises the path mask, and a DDIM sampler runs 50 steps; training took about 50 minutes on 3 CPU threads. A strict judge counts an answer only if it is exactly one simple path with no gaps or stray pixels, and no repair step runs afterward. The page is plain HTML, CSS, and JavaScript.

  • 5,000 fresh 11×11 mazes the model never saw: 4,990 solved (99.8%)
  • On depth-first-search mazes it never trained on: 66%
  • All 10 failures were in the longest quarter of routes; on the 300 longest routes of 30,000 it solves 93%

Bingo

  • Measured
What
A command-line movie search over 5,000 films that ranks results with keyword search, meaning-based search, or both, and can answer questions about the results with an LLM.
Why
Keyword search misses movies described in different words, and meaning-based search misses exact names. Measuring both on the same queries shows which one actually helps.
How

Python, NLTK, sentence-transformers (all-MiniLM-L6-v2), a local cross-encoder reranker, CLIP for image search, and Gemini 2.0 Flash for answers with citations. I built it while working through Boot.dev's RAG course: BM25 over an inverted index, chunked embeddings, Reciprocal Rank Fusion, and reranking. I then built an 834-query known-item eval (each query aims at one movie; queries that leak the title are dropped), rewrote BM25 to score from precomputed term statistics, and added a side-by-side view that runs all four methods on one query next to their eval scores.

  • 834 known-item queries, test split, target in the top 10: RRF with cross-encoder reranking 0.916, BM25 0.863, plain RRF 0.837, semantic 0.626
  • Plain hybrid fusion scored below BM25 alone; only reranking beat it
  • BM25 p95 latency fell from 3.4 s to 5 ms

Résumés and links

Contact

Let’s make the next useful thing.

Start a conversation

A tiny island, a lot of details

Srinivas Sivaratri

I measure whether a model is actually right, and refuse to act when it is not.

    The whole island, as a list

    Index

    Places

    Buried details