HKUDS/Vibe-Trading · error · ValueError

flows[ ] is missing

Error message

flows[{index}] is missing {exc.args[0]!r}

What it means

While constructing a CashFlow from a flow dict, a required key ('date', 'amount', or 'kind') was absent and raised KeyError, which is re-raised with the flow's index and the missing key name. This is a per-row field-level validation failure, distinct from shape/type errors.

Solutions

  1. Add the missing key named in the error message (the !r in the message shows exactly which key is absent)
  2. Normalize keys to lowercase {date, amount, kind} before calling

Example fix

# before
{"date": "2024-01-01", "amount": 100, "currency": "USD"}
# after
{"date": "2024-01-01", "amount": 100, "kind": "inflow", "currency": "USD"}
Defensive patterns

Strategy: validation

Validate before calling

required = {"date", "amount", "kind"}
missing = [i for i, f in enumerate(flows) if not required <= f.keys()]
if missing:
    raise ValueError(f"flows missing required keys at indices {missing}")

Type guard

from typing import TypeGuard

def is_complete_flow(item: dict) -> TypeGuard[dict]:
    return {"date", "amount", "kind"} <= item.keys()

Try / catch

try:
    result = tool.execute(**kwargs)
except ValueError as exc:
    if "is missing" in str(exc):
        key = exc.args[0].split("'")[1]  # patch payload and retry
    raise

Prevention

When it happens

Trigger: flows=[{"date": "2024-01-01", "amount": 100}] missing 'kind'; misspelled keys like "amt" or "Date" so item["amount"]/item["date"] misses.

Common situations: Key casing mismatches between the data source and the tool schema; optional-looking fields omitted in sparse records; LLM tool calls trimming fields it deemed optional.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of HKUDS/Vibe-Trading@80ffdda44c (2026-08-28). Data as JSON: /api/errors/937d2bf5679e7910. Report an issue: GitHub.

Appendix: source

Thrown at agent/src/tools/cashflow_analytics_tool.py:397

        if not isinstance(item, dict):
            raise ValueError(f"flows[{index}] must be an object")
        row_currency = item.get("currency") or currency
        if not row_currency:
            raise ValueError(
                f"flows[{index}] has no currency and no top-level currency was "
                "given; currency is never defaulted"
            )
        try:
            records.append(
                CashFlow(
                    date=item["date"],
                    amount=item["amount"],
                    kind=item["kind"],
                    currency=row_currency,
                )
            )
        except KeyError as exc:
            raise ValueError(f"flows[{index}] is missing {exc.args[0]!r}") from exc
        except ValueError as exc:
            raise ValueError(f"flows[{index}]: {exc}") from exc
    return CashFlowSeries(tuple(records))


def _coerce_flow_timing(raw: Any) -> str:
    """Validate the flow-timing token.

    Args:
        raw: Value supplied for ``flow_timing``; ``None`` selects the default.

    Returns:
        Either :data:`~src.quantlib.performance.FLOW_TIMING_END` or
        :data:`~src.quantlib.performance.FLOW_TIMING_START`.

    Raises:
        ValueError: If the token is not one of the two recognised values.
    """

View on GitHub (pinned to 80ffdda44c)