Permitting format specifiers is no more inconsistent than allowing expressions.
F-strings are Python’s implementation of string interpolation. To be exactly consistent with the pure concept of string interpolation, an f-string should permit nothing more than a single variable name inside curly braces. The style PHP and sh do this with
$ (without
{…}).
Most languages do extend this basic concept for programmer’s convenience. So does Python, giving us both: expressions and format specifiers. The only quirk of Python is, that it accepts unexpectedly wide range of expressions.
(1) But not only it hasn’t been touched in this topic, but what it makes “inconsistent with the idea” is expressions themselves, not the format specifiers.
Note that it should really be “intuitional consistency,” not “logical consistency.” If we’re to be precise.

(1) Those are valid f-strings, despite you probably don’t want them to be:
a = f'{" "}'
print(a)
x = 0
b = f'{(x:=4)}'
print(b, x)
y = 10
c = f'{#
y}'
print(c)
o = {'Foo': 'Bar'}
d = f'{o.pop("Foo")}'
print(d)
it = iter([0, 1, 2, 3])
e = f'{next(it)} {next(it)} {next(it)} {next(it)}'
print(e)
z = None
g = f'{(z := lambda x: x + 4, z(10))[1]}'
print(g)