> This page is for Structured Data Models Client.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/sdgm/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/sdgm/_mcp/server.

# How Kumo Tabular Works

> Understand in-context prediction and the request model sdm-client shares across structured-data foundation models

Kumo Tabular is a pre-trained structured-data foundation model. Instead of training a task-specific model, you give it labelled rows and the rows you want scored, and it answers in one inference pass.

## One request type, for every model

sdm-client builds one `Request` type for both a single-table question and a multi-table one. A `Request` is the wire envelope minus the two things that belong to the call rather than the question: which model answers it, and which output fields you want back. Kumo Tabular is simply the case where the schema has one table and no relationships — not a second system.

```text
labelled rows + rows to score → Request → SDMClient.predict(request, model=KumoTabular()) → PredictionResult
```

## In-context prediction

A `Request` has two halves:

* **`context`** — rows where the answer is already known. The model learns from these.
* **`predict`** — rows being asked about, including rows the model has never seen.

The rows being scored need not appear in the labelled half. That is the point: Kumo Tabular exists to score rows it has never seen, without a training step.

## The task kind is stated, never guessed

Kumo Tabular's NIM accepts only the coarse `classification` or `regression` task kind and resolves binary versus multiclass itself from the context. sdm-client sends `classification` as given and never narrows it — inferring binary-versus-multiclass from a column's cardinality is a guess, and it is wrong exactly when a binary target looks categorical.

## What Kumo Tabular can and cannot read

|                   | Kumo Tabular                                                          |
| ----------------- | --------------------------------------------------------------------- |
| Tables            | One, in memory                                                        |
| Relationships     | None — a request carrying related tables is refused before it is sent |
| Task kinds        | `classification`, `regression`                                        |
| Output fields     | `prediction`, `probabilities`, `quantiles`                            |
| Native dependency | None — pure Python, runs anywhere                                     |

> **Note**
>
> sdm-client also serves `kumo-relational`, for several related tables joined as a graph — in memory or sampled from a warehouse in place. The two models read a `Request` differently, so a request is gathered for one of them; naming `KumoTabular()` on a request gathered for the other is refused before anything is sent. This section covers the Kumo Tabular workflow only; see [Kumo Relational](/sdgm/kumo-relational/about-kumo-relational/overview).

## Standard workflow

#### [Install and Connect](/sdgm/kumo-tabular/get-started/sdk-getting-started)

Install sdm-client and verify the NIM endpoint.

#### [Run the Quickstart](/sdgm/kumo-tabular/get-started/quickstart)

Score a labelled table in ten lines.

#### [Prepare Data](/sdgm/kumo-tabular/user-guide/prepare-data/data-requirements)

Build a `Schema` from a DataFrame and review inferred column meaning.

#### [Make Predictions](/sdgm/kumo-tabular/user-guide/make-predictions/make-predictions)

Build a `Request` directly, or ask in PQL, and call `predict()`.

#### [Prediction Results](/sdgm/kumo-tabular/user-guide/work-with-prediction-results/prediction-results)

Interpret the DataFrame columns returned by the SDK.

#### [Limits](/sdgm/kumo-tabular/user-guide/configure-and-scale/limits)

Understand the context-row cap and how to choose it.