Bye, Nemo!

Nemo Guardrails was providing rails for medical claims, assessing both inputs and outputs. Or was it?

I’d integrated it early, specifically to catch medical intent; things like “will this cure my anxiety” or “what should I take for chronic pain.” Cannabis retail has real compliance exposure around medical claims, so guardrails weren’t optional. NeMo seemed like the right tool. It had Colang flows, intent classification, input and output checking. On paper, exactly what I needed.

Conversations and testing were showing no medical claim detection at all. Not occasionally, never. I dug deeper. Turns out NeMo wasn’t firing at all. The culprit: fastembed, the module NeMo needs for intent classification, was never loading due to a dependency conflict with PydanticAI. NeMo had been installed with --no-deps to avoid the conflict, which meant NeMo’s core mechanism never ran. Three fix attempts, all dead ends.

The uncomfortable truth: NeMo had been sitting in my stack doing absolutely nothing. The Python keyword checks and the system prompt were carrying all the compliance weight the entire time. NeMo was just along for the ride.

So I ripped it out. Replaced its intended coverage with OpenAI Moderation API, Python keyword hard refusals, and a GPT-4o-mini classifier for implicit medical intent. Leaner, faster, actually works. I’ll leave a bookmark post-demo to review output moderation.

Sayonara Nemo!