Skip to content

Conversation

@sfluegel05
Copy link
Contributor

When running GNNs in chebifier, I got this error:

AttributeError: 'OneHotEncoder' object has no attribute 'tokens_dict'

This happens because the tokens dict only gets created when initialising from a dataset. If initialising from a tokens.txt file, the tokens are stored in the cache. So in eval mode, tokens should be retrieved from the cache.

This PR also makes some other slight adjustments (add device casting for model input, expose ChEBI100 dataset, load_processed_data (not just from file, but also by kind)).

Full error:

Error on request:
Traceback (most recent call last):
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\werkzeug\serving.py", line 370, in run_wsgi
    execute(self.server.app)
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\werkzeug\serving.py", line 331, in execute
    application_iter = app(environ, start_response)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\flask\app.py", line 1536, in __call__
    return self.wsgi_app(environ, start_response)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\flask\app.py", line 1514, in wsgi_app
    response = self.handle_exception(e)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\flask_restful\__init__.py", line 298, in error_router
    return original_handler(e)
           ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\flask_cors\extension.py", line 194, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
                                                ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\flask_restful\__init__.py", line 295, in error_router
    return self.handle_error(e)
           ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\flask_restful\__init__.py", line 310, in handle_error
    _handle_flask_propagate_exceptions_config(current_app, e)
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\flask\app.py", line 1511, in wsgi_app
    response = self.full_dispatch_request()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\flask\app.py", line 919, in full_dispatch_request
    rv = self.handle_user_exception(e)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\flask_restful\__init__.py", line 298, in error_router
    return original_handler(e)
           ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\flask_cors\extension.py", line 194, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
                                                ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\flask_restful\__init__.py", line 295, in error_router
    return self.handle_error(e)
           ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\flask_restful\__init__.py", line 310, in handle_error
    _handle_flask_propagate_exceptions_config(current_app, e)
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\flask\app.py", line 917, in full_dispatch_request
    rv = self.dispatch_request()
         ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\flask\app.py", line 902, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)  # type: ignore[no-any-return]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\flask_restful\__init__.py", line 489, in wrapper
    resp = resource(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\flask\views.py", line 110, in view
    return current_app.ensure_sync(self.dispatch_request)(**kwargs)  # type: ignore[no-any-return]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\.venv\Lib\site-packages\flask_restful\__init__.py", line 604, in dispatch_request
    resp = meth(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\Desktop\Chebifier\backend\api\chemclass.py", line 121, in post
    all_predicted, intermediate_results = ENSEMBLE.predict_smiles_list(smiles, return_intermediate_results=True)
                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\PycharmProjects\python-chebifier\chebifier\ensemble\base_ensemble.py", line 224, in predict_smiles_list
    ordered_predictions, predicted_classes = self.gather_predictions(smiles_list)
                                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\PycharmProjects\python-chebifier\chebifier\ensemble\base_ensemble.py", line 93, in gather_predictions
    model_predictions.append(model.predict_smiles_list(smiles_list))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\PycharmProjects\python-chebifier\chebifier\_custom_cache.py", line 139, in wrapper
    new_results = func(instance, tuple(missing_smiles))
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\PycharmProjects\python-chebifier\chebifier\prediction_models\nn_predictor.py", line 73, in predict_smiles_list
    d = self.read_smiles(smiles)
        ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\PycharmProjects\python-chebifier\chebifier\prediction_models\gnn_predictor.py", line 90, in read_smiles
    [property.encoder.encode(v) for v in property_value]
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sifluegel\PycharmProjects\python-chebai-graph\chebai_graph\preprocessing\property_encoder.py", line 216, in encode
    if token not in self.tokens_dict:
                    ^^^^^^^^^^^^^^^^^
AttributeError: 'OneHotEncoder' object has no attribute 'tokens_dict

@sfluegel05 sfluegel05 merged commit 0ef9e87 into dev Nov 11, 2025
2 checks passed
@sfluegel05 sfluegel05 deleted the thesis_augmented_gnn branch November 11, 2025 17:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants