Call Generative AI Models in Batch Transform Scripts

Call generative AI models from your code extension batch transform scripts to enrich your data. Send prompts and data from a data lake object (DLO) or data model object (DMO) to a configured AI model, then write the generated content to a target DLO or DMO. Use this capability to summarize, classify, or enhance records during batch transformations.

Rate limits for LLM calls apply as described in Large Language Model Limits. To increase throughput for larger datasets:

  • Repartition your DataFrame with .repartition() to spread the workload across more executors. Without repartitioning, requests can run serially on a few executors and create a bottleneck.
  • Increase the compute type to a larger size so that more CPUs are available to share the load.
Edition Table
Available in: Developer, Enterprise, Performance, and Unlimited Editions. See Data 360 edition availability.
Permission Sets Needed
To call generative AI models from custom scripts:Permission set:
  • Data Cloud Architect

Prerequisites 

Use LLM Gateway in Your Script 

For a reference implementation, see example/payload/entrypoint.py in the initialized script package.

Run Single Queries 

Use llm_gateway_generate_text() to send a single prompt to a configured AI model for one-off text generation tasks that don’t require iterating over DataFrame rows.

1response = client.llm_gateway_generate_text(
2    "Summarize the key benefits of Data 360 in one paragraph.",
3    "sfdc_ai__DefaultGPT54"
4)
5print(response)

Generate Text for Each Record 

Use llm_gateway_generate_text_col() to generate AI content for each record in your DataFrame. This built-in user-defined function (UDF) applies directly to DataFrame columns to process many rows in a single transformation. The function returns a struct containing the response and status information for each row.

  1. Read your source data from a DLO or DMO.

    1from datacustomcode.client import Client, llm_gateway_generate_text_col
    2from datacustomcode.io.writer.base import WriteMode
    3from pyspark.sql.functions import col
    4
    5def main():
    6    client = Client()
    7    df = client.read_dlo("Customer_Data__dll")
  2. Use llm_gateway_generate_text_col() to generate text for each record. Build your prompt template with placeholders in curly braces ({field_name}), then map those placeholders to your DataFrame columns.

    1df_enriched = df.withColumn(
    2        "personalized_greeting__c",
    3        llm_gateway_generate_text_col(
    4            "Greet {first} {last} welcoming them to the great city of {city}. Tell them what this city has to offer.",
    5            {"first": col("first_name__c"), "last": col("last_name__c"), "city": col("city__c")},
    6            model_id="sfdc_ai__DefaultGPT54",
    7        )["response"],
    8    )

    The method returns a column with these fields: status, response, error_code, and error_message. Per-row failures don’t stop the entire job. To extract the field you want, use bracket notation (for example, [“response”]).

  3. Write the enriched data back to your target DLO or DMO.

    1client.write_to_dlo("Customer_Data_Enriched__dll", df_enriched, write_mode=WriteMode.APPEND)

Validate LLM Gateway Calls Locally 

Before you deploy your script to Data 360, test it locally against your sandbox.

  1. From your script package root, confirm that your entrypoint file is ready for local validation.

  2. Log in to your org using the external client app credentials.

    1sf org login web \
    2  --alias myorg \
    3  --instance-url https://{MY_DOMAIN_URL} \
    4  --client-id {CONSUMER_KEY} \
    5  --scopes "sfap_api api"

    Replace {MY_DOMAIN_URL} with your org domain and {CONSUMER_KEY} with your external client app consumer key.

  3. Run the script locally to test it against data in Data 360.

    1sf data-code-extension script run --entrypoint ./payload/entrypoint.py --target-org myorg

See Also