> ## 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.

# Cortex Completions

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={["Snowflake"]} unsupportedWarehouses={["Databricks", "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 [Cortex Completions](https://docs.snowflake.com/en/sql-reference/functions/complete-snowflake-cortex) transformation component uses [Snowflake Cortex](https://www.snowflake.com/en/data-cloud/cortex/) to receive a prompt and then generate a response (a completion) using your chosen supported language model.

To use this component, you must use a Snowflake role that has been granted the [SNOWFLAKE.CORTEX\_USER database role](https://docs.snowflake.com/en/sql-reference/snowflake-db-roles#label-snowflake-db-roles-cortex-schema). Read [Required Privileges](https://docs.snowflake.com/en/user-guide/snowflake-cortex/llm-functions#label-cortex-llm-privileges) to learn more about granting this privilege.

To learn more about Snowflake Cortex, such as availability, usage quotas, managing costs, and more, read [Large Language Model (LLM) Functions (Snowflake Cortex)](https://docs.snowflake.com/en/user-guide/snowflake-cortex/llm-functions).

### Use case

This component enables you to integrate generative AI output into your transformation pipeline to enrich your data. For example, you can use it to:

* Analyze customer feedback from reviews or survey responses—the [example](#example) below demonstrates this use case.
* Automatically classify incoming documents in the legal or financial sector.
* Convert medical notes from a range of formats into standardized ICD codes.

***

## Properties

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

{/* <!-- param-start:[model] | warehouses: [snowflake] --> */}

<ResponseField name="Model" type="drop-down" required>
  Select a language model from the drop-down menu. Review the [Snowflake documentation](https://docs.snowflake.com/en/sql-reference/functions/complete-snowflake-cortex#arguments) for supported models, [costs](https://docs.snowflake.com/en/user-guide/snowflake-cortex/llm-functions#label-cortex-llm-cost-considerations), and [quotas](https://docs.snowflake.com/en/user-guide/snowflake-cortex/llm-functions#label-cortex-llm-quotas).

  Read [Availability](https://docs.snowflake.com/en/user-guide/snowflake-cortex/llm-functions#availability) for details about which models are available in which regions.
</ResponseField>

{/* <!-- param-start:[systemPrompt] | warehouses: [snowflake] --> */}

<ResponseField name="System Prompt" type="text editor">
  An initial plain-English prompt to your chosen language model to provide the model with background information and instructions for a style of response. An example of response steps offered by Snowflake is "Respond in the style of a pirate."

  The language model doesn't generate a response to your system prompt, but to your user prompt. The system prompt informs the model on *how* to answer the user prompt.

  Only one system prompt may be provided.

  To use variables in this field, type the name of the variable prefixed by the dollar symbol and surrounded by \{ } brackets, as follows: `${variable}`. Once you type `${`, a drop-down list of autocompleted suggested variables will appear. This list updates as you type; for example, if you type `${date`, functions and variables containing `date` will be listed.
</ResponseField>

{/* <!-- param-start:[userPrompt] | warehouses: [snowflake] --> */}

<ResponseField name="User Prompt" type="text editor" required>
  A plain-text prompt provided by the user. This prompt should be contextually relatable to the system prompt (if used).

  To use variables in this field, type the name of the variable prefixed by the dollar symbol and surrounded by \{ } brackets, as follows: `${variable}`. Once you type `${`, a drop-down list of autocompleted suggested variables will appear. This list updates as you type; for example, if you type `${date`, functions and variables containing `date` will be listed.
</ResponseField>

{/* <!-- param-start:[inputs] | warehouses: [snowflake] --> */}

<ResponseField name="Inputs" type="column editor">
  Select the source columns to feed as input to the model.

  * **Column Name:** A column from the input table.
  * **Descriptive Name (optional):** An alternate descriptive name to better contextualize the column. Recommended if your column names are low-context.
</ResponseField>

{/* <!-- param-start:[temperature] | warehouses: [snowflake] --> */}

<ResponseField name="Temperature" type="floating point number">
  A value between 0 and 1 (inclusive) to control the randomness of the output of the language model. Higher temperatures (for example, 0.8) will result in more diverse and random outputs. Lower temperatures (for example, 0.2) make the output more focused and deterministic.
</ResponseField>

{/* <!-- param-start:[topP] | warehouses: [snowflake] --> */}

<ResponseField name="Top P" type="floating point number">
  A value between 0 and 1 (inclusive) to control the randomness of the output of the language model—typically used as an alternative to temperature.

  Top P restricts the set of possible tokens that the mode will output, whereas Temperature influences which tokens are chosen at each step.

  Many LLM models recommend altering Top P *or* Temperature, but *not* both.
</ResponseField>

{/* <!-- param-start:[maxTokens] | warehouses: [snowflake] --> */}

<ResponseField name="Max Tokens" type="integer">
  Set the maximum number of output tokens in the response. A small number of max tokens can result in truncated responses.
</ResponseField>

{/* <!-- param-start:[guardrails] | warehouses: [snowflake] --> */}

<ResponseField name="Guardrails" type="boolean">
  When set to **Yes**, responses that could be considered unsafe or harmful will be filtered out of the model's output via [Cortex Guard](https://docs.snowflake.com/en/user-guide/snowflake-cortex/aisql#label-cortex-llm-complete-cortex-guard).
</ResponseField>

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

<ResponseField name="Include Input Columns" type="boolean" required>
  * **Yes:** Outputs both your source input columns *and* the new completion columns. This will also include those input columns *not* selected in **Inputs**.
  * **No:** Only outputs the new completion columns.
</ResponseField>

## Explanation of output

This component returns a string representation of a JSON object, containing the following keys:

| Key                | Description                                                                                                                                                                                     |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| choices            | An array of the model's responses. (Currently, only one response is provided.) Each response is an object containing a "messages" key whose value is the model's response to the latest prompt. |
| created            | UNIX timestamp (seconds since midnight, January 1, 1970) of when the response was generated.                                                                                                    |
| model              | The language model that created the response.                                                                                                                                                   |
| usage              | An object recording the number of tokens consumed and generated by this completion.                                                                                                             |
| completion\_tokens | The number of tokens in the generated response.                                                                                                                                                 |
| prompt\_tokens     | The number of tokens in the prompt.                                                                                                                                                             |
| total\_tokens      | Sum of completion\_tokens and prompt\_tokens.                                                                                                                                                   |

***

## Example

A coffee shop has been collecting customer reviews left on a web site, and wants to distill some key pieces of information from these reviews. The primary information wanted is: was the customer satisfied with the service?

Input data:

| COFFEE TYPE | REVIEW                                                                                                                                                    |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Espresso    | The espresso was bold and aromatic, but a tad too bitter for my taste. The barista was friendly, though, and the atmosphere was cozy.                     |
| Cappuccino  | My cappuccino was perfectly balanced, with a creamy foam that melted in my mouth. However, the service was a bit slow, and the coffee wasn't piping hot.  |
| Latte       | The latte was velvety smooth, but it lacked the flavor I was hoping for. The barista was friendly, and the ambiance was pleasant.                         |
| Americano   | The Americano was strong and robust, just how I like it. However, the service was a bit impersonal, and the coffee could have been hotter.                |
| Mocha       | Indulging in the mocha was like sipping on liquid chocolate bliss. The service, however, was lacking, with long wait times and a disorganized atmosphere. |

The shop can use the Cortex Completions component to ask a question (prompt) and receive an answer based on the review text given to the component.

Cortex Completions component properties:

* **Model:** llama2-70b-chat
* **System Prompt:** \[blank]
* **User Prompt:** Was the customer satisfied with the service?
* **Inputs:**
  * **Column Name:** REVIEW
  * **Descriptive Name:** \[blank]
* **Temperature:** \[blank]
* **Top P:** \[blank]
* **Max Tokens:** 6
* **Include Input Columns:** YES

By setting **Include Input Columns** to YES, the original columns from the table will be kept as part of the pipeline run, and the completion\_result column is appended to the end of the table.

Output data (with completion\_result column abbreviated for ease of illustration):

| COFFEE TYPE | REVIEW                                                                                                                                                    | completion\_result                                           |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ |
| Espresso    | The espresso was bold and aromatic, but a tad too bitter for my taste. The barista was friendly, though, and the atmosphere was cozy.                     | `{"messages": " The customer was partially satisfied with"}` |
| Cappuccino  | My cappuccino was perfectly balanced, with a creamy foam that melted in my mouth. However, the service was a bit slow, and the coffee wasn't piping hot.  | `{"messages": " The customer was partially satisfied with"}` |
| Latte       | The latte was velvety smooth, but it lacked the flavor I was hoping for. The barista was friendly, and the ambiance was pleasant.                         | `{"messages": " The customer was partially satisfied with"}` |
| Americano   | The Americano was strong and robust, just how I like it. However, the service was a bit impersonal, and the coffee could have been hotter.                | `{"messages": " No, the customer was not"}`                  |
| Mocha       | Indulging in the mocha was like sipping on liquid chocolate bliss. The service, however, was lacking, with long wait times and a disorganized atmosphere. | `{"messages": " No, the customer was not"}`                  |
