In general, you can always write your own filter function in your custom recipe – streams are regular Python generators, so you can do something like this and apply any filtering you need:
for eg in stream:
# filter based on some properties in the example here
update callback also gives you access to the batches of annotated examples that are submitted in the UI. You could then store any information about those already annotated examples in a variable in your recipe function that the
filter_stream generator also has access to. This way, it can respond to collected annotations (which is also how annotating with a model in the loop works under the hood).
# do something with the answers here
One thing to keep in mind is that the stream and answers are sent in batches. So any update you make based on collected annotations will only affect the next batch that's being created afterwards (not the examples that are already queued up for annotation in the app).