You're right, bisect will fail if the forecast isn't sorted and actually for some reason the GFS forecasts have reverse sorted latitudes but other forecasts don't.  That leaves us two options, either we can force the forecasts to be consistent or slightly change this logic.  For now (only using GFS) you're fine.

For the meantime perhaps an assert statement would be good:
assert self.fcst['latitude'].data[0] > self.fcst['latitude'].data[-1]