> ## Documentation Index
> Fetch the complete documentation index at: https://docs.maia.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# AI Classify

export const ComponentMetadata = ({warehouses, unsupportedWarehouses = [], componentType, connectionInputs, connectionOutputs}) => {
  const allWarehouses = [...warehouses.map(w => ({
    name: w,
    supported: true
  })), ...unsupportedWarehouses.map(w => ({
    name: w,
    supported: false
  }))];
  return <div style={{
    background: 'var(--colors-background-light, #f9fafb)',
    border: '1px solid var(--colors-border-default, #e5e7eb)',
    borderRadius: '12px',
    padding: '20px 28px',
    marginBottom: '28px',
    boxShadow: '0 1px 4px rgba(0,0,0,0.10)'
  }}>
      <table style={{
    width: '100%',
    borderCollapse: 'collapse'
  }}>
        <tbody>
          <tr>
            <td style={{
    fontWeight: '600',
    paddingRight: '32px',
    paddingBottom: '14px',
    whiteSpace: 'nowrap',
    verticalAlign: 'middle',
    width: '180px'
  }}>Project Availability</td>
            <td style={{
    paddingBottom: '14px',
    verticalAlign: 'middle'
  }}>
              <div style={{
    display: 'flex',
    flexWrap: 'wrap',
    gap: '8px'
  }}>
                {allWarehouses.map((w, i) => <span key={i} style={{
    background: w.supported ? '#dcfce7' : '#fee2e2',
    color: w.supported ? '#15803d' : '#b91c1c',
    border: `1px solid ${w.supported ? '#bbf7d0' : '#fca5a5'}`,
    borderRadius: '9999px',
    padding: '3px 12px',
    fontSize: '0.85rem',
    fontWeight: '500',
    whiteSpace: 'nowrap'
  }}>
                    {w.name} {w.supported ? '✅' : '❌'}
                  </span>)}
              </div>
            </td>
          </tr>
          <tr>
            <td style={{
    fontWeight: '600',
    paddingRight: '32px',
    paddingBottom: '14px',
    whiteSpace: 'nowrap',
    verticalAlign: 'middle'
  }}>Component Type</td>
            <td style={{
    paddingBottom: '14px',
    verticalAlign: 'middle'
  }}>{componentType}</td>
          </tr>
          <tr>
            <td style={{
    fontWeight: '600',
    paddingRight: '32px',
    paddingBottom: '14px',
    whiteSpace: 'nowrap',
    verticalAlign: 'middle'
  }}>Connection Inputs</td>
            <td style={{
    paddingBottom: '14px',
    verticalAlign: 'middle'
  }}>{connectionInputs}</td>
          </tr>
          <tr>
            <td style={{
    fontWeight: '600',
    paddingRight: '32px',
    whiteSpace: 'nowrap',
    verticalAlign: 'middle'
  }}>Connection Outputs</td>
            <td style={{
    verticalAlign: 'middle'
  }}>{connectionOutputs}</td>
          </tr>
        </tbody>
      </table>
    </div>;
};

<ComponentMetadata warehouses={["Databricks"]} unsupportedWarehouses={["Snowflake", "Amazon Redshift", "BigQuery"]} componentType="Transformation" connectionInputs="One" connectionOutputs="Unlimited" />

<Info>
  Production use of this feature is available for specific editions only. [Contact our sales team](https://www.matillion.com/contact) for more information.
</Info>

The **AI Classify** transformation component uses the Databricks [ai\_classify()](https://docs.databricks.com/en/sql/language-manual/functions/ai_classify.html) function to invoke generative AI to classify input text according to labels you provide. This function uses a Databricks chat model serving endpoints made available by [Databricks Foundation Model APIs](https://docs.databricks.com/en/machine-learning/foundation-models/index.html).

A label is a brief, descriptive string such as "urgent", "not urgent", etc., that you provide when you configure the component. The component's input is a column of text data, and the output is a new column named `classification_<input-column-name>`, that contains the most appropriate label from the provided list.

<Note>
  Make sure you have read and understand the [Requirements](https://docs.databricks.com/en/sql/language-manual/functions/ai_classify.html#requirements) set out by Databricks before using this component.
</Note>

### Use case

AI Classify gives you a flexible, intelligent way to automate categorization tasks for unstructured data like text, descriptions, emails, or support tickets. Some typical uses for this include:

* Automatically assign incoming support ticket categories like "Billing", "Technical Issue", or "Account Access", to enable suitable routing of the ticket.
* Categorize customer feedback such as survey comments or NPS responses into themes like "Price", "Features", "Usability", or "Customer Service", to enable structured insights from large volumes of qualitative feedback.

***

## Properties

<ResponseField name="Name" type="string" required>
  A human-readable name for the component.
</ResponseField>

{/* <!-- param-start:[column] | warehouses: [databricks] --> */}

<ResponseField name="Column" type="drop-down" required>
  Select an input column that contains the text to be classified.

  <Note>
    The component will operate on only a single column of the input.
  </Note>
</ResponseField>

{/* <!-- param-start:[classificationLabels] | warehouses: [databricks] --> */}

<ResponseField name="Classification Labels" type="column editor" required>
  Enter a list of labels which will be used to classify the input text. You must provide at least two labels, and no more than 20.

  Enter one label per row in the **Classification Labels** dialog. Click **+** to add a new row.

  You can choose to populate the list of labels dynamically using a [grid variable](/docs/guides/grid-variables). Select the **Use Grid Variable** checkbox at the bottom of the **Classification Labels** dialog.
</ResponseField>

{/* <!-- param-start:[includeInputColumns] | warehouses: [databricks] --> */}

<ResponseField name="Include Input Columns" type="boolean" required>
  * **Yes:** Outputs both your source input columns *and* the classification label column. This will also include those input columns *not* selected in **Column**.
  * **No:** Only includes the classification label columns.
</ResponseField>
