OpenBB-finance/OpenBB · error · ValueError
Only 2D arrays are supported.
Error message
Only 2D arrays are supported.
What it means
ValueError from ndarray_to_basemodel: it maps a NumPy array's rows to Data records ({'column_0': v0, 'column_1': v1, ...}) and only supports 2D arrays (rows x columns). Passing a 1D vector, a 3D tensor, or a 0D scalar triggers this before any conversion happens.
Source
Thrown at openbb_platform/core/openbb_core/app/utils.py:124
raise ValueError(f"Unsupported list item type: {type(item)}")
return base_models
def dict_to_basemodel(data_dict: dict) -> Data:
"""Convert a dictionary to BaseModel."""
try:
return Data(**data_dict)
except ValidationError as e:
raise ValueError(
f"Validation error when converting dict to BaseModel: {e}"
) from e
def ndarray_to_basemodel(array: "ndarray") -> list[Data]:
"""Convert a NumPy array to list of BaseModel."""
# Assuming a 2D array where rows are records
if array.ndim != 2:
raise ValueError("Only 2D arrays are supported.")
return [
Data(**{f"column_{i}": value for i, value in enumerate(row)}) for row in array
]
def convert_to_basemodel(data) -> Data | list[Data]:
"""Dispatch function to convert different types to BaseModel."""
# pylint: disable=import-outside-toplevel
from numpy import ndarray
from pandas import DataFrame, Series
if isinstance(data, Data) or issubclass(type(data), Data):
return data
if isinstance(data, list):
return list_to_basemodel(data)
if isinstance(data, dict):
return dict_to_basemodel(data)
if isinstance(data, (DataFrame, Series)):View on GitHub (pinned to 3e071fcc2c)
Solutions
- Reshape to 2D so each row is one record: arr.reshape(-1, 1) for a single column vector
- Or convert to a pandas DataFrame with named columns and pass that instead
- squeeze() 0-d/1-item arrays before conversion
Example fix
# before import numpy as np models = convert_to_basemodel(np.array([1.0, 2.0, 3.0])) # after import numpy as np models = convert_to_basemodel(np.array([1.0, 2.0, 3.0]).reshape(-1, 1))
Defensive patterns
Strategy: type-guard
Validate before calling
import numpy as np
def array_ok(arr: 'np.ndarray') -> bool:
return getattr(arr, 'ndim', None) == 2 Type guard
def is_2d_array(x) -> bool:
import numpy as np
return isinstance(x, np.ndarray) and x.ndim == 2 Try / catch
try:
models = ndarray_to_basemodel(arr)
except ValueError as e:
if 'Only 2D arrays' in str(e):
models = ndarray_to_basemodel(np.atleast_2d(arr).reshape(-1, arr.shape[-1] if arr.ndim else 1))
else:
raise Prevention
- Reshape vectors to (-1, 1) before feeding pipelines
- Prefer DataFrames with named columns over raw ndarrays
- squeeze() guarded by ndim checks after indexing
When it happens
Trigger: convert_to_basemodel(numpy.array([1, 2, 3])) (1D), a 3D array from a model output, or a masked/scalar 0-d array returned by a custom pipeline fed into OpenBB result processing.
Common situations: Feeding raw NumPy vectors (e.g. a single column of prices) instead of record matrices; ML model outputs with extra dimensions; squeeze() forgotten after indexing producing 0-d arrays.
Related errors
- Unsupported list item type: {type(item)}
- Validation error when converting dict to BaseModel: {e}
- Unsupported data type: {type(data)}
- Unsupported file format. Please use .json or .env files.
- Failed to get Jupyter URL
AI-assisted analysis of OpenBB-finance/OpenBB@3e071fcc2c (2026-08-14).
Data as JSON: /api/errors/0bcd3cdea848b897.
Report an issue: GitHub.