Your Databricks AI Functions need Runtime 17.3 LTS by January 2027, even if 15.4 is still supported
From January 2027, AI Functions called in SQL return an error on any Databricks Runtime below 17.3 LTS. That catches 15.4 LTS and 16.4 LTS clusters that are still in support. Find the classic clusters and jobs that call them, and test the runtime jump before the holidays.
part 35 of 37 · Platform releases, explained from scratchthe ideaSame SQL, same ai_query call. The runtime decides whether it still runs.
after reading, you can- Spot the clusters and jobs still calling AI Functions on a runtime older than 17.3 LTS, before they fail
- Plan the jump from 15.4 or 16.4 LTS to 17.3 LTS without breaking the rest of the job
- Lock new compute onto a safe runtime with a cluster policy, so nobody builds the same problem again
If a Databricks notebook or job calls ai_querydefinitionThe general-purpose AI Function. You point it at a model serving endpoint with a prompt, and it runs that model over every row you give it. or another AI Function in SQL, the runtime version under it now matters. From January 2027, those calls return an error on anything below Runtime 17.3 LTS, including 15.4 LTS and 16.4 LTS, which are still in support. Find those clusters now and test the upgrade before your change freeze.
Older Databricks clusters can't call a model from SQL once January comes
Databricks lets you call an AI model straight from a SQL query. One line can read a support ticket and label it, or pull the policy number out of a claim letter. Those calls are AI Functions. Every Databricks cluster runs a version of the platform's engine, called the runtime, and teams often leave a cluster on the version it was built with for years. Databricks says that from January, AI Functions in SQL stop working on runtimes older than 17.3 LTS. Two older versions are still officially supported for months after that, which is the trap: a cluster can be fully supported and still have its AI step fail.
It's like a printer that still has a valid warranty but won't take the new ink cartridges. The printer isn't broken and the warranty still counts. It just can't do that one job any more until you replace it.
- Databricks platform admins
- Data engineers who own scheduled jobs
- Analysts with AI steps in notebooks
- ML and AI product owners
- Heads of data planning Q1 work
- FinOps owners tracking AI spend
Why a supported runtime can still break
Most teams plan runtime upgrades around end-of-support dates. That habit fails here. Runtime 15.4 LTSdefinitionLong-term support. Databricks fixes stability and security problems in an LTS runtime for three years after release. Other runtimes get six months, which is why an LTS is the one to build on. has support until 19 August 2027 and 16.4 LTS until 9 May 2028, so neither shows up on anyone's lifecycle report yet. Their AI FunctionsdefinitionSQL functions that hand your data to a model and put the answer back in the result. You'd use one to label tickets or pull fields out of documents without leaving the query. still stop in January.
When it stops, it isn't a slow degradation. Databricks says calls on runtimes below 17.3 are no longer supported and return an error. The ai_query documentation explains what an error does to the rest of the query. A failure from the model endpoint can come back as an empty result for one row when failOnError is set to false, but a row that fails for any other reason fails the entire query. This error comes from the runtime, so we'd expect it to fail the whole query. Plan for the task to stop, and for whatever reads its output table to wait.
The fix itself is easy to say: move the compute to 17.3 LTS or later. The work hides in what else changes on the way. A 15.4 LTS cluster moving to 17.3 LTS goes from Spark 3.5 to Spark 4.0, from Java 8 to Java 17 and from Scala 2.12 to 2.13. Code that ran untouched for two years tends to notice that.
-
01 The job starts as usual
The cluster comes up on 15.4 LTS, the runtime it was built with. Nothing on the job page has changed.
-
02 The AI step runs
One SQL cell calls ai_query on new support tickets and writes a label for each. Support's routing reads those labels first thing every morning.
-
03 January: the call is refused
Databricks has stopped supporting the call below 17.3, so the step gets an error back. Nothing about the SQL itself is wrong.
-
04 The task fails
The error doesn't come from the model endpoint, so we don't expect failOnError to catch it. Plan for the whole query to fail.
-
05 Move to 17.3 LTS or later
The same SQL works again once the cluster runs 17.3 LTS or newer. The rest of the job has to survive the jump too.
Databricks lists ai_similarity as the one exception, and the AI Functions REST API isn't affected either. Everything else that needs Runtime 15.4 LTS today moves up to 17.3 LTS. That includes ai_query, the function you'd use to call your own model endpoints.
What changes, and what stays the same
The change at a glance
Right now the docs say 15.4 LTS is the minimum. From January it's 17.3 LTS, and Databricks recommends 18.2 or above if you want the best performance and the newest features.
Calls on runtimes below 17.3 return an error. That includes both LTS lines that are otherwise still supported.
Databricks excludes ai_similarity from the new requirement, so it keeps working where it works today.
Databricks says the change doesn't touch the REST API. It covers SQL queries on older runtimes.
Since 1 November 2026, spend from task-specific AI Functions, including ai_parse_document, ai_extract and ai_classify, counts toward Unity Gateway budgets, in batch and real time. Moving a job doesn't move it outside the budget.
A job can now run ai_parse_document, ai_extract or ai_classify as a task of its own, without SQL, writing to a Unity Catalog table. It's Beta, so keep it away from anything regulated for now.
This part isn't new. AI Functions don't run on Classic SQL warehouses today, so anything there is already failing.
The wording in the notice is narrow on purpose. It talks about runtimes, and the compute that runs affected SQL queries. That points straight at classic clusters, where you pick the runtime yourself and it stays put until somebody changes it.
| Where the SQL runs | What decides its runtime | January risk |
|---|---|---|
| All-purpose cluster on classic compute | Whatever version someone picked when it was created | High if it's below 17.3 LTS |
| Jobs cluster on classic compute | The spark_version in the job definition or its policy | High if it's below 17.3 LTS |
| Serverless notebooks and jobs | Databricks upgrades it automatically. Recent releases include Runtime 19 updates | Low. Run one test call anyway |
| Lakeflow pipelines | The channel: CURRENT is Runtime 18, PREVIEW is Runtime 19 | Low, both are above 17.3 |
| Pro or serverless SQL warehouse | Databricks SQL versions on a Current or Preview channel (2026.44 on both now) | Low as we read it. The notice names runtime versions only |
| Classic SQL warehouse | Not relevant | AI Functions already don't run here |
The warehouse row is our reading. Databricks' notice talks about runtime versions, and a warehouse runs a Databricks SQL version on a channel you pick, rolled out in stages. If you want certainty, run one test query on each warehouse that uses AI Functions.
15.4 and 16.4 against 17.3: the jump you're actually making
| Runtime | 15.4 LTS | 16.4 LTS | 17.3 LTS |
|---|---|---|---|
| Released | Aug 2024 | May 2025 | Oct 2025 |
| Apache Spark | 3.5.0 | 3.5.2 | 4.0.0 |
| Scala | 2.12 | 2.12 or 2.13 (two images) | 2.13 only |
| Java | 8 (Zulu) | 17 (Zulu) | 17 (Zulu) |
| Python | 3.11 | 3.12 | 3.12 |
| End of support | 19 Aug 2027 | 9 May 2028 | 22 Oct 2028 |
| AI Functions in SQL after Jan 2027 | Error | Error | Work |
Read the table from left to right and the 15.4 LTS move looks like three upgrades stacked together. Java goes from 8 to 17, Scala from 2.12 to 2.13, and Spark crosses a major version. If you run your own JARs, each of those can break the build before a single query runs.
The 16.4 LTS move is gentler, but only if you used the Scala 2.13 image. Databricks' 16.4 notes say plainly that only Scala 2.13 is supported from Runtime 17 onward, and they tell you to test on the 2.13 image before you move. Teams that stayed on the 2.12 image are in the same boat as 15.4.
The dates that matter for this decision
- 22 Oct 2025Runtime 17.3 LTS released
Spark 4.0 underneath. It's been out for a year, so you're not the first to test on it.
- 1 Nov 2026AI Functions join Unity Gateway budgets
From then on, spend from task-specific functions, including the document and classification ones, counts toward the budget. Moving a job won't hide it.
- 5 Nov 2026Databricks posts the change
It's in the November release notes and on the What's coming page.
- 18 Nov 2026Variant shredding breaks 15.4 reads
Clusters on 15.4 can't read or write new VARIANT tables with shredding on, created on 17.3 or above. One more reason to get off it.
- Jan 2027AI Functions stop below 17.3 LTS
No exact day given. Plan as if it's the first week, because you can't schedule around a date you don't know.
- 1 Feb 202714.3 LTS support ends
AI Functions already needed 15.4, so this hits other workloads, often on the same clusters.
- 19 Aug 202715.4 LTS support ends
After this you can't pick it in the UI. The API still creates it until end of life.
- 22 Oct 202817.3 LTS support ends
Every LTS gets three years from release. 18 LTS lasts until June 2029, which buys you more time if you're testing anyway.
- AI steps start failing in January. Databricks hasn't said which day
- The rest of the job still runs and still gets security fixes. That only lasts until each runtime's support ends
- You do the same upgrade later anyway, for the 15.4 (Aug 2027) and 16.4 (May 2028) support dates
- New VARIANT tables with shredding on can't be read or written from 15.4
- AI Functions keep working, and 17.3 LTS has support until October 2028. You won't be back here for a while
- One test cycle covers Spark 4, Java 17 and Scala 2.13 together
- ANSI SQL is on by default, so bad casts now raise errors instead of nulls
- input_file_name stops working, and Auto Loader does full directory listings by default
Your options, side by side
There's more than one way out, and the right one depends on how much code sits on the same cluster as the AI step.
| Option | Effort | Risk | Fits when |
|---|---|---|---|
| Move the whole cluster to 17.3 or 18 LTS | A full regression test of every notebook and JAR on it | Spark 4, Java 17 and Scala 2.13 changes, all at once | The cluster is small or already close to 16.4 on Scala 2.13 |
| Split the AI step onto serverless or a SQL warehouse | One new task and a hand-off table | Low for the AI step. The old code stays where it is for now | A big legacy job has one AI step, and the rest can't move before January |
| Use an AI Function task in the job (Beta) | Reconfigure the step, no SQL | Beta behaviour can still change | The step is ai_parse_document, ai_extract or ai_classify, and the data isn't regulated |
| Do nothing | None now | The step errors in January and downstream tables go stale | Only if the AI step is truly unused. Check first |
Splitting buys time; it doesn't remove the upgrade. 15.4 LTS loses support in August 2027 anyway, so treat a split as the bridge and put the full move on next year's plan.
-- example: job tasks that ran on classic clusters below 17.3 in the last 30 days WITH clusters AS ( SELECT workspace_id, cluster_id, cluster_name, dbr_version, owned_by FROM system.compute.clusters QUALIFY ROW_NUMBER() OVER (PARTITION BY workspace_id, cluster_id ORDER BY change_time DESC) = 1 ), task_compute AS ( SELECT workspace_id, job_id, task_key, EXPLODE(compute_ids) AS cluster_id FROM system.lakeflow.job_task_run_timeline WHERE array_size(compute_ids) > 0 AND period_start_time >= current_date() - INTERVAL 30 DAYS ) SELECT DISTINCT t.workspace_id, t.job_id, t.task_key, c.cluster_name, c.dbr_version, c.owned_by FROM task_compute t JOIN clusters c USING (workspace_id, cluster_id) WHERE c.dbr_version RLIKE '^([0-9]|1[0-6]|17\\.[0-2])\\.' -- then search the code of each job for ai_ functions; the system tables won't show it
That last comment is where the inventory gets harder. The query history table covers SQL warehouses, serverless notebooks and jobs, and Lakeflow pipelines. It doesn't list classic clusters running notebooks or jobs, which is exactly where this change bites. Its statement_text column is also redacted unless you're an account admin or in the databricks_pii_access group. So the system tables tell you which clusters are old, and you still have to read the code to know which ones call AI Functions.
What to do now, by role
Who does what before January
- Ask which reports depend on an AI step in Databricks. Ticket routing, document extraction and summaries are good places to start.
- Name one owner for the runtime move. Without one, it surfaces as a failed job in the first week back.
- Decide now whether a holiday change freeze covers Databricks jobs, and schedule the move before it.
- Pull every cluster below 17.3 from system.compute.clusters, latest row per cluster, with dbr_version and owned_by.
- Join job_task_run_timeline to those clusters to see which jobs actually ran on them recently.
- Check cluster policies that pin spark_version to 15.x or 16.x. They'll block the upgrade even when the job owner wants it.
- Export the workspace with databricks workspace export-dir and search it for ai_ calls. The system tables won't show you the SQL that classic clusters ran.
- Clone each affected job onto 17.3 LTS and run it against a copy of real data.
- Rebuild JARs for Scala 2.13 and Java 17, and swap input_file_name for _metadata.file_name.
- Look for casts that relied on silent nulls. ANSI mode turns them into errors.
- Set cloudFiles.useIncrementalListing to auto where Auto Loader needs the old listing behaviour.
- Record what each AI step costs today from system.billing.usage, so a move doesn't hide a change in spend.
- Check your Unity Gateway budgets. Since 1 November they count spend from some AI Functions, so a job you've moved still shows up there.
- If you split a step onto serverless, agree who owns that compute line on the bill.
The order we'd run it in
- 01List the old clusters
Take the latest row per cluster from system.compute.clusters and keep anything with dbr_version below 17.3. Note the owner, and whether it's a job, pipeline or all-purpose cluster from cluster_source.
- 02Find the AI calls
Search exported notebooks, repos and job SQL files for ai_query and the other ai_ functions. Ignore ai_similarity for this change. Query history won't help for classic clusters.
- 03Pick the target
17.3 LTS is the minimum and has support to October 2028. 18 LTS runs to June 2029. Databricks recommends Runtime 18.2 or above for AI Functions, so check which 18.x image meets that before you pick.
- 04Test on a clone
Run each job on the new runtime against real data. Compare row counts and output against the old run. Expect ANSI cast errors and Scala 2.13 build failures first.
- 05Cut over job by job
Change spark_version in the job definition, not by hand on a running cluster. Watch the first two scheduled runs and keep the old definition so you can switch back.
- 06Lock it in
Update cluster policies so new compute can't pick a runtime below 17.3. Then check monthly for clusters someone created through the API.
Stop the next runtime change catching you out
Before: runtime picked once, forgotten
Each team chose a runtime when it built the cluster. Nobody owns a list of what runs where.
After: the runtime is a policy, not an accident
A policy keeps new compute on a supported runtime, and a monthly query flags anything that slipped through.
Durable fixes
- 01Restrict runtimes in cluster policies
The spark_version attribute takes an allowlist or a regex. Allow 17.3 and 18 LTS only, and add the next LTS when it's been tested.
- 02Don't trust auto:latest-lts to upgrade
The special value auto:latest-lts picks the latest LTS when compute is created. Databricks notes it doesn't make existing compute update itself when a new runtime comes out.
- 03Move small AI steps to serverless
Serverless compute gets upgraded by Databricks, so the runtime question goes away for that step. Check the cost first in system.billing.usage.
- 04Read What's coming every month
This change and the 15.4 variant shredding break both appeared on Databricks' What's coming page. Ten minutes a month there is cheaper than a failed job.
- 05Keep a runtime inventory
Run the system tables query every month and send each cluster owner their list. The owned_by column gives you the name, so nobody has to guess who to chase.
If a job fails after the change
When an AI step or an upgraded job breaks
There are two different failures here. Either the AI call errors on an old runtime, or the upgraded runtime breaks some other part of the job. Work out which one before you touch anything.
- 01Confirm the causefirst hour
- Open the failed run and read the error on the AI step. Check dbr_version on the cluster it ran on.
- If the cluster's below 17.3 and the failing cell calls an ai_ function, you've hit the January change. You don't need to dig further.
- If the cluster is already on 17.3 or later, look for ANSI cast errors, missing input_file_name or JAR class errors instead.
- 02Get output flowingsame day
- Move only the AI step onto serverless or a SQL warehouse and rerun it. Leave the rest of the job alone.
- For an upgrade regression, put the job back on its old definition, minus the AI step, while you fix it.
- Tell report owners which tables are stale and since when. Otherwise they find out from a wrong number on a dashboard.
- 03Backfillfirst week
- Rerun the AI step for the missed days. Check cost against system.billing.usage before a large backfill.
- Compare row counts with a normal week, so a half-run doesn't pass for a full one.
- 04Fix it properlyfirst month
- Finish the full runtime move on a clone, then cut over.
- Fix casts at the source instead of turning ANSI mode off. Use spark.sql.ansi.enabled=false only as a short, logged exception.
- 05Learn from itafter
- Add the cluster to the monthly runtime report and tighten its policy. Then the next change shows up on a list instead of in a failed run.
- Write down how long the move took. You'll need that number when you plan around 15.4's support end in August 2027.
Four illustrative situations
- the setup
- A nightly job on a classic jobs cluster runs ai_extract on claim letters. The same cluster runs Scala 2.12 JARs written two years ago, on 15.4 LTS.
- what happens
- In January the extraction step errors and the claims table stops updating. Moving the cluster to 17.3 means Java 17, Scala 2.13 and Spark 4 for the JARs too.
- what to do
- Split the extraction onto serverless before the freeze, so claims keep flowing. Then plan the JAR rebuild for Q1, well ahead of 15.4's August end date.
- the setup
- An analytics team summarises support tickets with ai_summarize. They've never run a cluster of their own: it's all serverless notebooks, plus dashboards on a serverless SQL warehouse.
- what happens
- January should pass this team by. Serverless stays current, and as we read the notice, warehouses aren't in scope, so all that's left is a quick check.
- what to do
- Run one test query on each warehouse in December to confirm it. Then check nobody on the team has a personal all-purpose cluster pinned to an old runtime.
- the setup
- A retailer's platform team holds every job cluster on 16.4 LTS through a cluster policy, using the Scala 2.12 image. Meanwhile one product team has started classifying reviews with ai_query.
- what happens
- The product team wants 17.3, but the policy won't let them pick it. Their job fails in January while the policy change waits in someone's queue.
- what to do
- Platform team: add 17.3 and 18 LTS to the policy allowlist now. Product team: test on a clone and move first, since their job is the one that breaks.
- the setup
- A data team matches supplier names with ai_similarity on a 15.4 LTS cluster. Last quarter someone added an ai_query step to clean the names first.
- what happens
- The team knows ai_similarity is exempt and assumes they're fine. Then the cleaning step fails in January, and matching runs on an empty input.
- what to do
- Search the code for every ai_ function, not the one you know about. Move the cluster or split the ai_query step.
How Cohash helps
We build and run Databricks platforms, including compute policies, serverless settings and cost reporting from system tables. For this change, we'd start with the runtime inventory and a search for AI Function calls, then test the move on clones before anything goes live. See our Databricks services, hire Databricks engineers for your own team, or start with a free assessment of which clusters and jobs January will touch.
What to take from this
- 01
From January 2027, AI Functions in SQL return an error on any Databricks Runtime below 17.3 LTS. ai_similarity and the AI Functions REST API are exempt.
- 02
15.4 LTS and 16.4 LTS are still supported after that date, so lifecycle reports won't flag them. Check runtime versions yourself.
- 03
Classic clusters are where it bites. Serverless and Lakeflow pipelines already run newer versions, and SQL warehouses look safe as we read the notice.
- 04
Query history doesn't cover classic clusters. Use system.compute.clusters for versions and search the code for ai_ calls.
- 05
15.4 to 17.3 means Spark 4, Java 17 and Scala 2.13 at once. Split the AI step off if the full move can't happen before the freeze.
01My cluster runs 15.4 LTS. Will its AI Functions still work in January 2027?
No. From January, calls from any runtime below 17.3 LTS return an error, and that includes 15.4 LTS and 16.4 LTS. AI Functions already needed 15.4, so in practice it's anything from 15.4 up to 17.2.
02Is ai_query affected?
Yes. Databricks' What's coming page says AI Functions that need 15.4 LTS or above move to 17.3 LTS, with ai_similarity as the only exception. The ai_query docs already link to that change.
03We only use serverless and SQL warehouses. Do we need to do anything?
Probably not. Serverless compute and Lakeflow pipelines already run versions above 17.3. Pro and serverless warehouses run Databricks SQL versions, and as we read the notice they're not in scope. Run one test call in December to be sure.
04Is 15.4 LTS still supported?
Yes, until 19 August 2027, and 16.4 LTS until 9 May 2028. Support only covers the runtime. AI Functions in SQL still stop on both in January 2027.
05What's the exact date in January?
Databricks hasn't given one. Both the November release notes and the What's coming page say only January 2027, so plan to finish before the year ends.
06Should I move to 17.3 LTS or 18 LTS?
Take 17.3 LTS if something on the cluster can't go any further. It's the minimum, and it's supported until October 2028. If you're running a full test anyway, the newer LTS usually makes more sense, since 18 LTS runs to June 2029. Databricks also recommends 18.2 or above for AI Functions, so check which 18.x image gets you there.
07Can I turn ANSI mode off to make the upgrade easier?
Spark 4.0 lets you set spark.sql.ansi.enabled to false to get the old behaviour back. Use it as a short bridge while you fix bad casts, not as the end state.
Three questions, about a minute
Pick an answer and we'll tell you if it's right, and why it is or isn't. The score stays in this browser.
-
Q1Your nightly job runs ai_query on a classic 16.4 LTS cluster, which has support until 2028. What happens to it in January 2027?
show the answer
B. The ai_query call errors, and you should expect the whole query to fail The AI Functions requirement moves to 17.3 LTS whatever the runtime's support date. A classic cluster stays on the version it was given, so the call returns an error and we'd expect the query to fail with it.
-
Q2You need to know which classic clusters call ai_query. Where do you look?
show the answer
D. Check versions in system.compute.clusters, then search the job code Query history doesn't cover classic clusters running notebooks or jobs. The clusters table gives dbr_version, and the code search shows which jobs call AI Functions.
-
Q3A big 15.4 LTS job has one AI step and Scala 2.12 JARs that can't be rebuilt before the freeze. What's the quickest safe fix?
show the answer
A. Move the AI step to serverless or a SQL warehouse and keep the rest for now Splitting the AI step keeps output flowing without forcing the Spark 4, Java 17 and Scala 2.13 jump on the whole job. The full move still has to happen before 15.4 support ends in August 2027.