Creating a custom interface based on ner_manual

I have done a lot of reading and I think I need to make a custom annotation interface.

The docs about custom interfaces are really bare bones and seem to leave out a lot of details. I cannot find any examples of custom interfaces that others have made on github or anywhere like that. I'd really love to see a full, fleshed-out, working example. Does anyone know of any of these?

In my case, I think the easiest thing will be to modify an existing interface. Specifically, the ner_manual interface. I just want to add a text box for each entity. The annotator would paste in a wikidata ID for linking for each entity in the example.

I realize some might consider this bad design for the annotator, but I need to get something started quickly and this seems like the easiest way to get things working. I just want the same thing as ner_manual, but right next to the NER categories is a text box. I just need whatever is placed in that textbox to be included as an additional label for that entity.

Seems like it should be super easy! But I've looked at the docs a lot and I really don't know where to even begin to do this.

Can someone help get me started, point me to some examples, etc? Even just show me where to find the built-in ner_manual interface so I can try to extend it?

PS: I am not giving them options because a) I don't want to put a huge chunk of wikidata in my annotation pipeline and b) I don't want to constrain annotators to using only the options I give them.

Hi @alan-hogue - thanks for your message. There is a public Prodigy repo with recipes for different labelling tasks - you can copy specific files and modify them for your own use cases.

As for your specific case of a NER manual recipe with a text box, please see this example. It is a tutorial on how you can include multiple tasks in a custom labelling instance, including an NER task with a text box. You will need to modify it slightly to remove the view_ids (in blocks in line 35) not relevant for your case but it should otherwise be the example you're looking for.

This second example is super, super helpful. Thank you!