{"record":{"id":"04a64120385cdd93","repo":"HKUDS/Vibe-Trading","slug":"flows-columns-must-be-an-object-mapping-field-to-c","errorCode":null,"errorMessage":"flows_columns must be an object mapping field to column name","messagePattern":"flows_columns must be an object mapping field to column name","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"agent/src/tools/cashflow_analytics_tool.py","lineNumber":360,"sourceCode":"\n    Returns:\n        A ``CashFlowSeries``, or ``None`` when no flows were supplied.\n\n    Raises:\n        ValueError: If both sources were given, an inline record is malformed,\n            or a currency is missing. File problems surface as\n            ``CashFlowIngestError``, which is a ``ValueError``.\n    \"\"\"\n    inline = kwargs.get(\"flows\")\n    path = kwargs.get(\"flows_path\")\n    if inline and path:\n        raise ValueError(\"pass either flows or flows_path, not both\")\n    currency = kwargs.get(\"currency\")\n\n    if path:\n        columns = kwargs.get(\"flows_columns\")\n        if columns is not None and not isinstance(columns, dict):\n            raise ValueError(\"flows_columns must be an object mapping field to column name\")\n        return load_cashflows(\n            str(path),\n            columns=columns,\n            currency=currency,\n            default_kind=kwargs.get(\"flows_default_kind\"),\n            date_format=kwargs.get(\"flows_date_format\"),\n            invert_sign=bool(kwargs.get(\"flows_invert_sign\", False)),\n        )\n\n    if not inline:\n        return None\n    if not isinstance(inline, list):\n        raise ValueError(\"flows must be an array of {date, amount, kind} objects\")\n    if len(inline) > _MAX_INLINE_FLOWS:\n        raise ValueError(f\"flows may contain at most {_MAX_INLINE_FLOWS} entries\")\n\n    records: list[CashFlow] = []\n    for index, item in enumerate(inline):","sourceCodeStart":342,"sourceCodeEnd":378,"githubUrl":"https://github.com/HKUDS/Vibe-Trading/blob/80ffdda44c5c4db0dd84d70e051cca591cea67df/agent/src/tools/cashflow_analytics_tool.py#L342-L378","documentation":"When loading flows from flows_path, an optional flows_columns mapping (field -> CSV column name) must be a dict/object if provided. Passing a list, string, or other type raises this error before file parsing begins.","triggerScenarios":"execute(flows_path=\"cf.csv\", flows_columns=[\"date\",\"amount\"]) or flows_columns=\"date_col\" — anything not isinstance(columns, dict).","commonSituations":"Confusion between a column-name list and a field->column mapping; YAML/JSON config parsed into a list instead of an object; agent guessing the parameter shape.","solutions":["Pass a dict like {\"date\": \"Date\", \"amount\": \"Amount\", \"kind\": \"Type\"} or omit flows_columns entirely to use defaults"],"exampleFix":"# before\nflows_columns=[\"Date\", \"Amount\", \"Kind\"]\n# after\nflows_columns={\"date\": \"Date\", \"amount\": \"Amount\", \"kind\": \"Kind\"}","handlingStrategy":"type-guard","validationCode":"cols = kwargs.get(\"flows_columns\")\nif cols is not None and not isinstance(cols, dict):\n    raise TypeError(\"flows_columns must be a dict\")","typeGuard":"from typing import TypeGuard\n\ndef is_column_mapping(v: object) -> TypeGuard[dict[str, str]]:\n    return isinstance(v, dict) and all(isinstance(k, str) and isinstance(x, str) for k, x in v.items())","tryCatchPattern":null,"preventionTips":["Remember flows_columns is a field->column-name mapping, not a list"],"tags":["cashflow-analytics","flows-columns","type-validation","python"],"backgroundTag":"wrong-parameter-type","analyzedSha":"80ffdda44c5c4db0dd84d70e051cca591cea67df","analyzedAt":"2026-08-28T12:46:38.989Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}