Prodigy CLI "Available recipes" feedback

Thanks for making an awesome product, it has made NLP feel accessible to me as a hobby. :clap:

This feedback borders on nitpicky, so please pass on it if you don’t think it makes sense.

The current help output (below) is beautifully compact but not easy to visually scan, especially as a new user that is trying to find a recipe in an unfamiliar list.

$ prodigy

  ✨  Available recipes:
  compare, ner.match, ner.teach, ner.mark, ner.make-gold, ner.eval-ab,
  ner.batch-train, ner.train-curve, ner.print-best, ner.print-stream,
  ner.print-dataset, textcat.teach, textcat.batch-train, textcat.train-curve,
  textcat.eval, textcat.print-stream, textcat.print-dataset,
  terms.train-vectors, terms.teach, terms.to-patterns, mark, image.test


  ✨  Available commands:
  dataset, drop, stats, pipe, db-in, db-out

I think there are two “problems” here:

  1. There is only one visual group for all recipes meaning the list must be searched in order to extract information
  2. The recipe groups (ner.*, terms.*, textcat.*) are located near each other but do not appear to be in a predictable order, making them difficult to quickly scan.

For example, suppose I want to find a recipe related to textcat, but I’m not sure which one. The first textcat recipe is the second entry on the third line, so I have to parse the whole content block to find it before I can look for the related recipe that I want. After I find the leading recipe I have to read all the following items until I find the one I’m looking for because they are not sorted in a predictable way.

My hypothesis is that if you create intentional visual groupings of related recipes, and predictably order them, the usability of your help output will go up in a way that is easy to perceive.

Here are two possible examples of what I mean:

Vertical list with alpha sort and line breaks for groups
Takes up quite a bit of screen space, but is predictable and easy to scan (up/down):

$ prodigy

  ✨  Available recipes:

      compare
      image.test
      mark

      ner.batch-train
      ner.eval-ab
      ner.make-gold
      ner.mark
      ner.match
      ner.teach
      ner.train-curve
      ner.print-best
      ner.print-dataset
      ner.print-stream

      terms.teach
      terms.to-patterns
      terms.train-vectors

      textcat.batch-train
      textcat.eval
      textcat.print-dataset
      textcat.print-stream
      textcat.teach
      textcat.train-curve


  ✨  Available commands:

      dataset
      db-in
      db-out
      drop
      pipe
      stats

Wrapping lists with alpha sort and line breaks for groups
A bit harder to scan (up/down+left/right), but more compact and still predictable:

$ prodigy

  ✨  Available recipes:

      compare, image.test, mark

      ner.batch-train, ner.eval-ab, ner.make-gold, ner.mark, ner.match,
      ner.teach, ner.train-curve, ner.print-best, ner.print-dataset, 
      ner.print-stream

      terms.teach, terms.to-patterns, terms.train-vectors

      textcat.batch-train, textcat.eval, textcat.print-dataset, 
      textcat.print-stream, textcat.teach, textcat.train-curve

  ✨  Available commands:

      dataset, db-in, db-out, drop, pipe, stats

Thanks a lot for the suggestions – really appreciate the attention to detail! :pray:

I think we added this message when there were significantly fewer recipes and didn’t really consider how it’d look with so many of them. I really like the idea of grouping them by type, though – will add this for the next release (didn’t get it ready in time for v1.1.0, but it’s coming!).

There’s also a slightly hidden “Similar recipes” help message btw, which currently only checks for substrings – e.g. if you type prodigy teach or prodigy textcat. I always thought it’d be cool to also make it work for typos, but not sure if it’s worth the potentially speed trade-off.

1 Like