Skip to content
View raghu619's full-sized avatar
  • Mumbai, India

Block or report raghu619

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
raghu619/README.md

Raghvendra Rao

I build small LLM systems and then measure whether they actually work.

Most of what I publish follows one shape: build the thing the tutorial describes, write an evaluation harness for it, then report the number that disagreed with the tutorial. The build is the easy half. The measurement is the project.

Based in Mumbai. Working through LLM engineering in public — retrieval, evaluation, and model selection.


Recent work

stylesense-rag — a RAG assistant over a fashion catalogue, swept across 18 configurations against the same 16-question test set.

The winning change was made at ingestion time, not at query time: chunking at 2000/400 instead of the tutorial's 1000/200 moved retrieval coverage from 64.0% to 69.6% and answer accuracy from 4.38 to 4.94. Raising k looked like +5.3 points of coverage and was a small regression once divided by the arithmetic ceiling — a coverage number without its ceiling is not a measurement. Numeric constraints ("something under Rs 1500") never improved under any configuration, because cosine similarity has no concept of less than.

llm-code-porting-eval — 36 measured runs comparing four models on Java-to-Kotlin migration, with each model's predicted rank locked in before the eval so the benchmark could not be retrofitted to the outcome.

Benchmark rank did not predict real-world value. The rank-2 model was the slowest and the poorest value, burning ~734 output tokens per task on hidden reasoning. The recommended model flips depending on whether a team weights quality or cost, so the deliverable is a weighted decision matrix rather than a single answer. Model selection is a business decision, not a leaderboard lookup.

embedding-space-explorer — a vector store over a synthetic catalog, then a hard look at the embedding space it produced.

At 1200-character chunks the top five similarity scores sat inside a 0.012 band: noise that happens to arrive sorted. Shrinking the chunks opened the spread to 0.130, which is real signal — and the near-verbatim match still only reached 2nd place. Vocabulary overlap beat the exact match.

synthetic-ticket-generator — support tickets generated side by side by a frontier model and a 4-bit quantized open model.

At batch size 5, both looked fine. At 15, the open model returned zero parseable rows — not from poor quality, but from hitting the token cap mid-array, where a single truncated row invalidates the entire JSON batch. Token budgets constrain open models harder as batch size grows, and strict JSON parsing fails all-or-nothing.

tokenizer-chat-template-explorer — one identical sentence pushed through four instruct-model tokenizers.

A vocabulary 56% larger bought almost nothing on plain English: the same sentence is 18 to 20 tokens everywhere. The divergence is in the chat template, the wrapper nobody inspects — formatting the same conversation costs Llama 32 extra tokens and Phi only 2, because Llama's template injects a "Today Date" line into every single call.


Toolkit

Python · LangChain · Chroma · OpenAI and Anthropic APIs · transformers · Gradio · pandas · t-SNE

Before this: Android development since 2017 — Kotlin, Java, Flutter. The older repositories here are that era.


What's next

Metadata filtering for the RAG project, so a budget becomes a database where clause instead of a vector, measured against the same test set. constraint coverage sat at 58% through all 18 configurations, so there is a clear number to beat.

Pinned Loading

  1. stylesense-rag stylesense-rag Public

    A RAG assistant over a fashion catalogue, evaluated properly. 16 question test set, retrieval metrics plus LLM judge, 18 configuration ablation.

    Python

  2. catalog-curation catalog-curation Public

    Curating Shopify's public product catalogue into a clean, balanced category dataset: leakage checks, deduplication, text hygiene and rebalancing. 25k products, 141 classes.

    Jupyter Notebook

  3. embedding-space-explorer embedding-space-explorer Public

    Vector store and embedding-space exploration over a synthetic BREWELLM coffee catalog

    Python

  4. llm-code-porting-eval llm-code-porting-eval Public

    Evaluation harness comparing four LLMs on Java to Kotlin migration. 36 measured runs, ranks predicted before the eval: benchmark rank did not predict real-world value.

    Jupyter Notebook

  5. synthetic-ticket-generator synthetic-ticket-generator Public

    Synthetic support ticket generator comparing a frontier model vs an open model

    Jupyter Notebook

  6. tokenizer-chat-template-explorer tokenizer-chat-template-explorer Public

    Four instruct-model tokenizers on one identical sentence. Vocabulary size barely matters; the chat template is where models actually diverge.

    Jupyter Notebook