As far as I can tell the VEXTRACTF128 and VEXTRACTI128 instructions do the same things, have the same latency, same throughput, and use the same ports. The only difference I cant tell between them is that VEXTRACTF128 only requires AVX VEXTRACTI128 requires AVX2. If that's the only effective difference why use VEXTRACTI128?
I saw the following in Agner Fog's vectroclass which I infer means there is some important difference between the instructions. Maybe they share different domains (floating point or integer)?
#if defined (_MSC_VER) && _MSC_VER <= 1700 && ! defined(__INTEL_COMPILER)
__m128i sum5 = _mm256_extractf128_si256(sum4,1); // bug in MS VS 11
#else
__m128i sum5 = _mm256_extracti128_si256(sum4,1); // get high sum
#endif