if(keccak256(products[i].category) != keccak256(category)) eq=false;
Недопустимый тип аргумента в вызове функции. Запрошено неверное неявное преобразование из хранилища строк ref в байтовую память. Эта функция требует одного байта аргумента
Вы можете сравнивать строки, используя это
function compareStrings (string memory a, string memory b) public view returns (bool) { return (keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b)))); }
См. это для оригинального ответа.