Use saved model in plugin recipe

Franck
Franck Registered Posts: 4 ✭✭✭

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

Best Answer

  • AgatheG
    AgatheG Dataiker, Registered Posts: 37 Dataiker
    edited July 17 Answer ✓

    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

Answers

  • AgatheG
    AgatheG Dataiker, Registered Posts: 37 Dataiker
    edited July 17

    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

  • Franck
    Franck Registered Posts: 4 ✭✭✭

    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

  • Franck
    Franck Registered Posts: 4 ✭✭✭

    Ok, I was not considering the output of get_input_names_for_role as a list.

    It's working now, thanks a lot

Setup Info
    Tags
      Help me…