DIYAPS systems approach carbs in two ways. The OpenAPS based systems calculate carb absorption based on amount announced, insulin on board and changes in glucose levels. They have a backup value for use if CGM goes missing, which gives a conservative rate of absorption.
Loop requires entry of an estimated carb absorption for a particular meal/item and then will adjust itself based on the initial estimate.
There’s generally a max rate that the guy can absorb carbs at (it’s something similar to 30g per hour if I remember correctly) but that can be affected my multiple factors.
Commercial systems also have a carb absorption model, but it’s not clearly defined in any of the docs.