This is an interesting question! In general, I think it’s definitely good to focus on Python and the language features itself, rather than some specific framework or API. This is also part of our philosophy: in our libraries, we try to not steal the control flow and let the user write regular Python code. For instance, instead of just providing you a
fit() or a
train() method with a bunch of arguments, you can write your own training loop. Instead of a method
doc.get_all_verbs, we encourage you to write
[token for token in doc if token.pos_ == "VERB"].
Prodigy implements a similar philosophy: Instead of writing recipes in a Prodigy-specific config language, you can write pretty straightforward Python functions. And instead of making the user implement a specific “Prodigy stream” object, you can pass in a regular Python generator that can do whatever you like, as long as it yields dictionaries.