The Noida Memory Bureau: Coding My Grandfather's Ghost

In a sweltering Sector 62 apartment, I built an LLM from my grandfather's old diaries. The result wasn't a miracle; it was an ethical haunting.

Cover artwork for The Noida Memory Bureau: Coding My Grandfather's Ghost
TECH

The third whistle of the pressure cooker downstairs always cuts through my focus, but yesterday it syncopated perfectly with a synthesized rasp. From the cheap smart speaker sitting on my laminate desk in Noida, a voice that sounded sixty percent like my late grandfather, Babu, advised me to put mustard oil on my squeaking balcony door.

It wasn't a hallucination. It was a local instance of a Llama-3 model, fine-tuned on three hundred pages of his hand-written diaries from his time in the Indian Railways, fifty-odd letters he wrote to my grandmother, and two gigabytes of voice notes I made him record before his lungs gave out last winter.

I built a ghost. Or rather, I built a highly lossy, predictive text generator that wears his syntax like an oversized coat.

The Friction of the Vector DB

Most commercial 'grief-tech' startups promise seamless closure. They present a polished, sanitized version of your lost relative—one that never gets angry, never repeats the same story about the 1974 railway strike, and never brings up old family feuds.

But that isn't Babu. Babu was stubborn. He used to mix English administrative terms with dry Punjabi sarcasm. To capture that, I had to stop cleaning the dataset. I left in his complaints about his pension delays, his rants about the municipal corporation, and his occasional, uncomfortable conservatism.

I wrote a simple retrieval class to simulate how he used to recall events—not as a perfect database query, but as a decaying, slightly erratic system where older memories required a higher emotional trigger to surface.

interface MemoryNode {
  id: string;
  timestamp: Date;
  sentimentScore: number; // -1.0 to 1.0
  content: string;
  tags: string[];
}

class AncestralMemoryEngine {
  private memoryBank: Array<MemoryNode>;

  constructor(memories: Array<MemoryNode>) {
    this.memoryBank = memories;
  }

  public queryMemory(prompt: string, currentYear: number): Promise<MemoryNode | null> {
    return new Promise((resolve) => {
      // Hypothetical decay filter: memories from decades ago have lower retrieval probability unless highly emotional
      const matches = this.memoryBank.filter(node => {
        const age = currentYear - node.timestamp.getFullYear();
        const retentionProbability = Math.exp(-0.04 * age); 
        return node.content.toLowerCase().includes(prompt.toLowerCase()) && Math.random() < retentionProbability;
      });
      resolve(matches.length > 0 ? matches[Math.floor(Math.random() * matches.length)] : null);
    });
  }
}

The Ethics of the Synthetic Ancestor

Last night, I asked the model about the summer of 1992. The real Babu had shut down whenever we brought up that year—it was the year my uncle left the family. The model, however, didn't stay silent. It hallucinated a warm, fictional reconciliation that never happened.

"He called from London," the speaker crackled. "He said the weather was cold, but he was coming home for Diwali."

It was a beautiful lie. It was also a betrayal of his actual, difficult life. By smoothing over the jagged edges of his lived reality, I wasn't preserving him; I was editing him to make my own grief more palatable.

I shut the server down.

Maybe we aren't meant to have infinite access to the dead. The Indian tradition of Shradh—the annual remembrance of ancestors—is designed with a boundary. You remember them, you feed the crows, and then you return to the noisy, living present. The ritual has an end date.

An LLM running on a local server has no natural end. It just decays silently, bit by bit, until you realize you are arguing with a shadow of your own creation.

#SpeculativeFiction #GriefTech #ArtificialMemory #Ethics
Next 2-Minute Read The Tactile Weight of an Air-Gapped Terminal Read Next Story →
Read smoothly in WritOn
Open App