Thanks Max and great demo again. Half way through I was wanting to ask whether you've explored the OpenAI or Gemini packs and why you prefer the native AI. (My concern was lack of control over the model, being worried about future pricing etc.) I now realise that my decision to have used the OpenAI pack for my own testing has been a huge mistake. The issue is that automations don't know when the OpenAI formula has returned a response in the way the native formulas do, unless you force them inside a series of nested withNames. As a result you must then bake all your logic into a single huge action, or have timed automations cleaning up downstream if you can no longer handle the complexity. So lesson learned on my side. For context, I implemented something a little less complex than what I think Max did here using the OpenAI pack, parsing a dictated note and sending it to one of several tables, but this is what my formula looks like (with more downstream too): RunActions( /* STEP 1: Determine the Table (Synchronously) */ WithName( OpenAI::ChatCompletion( [Michael Dean (1)], thisRow.[User prompt], "Interpret the user’s intent and decide which of the following tables they want to interact with. Respond only with the tableName from:" + [Convert Table to CSV or JSON]::tojson( SchemaTables.TableName, "tableName", SchemaTables.Description, "description" ), "gpt-5-nano" ), PredictedTable, /* STEP 2: Determine the Operation (Synchronously) */ WithName( OpenAI::ChatCompletion( [Michael Dean (1)], thisRow.[User prompt], "Interpret the user’s intent and decide whether they intend to make a create, read, edit or delete change to an entry in a table containing Tasks, Ideas, and Daily Logs (health, sleep, social). Step 1: Synonyms and usage: Create: Add, new. Also includes directives to capture/process content (e.g. 'Summarise this idea', 'Log that I slept well', 'Remind Tali to cancel'). Read: Show, list, display, return, what are, tell me. But NOT(ask, review, check).