If something is taking a modelindex, it is being used. Maps use a modelindex for every brush entity (func_door, func_explosive, func_wall, etc) so the map can have a large influence on the available indexes, especially if you're trying to use some of the single player maps. As for your mod, if you're precaching every single model, perhaps try to avoid doing so and letting uncommonly used ones load on-demand.
For on-demand loading, if the entity is freed, then there is a possibility of reusing that modelindex for something else - if you find you have a lot of one-shot models, perhaps manually send the configstrings out yourself rather than allocate a new index with gi.modelindex. In theory it should be possible to allow for modelindex replacement server-side to automate this, but many mods cache the modelindexes for performance reasons and recycling server-side would break such mods, although you could also argue it's better to recycle than to crash with no free indices

.