August 13, 2026 · 6 min read

When a Follow-Up Question Drops Its Subject

When I was testing the chat in VyomaVeda, I asked it a question about relationships, and then a short follow-up: "what are they like?"

The answer drifted. Instead of staying on the person I had just asked about, it started describing me in general.

It took me a while to see why.

The chat reads one message at a time

Before any message reaches the language model, a small piece of code works out what the question is about. Career, relationships, children, timing. It then pulls the matching part of the chart into a payload, and the model writes from that payload and nothing else.

Simplified, it looks like this:

intent = classify_chat_intent(message)
payload = build_payload(chart, intent)
answer = llm_write(payload)

That classifier reads each message on its own. It does not look at what came before.

Most of the time that is fine, because people name their subject.

"when will I get married"   -> relationship
"tell me about my career"   -> career

The words say what the question is about, so the match is easy.

Why the follow-up sank

Conversation does not stay that way for long. After the first question, the follow-ups get shorter.

"what are they like"
"where will I meet them"
"and when"

None of those name a subject. They point back at the last thing you asked and assume the chat was listening.

But the classifier had nothing to point back to. "What are they like" has no career word, no relationship word, nothing to match, so it fell through to a general fallback that reads it as a vague question about the self.

So the person was clearly still asking about the same thing, and the chat quietly switched to a different one.

That was not a wrong fact. It was a lost subject.

What I changed

When the classifier finds no match, and only then, it now looks at what the previous question was about and inherits that.

intent = classify_chat_intent(message, prior_intent=previous_intent)

Finding the previous topic does not cost anything extra. The chat just re-runs the same classifier on the last thing the person said. It is deterministic, and there is no additional model call.

def prior_intent_from_history(history):
    for turn in reversed(history):
        if turn["role"] == "user" and turn["content"].strip():
            return classify_chat_intent(turn["content"]).primary_intent
    return None

So after "when will I get married," a bare "what are they like" now keeps the relationship topic instead of sinking.

The part I was careful about

The inheritance is the easy half. The care is in what it refuses to do.

It only steps in on a real fallback. If the new message matches a rule on its own, that always wins. "Tell me about my career" after a relationship question is still about career. The previous topic never overrides a question that stands on its own.

It only steps in for an actual follow-up. A question like "what does my chart say about me" has no pronoun pointing backward, so it stays a general question rather than borrowing the last topic.

And it only inherits topics whose data still fits a pronoun question. Some earlier answers are tied to a specific subject already, like a particular time period. Carrying one of those onto "what about them" would answer something the person never asked, so those do not carry over.

There is one more quiet rule. If a topic is handled with extra sensitivity, a follow-up to it is handled the same way. The follow-up should not be treated more casually than the question that started it.

One hop only

There is a failure mode I wanted to avoid: a guess turning into another guess.

If the previous message was itself a bare follow-up, then it had already resolved to the general fallback, which is not something the next message can inherit. So the chain stops after one step instead of carrying a guess forward and building on it.

"what are they like"   -> inherits relationship (one hop)
"and where"            -> the previous turn was a fallback, so it does not
                          inherit again; it stops rather than guess further

One step back is usually enough to catch a real follow-up. More than that starts inventing a conversation the person did not have.

What this changed

The chat feels like it is following along now, instead of resetting every time a question gets shorter.

It is a small change in the code. But it is a lot of what separates a chat that holds a thread from one that answers each message like it is the first.

And it kept the part that matters to me: the chat still answers from the chart, not from a guess. When it does not know what a short question is pointing at, it would rather stay on the last clear subject than quietly change it.