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

  1. Pass a positive vector_size matching the embedding model (e.g. 1536 for ada-002).
  2. Validate config: assert vector_size > 0 before constructing the store.
  3. Default to the embedding generator's documented dimension.
  4. 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

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


AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13). Data as JSON: /api/errors/a320517ac02272db. Report an issue: GitHub.