Sign up to take part
Registered users can ask their own questions, contribute to discussions, and be part of the Community!
Registered users can ask their own questions, contribute to discussions, and be part of the Community!
Hello everyone,
I can't figure out how to use a saved model in a custom python plugin recipe.
- If I try to pass it as an input (declared in the recipe.json file), I can't select it when creating the recipe (I have something like "Saved model are not accepted for this input").
- If I try to pass it as a parameter, either as a STRING or a SAVED_MODEL. I have the python error: "Saved model MODEL_NAME cannot be used : declare it as input or output of your recipe"
- Even when trying to load it directly by hard-coding the name in the python code, same error as with a parameter.
Am I missing something ?
Thanks for your help.
Franck
You'll need indeed to use dataiku.customrecipe.
get_input_names_for_role
The method takes one argument, role, in which you should put the name you defined in recipe.json for the input you want to retrieve.
Beware that the method returns a list, as you may have NARY inputs; so you should take the element at index 0 if you have a UNARY input.
Basically, something like this should allow you to retrieve your model id:
from dataiku.customrecipe import get_input_names_for_role
saved_model_id = get_input_names_for_role(YOUR_INPUT_NAME)[0]
Hope this helps as well ๐
Hi Franck!
The way to go is indeed by declaring your saved model as an input of your recipe within your recipe.json file. You'll need to add a field acceptsSavedModel for DSS to understand that saved models are the expected input:
"inputRoles": [
...
{
"name": ...,
"label": ...,
"description": ...,
"required": ...,
"arity": ...,
"acceptsDataset": false,
"acceptsSavedModel": true
},
...]
I also set acceptsDataset to false in my above example to ensure only saved models are accepted.
Hope this helps!
Agathe
Hi Agathe,
I tried this way but I used "acceptsModel" instead, as I couldn't find any doc on this possible keys we can use...
Thanks a lot for your help ๐
Now I am able to pass it as input, but still, how do I load it from the python code ? The only function that I could find to interact with the json file are here, and it looks like none would do the job https://doc.dataiku.com/dss/latest/python-api/plugins/custom_recipes.html
If I try to get the model name and then open it with the Dataiku module, like we would do with a dataset, I still get the error.
Thanks
Franck
You'll need indeed to use dataiku.customrecipe.
get_input_names_for_role
The method takes one argument, role, in which you should put the name you defined in recipe.json for the input you want to retrieve.
Beware that the method returns a list, as you may have NARY inputs; so you should take the element at index 0 if you have a UNARY input.
Basically, something like this should allow you to retrieve your model id:
from dataiku.customrecipe import get_input_names_for_role
saved_model_id = get_input_names_for_role(YOUR_INPUT_NAME)[0]
Hope this helps as well ๐
Ok, I was not considering the output of get_input_names_for_role as a list.
It's working now, thanks a lot