You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Milvus version: v3.0.0 (release 2026-07-29, commit f46a0328558be155d11266a1a2b90602ccc9b366)
- Deployment mode: standalone (Docker, `milvusdb/milvus:v3.0.0`)
- MQ type: N/A
- SDK version: REST API v2 only (curl). pymilvus used for gRPC comparison.
- OS: Windows 11 (Docker Desktop)
- CPU/Memory: N/A
- GPU: None
Current Behavior
The REST API v2 entities/insert endpoint silently coerces compatible-but-wrong types across scalar fields:
Input type
Field type
REST v2
Stored value
gRPC
"123" (string)
Int64
accepted
123
rejected
123 (int)
VarChar
accepted
"123"
rejected
"true" (string)
Bool
accepted
true
rejected
"1.5" (string)
Float
accepted
1.5
rejected
Issue #47766 fixed type validation on the gRPC path (milestone 2.6.14, closed 2026-05-08), but the REST API v2 path still exhibits the same behavior in v3.0.0.
The Number Field documentation defines each scalar type with a specific data type code (INT64, BOOL, FLOAT, etc.) and describes them as storing specific value types — integers, booleans, or floating-point numbers. Cross-type coercion (string → Int64, int → VarChar, string → Bool) is not documented behavior.
Expected Behavior
Scalar field types should enforce strict type checking on both gRPC and REST paths. The fix for #47766 should extend to the REST API.
Number Field docs: defines INT64/INT16/BOOL/DOUBLE as distinct numeric types with specific value semantics — cross-type coercion is not documented.
Control case (step 3) shows the REST path does validate non-coercible types — it only misses types where silent coercion "works" (numeric strings → int, int → string, string → bool).
Is there an existing issue for this?
Environment
Current Behavior
The REST API v2
entities/insertendpoint silently coerces compatible-but-wrong types across scalar fields:"123"(string)123(int)"true"(string)"1.5"(string)Issue #47766 fixed type validation on the gRPC path (milestone 2.6.14, closed 2026-05-08), but the REST API v2 path still exhibits the same behavior in v3.0.0.
The Number Field documentation defines each scalar type with a specific data type code (
INT64,BOOL,FLOAT, etc.) and describes them as storing specific value types — integers, booleans, or floating-point numbers. Cross-type coercion (string → Int64, int → VarChar, string → Bool) is not documented behavior.Expected Behavior
Scalar field types should enforce strict type checking on both gRPC and REST paths. The fix for #47766 should extend to the REST API.
Steps To Reproduce
Milvus Log
REST v2 path (accepted - no error logged):
Note the empty
[error=]field - the REST path treats the invalid input as successful.gRPC path (correctly rejected - pymilvus raises client-side):
Run
docker logs milvus-standalonefor full logs.Anything else?
INT64/INT16/BOOL/DOUBLEas distinct numeric types with specific value semantics — cross-type coercion is not documented.