I have a custom recipe combining classification and text_input interfaces. I'm finding that the text input box is not resetting, and the box is not getting autofocus (except for the first sample). When a new sample comes up, the text input box keeps whatever input I gave for the previous sample, but if I accept the user-input is not saved.
Code for the recipe:
@prodigy.recipe(
"label-clusters",
dataset=("The dataset to save to", "positional", None, str),
file_path=("File with jsonl list of images", "positional", None, str),
label=("Comma-separated label(s)", "option", "l"),
)
def label_clusters(dataset, file_path, label):
blocks = [
{"view_id": "classification"},
{"view_id": "text_input"},
]
def get_stream():
stream = JSONL(file_path)
for eg in stream:
eg["field_id"] = "cluster_label"
eg["field_placeholder"] = ""
eg["field_autofocus"] = True
yield eg
return {
"dataset": dataset,
"view_id": "blocks",
"config": {
"blocks": blocks
},
"stream": get_stream(),
}
A line in the input file looks like: {"image": "http://127.0.0.1:8282/lc_11.png", "width": 800, "height": 800, "label": "cluster"}. I also tried adding the field_* keys to the input file, with the same result.
Am I misusing this interface somehow?
The underlying issue was that the field wasn't always resetting itself visually – so if you move on to the next task, the field value is empty (as it should be), but the UI still displayed the previous text. If you edit the text, the field value will be updated, as expected.