ai_result_t has novalid, label or confidence field. The real reduction is the inline ai_result_top_positive() in ai_engine.h, which returns the strongest positive class (index 0 is the negative class by registry contract) as 0..100; the example in proj_cm55/modules/ai_models/README.md uses it.
ai_engine_stack_words() returning 0 means the inference task was never created; every reading on every page below is vacuous until it is non-zero.