GraphSchemaValidationException - custom component expecting different input type then it is receiving

I am upgrading from Rasa 2.x to 3.x. I am using a few custom entity extractors, but I’m seeing an error when I attempt to train a new model:

rasa.engine.exceptions.GraphSchemaValidationException: Your component 'AddressEntityExtractor' expects an input of type 'typing.List[rasa.shared.nlu.training_data.message.Message]' but it receives an input of type '<class 'NoneType'>' by the component 'ComprehendEntityExtractor'. Please make sure that you registered your component correctly and and that your model configuration is valid.See https://rasa.com/docs/rasa/custom-graph-components for more information.

I followed the migration and custom graph components guides in my refactor as closely as possible.

Here is a snippet of what my config.yml looks like:

pipeline:
  - name: WhitespaceTokenizer
    intent_tokenization_flag: true
    intent_split_symbol: ","
  - name: ConveRTFeaturizer
    model_url: "./convert-model"
  - name: "nlu.comprehend_extractor.ComprehendEntityExtractor"
  - name: "nlu.address_extractor.AddressEntityExtractor"

I have the same registration code for each component:

# Registering component as per Rasa 3.0 requirement
@DefaultV1Recipe.register(
    component_types=[DefaultV1Recipe.ComponentType.ENTITY_EXTRACTOR],
    is_trainable=False,
)

Please let me know if additional code snippets would be helpful for proper diagnosis of the problem.

I forgot to update the return type in the process method signature. Changing this from None to List[Message] resolved the issue.

1 Like