microsoft/semantic-kernel · error · MemoryConnectorInitializationError
Vector dimension must be a positive integer
Error message
Vector dimension must be a positive integer
What it means
Raised by RedisMemoryStore.__init__() when vector_size <= 0, before the Redis client is created. MemoryConnectorInitializationError with literal message 'Vector dimension must be a positive integer'. vector_size defaults to 1536 but is overridden by the caller.
Source
Thrown at python/semantic_kernel/connectors/memory_stores/redis/redis_memory_store.py:103
vector_distance_metric (str): Metric for measuring vector distances, defaults to COSINE
vector_type (str): Vector type, defaults to FLOAT32
vector_index_algorithm (str): Indexing algorithm for vectors, defaults to HNSW
query_dialect (int): Query dialect, must be 2 or greater for vector similarity searching, defaults to 2
env_file_path (str | None): Use the environment settings file as a fallback to
environment variables, defaults to False
env_file_encoding (str | None): Encoding of the environment settings file, defaults to "utf-8"
"""
try:
redis_settings = RedisSettings(
connection_string=connection_string,
env_file_path=env_file_path,
env_file_encoding=env_file_encoding,
)
except ValidationError as ex:
raise MemoryConnectorInitializationError("Failed to create Redis settings.", ex) from ex
if vector_size <= 0:
raise MemoryConnectorInitializationError("Vector dimension must be a positive integer")
self._database = redis.Redis.from_url(redis_settings.connection_string.get_secret_value())
self._ft = self._database.ft
self._query_dialect = query_dialect
self._vector_distance_metric = vector_distance_metric
self._vector_index_algorithm = vector_index_algorithm
self._vector_type_str = vector_type
self._vector_type = np.float32 if vector_type == "FLOAT32" else np.float64
self._vector_size = vector_size
async def close(self):
"""Closes the Redis database connection."""
logger.info("Closing Redis connection")
self._database.close()
async def create_collection(self, collection_name: str) -> None:
"""Creates a collection.View on GitHub (pinned to c028a0c7dc)
Solutions
- Pass a positive vector_size matching the embedding model (e.g. 1536 for ada-002).
- Validate config: assert vector_size > 0 before constructing the store.
- Default to the embedding generator's documented dimension.
- Fix the upstream source of the value (env var, settings).
Example fix
// before
store = RedisMemoryStore(conn_str, vector_size=int(os.getenv('DIM') or 0))
// after
dim = int(os.getenv('DIM') or 1536)
assert dim > 0
store = RedisMemoryStore(conn_str, vector_size=dim) Defensive patterns
Strategy: validation
Validate before calling
assert isinstance(vector_size, int) and vector_size > 0, 'vector_size must be positive' store = RedisMemoryStore(connection_string=conn, vector_size=vector_size)
Type guard
def valid_vector_size(n) -> bool:
return isinstance(n, int) and n > 0 Prevention
- Default vector_size to the embedding model's real dimension (1536), never 0.
- Validate env-sourced ints before construction.
- Fail in config loading rather than at RedisMemoryStore init.
When it happens
Trigger: Constructing RedisMemoryStore(connection_string=..., vector_size=N) with N <= 0; commonly when N is computed from an unset config value.
Common situations: Unset embedding-dimension setting coerced to 0; negative value from a misparsed env var; logic that derives vector_size from a failed model probe.
Related errors
- Failed to create Redis settings.
- Dimensionality of {default_dimensionality} exceeds the maxim
- Dimensionality of {dimension_num} exceeds the maximum allowe
- Dimensionality must be a positive integer.
- Failed to create collection {collection_name}
AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13).
Data as JSON: /api/errors/a320517ac02272db.
Report an issue: GitHub.