<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Azrty</title>
    <description>The latest articles on DEV Community by Azrty (@azrty).</description>
    <link>https://dev.to/azrty</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4140941%2F07294fc1-7e5f-44a7-a7ee-513819db26d9.png</url>
      <title>DEV Community: Azrty</title>
      <link>https://dev.to/azrty</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/azrty"/>
    <language>en</language>
    <item>
      <title>Confidential computing AI inference in the UAE: GPU TEEs</title>
      <dc:creator>Azrty</dc:creator>
      <pubDate>Wed, 28 Oct 2026 05:34:39 +0000</pubDate>
      <link>https://dev.to/azrty/confidential-computing-ai-inference-in-the-uae-gpu-tees-5ag6</link>
      <guid>https://dev.to/azrty/confidential-computing-ai-inference-in-the-uae-gpu-tees-5ag6</guid>
      <description>&lt;p&gt;Residency says where your data sits. Confidential computing says who can read it while the model runs. Inference on a rented or colocated GPU in a UAE data centre gives you the first and not the second. Here is what a GPU TEE protects, what it costs, and what to demand from a vendor.&lt;/p&gt;

&lt;p&gt;If a vendor tells you "your data stays in-country", they are answering a question about geography. They are not answering the question your risk register actually asks: &lt;strong&gt;who can see the data while it is being used?&lt;/strong&gt; Confidential computing for AI inference in the UAE is the answer to that second question. It runs the model inside a hardware trusted execution environment (TEE) on the GPU itself, so the data centre operator, their engineers and anyone with hypervisor or management-plane access cannot read your prompts, your retrieval context or your model weights while they are in use. Between the prompt arriving and the answer leaving, that data otherwise sits in plaintext in server RAM and GPU memory. On a rented or colocated GPU in a UAE data centre, it is all in principle readable by the host.&lt;/p&gt;

&lt;p&gt;The GPU TEE is the technology that closes this gap, and it is now practical: NVIDIA has shipped it since the H100, the tooling is public, and the measured overhead for inference sits in the low single digits on a well-configured stack. This article sets out what a GPU TEE protects, the stack to demand from a vendor, the performance numbers to budget for, and the answers that should already be in your procurement and due-diligence packs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does confidential computing for AI inference mean in the UAE?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Residency answers where. Confidentiality answers who.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Data residency is about where data is stored and processed. Confidentiality is about which people and processes can observe data in use. They are different controls, and in the UAE the second is now the harder of the two.&lt;/p&gt;

&lt;p&gt;The regulatory backdrop pushes regulated organisations towards in-country processing but says much less about in-use confidentiality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UAE Central Bank outsourcing rules&lt;/strong&gt; require banks to keep regulated data, including the master record, within the UAE, and set due-diligence expectations covering data centre location, encryption and access control. Health-sector rules point the same way.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DIFC Regulation 10&lt;/strong&gt;, part of the Data Protection Regulations enacted on 1 September 2023, governs the processing of personal data through autonomous and semi-autonomous systems, meaning AI. It drives an &lt;a href="https://www.difc.com/business/registrars-and-commissioners/commissioner-of-data-protection/regulation-10" rel="noopener noreferrer"&gt;AI data protection impact assessment, a risk register and certification for high-risk processing&lt;/a&gt;, with enforcement and audit expectations running through 2026 (&lt;a href="https://www.vanta.com/resources/difc-regulation-10" rel="noopener noreferrer"&gt;summary of the current enforcement position&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Saudi Arabia&lt;/strong&gt;, SDAIA's personal data protection regime and the Regulation on Personal Data Transfer Outside the Kingdom make cross-border movement of personal data the exception rather than the rule.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this prevents the operator of your in-country GPU from reading your prompts. An AI DPIA or a Central Bank outsourcing assessment that stops at "the data centre is in Dubai" has answered the easy half of the question. When an auditor or counterparty asks "who inside the hosting arrangement can access this data, and how do you know?", residency alone has no answer. That is the gap a TEE fills.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does a GPU TEE actually protect?
&lt;/h2&gt;

&lt;p&gt;The NVIDIA H100 was the first GPU with hardware confidential computing, and the feature now spans the Hopper and Blackwell generations. When the GPU boots in CC-On mode, a chain of trust is established: the GPU firmware performs a secure, measured boot from an on-die hardware root of trust; the driver running inside a CPU confidential VM establishes an SPDM session with the GPU; and the GPU produces a cryptographically signed attestation report that you verify before trusting it. All data crossing the PCIe bus between the CPU TEE and the GPU passes through encrypted bounce buffers, and command buffers and kernels are encrypted and signed in transit. CUDA applications run unchanged, as NVIDIA documents in its &lt;a href="https://developer.nvidia.com/blog/confidential-computing-on-h100-gpus-for-secure-and-trustworthy-ai/" rel="noopener noreferrer"&gt;H100 confidential computing technical blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Two details decide whether the control is real:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The CPU TEE is not optional.&lt;/strong&gt; A GPU in CC mode is only meaningful when the driver runs inside a CPU confidential VM: Intel TDX (Emerald Rapids or Granite Rapids) or AMD SEV-SNP (Milan, Genoa or Turin). The &lt;a href="https://docs.nvidia.com/cc-deployment-guide-tdx.pdf" rel="noopener noreferrer"&gt;NVIDIA Confidential Computing Deployment Guide&lt;/a&gt; (v7.1, April 2026) lists the supported combinations, including Blackwell single and multi-GPU modes and Hopper multi-GPU Protected PCIe mode. A vendor offering "GPU confidential computing" without a CPU TEE is offering the shell without the contents: prompts are still plaintext in host memory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CC mode is a state you can check.&lt;/strong&gt; Inside the confidential VM it is queryable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvidia-smi conf-compute &lt;span class="nt"&gt;-f&lt;/span&gt;    &lt;span class="c"&gt;# CC status: ON&lt;/span&gt;
nvidia-smi conf-compute &lt;span class="nt"&gt;-e&lt;/span&gt;    &lt;span class="c"&gt;# CC Environment: PRODUCTION&lt;/span&gt;
nvidia-smi conf-compute &lt;span class="nt"&gt;-q&lt;/span&gt;    &lt;span class="c"&gt;# CPU CC Capabilities: AMD SEV-SNP or INTEL TDX&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Protected: prompts, retrieval context, KV cache and model weights while in use, against the host, the hypervisor and anyone with physical or administrative access outside the measured TCB. Not protected: the GPU's HBM, which NVIDIA does not encrypt because it is deemed secure against everyday physical attack tools, and network transit, which remains your own TLS concern. The GPU also refuses work until attestation has passed and the ready state is set, which is the enforcement hook that makes the architecture auditable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What should you ask a vendor for? Composite attestation, then gated key release
&lt;/h2&gt;

&lt;p&gt;Attestation is where most deployments quietly fail. The pattern that actually delivers confidentiality has two gates, and both must be verified, not assumed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gate 1: composite attestation of CPU and GPU.&lt;/strong&gt; The CPU TEE proves it is a genuine SEV-SNP or TDX confidential VM with the expected firmware. The GPU proves it is genuine NVIDIA silicon in CC mode with approved driver and VBIOS versions. NVIDIA's Remote Attestation Service (NRAS) is the primary verifier for the GPU side, with a local verifier for air-gapped deployments. The &lt;a href="https://docs.nvidia.com/attestation/quick-start-guide/latest/attestation-examples/hopper_single_gpu.html" rel="noopener noreferrer"&gt;attestation quick start&lt;/a&gt; shows how little code this takes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;nv_attestation_sdk&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;attestation&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;attestation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Attestation&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_verifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;attestation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Devices&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GPU&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;attestation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;REMOTE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://nras.attestation.nvidia.com/v4/attest/gpu&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;attest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_evidence&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_token&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# JWT with per-GPU claims
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The token's claims are concrete and pin-able: driver version, VBIOS version, secure boot state, certificate revocation status. Your release policy should pin the ones you care about, so a driver upgrade changes the measurement and fails closed until you approve it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gate 2: attestation-gated key release.&lt;/strong&gt; Model weights ship encrypted at rest (AES-256-GCM is the standard pattern), and the data encryption key is wrapped by a key encryption key held in an HSM-backed KMS. The KMS releases the key only to a workload that presents a passing attestation. Microsoft's &lt;a href="https://github.com/microsoft/confidential-ai-workshop/blob/main/tutorials/confidential-llm-inferencing/README.md" rel="noopener noreferrer"&gt;confidential LLM inferencing tutorial&lt;/a&gt; documents the full build on an AMD SEV-SNP VM with an H100, including the Key Vault release policy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"anyOf"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"authority"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://sharedeus2.eus2.attest.azure.net"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"allOf"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"claim"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"x-ms-isolation-tee.x-ms-attestation-type"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"equals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sevsnpvm"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"claim"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"x-ms-isolation-tee.x-ms-compliance-status"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"equals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"azure-compliant-cvm"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In that pattern the CPU evidence gates the KMS, and the GPU is verified in-guest before any key is used. The composition matters: no verified CPU measurements, no key; no verified GPU state, no model. A vendor that cannot walk you through both gates, with the evidence artefacts, is selling a feature flag, not a control.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does confidential inference cost in performance?
&lt;/h2&gt;

&lt;p&gt;The honest performance story is two-sided. Inside the GPU nothing changes: raw compute and HBM bandwidth are at par with non-confidential mode. The cost sits on the interconnect. NVIDIA measures the encrypted CPU to GPU path at roughly 4 GB/s, limited by CPU encryption performance, so workloads that are compute-heavy relative to data movement amortise well, while workloads that hammer host-to-device transfers or serve short, prefill-heavy exchanges pay more. NVIDIA's own published CC-mode overhead for LLM inference is in the low single digits, roughly 2 to 5%. Independent H100 measurements give you the range to plan against:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Study&lt;/th&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Models&lt;/th&gt;
&lt;th&gt;Headline CC-mode result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://arxiv.org/html/2409.03992v2" rel="noopener noreferrer"&gt;Zhu et al. (2024)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;AMD SEV-SNP (EPYC 9V84) with H100 NVL, vLLM 0.5.4&lt;/td&gt;
&lt;td&gt;Llama-3.1-8B, Phi-3-14B, Llama-3.1-70B (4-bit)&lt;/td&gt;
&lt;td&gt;Throughput overhead under 7%, below 5% for typical queries, near zero for the 70B model; TTFT overhead up to 19% on the 8B model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://arxiv.org/html/2607.19353v1" rel="noopener noreferrer"&gt;H100 under Intel TDX benchmark (2026)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Intel TDX confidential VM, 1x H100 80GB&lt;/td&gt;
&lt;td&gt;Mistral-7B, Qwen3-30B-A3B&lt;/td&gt;
&lt;td&gt;TTFT up 21.8% and 27.8%; global token throughput down 17.7% and 21.1%; closed-loop throughput gaps of 11.5 to 20.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three operational readings fall out of these numbers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sizing, not feasibility, is the issue.&lt;/strong&gt; The TDX study's own guidance is to reserve 15 to 25% extra throughput capacity on Hopper-class single-GPU deployments and validate with your own traces, because the penalty is stable but the saturation knee arrives earlier: Qwen3-30B-A3B saturated at concurrency 32 in CC mode versus 40 without it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decode-heavy long-context serving degrades differently from raw compute.&lt;/strong&gt; Inter-token latency moves a few percent; it is time to first token and aggregate prefill throughput that absorb the encrypted interconnect. Short, prefill-heavy exchanges are the worst case, and longer decode phases amortise the cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A datasheet percentage is not your number.&lt;/strong&gt; Published low-single-digit overheads hold when the serving stack is tuned for CC mode. Measure TTFT, throughput and the saturation concurrency on your own prompt lengths and concurrency mix before you size the estate.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Worked example: a long-context assistant on colocated H100s in Dubai
&lt;/h2&gt;

&lt;p&gt;Take a Dubai-based insurer deploying a claims-summarisation assistant: a Qwen3-30B-class model on a colocated 8-GPU H100 node, prompts of a few thousand tokens of policy and claims text, outputs around a thousand tokens. The colocation provider's staff hold host access, which is precisely the threat a TEE addresses, and the model weights are commercially licensed, so they are encrypted at rest with the data encryption key wrapped in the insurer's HSM.&lt;/p&gt;

&lt;p&gt;Sizing, using the TDX benchmark's single-GPU figures scaled across the node:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Non-confidential baseline: about 994 tokens/s aggregate per GPU, so roughly 7,950 tokens/s for the node.&lt;/li&gt;
&lt;li&gt;CC mode: about 820 tokens/s per GPU, so roughly 6,560 tokens/s for the node.&lt;/li&gt;
&lt;li&gt;Peak-hour demand of 7,000 tokens/s fits the non-confidential node and does &lt;strong&gt;not&lt;/strong&gt; fit the confidential node.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The insurer has three options, all arithmetic on the same 21% gap: run a second node during peak windows (more GPU-hours, but no queueing), accept that peak concurrency caps earlier (the knee at 32 instead of 40), or trim context length. None of them is a reason to skip confidentiality. All of them belong in the capacity plan before the pilot, not after the first month of queueing complaints.&lt;/p&gt;

&lt;p&gt;Latency is the smaller problem: at the study's 5 requests/s, TTFT rises from roughly 395 ms to roughly 505 ms, which no internal user will notice. The operational surprises are elsewhere. The attestation handshake is a one-time startup event, so it adds nothing to per-request latency, but a confidential VM cannot simply reboot: the deployment guide notes that rebooting terminates the VM under CPU CC limitations, and the GPU scrubs its state on reset. Restarts are measured in minutes, so autoscaling and maintenance windows need designing around that. Driver persistence mode must be enabled or the SPDM session tears down and the GPU needs a full reset before it will work again. And every driver or VBIOS upgrade changes the attested measurements, so your release policy must be re-pinned deliberately, in a change window, rather than drifting with &lt;code&gt;apt upgrade&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Finally, confidentiality only holds end to end: the application inside the enclave must not be quietly calling a third-party moderation, guardrail or embedding API, because that exports every prompt out of the TEE in plaintext. The enclave boundary is where your architecture review starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  What do GPU TEEs not fix?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Anti-pattern&lt;/th&gt;
&lt;th&gt;Why it fails&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPU CC mode without a CPU TEE&lt;/td&gt;
&lt;td&gt;Prompts and driver state sit in plaintext host memory; the host can read them&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CC-DevTools left enabled&lt;/td&gt;
&lt;td&gt;Matches CC workflows with security protections disabled and performance counters on; it is a debug mode, not a deployment mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Attestation performed but not enforced&lt;/td&gt;
&lt;td&gt;If the KMS hands the model key to any booted VM, the measurement exercise is theatre&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verifying the CPU but not the GPU&lt;/td&gt;
&lt;td&gt;Half a composite proof is no proof; the Microsoft pattern verifies both before it unwraps keys&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Third-party API calls from inside the enclave&lt;/td&gt;
&lt;td&gt;Confidential computing does nothing for prompts that leave the TEE to an external service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unpinned TCB&lt;/td&gt;
&lt;td&gt;Without version pinning in the release policy, a routine driver update silently changes the trust boundary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Assuming HBM is encrypted&lt;/td&gt;
&lt;td&gt;It is not; it is deemed secure against everyday physical attack tools, which is a different claim&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two further limits deserve plain statement. First, model weight licensing is a contract question a TEE does not touch: running a model inside an enclave does not create rights the licence does not grant, and some provider licences restrict deployment context, tenancy or geography regardless of the hardware. Second, attestation introduces a dependency you must own: NRAS is an online NVIDIA service, with local verification available for air-gapped estates, and the revocation and reference-manifest data behind local verification can go stale. If your threat model includes a fully offline deployment, test that path specifically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which questions belong in the procurement pack?
&lt;/h2&gt;

&lt;p&gt;When a provider claims "confidential AI" or "your data never leaves your control", these questions separate the two tiers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;What a good answer looks like&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Which CPU TEE, which GPU, which modes?&lt;/td&gt;
&lt;td&gt;Named SKUs: Intel TDX or AMD SEV-SNP with Hopper or Blackwell GPUs in CC mode, per the supported combinations in the deployment guide&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Show me the attestation flow&lt;/td&gt;
&lt;td&gt;Composite evidence: CPU TEE report and GPU attestation token, plus the policy that pins driver, VBIOS and firmware versions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What gates the model key?&lt;/td&gt;
&lt;td&gt;HSM-backed KMS with a release policy bound to the attested measurements; no passing proof, no key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What is the measured overhead on our workload shapes?&lt;/td&gt;
&lt;td&gt;Numbers for TTFT, throughput and saturation concurrency on representative prefill and decode mixes, not a vendor datasheet percentage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What leaves the enclave?&lt;/td&gt;
&lt;td&gt;An explicit list of outbound calls from inside the TEE, ideally empty&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How do reboots, driver upgrades and node replacement work?&lt;/td&gt;
&lt;td&gt;A documented cold-start and TCB-repinning procedure, with expected timings&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What to do next
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Split your AI estate into two tiers.&lt;/strong&gt; Tier one: workloads where residency is sufficient. Tier two: workloads where prompts or weights are confidential (customer data, regulated data, proprietary models), which require a CPU TEE plus GPU CC mode, composite attestation and attestation-gated key release. Write the standard once and apply it in due diligence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benchmark before you size.&lt;/strong&gt; Reserve 15 to 25% extra capacity on Hopper-class hardware as a planning heuristic, then measure TTFT and the saturation knee on your own prompt lengths. Budget for the interconnect, not for the compute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Put the enclave in the compliance paperwork.&lt;/strong&gt; An attestation report is exactly the kind of artefact an AI DPIA, a risk register or an outsourcing due-diligence file under DIFC Regulation 10 or Central Bank expectations is short of today. "We can show the enclave, and here is the evidence" is becoming a procurement differentiator in this region.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review the application, not just the platform.&lt;/strong&gt; Audit what the code inside the TEE calls out to, and pin TCB versions in a managed change process.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At Azrty we design, build and run this kind of AI infrastructure for organisations in the UAE: the GPU platform, the gateway in front of every model, and the access and control layer around both (&lt;a href="https://www.azrty.com/services/operate" rel="noopener noreferrer"&gt;AI infrastructure&lt;/a&gt;). For teams that need agents and models running on their own GPU servers, each workload in its own isolated space and all managed from one console, our &lt;a href="https://www.azrty.com/software/kuvryn-ai" rel="noopener noreferrer"&gt;Kuvryn AI&lt;/a&gt; platform is built for that shape of deployment. We are based in Dubai, and our own team does the deployment and the support.&lt;/p&gt;

&lt;p&gt;If you take one thing from this article: next time a vendor says your data stays in-country, ask them who can see it while it is in use, and ask for the attestation evidence. The hardware can now answer that question. Whether your vendor's stack does is a different matter, and it is entirely checkable.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.azrty.com/blog/confidential-computing-ai-inference-in-the-uae-gpu-tees" rel="noopener noreferrer"&gt;Azrty&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>confidentialcomputing</category>
      <category>aiinference</category>
      <category>gputee</category>
      <category>aiinfrastructure</category>
    </item>
    <item>
      <title>Using AI in a Dubai clinic: what DHA rules allow, and what they require</title>
      <dc:creator>Azrty</dc:creator>
      <pubDate>Wed, 28 Oct 2026 05:14:40 +0000</pubDate>
      <link>https://dev.to/azrty/using-ai-in-a-dubai-clinic-what-dha-rules-allow-and-what-they-require-17c1</link>
      <guid>https://dev.to/azrty/using-ai-in-a-dubai-clinic-what-dha-rules-allow-and-what-they-require-17c1</guid>
      <description>&lt;p&gt;Clinic owners in Dubai ask us the same question every month: can we use AI for bookings, reminders, insurance pre-authorisation and doctors' notes without falling foul of the Dubai Health Authority (DHA)? The answer is yes, and the rules that shape the project are clearer than most people expect. Four requirements do most of the work: Arabic for anything the patient sees, a licensed clinician's signature on anything clinical, health data that stays inside the UAE, and audit logs you can produce when an inspector asks. This piece sets out what the documents actually say, picks the three uses worth starting with, and lists the questions to put to any vendor.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rulebook is clearer than you think
&lt;/h2&gt;

&lt;p&gt;There is no single "DHA AI licence" for private clinics. What exists is a small stack of documents that, read together, tell you exactly where the lines are. DHA takes AI seriously on its own side of the fence: it has a Chief Artificial Intelligence Officer, Fatima Al Khaja, and during Dubai AI Week in April 2025 it launched an AI training programme covering everything from an executive diploma with ESCP Business School to prompt-engineering training, while encouraging private healthcare facilities to participate. A month later it put AI-driven privacy monitoring, Imprivata's Patient Privacy Intelligence, inside the NABIDH platform itself, to detect unauthorised access to patient records in real time.&lt;/p&gt;

&lt;p&gt;Here is the stack, and what each layer means for your project:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Document&lt;/th&gt;
&lt;th&gt;Who it binds&lt;/th&gt;
&lt;th&gt;What it says that touches AI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DHA Artificial Intelligence Policy&lt;/td&gt;
&lt;td&gt;DHA staff, contractors and vendors; the clearest available statement of the regulator's expectations&lt;/td&gt;
&lt;td&gt;Arabic for patient-facing AI, clinician verification of AI clinical content, UAE data centres for AI inputs and outputs, "default deny" for new tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DHA Telehealth Standards v2.0, January 2024&lt;/td&gt;
&lt;td&gt;Licensed telehealth providers&lt;/td&gt;
&lt;td&gt;Patient records on Dubai-based servers, bilingual (Arabic and English) patient information, consent obtained by the physician, NDAs for staff with data access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DHA Patients' Rights and Responsibilities Policy v1.4, June 2023&lt;/td&gt;
&lt;td&gt;All DHA-licensed facilities&lt;/td&gt;
&lt;td&gt;Patient data protection in line with Dubai Law No. 26 of 2015 and Dubai Law No. 46 of 2006&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://uaelegislation.gov.ae/en/legislations/1209/download" rel="noopener noreferrer"&gt;Federal Law No. 2 of 2019 on ICT in health&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;All health ICT in the UAE, including free zones&lt;/td&gt;
&lt;td&gt;Health data must not leave the UAE without a health authority resolution; fines of AED 500,000 to 700,000 for breach; minimum 25-year record retention&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://dha.gov.ae/uploads/102022/NABIDH%20Policies%20&amp;amp;%20Standards%20-%20Audit%20Policy20221021791.pdf" rel="noopener noreferrer"&gt;NABIDH Policies and Standards, Audit Policy&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Facilities connected to NABIDH&lt;/td&gt;
&lt;td&gt;Privacy and security audits, audit logs kept 3 years, quarterly log reviews, annual external audits&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A note on scope, because it matters: the DHA AI Policy formally governs how DHA itself and its vendors use AI, not a licensing regime for private clinics. But it is the regulator's own standard, it is unusually specific, and it is what any vendor building for you will be measured against the day a private-sector equivalent is formalised. Treat it as your design brief.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four rules that shape any clinic AI project
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Rule 1: Arabic for anything the patient sees
&lt;/h3&gt;

&lt;p&gt;The DHA AI Policy, Article 8.3, requires patient-facing AI interfaces to display information in Arabic, with support for text recognition and cultural context alignment. The Telehealth Standards go further for anything remotely clinical: physician credentials must be available in both Arabic and English (Appendix 5.2.5), and any information a patient needs before a virtual consultation must be provided in both languages (Appendix 5.2.6).&lt;/p&gt;

&lt;p&gt;What this means in practice: your WhatsApp booking agent defaults to the patient's language, with proper Arabic (right-to-left rendering, formal register, correct transliteration of clinic names) as a first-class output, not a machine-translated afterthought. Test it with Arabic-speaking front-desk staff before any patient sees it. A 2026 Dubai practitioner guide makes the same point bluntly: &lt;a href="https://mirchandani.ae/blogs/healthcare-ai-in-dubai-guide-2026/" rel="noopener noreferrer"&gt;patient-facing AI in Dubai requires Arabic support&lt;/a&gt;, and generic translation is where most implementations fail.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 2: AI clinical text is a draft until a clinician signs it
&lt;/h3&gt;

&lt;p&gt;Article 8.4 of the DHA AI Policy is unambiguous: any AI-generated clinical content must be clearly labelled, and reviewed and verified by a qualified licensed healthcare professional. Article 3.1 reinforces the point: AI is a supportive tool, and liability does not transfer to it.&lt;/p&gt;

&lt;p&gt;This is the rule that makes the "AI doctor's notes" project safe if you design it correctly. The note the model drafts is a draft. It sits in a &lt;code&gt;pending_signoff&lt;/code&gt; state, with the model name, prompt version and reviewer recorded. It does not sync to NABIDH, does not go to an insurer, and does not appear in the patient's file until a licensed clinician has opened it, corrected it and signed it. That workflow is not a burden; it is the regulatory argument for the use case.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 3: health data does not leave the UAE
&lt;/h3&gt;

&lt;p&gt;Two layers here. Article 8.7 of the DHA AI Policy requires that all AI inputs and outputs, including patient data, be stored and processed exclusively within UAE data centres. Above that sits Federal Law No. 2 of 2019: Article 13 bars health data related to services provided inside the UAE from being stored, processed, generated or transferred outside the country except by resolution of the health authority in coordination with the Ministry. Article 24 sets the penalty for breaching Article 13 at AED 500,000 to 700,000, and Article 20 sets minimum record retention at 25 years. The Telehealth Standards add the Dubai-specific layer: the telehealth platform must be capable of storing all patient records on Dubai-based servers (Appendix 7.1.6).&lt;/p&gt;

&lt;p&gt;The practical consequence for your architecture: nothing carrying a patient name, Emirates ID, diagnosis or lab result goes to a hosted model endpoint outside the UAE. Not in the prompt, not in the logs, not in the vendor's training pipeline. Ask for region pinning at the API level, and ask what happens to prompts after processing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 4: log everything, and keep it for the auditor
&lt;/h3&gt;

&lt;p&gt;The NABIDH Audit Policy requires audit logs to be retained for 3 years and reviewed at least quarterly to detect improper use of patient information, with external audits at least annually. The log must be able to answer specific questions: which users accessed a given patient's record, which patients' data a given user accessed, every break-glass event, and every access to data marked sensitive. DHA audits the NABIDH platform and its vendors annually, and since April 2025 the platform itself watches for anomalous access patterns with AI.&lt;/p&gt;

&lt;p&gt;Your AI systems should sit inside the same logging discipline. Log the generation event (case ID, model, reviewer, sign-off state), the consent event, and every export.&lt;/p&gt;

&lt;p&gt;Two governance notes round this out. Article 4.2 of the AI Policy is a "default deny": AI tools are denied by default until a compliance assessment is completed, so keep a one-page assessment on file for every tool you switch on, including the ones your doctors install themselves. And Article 8.2 requires explicit patient consent where patient data is shared for AI-driven diagnostics or telehealth, explaining how the AI will be used, its risks and its limitations. Your intake form gets a new paragraph.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three uses worth starting with
&lt;/h2&gt;

&lt;p&gt;Not every AI use case carries the same regulatory weight. Here are the three that pay for themselves fastest under these rules, in the order we recommend:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use case&lt;/th&gt;
&lt;th&gt;Arabic required&lt;/th&gt;
&lt;th&gt;Clinician sign-off&lt;/th&gt;
&lt;th&gt;Data involved&lt;/th&gt;
&lt;th&gt;Regulatory risk&lt;/th&gt;
&lt;th&gt;Where the payback is&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bookings and reminders (WhatsApp, SMS)&lt;/td&gt;
&lt;td&gt;Yes, patient-facing&lt;/td&gt;
&lt;td&gt;No, but symptom escalation rules needed&lt;/td&gt;
&lt;td&gt;Name, phone, appointment type&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Recovered no-shows, front-desk hours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Insurance pre-authorisation packets&lt;/td&gt;
&lt;td&gt;Internal tool, but insurer forms are often bilingual&lt;/td&gt;
&lt;td&gt;Coordinator reviews; clinician confirms clinical content&lt;/td&gt;
&lt;td&gt;Clinical notes, lab results, procedure codes&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Approval speed, denial rate, coordinator hours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Draft consultation notes&lt;/td&gt;
&lt;td&gt;Arabic for patient letters; English acceptable internally&lt;/td&gt;
&lt;td&gt;Yes, licensed clinician signs&lt;/td&gt;
&lt;td&gt;Full clinical record&lt;/td&gt;
&lt;td&gt;Medium-high&lt;/td&gt;
&lt;td&gt;Doctor minutes per consultation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Start with reminders: lowest risk, and the numbers move immediately. Pre-authorisation is the strongest first pilot for a clinic with meaningful insurance volume: document-heavy, high-volume, financially significant, and it still allows human review before anything is submitted, which is how one Dubai healthcare vendor frames it in &lt;a href="https://www.ateamsoftsolutions.com/agentic-ai-for-dubai-healthcare-how-hospitals-and-clinics-should-automate-claims-pre-authorization-and-operations-under-dha-regulations/" rel="noopener noreferrer"&gt;its published guidance on agentic AI for Dubai hospitals and clinics&lt;/a&gt;. Notes come third, once the audit trail and sign-off workflow are proven on lower-stakes work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worked example: pre-authorisation at a four-doctor clinic
&lt;/h2&gt;

&lt;p&gt;Take a typical outpatient clinic: two GPs, two specialists, roughly 1,100 consultations a month. About 60 per cent of visits are insurance-covered, and on a typical outpatient mix (imaging, minor procedures, some referrals) around 160 cases a month need pre-authorisation.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Baseline.&lt;/strong&gt; A revenue-cycle coordinator handles each pre-authorisation manually today: pulling the doctor's notes, attaching lab results, completing the insurer's form, checking the document list and chasing missing attachments. Assume 55 minutes of human work per request. That is 160 x 55 = roughly 147 hours a month, close to a full coordinator FTE.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;With the agent.&lt;/strong&gt; The agent assembles the packet: it reads the consult note and the requested procedure, checks that insurer's document requirements, verifies that the lab results and imaging reports are attached, and flags what is missing. The coordinator reviews and submits. Assume 15 minutes of human review per case, in the same range as the vendor scenario where preparation drops &lt;a href="https://www.ateamsoftsolutions.com/agentic-ai-for-dubai-healthcare-how-hospitals-and-clinics-should-automate-claims-pre-authorization-and-operations-under-dha-regulations/" rel="noopener noreferrer"&gt;from up to 48 hours to around 15 minutes&lt;/a&gt;. That is 160 x 15 = 40 hours. &lt;strong&gt;About 107 hours a month released.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Value the time.&lt;/strong&gt; Assume a coordinator at AED 12,000 a month, loaded at 1.4x for benefits and overhead, over roughly 170 working hours: about AED 100 an hour. 107 hours x AED 100 = &lt;strong&gt;AED 10,700 a month&lt;/strong&gt;, or about AED 128,000 a year of recovered capacity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Denials.&lt;/strong&gt; Assume 12 per cent of submissions bounce today for documentation gaps: about 19 cases a month. If the agent's completeness checks cut that to 6 per cent, about 10, then 9 cases are saved. At 2.5 hours of rework each, that is another AED 2,250 a month. Each bounced case also delays a typical AED 1,200 reimbursement by about 30 days, so 9 cases is AED 10,800 of cash pulled forward.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total.&lt;/strong&gt; Around &lt;strong&gt;AED 13,000 a month in measurable time and rework&lt;/strong&gt;, plus roughly AED 11,000 of reimbursement permanently one month earlier. A 2026 Dubai guide prices a focused single-workflow pilot in the market at roughly &lt;a href="https://mirchandani.ae/blogs/healthcare-ai-in-dubai-guide-2026/" rel="noopener noreferrer"&gt;AED 150,000 to 300,000 for a proof of concept&lt;/a&gt;, so the measurable payback lands at 12 to 24 months, before you count the softer wins: patients who do not abandon procedures because approval took three days instead of a fortnight.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layer on reminders.&lt;/strong&gt; The same platform runs the reminders agent. At a 15 per cent no-show rate, 1,100 visits produce about 165 missed appointments a month. Recovering just 20 per cent of them, at an average AED 350 per visit, is 33 recovered visits: &lt;strong&gt;AED 11,550 a month&lt;/strong&gt;, about AED 139,000 a year, from the lowest-risk use case on the list.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The agent never decides clinical necessity, never invents justification, and never submits anything. It gathers, sorts and checks; a human submits. That is what keeps it on the right side of Article 8.4.&lt;/p&gt;

&lt;h2&gt;
  
  
  An architecture that passes inspection
&lt;/h2&gt;

&lt;p&gt;Two technical decisions carry most of the compliance load: where the model runs, and what you log.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Routing.&lt;/strong&gt; Put a gateway in front of your models so that patient-identifiable traffic is pinned to UAE-hosted infrastructure and nothing else. Our &lt;a href="https://www.azrty.com/software/fastllm-proxy" rel="noopener noreferrer"&gt;FastLLM Proxy&lt;/a&gt; does exactly this: an OpenAI-compatible gateway with routing, budgets and access control in one place. The configuration principle, whatever gateway you use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Illustrative gateway policy: patient data never leaves the UAE zone&lt;/span&gt;
&lt;span class="na"&gt;routes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;preauth-drafting&lt;/span&gt;
    &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;header&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;x-data-class&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;phi&lt;/span&gt;          &lt;span class="c1"&gt;# set by the integration layer&lt;/span&gt;
    &lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;uae-selfhosted-llm&lt;/span&gt;
        &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://llm.clinic.internal/v1&lt;/span&gt;
        &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;qwen2.5-14b-instruct&lt;/span&gt;  &lt;span class="c1"&gt;# UAE data centre, self-hosted&lt;/span&gt;
    &lt;span class="na"&gt;fallback&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;reject&lt;/span&gt;                 &lt;span class="c1"&gt;# no external fallback for patient data, ever&lt;/span&gt;
    &lt;span class="na"&gt;log&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;full&lt;/span&gt;                         &lt;span class="c1"&gt;# prompt + completion retained 3 years&lt;/span&gt;
    &lt;span class="na"&gt;budget&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;monthly_usd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;400&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;marketing-copy&lt;/span&gt;
    &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;header&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;x-data-class&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;public&lt;/span&gt;
    &lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hosted-llm&lt;/span&gt;             &lt;span class="c1"&gt;# fine: no patient data on this route&lt;/span&gt;
    &lt;span class="na"&gt;fallback&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;reject&lt;/span&gt;
    &lt;span class="na"&gt;log&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;minimal&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Audit records.&lt;/strong&gt; Every AI generation tied to a patient case should produce a record an inspector can read:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"event"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ai_generation"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"workflow"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"preauth_packet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"case_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OPD-2026-09127"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"actor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"agent:preauth@clinic"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uae-selfhosted/qwen2.5-14b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"output_status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"draft_pending_signoff"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reviewer"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"revenue.cycle@clinic"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"consent_ref"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CN-2026-04-118"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-10-26T08:14:22+04:00"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the two labels the rules ask for: AI-generated clinical content carries a visible "AI draft, pending clinician review" tag until it is signed, and consent is captured per Article 8.2 with an explanation of how the AI is used.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to ask a vendor
&lt;/h2&gt;

&lt;p&gt;Print this section and take it to your next vendor meeting:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Where, at the API level, is our data processed? Give us the region pinning, not the marketing page.&lt;/li&gt;
&lt;li&gt;Do you train on our prompts or outputs? Where do they go after processing, and for how long?&lt;/li&gt;
&lt;li&gt;Show us the Arabic output. Not a translation API demo: the actual booking and reminder flows, reviewed by native speakers, with right-to-left rendering in WhatsApp.&lt;/li&gt;
&lt;li&gt;How does the sign-off workflow work? Can a draft reach a patient file, NABIDH or an insurer without a licensed clinician?&lt;/li&gt;
&lt;li&gt;Export your audit logs in a format we can hand to an auditor: who accessed which record, when, and what changed.&lt;/li&gt;
&lt;li&gt;What happens when you change the model or prompt version? Will you notify us, and can we pin versions?&lt;/li&gt;
&lt;li&gt;Which of your deployments have been through a DHA or NABIDH-related audit? Can we speak to a reference?&lt;/li&gt;
&lt;li&gt;Will you sign a data processing agreement with UAE data residency, a breach notification commitment, and alignment with our 25-year record retention obligations?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If a vendor cannot answer 1, 4 or 8 without checking with someone, they are not ready for a Dubai clinic.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do next
&lt;/h2&gt;

&lt;p&gt;Pick one workflow, not four. For most clinics that is the reminders agent: low risk, quick to build, immediate numbers. In parallel, write the one-page compliance assessment per tool, add the AI paragraph to your intake consent, and set audit log retention to at least 3 years. Run a 4-week pilot with fixed baseline numbers (no-show rate, coordinator hours, denial rate), then expand to pre-authorisation and notes on the same platform and the same logs.&lt;/p&gt;

&lt;p&gt;This is work we do with clinics in the UAE from our base in Dubai: our own team handles the consulting, the deployment and the support. If you want the architecture and the agents built on your infrastructure with these controls from day one, that is our &lt;a href="https://www.azrty.com/services/build" rel="noopener noreferrer"&gt;AI engineering service&lt;/a&gt;. Start with one workflow, prove it, and let the audit trail you build there carry the next three.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.azrty.com/blog/using-ai-in-a-dubai-clinic-what-dha-rules-allow-and-what-they-require" rel="noopener noreferrer"&gt;Azrty&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>dha</category>
      <category>dubaihealthcare</category>
      <category>nabidh</category>
      <category>aicompliance</category>
    </item>
    <item>
      <title>AI document processing for freight forwarders: bills of lading, invoices and the customs sign-off</title>
      <dc:creator>Azrty</dc:creator>
      <pubDate>Wed, 28 Oct 2026 05:14:39 +0000</pubDate>
      <link>https://dev.to/azrty/ai-document-processing-for-freight-forwarders-bills-of-lading-invoices-and-the-customs-sign-off-294b</link>
      <guid>https://dev.to/azrty/ai-document-processing-for-freight-forwarders-bills-of-lading-invoices-and-the-customs-sign-off-294b</guid>
      <description>&lt;p&gt;A Dubai forwarder's AI project that pays for itself: read the document pack into structured records, flag what does not reconcile, and keep the customs declaration with a licensed human. Here is how to scope it, what it costs per page, and what accuracy to demand before you go live.&lt;/p&gt;

&lt;p&gt;Freight forwarding in the Gulf is document work wearing a logistics badge. Every consignment arrives as a pack: commercial invoice, packing list, bill of lading or air waybill, certificate of origin, delivery order, and finally a WhatsApp photo of the signed delivery note. Someone re-types the fields your systems need; a licensed person files the customs declaration. Reading that pack into structured data is the clearest AI return a forwarder can get this year: it removes typing hours per consignment, catches mismatches before they reach customs, and leaves the legally sensitive step with a person. Vendors are pitching exactly this across Dubai in 2026, from document automation to WhatsApp status bots (&lt;a href="https://soluvide.com/blog/ai-for-freight-forwarders-logistics-dubai-document-automation" rel="noopener noreferrer"&gt;Soluvide&lt;/a&gt;, Runbook). This piece covers the pipeline, the engines and their published per-page prices, the accuracy bar to demand before go-live, how "where is my shipment" gets answered from live data, and a scope you can hand straight to an IT partner.&lt;/p&gt;

&lt;h2&gt;
  
  
  What AI reads, and what a person still signs
&lt;/h2&gt;

&lt;p&gt;"Reading" a shipping document is three steps, and the second one is where the money is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Extraction.&lt;/strong&gt; Pull the fields: shipper, consignee, container or AWB number, description, weights, values, incoterms, HS codes where present. Every document type has its own schema. A bill of lading carries carrier, ports and references; a commercial invoice carries lines, quantities and values.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validation.&lt;/strong&gt; Check what was extracted against what you already know. Does the container number on the B/L match the packing list? Does the consignee match the customer record? Do the line totals add up? Is the HS code plausible for the description?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Routing.&lt;/strong&gt; Clean records go into your shipment record or TMS. Anything that does not reconcile goes to a review queue, with the discrepancy highlighted and the source page attached.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Extraction alone only moves errors faster. Extraction plus validation catches the mismatched container number before it reaches the declaration, which is where the cost lives: a wrong identifier in a customs filing means amendment fees, delay, and often storage or demurrage on top. The &lt;a href="https://dcsa.org/standards/" rel="noopener noreferrer"&gt;DCSA&lt;/a&gt; makes the same point about the bill of lading: it is the most important trade document in container shipping, and its &lt;a href="https://dcsa.org/standards/ebill-of-lading/" rel="noopener noreferrer"&gt;electronic B/L standard&lt;/a&gt; exists so B/L data flows straight through without manual re-entry.&lt;/p&gt;

&lt;p&gt;The boundary is fixed, and vendors who claim otherwise deserve caution. &lt;strong&gt;AI prepares and checks data. A licensed person submits the customs declaration and carries the declarant's responsibility&lt;/strong&gt;, through the relevant system, whether that is Dubai Customs' Mirsal 2 or the equivalents in other emirates and in Saudi Arabia. Check the current guidance from the authority you file with (&lt;a href="https://www.dubaicustoms.gov.ae/en" rel="noopener noreferrer"&gt;Dubai Customs&lt;/a&gt;). The same rule covers anything with legal weight: issuing the B/L as a carrier, approving invoices and credit notes, committing to delivery dates your data does not support, and signing anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pipeline: extract, validate, flag, approve
&lt;/h2&gt;

&lt;p&gt;The build that works has four stages, and it is mostly unglamorous code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Intake.&lt;/strong&gt; Email attachments, portal uploads and WhatsApp media land in one queue. Classify each file: B/L, invoice, packing list, certificate of origin, delivery order, or unknown.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extraction.&lt;/strong&gt; OCR the page, then have the model emit a JSON record that conforms to a strict schema. Version the schema and pin the model version: change either and you re-run the test set.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic validation.&lt;/strong&gt; Rules in your code, not in the model. Cheap, transparent, and they never hallucinate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exception routing.&lt;/strong&gt; Every field carries a confidence score. Below threshold, or any failed rule, and the pack routes to a person with the source image and the extracted value side by side.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The schema is where you decide what a "field" means. A short Pydantic model for the invoice side of the pack:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Annotated&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Literal&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pydantic&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;StringConstraints&lt;/span&gt;

&lt;span class="n"&gt;ContainerNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Annotated&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;StringConstraints&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pattern&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;^[A-Z]{4}\d{7}$&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LineItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
    &lt;span class="n"&gt;hs_code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;          &lt;span class="c1"&gt;# suggestion only, never final
&lt;/span&gt;    &lt;span class="n"&gt;quantity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
    &lt;span class="n"&gt;unit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
    &lt;span class="n"&gt;net_weight_kg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
    &lt;span class="n"&gt;gross_weight_kg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
    &lt;span class="n"&gt;unit_value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
    &lt;span class="n"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Literal&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AED&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;USD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EUR&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GBP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CNY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ShipmentPack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;document_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Literal&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;invoice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;packing_list&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;coo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;delivery_order&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;other&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;bl_number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
    &lt;span class="n"&gt;container_numbers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ContainerNumber&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;default_factory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;incoterm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;          &lt;span class="c1"&gt;# closed list, checked downstream
&lt;/span&gt;    &lt;span class="n"&gt;consignee_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
    &lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;LineItem&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;default_factory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then the checks the model never gets to vote on. Container numbers carry an ISO 6346 check digit, so a wrong digit is provable in ten lines of Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;iso_6346_valid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;container&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;container&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="n"&gt;vals&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;ch&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ABCDEFGHIJKLMNOPQRSTUVWXYZ&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;      &lt;span class="c1"&gt;# 11, 22 and 33 are skipped by the standard
&lt;/span&gt;            &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="n"&gt;vals&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ch&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;
        &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="n"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;container&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;vals&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isalpha&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;expected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;container&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;expected&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Beyond format checks, cross-document rules do the real work: container numbers must agree across the B/L, packing list and delivery order; parties must match the customer record; line values times quantities must recompute; gross weight must be at least net weight; the B/L date must precede arrival; incoterms must come from the 2020 set and currencies from ISO 4217. Any miss raises a named flag on the pack, and the pack stops.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing the extraction engine
&lt;/h2&gt;

&lt;p&gt;OCR is a commodity. The interesting choice is what turns OCR text into fields. Four viable patterns, at the list prices published on each vendor's pricing page (check them, they move):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Example tools&lt;/th&gt;
&lt;th&gt;Published price&lt;/th&gt;
&lt;th&gt;Where it wins&lt;/th&gt;
&lt;th&gt;Watch-outs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;General OCR plus LLM structured output&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://cloud.google.com/document-ai/pricing" rel="noopener noreferrer"&gt;Google Document AI Enterprise Document OCR&lt;/a&gt; ($1.50 per 1,000 pages) feeding a hosted LLM&lt;/td&gt;
&lt;td&gt;roughly $20 per 1,000 pages all in (see the worked example)&lt;/td&gt;
&lt;td&gt;messy, varied layouts, five or more document types, bilingual pages&lt;/td&gt;
&lt;td&gt;token costs and vendor data terms; keep validation in your code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Specialised invoice parsing&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://aws.amazon.com/textract/pricing/" rel="noopener noreferrer"&gt;Textract Analyze Expense&lt;/a&gt; ($0.01 per page), Google's pretrained invoice parser ($0.10 per 10 pages)&lt;/td&gt;
&lt;td&gt;$10 per 1,000 pages&lt;/td&gt;
&lt;td&gt;high-volume commercial invoices&lt;/td&gt;
&lt;td&gt;tuned on consumer-style invoices, not carrier B/L layouts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Form and table parsing&lt;/td&gt;
&lt;td&gt;Textract Forms ($0.05 per page) plus Tables ($0.015 per page), Google Form Parser ($30 per 1,000 pages)&lt;/td&gt;
&lt;td&gt;$65 per 1,000 pages for Textract combined&lt;/td&gt;
&lt;td&gt;fixed templates, clean scans&lt;/td&gt;
&lt;td&gt;brittle across carriers and customers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open-weights vision models on your own GPUs&lt;/td&gt;
&lt;td&gt;vision variants from families such as Qwen2.5-VL, Llama 3.2 and Granite&lt;/td&gt;
&lt;td&gt;no per-page fee; GPU and operations cost instead&lt;/td&gt;
&lt;td&gt;data locality and PDPL posture&lt;/td&gt;
&lt;td&gt;you own the MLOps&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The usual right answer for a forwarder is the first row. Document AI and Textract both charge pennies for raw OCR ($1.50 per 1,000 pages for Google's Enterprise Document OCR, $0.0015 per page for Textract's Detect Document Text), and a hosted LLM handles the messy part: carrier-specific B/L layouts, stamps over printed fields, mixed Arabic and English. The specialised parsers are cheaper per page but tuned for invoices, so you end up running them alongside something else anyway. If consignee data cannot leave your estate, run open-weights vision models on your own GPUs and pay in operations instead of per page.&lt;/p&gt;

&lt;p&gt;One pattern worth copying: run the system inside your own cloud account, under your name, and go live only after it passes a test set built from your hardest real consignments and frozen before the build starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worked example: 2,500 consignments a month
&lt;/h2&gt;

&lt;p&gt;A mid-sized Dubai forwarder clearing imports through Jebel Ali and Dubai South. Assumptions: 2,500 consignments a month, an average pack of 10 pages, so 25,000 pages a month (300,000 a year), arriving as a mix of clean PDFs, scans and WhatsApp photos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model spend.&lt;/strong&gt; OCR on Google Enterprise Document OCR at $1.50 per 1,000 pages: 25 x $1.50 = &lt;strong&gt;$37.50 a month&lt;/strong&gt;. LLM extraction: roughly 2,000 input tokens per page (OCR text plus schema and instructions) and 800 output tokens, so 50M input and 20M output tokens a month. At $3 per million input and $15 per million output, a typical mid-tier hosted model price: $150 in, $300 out, &lt;strong&gt;$450 a month&lt;/strong&gt;. Total model spend about &lt;strong&gt;$490 a month (AED 1,800)&lt;/strong&gt;, under $0.02 per page. The same volume on Textract Forms plus Tables ($0.05 plus $0.015 per page) would be $1,625 a month; the specialised expense parser ($0.01 per page) $250.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current manual cost.&lt;/strong&gt; Assume the documentation team spends 12 minutes re-typing and checking each pack: 30,000 minutes, about 500 hours, roughly &lt;strong&gt;3 full-time people&lt;/strong&gt;. At AED 9,000 a month fully loaded per documentation officer, &lt;strong&gt;AED 27,000 a month (about $7,350)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After go-live.&lt;/strong&gt; Expect 60 to 70 per cent of packs to pass clean if the mix is mostly clean PDFs, fewer if WhatsApp photos dominate; take 60 per cent straight through. The other 40 per cent, 1,000 packs, need about 4 minutes each in the review UI: about 67 hours, 0.4 of an FTE, &lt;strong&gt;AED 3,600 a month&lt;/strong&gt;. Post-go-live total: about &lt;strong&gt;AED 5,400 a month&lt;/strong&gt; (models plus a part-time reviewer) against AED 27,000. The saving is roughly &lt;strong&gt;AED 21,600 a month (about $5,900)&lt;/strong&gt;, before you count faster quotes or the wrong-container incidents that never happened. A build costing six figures of dirhams pays back inside a year at those numbers. The review queue never disappears; it gets much shorter.&lt;/p&gt;

&lt;h2&gt;
  
  
  The accuracy bar: the gate before go-live
&lt;/h2&gt;

&lt;p&gt;Vendors quote "95 per cent accuracy", which means nothing without definitions. Demand these instead:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field class&lt;/th&gt;
&lt;th&gt;Examples&lt;/th&gt;
&lt;th&gt;Gate before go-live&lt;/th&gt;
&lt;th&gt;Enforcement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Identifiers&lt;/td&gt;
&lt;td&gt;container, B/L, AWB, invoice, booking&lt;/td&gt;
&lt;td&gt;99 per cent or better exact match on the golden set; 100 per cent format check&lt;/td&gt;
&lt;td&gt;any format failure stops the pack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arithmetic&lt;/td&gt;
&lt;td&gt;totals, quantities, weights, values&lt;/td&gt;
&lt;td&gt;100 per cent recomputed, no silent tolerance&lt;/td&gt;
&lt;td&gt;mismatch means exception&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Closed lists&lt;/td&gt;
&lt;td&gt;incoterms, currencies, countries, ports&lt;/td&gt;
&lt;td&gt;99.5 per cent or better; anything off-list flags&lt;/td&gt;
&lt;td&gt;enum failure means exception&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tariff&lt;/td&gt;
&lt;td&gt;HS codes&lt;/td&gt;
&lt;td&gt;suggestion only, quoting the tariff line&lt;/td&gt;
&lt;td&gt;a human classifies, always&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free text&lt;/td&gt;
&lt;td&gt;goods descriptions, marks&lt;/td&gt;
&lt;td&gt;no numeric gate; confidence threshold&lt;/td&gt;
&lt;td&gt;low confidence routes to review&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three definitions make those numbers real:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The golden set.&lt;/strong&gt; 300 to 500 of your real documents, spanning every intake channel: mostly clean PDFs, a third scans, a fifth phone photos, including the bilingual Arabic-English ones. Include your worst cases, the consignments your team argued about. Freeze it before the build, and re-run it after every prompt, model or schema change, so a second team can be measured on the same set.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Field-level accuracy.&lt;/strong&gt; Exact match per field per document type, reported separately for identifiers and free text. A 95 per cent blend is a way of hiding a 60 per cent identifier failure rate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent errors.&lt;/strong&gt; The metric that matters at the end: an extracted value that is wrong, passes every check, and reaches the declaration unflagged. A typo in a goods description is cosmetic. A wrong container number on a customs filing is a claim.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The gate to set before go-live: &lt;strong&gt;zero silent identifier errors across two consecutive golden-set runs&lt;/strong&gt;, and a straight-through touch rate that has stopped improving week on week. Pin model versions, log every approval (who, when, which model version, which prompt), and keep a human sign-off screen between the extracted record and anything that touches customs, a bank or a customer's money.&lt;/p&gt;

&lt;h2&gt;
  
  
  Answering "where is my shipment?" on WhatsApp
&lt;/h2&gt;

&lt;p&gt;The status question is not a document problem, it is a data problem, and the model's job in it is small. The answer lives in your TMS or freight system and in carrier feeds; the assistant only turns the question into a lookup and the record into a reply. The design that works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identity first.&lt;/strong&gt; The customer's WhatsApp number maps to a customer record; only then may shipment details be shared. Sharing consignee shipment data with an unverified number is a data protection failure, not a bot quirk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verified facts only.&lt;/strong&gt; The assistant replies with milestones your systems actually contain (vessel arrived, clearance in progress, out for delivery, with timestamps and source). It does not invent an ETA the data does not support, and if the customer is chasing a delay or disputing a charge, it hands the conversation to an operator with the history attached.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool calls enforced server-side.&lt;/strong&gt; The customer context is injected in your code, never chosen by the model:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"shipment_status"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Return verifiable milestones for one shipment owned by the verified customer."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"parameters"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"object"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"reference"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BL, booking or PO number"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"required"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"reference"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Proactive updates through templates.&lt;/strong&gt; Milestone messages go out as approved WhatsApp templates on your Business API number. Meta's template rules and the customer service window change, so check the current policy when you scope rather than trusting a vendor's screenshot.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The prerequisite is honest: a status bot is only as current as your shipment events. If milestones live in a shared drive and a WhatsApp group, wiring the bot to live data is the actual project, and the document pipeline above is what fills that data in the first place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compliance: PDPL, data residency and the declarant
&lt;/h2&gt;

&lt;p&gt;Three rules keep this build safe in the UAE.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Personal data applies to shipping documents.&lt;/strong&gt; Consignee names, addresses and phone numbers are personal data, and &lt;a href="https://uaelegislation.gov.ae/en/legislations/1972" rel="noopener noreferrer"&gt;Federal Decree-Law No. 45 of 2021&lt;/a&gt; (the PDPL, effective 2 January 2022) covers controllers and processors in the UAE and anyone processing the data of subjects inside the State. It imposes purpose limitation, accuracy, security measures and retention limits, and it leaves free zones with their own regimes, such as DIFC and ADGM, so confirm which regime applies to your licence before you pick a model API. Sending consignee records to an overseas model endpoint is a cross-border transfer: prefer in-region endpoints or self-hosted models, and paper the data processing terms before the first page is read.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The declarant stays liable.&lt;/strong&gt; AI can draft the declaration and check the pack against the documents, but submission and the declarant's responsibility stay with your licensed staff. Put that in writing in the design, and make the sign-off screen impossible to bypass.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Standards pay twice.&lt;/strong&gt; Align your internal shipment record with the &lt;a href="https://dcsa.org/standards/ebill-of-lading/" rel="noopener noreferrer"&gt;DCSA electronic B/L standard&lt;/a&gt; (open APIs for straight-through B/L data, aligned with IMO, ISO and UN/CEFACT). Carrier eBL data then flows into the same record your document pipeline fills, and you enter it once instead of three times.&lt;/p&gt;

&lt;h2&gt;
  
  
  The scope to hand an IT partner
&lt;/h2&gt;

&lt;p&gt;Copy this, fill the brackets, and you have a pilot scope an engineering team can quote against:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI document processing for freight forwarding: pilot scope
1. Volume: [N] consignments/month, [M] pages/month, channels: email, portal, WhatsApp.
2. Document types: B/L, air waybill, commercial invoice, packing list,
   certificate of origin, delivery order, declaration draft.
3. Fields: [list per document type; ~40 on the invoice].
4. Extraction: OCR + LLM structured output; schema versioned; model versions pinned.
5. Validation: ISO 6346 check, cross-document container and party match,
   totals recomputed, incoterm/currency/country closed lists, date sanity.
6. Exceptions: named flags; queue UI with source page beside extracted value; SLA [4] hours.
7. Outputs: shipment record into [TMS/FMS]; declaration draft, never submitted; API/CSV.
8. WhatsApp: status lookup on [number]; identity via [CRM]; template list; human hand-off rules.
9. Compliance: PDPL review; data residency [UAE or self-hosted]; retention [X] months; DPAs signed.
10. Acceptance: golden set of 300+ documents frozen before build; gates per field class;
    zero silent identifier errors in two consecutive runs; licensed person submits every filing.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What to do next
&lt;/h2&gt;

&lt;p&gt;Pull 300 real documents across your channels and freeze the golden set. Define your field lists and validation rules. Pick the engine and the data residency. Pilot one lane with the review queue running in parallel with manual entry. Only then widen the funnel and switch on the WhatsApp status replies. Time spent at the front on the golden set and the rules buys a pipeline your documentation team will actually thank you for, and a customs sign-off that never once left human hands.&lt;/p&gt;

&lt;p&gt;If you want the review queue and the integration built around your own systems rather than bolted onto a vendor's, that is our kind of work: &lt;a href="https://www.azrty.com/services/build" rel="noopener noreferrer"&gt;Azrty builds AI engineering projects&lt;/a&gt; on your infrastructure and connects them to your systems, from our team in Dubai, with your developers able to extend what we leave behind. Where several model providers are in play, one gateway in front of them (&lt;a href="https://www.azrty.com/software/fastllm-proxy" rel="noopener noreferrer"&gt;FastLLM Proxy&lt;/a&gt;) keeps routing, budgets and access control in one place instead of scattered across services.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.azrty.com/blog/ai-document-processing-for-freight-forwarders-bills-of-lading-invoices-and-the-c" rel="noopener noreferrer"&gt;Azrty&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>freightforwarding</category>
      <category>documentai</category>
      <category>aistrategyandadoption</category>
      <category>logistics</category>
    </item>
    <item>
      <title>AI CV screening in the UAE: write the rules, then let good candidates through</title>
      <dc:creator>Azrty</dc:creator>
      <pubDate>Wed, 28 Oct 2026 05:09:39 +0000</pubDate>
      <link>https://dev.to/azrty/ai-cv-screening-in-the-uae-write-the-rules-then-let-good-candidates-through-4610</link>
      <guid>https://dev.to/azrty/ai-cv-screening-in-the-uae-write-the-rules-then-let-good-candidates-through-4610</guid>
      <description>&lt;p&gt;A single Dubai job advert can pull several hundred CVs in days, so employers switch on AI screening inside the ATS or buy a GCC assessment tool, often before anyone has written down what a good candidate looks like. The result is a filter that quietly drops the people you needed. Here is how to define the scoring rules first, test them against your past hires, put a person on every rejection near the cut-off, and hold a vendor to the standards the UAE already expects.&lt;/p&gt;

&lt;p&gt;A single Dubai job advert can pull several hundred CVs in days. Recruiters in the UAE told the &lt;a href="https://www.khaleejtimes.com/business/uae-job-search-2026-recruiters-explain-why-cvs-are-getting-ignored" rel="noopener noreferrer"&gt;Khaleej Times in 2026&lt;/a&gt; that one vacancy now attracts "several hundred applications within a matter of days", and one founder who spoke to the same publication put numbers on the shift: a role that used to draw 200 applications now draws 2,000. The response has been predictable: switch on the AI screening already sitting inside the applicant tracking system (ATS), or buy an assessment tool built for the Gulf. What far fewer employers do is decide what "a good candidate" means for that specific role, write it down, and check who the software is filtering out. That gap is where good candidates disappear, and where the UAE's data protection law starts to apply to a hiring decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  What AI CV screening is actually doing to your vacancy
&lt;/h2&gt;

&lt;p&gt;Three layers do the filtering in a typical UAE hiring stack today, and they behave differently. &lt;a href="https://aihrdaily.com/article/ai-assessment-tools-uae-hiring-2026-evalufy-hirevue-shl-ovi" rel="noopener noreferrer"&gt;A 2026 review of AI assessment tools for UAE hiring&lt;/a&gt; compares the main options now on the market.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Parsing and ranking in the ATS.&lt;/strong&gt; The careers page or job board feed receives the CV, extracts name, work history, skills and education, matches keywords from the job description and ranks candidates. &lt;a href="https://www.makemycv.ae/blog/does-dubai-use-ats" rel="noopener noreferrer"&gt;MakeMyCV's 2026 guide to ATS use in Dubai&lt;/a&gt; describes the failure modes plainly: multi-column layouts, graphics, images saved as JPEG, key details in headers and footers, and non-standard headings all break the parse. The important nuance is that an ATS usually does not auto-reject. It ranks, and a CV ranked low is never opened, which has exactly the same effect as a rejection with no human ever making a decision.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assessment platforms.&lt;/strong&gt; Tools such as Evalufy sit alongside the ATS and run structured tests (cognitive, behavioural, technical, language) plus AI-scored video responses, producing scorecards before a recruiter spends time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conversational screening.&lt;/strong&gt; Newer GCC-built tools such as OVI's Milo agent run an audio conversation with the candidate against a rubric and score the transcript. Some tools score video, expressions or tone instead. That design choice has legal consequences in the UAE, covered below.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The pressure behind all three is volume against the number of CVs a person can actually read. When a role draws hundreds of applicants and a recruiter gets through perhaps 20 an hour, most CVs are never seen. That is where the cost of a wrong rejection rises: the candidate you filtered out takes an offer elsewhere and you never know you lost them.&lt;/p&gt;

&lt;p&gt;There is a quieter problem too. Avinav Nigam of TERN Group told the Khaleej Times that many screening systems "prioritise keywords over actual capability", so a candidate who knows how to optimise a profile for an algorithm outranks someone better at the job. If your screening is still a keyword match against the job description, you are selecting for CV-writing skill. Semantic matching helps; it does not fix the underlying issue, which is that nobody has defined what good means, so the tool infers it from the advert.&lt;/p&gt;

&lt;h2&gt;
  
  
  The UAE rules that already apply to an automated rejection
&lt;/h2&gt;

&lt;p&gt;The UAE has no separate "AI hiring law", but two existing instruments cover most of what matters, and a third is worth following as the standard for how to evaluate these tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Federal Decree-Law No. 45 of 2021 on Personal Data Protection (the PDPL).&lt;/strong&gt; In employment, a rejection is a decision with real impact on a person, so treat the screening step as automated processing of personal data with legal consequence. Three articles matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Article 13&lt;/strong&gt; gives the data subject the right to know the types of data processed, the purposes, and the decisions made based on automated processing, including profiling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Article 18&lt;/strong&gt; gives the right to object to decisions resulting from automated processing that have legal impact or adversely affect the person, and Article 18(4) obliges the controller to include a human element in reviewing those decisions at the data subject's request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Article 21&lt;/strong&gt; requires a data protection impact assessment before processing that involves a systematic and comprehensive assessment of people using automated processing or profiling where there are legal consequences or serious impact, and requires you to review that assessment regularly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In practice that means three duties before you enable auto-scoring on a live vacancy: tell candidates the software is used and how it works, keep a working human review route, and run a DPIA you revisit whenever the rules change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Federal Authority for Government Human Resources (FAHR) guidance.&lt;/strong&gt; FAHR's guidelines on the use and evaluation of AI in talent assessment, produced with SHL, are written for federal government entities but are the clearest UAE-side statement of how to evaluate an AI assessment. The headline position is that no AI assessment should make a decision without human oversight. The framework turns on six questions (training data, transparency, bias, validity, finality, candidate disclosure) and flags three risk classes: legal risk from data protection and bias; public relations risk from candidates who feel the process was unfair or intrusive; and effectiveness risk from a tool that does not work on your population. Those six questions are the spine of the vendor checklist below.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Emiratisation.&lt;/strong&gt; AI can rank CVs; it does not understand Emiratisation obligations, visa eligibility or MOHRE reporting. As &lt;a href="https://innovationsglobal.com/insights/what-every-uae-employer-should-ask-before-trusting-an-ai-recruitment-vendor.php" rel="noopener noreferrer"&gt;Innovations Global's 2026 employer guide&lt;/a&gt; notes, firms with 50 or more employees face recurring penalties for unfilled Emirati quota positions, and that exposure does not disappear because sourcing was automated. Screening rules that penalise career breaks or non-linear CVs can quietly work against Emirati candidates. Check.&lt;/p&gt;

&lt;h2&gt;
  
  
  Write the scoring rules before you switch the tool on
&lt;/h2&gt;

&lt;p&gt;The scoring rules belong to the hiring manager, not to the vendor and not to HR alone. Software can only implement what somebody wrote down. Here is the minimum artefact you need, in the order you need it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Gates before weights.&lt;/strong&gt; Split criteria into pass/fail gates (eligibility, licence requirements, minimum experience, availability) and weighted criteria (depth of relevant experience, domain, named systems, evidence of results). A weighted score should never compensate for failing a legal or eligibility gate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Weights that add to 100, in a file anyone can read.&lt;/strong&gt; Keep the rubric as configuration, versioned per role, so you can show a candidate or a regulator exactly what was applied. Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# screening-rules.yaml: Fleet Operations Supervisor, Dubai&lt;/span&gt;
&lt;span class="na"&gt;gates&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;eligibility&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;visa_status in [residence, golden, transferable] or uae_national&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;availability_within_days&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;relevant_experience_years&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;2"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;cv_parse_quality&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;rule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;0.95"&lt;/span&gt;
      &lt;span class="na"&gt;on_fail&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;manual_queue&lt;/span&gt;   &lt;span class="c1"&gt;# never auto-reject on a bad parse&lt;/span&gt;
&lt;span class="na"&gt;weights&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;relevant_experience_years&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;25&lt;/span&gt;
  &lt;span class="na"&gt;freight_or_3pl_last_role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;
  &lt;span class="na"&gt;named_wms_tms_systems&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15&lt;/span&gt;
  &lt;span class="na"&gt;measurable_results_in_cv&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15&lt;/span&gt;
  &lt;span class="na"&gt;currently_based_in_uae&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15&lt;/span&gt;
  &lt;span class="na"&gt;tenure_stability&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
&lt;span class="na"&gt;cut_bands&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;auto_advance_min&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;70&lt;/span&gt;        &lt;span class="c1"&gt;# person still confirms&lt;/span&gt;
  &lt;span class="na"&gt;human_reads_every_cv&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;55&lt;/span&gt;    &lt;span class="c1"&gt;# 55-69: a person reads it&lt;/span&gt;
  &lt;span class="na"&gt;auto_reject_below&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;55&lt;/span&gt;
&lt;span class="na"&gt;audit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;random_reject_sample&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.10&lt;/span&gt;
  &lt;span class="na"&gt;recalibrate_if_override_rate_above&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.10&lt;/span&gt;
  &lt;span class="na"&gt;appeal_sla_working_days&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
  &lt;span class="na"&gt;appeal_mailbox&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;careers-review@yourcompany.ae"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Reason codes, not just scores.&lt;/strong&gt; Every CV should carry a score plus the reason codes that produced it (missing: named systems; gap: no logistics experience in the last role). This is what lets you answer an appeal, satisfy Article 13, and spot a systematic error such as the parser failing on Arabic-language CVs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Candidate disclosure.&lt;/strong&gt; Put it on the application form, in English and Arabic:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When you apply, our recruitment software scores your CV against criteria set by the hiring manager for this role. Our recruitment team reviews the results. You can ask a person to review your application at any time by writing to &lt;a href="mailto:careers-review@yourcompany.ae"&gt;careers-review@yourcompany.ae&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;5. A cut-off band, not a cut-off line.&lt;/strong&gt; The single most important design choice. Any candidate within a defined margin of the cut gets a human read of the full CV. Rejections far below the cut can be automated with reason codes and sampling; rejections near the cut cannot. This is what "letting good candidates through" means in operational terms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worked example: 412 CVs for one Dubai logistics role
&lt;/h2&gt;

&lt;p&gt;A Dubai logistics employer posts a Fleet Operations Supervisor role. 412 CVs arrive in 9 days. The numbers below are illustrative; the sequence is the part that matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: the hiring manager writes the rubric (half a day).&lt;/strong&gt; The panel agrees gates (right to work, availability within 30 days, 2+ years in logistics customer service, CV must parse cleanly) and the weights in the config above. "Measurable results in CV" is weighted 15 deliberately, because it is harder to game than keywords.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: back-test on past hires before go-live (one day).&lt;/strong&gt; Pull the last 12 people hired into this role and 48 CVs rejected in past rounds. Run the rules over all 60.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Version 1 scored only 8 of the 12 past hires above the cut: 67 per cent recall. Unacceptable. Below 90 per cent, your rules describe something other than your own definition of good.&lt;/li&gt;
&lt;li&gt;Diagnosing the misses: three hires had image-based or multi-column CVs that parsed badly (they came in by referral, so nobody noticed) and one had short average tenure but strong performance. Fixes: a bad parse sends the CV to the manual queue instead of scoring it; tenure weight drops from 15 to 10; referrals and internal applicants are hard-coded to always get human review.&lt;/li&gt;
&lt;li&gt;Version 2 scores 11 of 12 past hires above the cut (92 per cent). The one miss is the internal transfer, which the new rule catches. Of the 48 previously rejected CVs, 5 now land in the human-review band, which tells you the old manual process was dropping people at the margin too.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 3: run the first live round with bands.&lt;/strong&gt; Of 412 CVs: 55 score 70 or above (auto-advance, recruiter still confirms each one), 88 fall in the 55 to 69 band (a person reads every full CV), 269 score below 55 (auto-reject with reason codes, 10 per cent sample re-read).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: check the time maths.&lt;/strong&gt; Reading all 412 CVs at 3 to 4 minutes each is about 24 hours of recruiter time. The new process reads 143 CVs plus 27 audit reads: about 10 hours. You save roughly 60 per cent of screening time while making the deliberate, budgeted choice that 88 borderline CVs get human judgement. That band is the cost of not losing good candidates. Do not let anyone "optimise" it away in round three.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check every round: who got filtered out
&lt;/h2&gt;

&lt;p&gt;The rules are a hypothesis about your talent market. Each round, test the hypothesis with a short audit pack.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;What to record each round&lt;/th&gt;
&lt;th&gt;Trigger for action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Override rate&lt;/td&gt;
&lt;td&gt;How often the recruiter's shortlist differs from the tool's ranking&lt;/td&gt;
&lt;td&gt;Above 10 per cent: re-run the back-test, the rules no longer match the hiring manager&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grey-band yield&lt;/td&gt;
&lt;td&gt;Share of the 55 to 69 band invited to interview&lt;/td&gt;
&lt;td&gt;If the band never produces interviews it is too wide; if it produces most of them the cut is too low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audit-sample error&lt;/td&gt;
&lt;td&gt;Good candidates found in the 10 per cent sample of auto-rejections&lt;/td&gt;
&lt;td&gt;Any find: pause auto-rejection and read that round's rejections in full&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Appeals and outcomes&lt;/td&gt;
&lt;td&gt;Volume, response time, how many upheld&lt;/td&gt;
&lt;td&gt;An upheld appeal is a rule defect, not a one-off favour&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parse failure rate&lt;/td&gt;
&lt;td&gt;CVs sent to the manual queue&lt;/td&gt;
&lt;td&gt;Spikes often mean a new CV format or an Arabic-language parsing gap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Score spread by group&lt;/td&gt;
&lt;td&gt;Where voluntary data allows, spread across nationality, sex, age band&lt;/td&gt;
&lt;td&gt;Unexplained gaps: bias review, FAHR question 3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Keep the audit pack for at least the recruitment cycle. If a candidate objects under Article 18 and asks for human review, your five-working-day SLA and your reason codes turn that request into a 20-minute task instead of a panic.&lt;/p&gt;

&lt;h2&gt;
  
  
  The questions to ask a vendor before it touches a live vacancy
&lt;/h2&gt;

&lt;p&gt;FAHR's six questions are the right spine for any demo or RFP, in any sector. Add the data and commercial questions underneath.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Training data (FAHR Q1).&lt;/strong&gt; Was the model trained on CVs from this region, in which languages and dialects, for which occupations? Ask what happens to an Arabic-language CV, or to an Egyptian, Levantine or Khaleeji accent if audio is scored. Ask whether the training data included outcomes (who got hired, who performed) or only CV text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparency (Q2).&lt;/strong&gt; Can you show, per candidate, which inputs drove the score? Ask for the technical manual. If the answer is a black box with a single "fit score", you cannot explain a rejection to a candidate or to a regulator.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bias (Q3).&lt;/strong&gt; What adverse impact analysis has been run, by which groups, and what were the results? What does the tool do when demographic data is missing (it usually is)?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validity (Q4).&lt;/strong&gt; What validation evidence exists, and is it content, construct or criterion related? Ask the vendor to validate against your historical hires before you trust the scores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Finality (Q5).&lt;/strong&gt; Can we configure cut scores? Can recruiters override? Is auto-rejection on or off by default? FAHR's position is that AI assessments should inform human decisions, not make them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Candidate disclosure (Q6).&lt;/strong&gt; Do you supply English and Arabic notice text, and where must it appear?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data.&lt;/strong&gt; Where is candidate data hosted, for how long, who are the sub-processors, is our data used to train your models, and can we export and delete everything at exit? Ask how the tool supports the Article 21 impact assessment. Claims such as "PDPL compliant" need a document behind them, not a website badge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commercial.&lt;/strong&gt; What is the cost at our volume, what counts as a billable unit, and what does exit look like?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  What the market looks like in 2026
&lt;/h3&gt;

&lt;p&gt;Prices and posture as published or reported this year. Several figures below come from vendors writing about their competitors, so verify everything in writing before signing.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Route&lt;/th&gt;
&lt;th&gt;Examples&lt;/th&gt;
&lt;th&gt;Published price (2026)&lt;/th&gt;
&lt;th&gt;Arabic and localisation&lt;/th&gt;
&lt;th&gt;Human oversight design&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ranking inside your existing ATS or job board&lt;/td&gt;
&lt;td&gt;Enterprise ATS ranking modules&lt;/td&gt;
&lt;td&gt;Bundled in the ATS subscription&lt;/td&gt;
&lt;td&gt;Varies by system&lt;/td&gt;
&lt;td&gt;Ranking only; you decide who reads what&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GCC assessment platform&lt;/td&gt;
&lt;td&gt;Evalufy&lt;/td&gt;
&lt;td&gt;Freemium: 15 assessments per month, 20 invites, 1 seat. Core and Pro: quote-based&lt;/td&gt;
&lt;td&gt;Arabic-first, bilingual tests, regional dialect support claimed&lt;/td&gt;
&lt;td&gt;Multi-evaluator scorecards, custom weighting, proctoring on Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GCC conversational screening&lt;/td&gt;
&lt;td&gt;OVI (Milo)&lt;/td&gt;
&lt;td&gt;Starter $99 per month (200 interview minutes, roughly $2.50 per five-minute interview); Growth $450 per month; free tier 50 credits&lt;/td&gt;
&lt;td&gt;UAE-built, audio conversations, transcript-only scoring, no biometrics&lt;/td&gt;
&lt;td&gt;Human-in-the-loop decision support, configurable rubrics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Global enterprise assessment&lt;/td&gt;
&lt;td&gt;HireVue, SHL&lt;/td&gt;
&lt;td&gt;HireVue reported at roughly $35,000 to $75,000 per year in one comparison, another citing $50,000 to $150,000 plus. SHL: quote required&lt;/td&gt;
&lt;td&gt;SHL offers Arabic tests with global norms; HireVue Arabic workflow to be confirmed&lt;/td&gt;
&lt;td&gt;Mature science and audit reports; confirm UAE PDPL documentation directly&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A few observations from reading the material closely. Evalufy publishes a genuine free tier (15 assessments per month, no credit card), enough to test on a live requisition, and claims PDPL compliance with ISO 27001-certified MENA data centres: ask for the certificates. Published descriptions of Evalufy's headquarters also disagree between reviews, which is exactly the kind of detail to confirm with the vendor rather than assume. OVI's comparison of the four tools is useful but it is OVI's own material, and OVI sells a competing product, so treat its pricing for HireVue and SHL as a starting point for quotes rather than fact. SHL co-authored the FAHR guidance, which is a fair reason to include it on a shortlist for psychometric-heavy roles. And notice the design split that matters most under the PDPL: transcript-based scoring (what the candidate said) carries far less risk than tools scoring face, voice or expression, which is closer to sensitive personal data and a heavier Article 21 exercise.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do next
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Pick one live or upcoming vacancy and write the gates and weights. Half a day, hiring manager owns it, HR facilitates.&lt;/li&gt;
&lt;li&gt;Back-test the rules on your last 12 hires and a sample of rejected CVs. Do not go live below 90 per cent recall.&lt;/li&gt;
&lt;li&gt;Configure cut bands, with a person reading every CV within 15 points of the cut, plus a 10 per cent audit sample of auto-rejections.&lt;/li&gt;
&lt;li&gt;Turn auto-rejection off by default in your ATS until the bands and reason codes exist. Most systems will let you rank without rejecting.&lt;/li&gt;
&lt;li&gt;Run the data protection impact assessment (PDPL Article 21) and put the disclosure text and appeal mailbox on the application form, in English and Arabic.&lt;/li&gt;
&lt;li&gt;Put the six FAHR questions plus the data questions in writing to every vendor, and require answers before they see a single live CV.&lt;/li&gt;
&lt;li&gt;Review the audit pack after round one and recalibrate anything the triggers flag.&lt;/li&gt;
&lt;li&gt;Keep the rules per role, versioned, and revisit them whenever the role or the market changes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If your leadership team cannot agree the rubric for a role, that is a strategy problem before it is a tooling problem. Our &lt;a href="https://www.azrty.com/services/ai-strategy" rel="noopener noreferrer"&gt;AI strategy work&lt;/a&gt;, run by our own team in the UAE, starts exactly there: we look at how your business runs, from processes and systems to data, tell you plainly where AI will pay off, what it takes and what to do first. Screening is one of the highest-volume, highest-risk AI decisions most UAE employers run, and it is worth getting right before you scale it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.azrty.com/blog/ai-cv-screening-in-the-uae-write-the-rules-then-let-good-candidates-through" rel="noopener noreferrer"&gt;Azrty&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aistrategy</category>
      <category>hiring</category>
      <category>uae</category>
      <category>dataprotection</category>
    </item>
    <item>
      <title>The best Arabic LLM for your enterprise is the one that passes your eval, not the leaderboard</title>
      <dc:creator>Azrty</dc:creator>
      <pubDate>Wed, 28 Oct 2026 05:09:38 +0000</pubDate>
      <link>https://dev.to/azrty/the-best-arabic-llm-for-your-enterprise-is-the-one-that-passes-your-eval-not-the-leaderboard-j66</link>
      <guid>https://dev.to/azrty/the-best-arabic-llm-for-your-enterprise-is-the-one-that-passes-your-eval-not-the-leaderboard-j66</guid>
      <description>&lt;p&gt;Four serious Arabic models now come out of the Gulf: Falcon-H1-Arabic from Abu Dhabi, ALLaM from Saudi Arabia, Fanar 2 from Qatar and Jais 2 from the UAE. None of them can be picked from a leaderboard, because the Open Arabic LLM Leaderboard measures academic Arabic, not your tickets, your policy documents or your customers' dialect. The two things that do transfer to your organisation are both measurable in about a week: a 200 to 500 item eval set built from your own material, and the tokenization economics that decide what each Arabic conversation really costs in money, latency and GPU memory.&lt;/p&gt;

&lt;p&gt;If you are building Arabic-language customer service, a government services assistant or an internal knowledge bot in the GCC, you face a decision that looks like a model choice but is actually two measurements. First: does a regional open-weight model score within your tolerance on &lt;em&gt;your&lt;/em&gt; content, with &lt;em&gt;your&lt;/em&gt; product names, place names, dialects and policy language? Second: what does an Arabic token actually cost you, in API spend, time to first token, KV-cache footprint and concurrent sessions per GPU? Answer both and the decision makes itself. Skip them and you will either overpay a frontier API for years or ship a model that fails quietly on Gulf dialect.&lt;/p&gt;

&lt;h2&gt;
  
  
  The field in late 2026
&lt;/h2&gt;

&lt;p&gt;Four model families are credible candidates for enterprise Arabic work today. All of them are open weight unless noted, which means you can run them on your own GPUs and keep data in-country.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Developer&lt;/th&gt;
&lt;th&gt;Sizes&lt;/th&gt;
&lt;th&gt;Context&lt;/th&gt;
&lt;th&gt;Licence&lt;/th&gt;
&lt;th&gt;What the evidence says&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Falcon-H1-Arabic&lt;/td&gt;
&lt;td&gt;TII, Abu Dhabi&lt;/td&gt;
&lt;td&gt;3B, 7B, 34B&lt;/td&gt;
&lt;td&gt;128K (3B), 256K (7B, 34B)&lt;/td&gt;
&lt;td&gt;Open weights (check the model card for your size)&lt;/td&gt;
&lt;td&gt;About 71.5% (7B) and 75.4% (34B) on the Open Arabic LLM Leaderboard, beating 70B-class transformers including Llama-3.3-70B and Qwen2.5-72B. Hybrid Mamba-Transformer architecture, runs on vLLM.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ALLaM&lt;/td&gt;
&lt;td&gt;SDAIA, now run by HUMAIN, Saudi Arabia&lt;/td&gt;
&lt;td&gt;7B open checkpoint; 34B flagship powers HUMAIN Chat&lt;/td&gt;
&lt;td&gt;4,096 (7B)&lt;/td&gt;
&lt;td&gt;Apache 2.0 (7B Instruct preview)&lt;/td&gt;
&lt;td&gt;The 7B Instruct preview is trained from scratch on 4T English tokens plus 1.2T mixed Arabic/English, with two published revisions (v1.27.2.25 and v2). ALLaM 34B backs HUMAIN Chat, hosted end to end in the Kingdom and PDPL-compliant.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fanar-2-27B-Instruct&lt;/td&gt;
&lt;td&gt;QCRI, Qatar&lt;/td&gt;
&lt;td&gt;27B&lt;/td&gt;
&lt;td&gt;32,768&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;td&gt;Continually pretrained from gemma-3-27b-pt on roughly 166B Arabic and English tokens over 75,000 H100 hours. Explicit MSA plus Gulf, Levantine and Egyptian dialect support, native Arabic reasoning traces, tool calling and hallucination mitigation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jais 2&lt;/td&gt;
&lt;td&gt;Inception (G42), Cerebras and MBZUAI, UAE&lt;/td&gt;
&lt;td&gt;8B, 70B&lt;/td&gt;
&lt;td&gt;8,192&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;td&gt;Trained from scratch on 600B+ curated Arabic tokens plus 1.6T of web, math and code, with a custom 150,272-entry Arabic-centric vocabulary. Leading results among evaluated open models on OALL2 and AraGen. Note: the hosted API was retired on 21 August 2026; weights remain on Hugging Face.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Primary sources: the &lt;a href="https://www.tii.ae/news/abu-dhabis-tii-launches-falcon-h1-arabic-establishing-worlds-leading-arabic-ai-model" rel="noopener noreferrer"&gt;Falcon-H1-Arabic announcement&lt;/a&gt; and &lt;a href="https://huggingface.co/blog/tiiuae/falcon-h1-arabic" rel="noopener noreferrer"&gt;release blog&lt;/a&gt;, the &lt;a href="https://huggingface.co/QCRI/Fanar-2-27B-Instruct" rel="noopener noreferrer"&gt;Fanar-2-27B-Instruct model card&lt;/a&gt;, the &lt;a href="https://huggingface.co/humain-ai/ALLaM-7B-Instruct-preview" rel="noopener noreferrer"&gt;ALLaM-7B-Instruct-preview model card&lt;/a&gt;, the &lt;a href="https://www.humain.com/en/news/humain-chat-launch" rel="noopener noreferrer"&gt;HUMAIN Chat launch&lt;/a&gt; and the &lt;a href="https://docs.ifm.ai/docs/jais-2.md" rel="noopener noreferrer"&gt;Jais 2 documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The fourth candidate in every real procurement is a frontier API model prompted in Arabic. It belongs in the comparison, because on raw Arabic quality it often wins. The question is by how much, and what that gap costs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the leaderboard cannot pick your model
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://huggingface.co/spaces/OALL/Open-Arabic-LLM-Leaderboard" rel="noopener noreferrer"&gt;Open Arabic LLM Leaderboard&lt;/a&gt; is genuinely good work. It runs reproducible evaluations through the EleutherAI &lt;a href="https://github.com/EleutherAI/lm-evaluation-harness/tree/main/lm_eval/tasks/arabic_leaderboard_complete" rel="noopener noreferrer"&gt;lm-evaluation-harness Arabic task set&lt;/a&gt;, so a score is a score, not a vendor claim. TII even documents that its own vLLM-based runs land within about one point of the leaderboard's numbers.&lt;/p&gt;

&lt;p&gt;But read what it measures: knowledge, reading comprehension and reasoning over web-derived Arabic text, mostly Modern Standard Arabic. Your workload is not that. It is a customer writing "ما أقدر أرسّع الفاتورة من التطبيق" (I can't pay the bill faster from the app, in Gulf dialect), a code-switched complaint ("الـ bundle خلص، كيف أعمل top-up؟"), and questions about a product name that appears nowhere in any pretraining corpus. Leaderboard rank measures none of the things that will make your assistant succeed or embarrass you.&lt;/p&gt;

&lt;p&gt;This is not an argument against the leaderboard. It is the screening stage: it tells you which models are worth a week of your team's time. The final stage happens on your data.&lt;/p&gt;

&lt;h2&gt;
  
  
  What transfers: build a 300-item eval set in three days
&lt;/h2&gt;

&lt;p&gt;The single highest-leverage artefact in an Arabic LLM project is a small, versioned eval set built from your own material. Two hundred items is a floor, five hundred is plenty; beyond that the marginal information per item collapses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where the items come from:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Real tickets and chat logs&lt;/strong&gt; (redacted). Take them verbatim, dialect and typos included. Never rewrite them into MSA, because your users will not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Policy and product documents.&lt;/strong&gt; Turn paragraphs into questions: "What is the fee for an early exit from this plan?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Named entities.&lt;/strong&gt; Product names, service tiers, districts, mall names, government portals. Models hallucinate most confidently where pretraining data is thinnest, and nothing is thinner than your internal naming scheme.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deliberately hard slices.&lt;/strong&gt; Aim for roughly 40% formal MSA, 30% Gulf dialect, 30% code-switched Arabic/English, in the proportions your traffic actually shows.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;A concrete mix for a 300-item set, drawn from a telecom support case:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;90 items from the last two years of Arabic chat logs, sampled by intent cluster (billing, top-up, coverage, cancellation), including Emirati and Saudi dialect items&lt;/li&gt;
&lt;li&gt;60 questions whose answers live only in your policy PDFs&lt;/li&gt;
&lt;li&gt;60 entity-grounded questions where the correct answer must quote your exact product or tariff name&lt;/li&gt;
&lt;li&gt;45 dialect and code-switched items, verbatim from logs, never normalised&lt;/li&gt;
&lt;li&gt;45 adversarial items: questions about services you do not offer, questions that mix a real product name with a wrong assumption, and date and amount arithmetic from a bill&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is one analyst-day to sample, one subject-matter-expert day to write gold answers, one more to review. Gold answers should be short and checkable, not essays.&lt;/p&gt;

&lt;h2&gt;
  
  
  The scoring sheet and the judge
&lt;/h2&gt;

&lt;p&gt;Score each response on five criteria, 0 to 2 each, so the maximum is 10 per item and a 300-item set yields a 3,000-point scale:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;0&lt;/th&gt;
&lt;th&gt;1&lt;/th&gt;
&lt;th&gt;2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Correctness&lt;/td&gt;
&lt;td&gt;Wrong answer&lt;/td&gt;
&lt;td&gt;Partially right or right with wrong entity&lt;/td&gt;
&lt;td&gt;Fully right, correct entity and amount&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grounding&lt;/td&gt;
&lt;td&gt;Invents a policy, product or price&lt;/td&gt;
&lt;td&gt;Vague, not traceable to source&lt;/td&gt;
&lt;td&gt;Every claim traceable to your documents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dialect handling&lt;/td&gt;
&lt;td&gt;Misunderstands dialect or code-switching&lt;/td&gt;
&lt;td&gt;Understands but answers in stiff MSA&lt;/td&gt;
&lt;td&gt;Registers the register, answers naturally&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Format and language&lt;/td&gt;
&lt;td&gt;Wrong language, broken Arabic&lt;/td&gt;
&lt;td&gt;Usable but unnatural&lt;/td&gt;
&lt;td&gt;Natural, correctly punctuated Arabic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Completeness&lt;/td&gt;
&lt;td&gt;Misses a step or an explicit caveat&lt;/td&gt;
&lt;td&gt;Usable&lt;/td&gt;
&lt;td&gt;Complete, including edge cases&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two ways to score: a human reviewer (expensive, about 1 to 2 minutes per item, so a full pass on 300 items is a day) or a stronger model as judge. If you use a model as judge, check agreement first: have the human score a 50-item overlap sample and compute percent agreement on the Correctness criterion. Below roughly 85% agreement, your judge is not measuring your rubric, and you must fix the prompt before trusting it at scale.&lt;/p&gt;

&lt;p&gt;Here is a copy-paste judge prompt that has the properties that matter: it forces evidence, it forbids generosity, and it outputs a parseable score.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are evaluating a customer-service assistant's reply in Arabic.

QUESTION (verbatim from a real user, may contain Gulf dialect or
Arabic/English code-switching):
{question}

GOLD ANSWER (written by a domain expert):
{gold_answer}

ASSISTANT'S REPLY:
{reply}

Score each criterion 0, 1 or 2. Be strict: a score of 2 must be
clearly earned, not merely plausible.

1. correctness: 2 = matches the gold answer's facts, entities and
   amounts; 1 = partially right; 0 = wrong.
2. grounding: 2 = every claim is traceable to the gold answer or the
   supplied policy text; 1 = vague; 0 = invents facts.
3. dialect: 2 = correctly understands the question's register and
   replies naturally in it; 1 = understands but replies in stiff MSA;
   0 = misunderstands the dialect or code-switching.
4. language: 2 = natural, correct Arabic; 1 = awkward but usable;
   0 = broken Arabic or wrong language.
5. completeness: 2 = covers steps and caveats; 1 = usable with gaps;
   0 = misses something essential.

Reply ONLY with JSON:
{"correctness": n, "grounding": n, "dialect": n, "language": n,
 "completeness": n, "total": n,
 "fatal_error": "&amp;lt;one line, or 'none'&amp;gt;"}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run every candidate model, including the frontier API baseline and its Arabic-prompted variant, on the identical set with the identical retrieval context if you use RAG. Report the mean total, the per-criterion breakdown, and the fatal-error rate. The per-criterion breakdown matters more than the total: a model that loses two points per item entirely on dialect handling might be fixable with prompt work, while one that loses them on grounding needs retrieval surgery, and one that loses them on correctness needs to be dropped.&lt;/p&gt;

&lt;p&gt;For dialect specifically, published per-dialect evaluations such as &lt;a href="https://aclanthology.org/2026.lrec-1.251.pdf" rel="noopener noreferrer"&gt;DialectalArabicMMLU&lt;/a&gt; show how much scores move between MSA and regional varieties, and TII reports AraDice dialect sub-scores for the Falcon-H1-Arabic family. Your own dialect slice settles the question for your dialect, which is the only one that matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  The second thing that transfers: tokenization economics
&lt;/h2&gt;

&lt;p&gt;Arabic text costs more tokens than the equivalent English text on English-centric tokenizers, and that premium appears in four places at once: your API bill, time to first token, KV-cache memory and the number of concurrent Arabic sessions a GPU can hold.&lt;/p&gt;

&lt;p&gt;The peer-reviewed evidence is blunt. Petrov and colleagues showed that the GPT-4 tokenizer encodes the same content in Standard Arabic with roughly &lt;strong&gt;3.04 times&lt;/strong&gt; as many tokens as English, and the ChatGPT tokenizer with about 4.40 times as many, with direct consequences for cost, latency and effective context length (&lt;a href="https://arxiv.org/pdf/2305.15425v2.pdf" rel="noopener noreferrer"&gt;arXiv:2305.15425&lt;/a&gt;). The original Jais team measured the same pattern at the word level: GPT-2's vocabulary fragments Arabic into about 4.17 tokens per Arabic word against roughly 1.1 per English word, while the bilingual Jais vocabulary achieves about 1.05 (&lt;a href="https://www.bayanatlabs.com/insights/arabic-tokenization-tax" rel="noopener noreferrer"&gt;fertility figures summarised here&lt;/a&gt;). Newer multilingual vocabularies have narrowed the gap, but a 1.5 to 2 times premium on an Arabic-inefficient tokenizer is still normal, and nothing on your invoice labels it.&lt;/p&gt;

&lt;p&gt;Measure it on your own traffic before believing any ratio. Ten lines of Python gives you fertility, tokens per word, on a sample of your real conversations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;transformers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AutoTokenizer&lt;/span&gt;

&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sample_arabic_conversations.txt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;words&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="c1"&gt;# Verified repo IDs; add the other candidates from their model cards
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;repo&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;QCRI/Fanar-2-27B-Instruct&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
             &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;humain-ai/ALLaM-7B-Instruct-preview&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="n"&gt;tok&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AutoTokenizer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_pretrained&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;repo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;fertility&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;tok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;input_ids&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;words&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;repo&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;fertility&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; tokens per Arabic word&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One caution: studies count words and normalise text differently, so compare ratios within your own sample rather than against published absolutes. Your sample is the number that will hit your bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worked example: what the premium actually costs
&lt;/h2&gt;

&lt;p&gt;Take a 400-word Arabic support answer and compare a model whose tokenizer gives 2.4 tokens per Arabic word against an Arabic-optimised model at 1.5. Same content, same job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spend.&lt;/strong&gt; The answer is 960 tokens on the first tokenizer, 600 on the second, a 1.6 times premium on every request. At an illustrative $5 per million output tokens, one million such answers costs $4,800 versus $3,000, a $1,800 difference before you have written a word of prompt engineering. Multiply by your volume. And note the trap when comparing providers: a model priced 30% lower per token that fragments Arabic 1.6 times more is not 30% cheaper for you, it is roughly 12% more expensive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Latency.&lt;/strong&gt; Prefill is compute-bound on prompt length, so time to first token scales with the token count of your system prompt plus retrieved context. Decode is per token, so an answer fragmented into 1.6 times the tokens streams 1.6 times longer at the same hardware speed. Prompt tuning cannot remove this; it is in the vocabulary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;KV cache and concurrency.&lt;/strong&gt; Per-token KV-cache size for a 7B-class model with 32 layers, 8 grouped-query KV heads and 128-dimension heads at fp16 is 2 x 32 x 8 x 128 x 2 = 131,072 bytes, about 128 KiB per token. A 4,000-token Arabic conversation at the efficient tokenizer holds about 500 MB of KV per session; the same content at 1.6 times fertility holds about 800 MB. On a GPU with 60 GB free after model weights, that is roughly 120 concurrent sessions versus 75. Tokenization, not parameter count, decided your concurrency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context.&lt;/strong&gt; A 256K context window (Falcon-H1-Arabic 7B and 34B) holds far more Arabic at a low fertility than a longer window holds at a high one. This is why the Jais 2 team built a custom 150,272-entry Arabic-centric vocabulary and report it makes inference efficient: the efficiency is not marketing, it is arithmetic you can reproduce with the snippet above.&lt;/p&gt;

&lt;h2&gt;
  
  
  The decision rule
&lt;/h2&gt;

&lt;p&gt;Now the choice reduces to one comparison on one spreadsheet.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run all candidates on your eval set. Suppose the frontier API scores 9.1 out of 10 and Falcon-H1-Arabic 7B scores 8.6. The gap is 0.5 points.&lt;/li&gt;
&lt;li&gt;Set your tolerance in advance, in the currency of your use case: acceptable fatal-error rate on billing questions, acceptable dialect-mishandling rate. Do not set it after seeing the scores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If the open model is inside your tolerance:&lt;/strong&gt; run it on your own GPUs. You keep every conversation in-country, you pay a fixed infrastructure cost instead of a token bill that scales with Arabic verbosity, and you are not exposed to an API being retired (Jais 2's hosted endpoint went away in August 2026; its weights did not). A regional open model that scores within tolerance on your data is strictly the better enterprise choice: cheaper per request, in-country data, and no dependency on someone else's pricing page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If the gap exceeds your tolerance:&lt;/strong&gt; do not pay for it blindly. Quantify the frontier model's advantage in cost per resolved request: with the 1.6 times tokenization premium on an English-centric tokenizer and your ticket volume, what is the API bill for the extra 0.5 points? Then price the alternative: the same eval gap might close with a better Arabic system prompt, stronger retrieval into your policy documents, or three days of fine-tuning the open model on 2,000 of your own tickets. Very often the fine-tune is cheaper in month four than the API premium is in month one.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A practical note on keeping this sustainable: whatever prompts and gold answers survive the eval, version them. The Arabic system prompts that work, the dialect-handling instructions, the few-shot examples, these are assets, and they are exactly the kind of asset that walks out the door in a Markdown file. We keep them in a shared, versioned prompt library (&lt;a href="https://www.azrty.com/software/promptforge" rel="noopener noreferrer"&gt;PromptForge&lt;/a&gt;), and when we build and run these assistants for clients, from eval set through deployment, that is our &lt;a href="https://www.azrty.com/services/build" rel="noopener noreferrer"&gt;AI engineering work&lt;/a&gt;, done by our own team here in Dubai.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do next
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;This week:&lt;/strong&gt; pull 300 real items using the mix above. It is three days of one analyst and one domain expert, and it is reusable for every model you will ever evaluate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;In parallel:&lt;/strong&gt; run the fertility snippet on 100 of your real conversations for every shortlisted model, including the frontier API's tokenizer. You now have the two numbers that transfer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next week:&lt;/strong&gt; run all candidates through the judge prompt, with a human agreement check on 50 overlapping items. Build the table: eval score, fatal-error rate, tokens per request, cost per resolved request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Then decide with the rule above.&lt;/strong&gt; If the regional open model is inside tolerance, it wins on data residency and unit economics, and GCC regulators and your security team will thank you. If it is not, you now know exactly what the gap costs per month, which turns a vague preference into a negotiation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The best Arabic LLM for enterprise is not a fixed answer, because "enterprise" is not a fixed workload. It is whichever of Falcon-H1-Arabic, ALLaM, Fanar 2, Jais 2 or a frontier API passes an eval set built from your own tickets, at a token cost you have measured rather than assumed. Both measurements take a week. The alternative is guessing, and guessing is the most expensive part of any AI project.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.azrty.com/blog/the-best-arabic-llm-for-your-enterprise-is-the-one-that-passes-your-eval-not-the" rel="noopener noreferrer"&gt;Azrty&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>arabicllm</category>
      <category>aiinfrastructure</category>
      <category>evaluation</category>
      <category>llmcost</category>
    </item>
    <item>
      <title>vLLM vs SGLang vs TensorRT-LLM: how to choose a self-hosted inference engine in 2026</title>
      <dc:creator>Azrty</dc:creator>
      <pubDate>Fri, 23 Oct 2026 05:09:54 +0000</pubDate>
      <link>https://dev.to/azrty/vllm-vs-sglang-vs-tensorrt-llm-how-to-choose-a-self-hosted-inference-engine-in-2026-24eb</link>
      <guid>https://dev.to/azrty/vllm-vs-sglang-vs-tensorrt-llm-how-to-choose-a-self-hosted-inference-engine-in-2026-24eb</guid>
      <description>&lt;p&gt;You have already decided to run your own GPUs. Now someone is asking you to pick a serving engine, and every deck in your inbox quotes a single throughput number. Those numbers are real, and they are nearly useless to you: the right engine for your platform is decided by the shape of your traffic and the strictness of your latency SLO, not by a leaderboard. This post gives you the decision table, the operational costs nobody quotes, and a benchmark you can run in a day to settle the question on your own hardware.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short answer: vLLM vs SGLang vs TensorRT-LLM
&lt;/h2&gt;

&lt;p&gt;If you want the decision in one table before the reasoning, here it is.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Your situation&lt;/th&gt;
&lt;th&gt;Pick&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Long shared system prompts, RAG context blocks, multi-turn agents, tree search&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;SGLang&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RadixAttention reuses cached prefixes across requests; independent harnesses measure 30 to 40% higher output throughput on prefix-heavy traffic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strict p99 TTFT or ITL SLOs at scale, one stable model for months&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;TensorRT-LLM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lowest measured TTFT at every concurrency tested; fused kernels and CUDA graph capture compress the tail&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Many models, frequent model swaps, mixed hardware, thin platform team&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;vLLM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;200+ architectures, no build step, broadest quantisation support, largest community&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;You genuinely cannot tell which of the above you are&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;vLLM first&lt;/strong&gt;, measure, then specialise&lt;/td&gt;
&lt;td&gt;It is the fastest path to a correct measurement of your own traffic&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Everything below explains why that table holds, where the published numbers come from, and how to verify it yourself on your own infrastructure in one working day.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the audited numbers actually say
&lt;/h2&gt;

&lt;p&gt;Start with the only cross-engine numbers that are externally audited: MLPerf Inference v6.0, released by MLCommons on 1 April 2026 (&lt;a href="https://mlcommons.org/2026/04/mlperf-inference-v6-0-results/" rel="noopener noreferrer"&gt;announcement&lt;/a&gt;, &lt;a href="https://mlcommons.org/benchmarks/inference/" rel="noopener noreferrer"&gt;benchmark definitions&lt;/a&gt;). This round added a GPT-OSS 120B benchmark with three scenarios, including a latency-bounded Server scenario with demanding constraints: p99 time to first token under 3 seconds and p99 time per output token under 80 milliseconds, with input lengths ranging from 600 to 15,000 tokens.&lt;/p&gt;

&lt;p&gt;On GPT-OSS 120B running on 8×B200 systems, the audited spread is instructive:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A vLLM stack (Red Hat OpenShift AI with the llm-d scheduler and vLLM) submitted &lt;strong&gt;93,071 output tokens/s offline&lt;/strong&gt; and &lt;strong&gt;71,588 tokens/s server&lt;/strong&gt;, which Red Hat reports as about 8% ahead of the nearest comparable B200 submission in the throughput-oriented Offline scenario (&lt;a href="https://www.redhat.com/en/blog/red-hat-ai-tops-mlperf-inference-v60-vllm-qwen3-vl-whisper-and-gpt-oss-120b" rel="noopener noreferrer"&gt;Red Hat's submission write-up&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;TensorRT-LLM based submissions led the latency-bounded Server scenario on the same model and hardware class by roughly 22%, while trailing on raw offline throughput.&lt;/li&gt;
&lt;li&gt;NVIDIA reported that TensorRT-LLM and Dynamo optimisations delivered up to 2.7x higher token throughput on the same GB300 NVL72 hardware compared with six months earlier, and notably used &lt;strong&gt;vLLM&lt;/strong&gt; for its Qwen3-VL multimodal submission (&lt;a href="https://developer.nvidia.com/blog/nvidia-platform-delivers-lowest-token-cost-enabled-by-extreme-co-design/" rel="noopener noreferrer"&gt;NVIDIA's write-up&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two operational facts matter far more than who won a given bar chart. First, the audited spread on identical hardware is single-digit to low-double-digit percentages, not the 2x to 5x figures routinely claimed in vendor marketing blogs. Second, 20 submitters used vLLM in this round, up from 5 submitters in v5.1. That surge illustrates where open-source ecosystem gravity has settled.&lt;/p&gt;

&lt;p&gt;Compare that audited reality with un-audited benchmarks. An independent cross-engine harness published in June 2026 (&lt;a href="https://iotdigitaltwinplm.com/sglang-vs-vllm-vs-tensorrt-llm-benchmark-2026/" rel="noopener noreferrer"&gt;methodology and results&lt;/a&gt;) reports SGLang's RadixAttention advantage as "up to 5x" on extreme synthetic prefix sharing, yet measures a much more modest 1.3 to 1.4x on a realistic enterprise RAG workload with a 4K shared system prompt. It also notes that repeated runs carry a variance band of plus or minus 15 to 20%. Both realities coexist: the caching mechanism is genuinely powerful, but the marketing multiplier depends on synthetic assumptions that rarely reflect production traffic.&lt;/p&gt;

&lt;p&gt;The takeaway is not to ignore benchmarks. It is to benchmark your own traffic shape, at your concurrency, under your strict latency service level objectives (SLOs).&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the engines actually differ
&lt;/h2&gt;

&lt;p&gt;All three engines implement continuous batching, paged or blocked KV cache management, chunked prefill, and FP8 execution. The architectural differences that alter your production throughput and latency are much narrower than vendor marketing suggests.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;vLLM&lt;/th&gt;
&lt;th&gt;SGLang&lt;/th&gt;
&lt;th&gt;TensorRT-LLM&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Core memory design&lt;/td&gt;
&lt;td&gt;PagedAttention: KV cache split into fixed-size blocks with copy-on-write prefix sharing (&lt;a href="https://docs.vllm.ai" rel="noopener noreferrer"&gt;docs&lt;/a&gt;)&lt;/td&gt;
&lt;td&gt;RadixAttention: a radix tree of cached prefixes keyed by token sequence, matching the longest prefix (&lt;a href="https://docs.sglang.ai" rel="noopener noreferrer"&gt;docs&lt;/a&gt;)&lt;/td&gt;
&lt;td&gt;Paged KV cache with tight memory layout and fused kernels; cross-request prefix reuse more limited by default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prefix handling&lt;/td&gt;
&lt;td&gt;Automatic prefix caching via &lt;code&gt;--enable-prefix-caching&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Enabled by default; &lt;code&gt;--disable-radix-cache&lt;/code&gt; to test; configurable via &lt;code&gt;--radix-eviction-policy lru/lfu/slru/priority&lt;/code&gt;; &lt;code&gt;--enable-cache-report&lt;/code&gt; returns cached tokens in &lt;code&gt;usage.prompt_tokens_details&lt;/code&gt; (&lt;a href="https://docs.sglang.ai/advanced_features/server_arguments.html" rel="noopener noreferrer"&gt;server arguments&lt;/a&gt;)&lt;/td&gt;
&lt;td&gt;KV cache reuse exists but is not the headline mechanism&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model coverage&lt;/td&gt;
&lt;td&gt;200+ Hugging Face architectures, multi-modal, embeddings, 2000+ contributors&lt;/td&gt;
&lt;td&gt;Broad and fast support for new open weights, strong MoE and hybrid attention coverage&lt;/td&gt;
&lt;td&gt;Narrower; prioritises models specifically optimised by NVIDIA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quantisation&lt;/td&gt;
&lt;td&gt;FP8, MXFP8/MXFP4, NVFP4, INT8, INT4, GPTQ/AWQ, GGUF, compressed-tensors&lt;/td&gt;
&lt;td&gt;FP8 and related formats via runtime flags, such as &lt;code&gt;--quantization fp8&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;FP8/INT4 via ModelOpt quantisation; per-configuration artefacts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Startup&lt;/td&gt;
&lt;td&gt;~60 s (weights download and memory allocation dominate)&lt;/td&gt;
&lt;td&gt;~58 s&lt;/td&gt;
&lt;td&gt;Compiled engine path measured at ~28 min build for Llama 3.3 70B FP8 on H100; PyTorch backend now loads Hugging Face checkpoints directly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API surface&lt;/td&gt;
&lt;td&gt;OpenAI-compatible server, Anthropic Messages API, and gRPC&lt;/td&gt;
&lt;td&gt;OpenAI-compatible server, plus native Anthropic API support&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;trtllm-serve&lt;/code&gt; providing OpenAI-compatible endpoints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Measured edge&lt;/td&gt;
&lt;td&gt;Best generalist engine; wins high-concurrency chat in several harnesses&lt;/td&gt;
&lt;td&gt;30 to 40% higher throughput on shared-prefix RAG traffic&lt;/td&gt;
&lt;td&gt;Lowest TTFT p50/p95/p99 at every concurrency tested (&lt;a href="https://www.spheron.network/blog/vllm-vs-tensorrt-llm-vs-sglang-benchmarks/" rel="noopener noreferrer"&gt;Spheron H100 runs&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Consider the final row carefully against your specific workload. In Spheron's single-H100 benchmark using fully unique prompts (Llama 3.3 70B FP8, vLLM 0.18.0, SGLang 0.5.9, TensorRT-LLM 1.2.0), SGLang and vLLM finished within 4% of each other on raw throughput because RadixAttention had no shared tokens to reuse. In the alternative harness where incoming requests shared a 4K system prompt, SGLang pulled 30 to 40% ahead. Identical serving engines reached opposing conclusions purely due to differences in prompt structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose by traffic shape, not by leaderboard
&lt;/h2&gt;

&lt;p&gt;Three distinct traffic profiles cover the vast majority of enterprise deployments in the UAE and wider GCC region.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Prefix-heavy traffic
&lt;/h3&gt;

&lt;p&gt;This pattern includes retrieval-augmented generation (RAG) platforms with lengthy system instructions, legal or regulatory compliance assistants carrying mandatory policy blocks, multi-turn conversational agents, and agentic workflows running structured evaluation loops.&lt;/p&gt;

&lt;p&gt;This is where SGLang's radix tree structure excels. Instead of discarding KV cache entries or relying solely on block hashing, SGLang maintains a tree structure in memory. When a request arrives, the engine finds the longest matching token prefix and reuses the computed KV states immediately. The prefill phase for those tokens is skipped entirely.&lt;/p&gt;

&lt;p&gt;Empirical field testing indicates an operational threshold of around 60% prefix overlap. When shared prefix tokens exceed 60% of total input tokens across incoming requests, SGLang delivers a substantial throughput and latency advantage. Below 60%, vLLM with &lt;code&gt;--enable-prefix-caching&lt;/code&gt; active closes most of the performance difference. Multi-turn chat agents represent an ideal workload for SGLang, as every consecutive turn resends the entire conversational history as an extended prefix.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Strict tail-latency traffic
&lt;/h3&gt;

&lt;p&gt;This profile covers interactive voice agents, real-time code completion, customer-facing search copilot integrations, and any deployment governed by strict contractual latency SLOs.&lt;/p&gt;

&lt;p&gt;TensorRT-LLM led across every measured latency percentile in both independent benchmarks. In the Spheron evaluation at a concurrency of 50 requests:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Time to first token (TTFT) p50 reached 340 ms for TensorRT-LLM, compared to 360 ms for SGLang and 380 ms for vLLM.&lt;/li&gt;
&lt;li&gt;The TTFT p95 divergence was wider: 620 ms for TensorRT-LLM versus 680 ms for SGLang and 720 ms for vLLM.&lt;/li&gt;
&lt;li&gt;On a 4×H100 cluster running conversational chat at concurrency 64, TensorRT-LLM clocked a TTFT p99 of 265 ms, against 340 ms for SGLang and 410 ms for vLLM.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your technical team has committed to an internal SLO requiring p99 TTFT under 300 ms on a 70B parameter model, that 145 ms margin is the difference between compliant production operations and an SLA breach. TensorRT-LLM achieves this tail compression through custom fused kernels, specialised memory scheduling, and CUDA graph execution that avoids CPU launch overheads.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. High model churn and broad catalogue requirements
&lt;/h3&gt;

&lt;p&gt;This profile describes platforms supporting multiple business units, regular model fine-tuning cycles, experimental agent pilots, LoRA adapter routing, and mixed GPU fleets combining older Hopper nodes with newer hardware.&lt;/p&gt;

&lt;p&gt;In this environment, vLLM remains the premier operational choice. Supporting over 200 Hugging Face model architectures, vLLM allows platform engineers to onboard a new model checkpoint simply by updating a Kubernetes manifest or configuration argument. Quantisation formats like FP8, AWQ, or GPTQ are applied dynamically with command-line flags such as &lt;code&gt;--quantization fp8&lt;/code&gt;, without requiring offline compilation scripts.&lt;/p&gt;

&lt;p&gt;Furthermore, vLLM provides the most mature ecosystem support, the deepest Prometheus metrics instrumentation, and the broadest developer community. If your platform engineering team is lean, vLLM minimises operational maintenance overhead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worked example: what a million output tokens costs on one H100
&lt;/h2&gt;

&lt;p&gt;Consider a realistic deployment scenario: a bilingual banking copilot built for a financial institution in Dubai, serving English and Arabic inquiries. The workload runs Llama 3.3 70B Instruct at FP8 precision on a single NVIDIA H100 SXM 80GB GPU. Model weights occupy approximately 70GB in FP8, leaving the remaining memory for KV cache allocation using &lt;code&gt;--max-model-len 8192&lt;/code&gt; and &lt;code&gt;--gpu-memory-utilization 0.92&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Each incoming request carries a 3,000-token system prompt containing regulatory policies, formatting guidelines, and retrieved documentation blocks. The end user provides 200 tokens of input, and the model generates 250 output tokens. Steady peak operating volume is 50 concurrent requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Measure prefix overlap
&lt;/h3&gt;

&lt;p&gt;Before selecting an engine or tuning hardware flags, measure the exact prefix reuse of your production traffic. Launch an SGLang instance configured with &lt;code&gt;--enable-cache-report&lt;/code&gt;, dispatch 200 production sample requests, and read the &lt;code&gt;usage.prompt_tokens_details.cached_tokens&lt;/code&gt; field in the API response.&lt;/p&gt;

&lt;p&gt;If roughly 3,000 of your 3,200 input tokens return as cached on warm requests, your workload exhibits 94% prefix overlap. RadixAttention will yield immediate gains.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Benchmark at operating concurrency
&lt;/h3&gt;

&lt;p&gt;Benchmark the engines at your realistic concurrency level of 50, rather than at saturation limits. Drawing from published single-H100 measurements with unique prompts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Engine&lt;/th&gt;
&lt;th&gt;Output throughput&lt;/th&gt;
&lt;th&gt;TTFT p50&lt;/th&gt;
&lt;th&gt;TTFT p95&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TensorRT-LLM 1.2.0&lt;/td&gt;
&lt;td&gt;2,100 tok/s&lt;/td&gt;
&lt;td&gt;340 ms&lt;/td&gt;
&lt;td&gt;620 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SGLang 0.5.9&lt;/td&gt;
&lt;td&gt;1,920 tok/s&lt;/td&gt;
&lt;td&gt;360 ms&lt;/td&gt;
&lt;td&gt;680 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;vLLM 0.18.0&lt;/td&gt;
&lt;td&gt;1,850 tok/s&lt;/td&gt;
&lt;td&gt;380 ms&lt;/td&gt;
&lt;td&gt;720 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 3: Translate throughput into infrastructure costs
&lt;/h3&gt;

&lt;p&gt;The conversion formula from raw output tokens per second to cost per million output tokens is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# cost per 1M output tokens = node $/hour / (output tok/s * 3600) * 1e6
&lt;/span&gt;&lt;span class="n"&gt;rate_usd_per_hour&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;2.64&lt;/span&gt;  &lt;span class="c1"&gt;# Spheron H100 SXM on-demand rate, October 2026
&lt;/span&gt;&lt;span class="n"&gt;engines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TensorRT-LLM&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SGLang&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1920&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;vLLM&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1850&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tps&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;engines&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;cost_per_million&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rate_usd_per_hour&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tps&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;3600&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1e6&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;cost_per_million&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; per 1M output tokens&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# TensorRT-LLM: $0.35 per 1M output tokens
# SGLang: $0.38 per 1M output tokens
# vLLM: $0.40 per 1M output tokens
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Under these baseline parameters, generating 250 output tokens costs less than $0.0001 in compute time per answered query across all three engines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Apply the traffic shape correction
&lt;/h3&gt;

&lt;p&gt;The baseline figures above reflect unique, non-overlapping prompts. Once we evaluate the actual workload structure (a 4K shared system prompt with 8K total context across concurrency 256 on a 4×H100 cluster billed at $3.50 per GPU-hour), independent measurements demonstrate how traffic shape alters unit economics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SGLang:&lt;/strong&gt; $0.49 per million output tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TensorRT-LLM:&lt;/strong&gt; $0.64 per million output tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;vLLM:&lt;/strong&gt; $0.70 per million output tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For an enterprise cluster serving 750 million output tokens daily, SGLang requires roughly $367 per day, compared to $480 per day on TensorRT-LLM and $525 per day on vLLM. Over an annual operational cycle, choosing an engine aligned with your prefix pattern yields over $57,000 in direct compute savings on a single cluster.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Formulate the decision
&lt;/h3&gt;

&lt;p&gt;Because this specific copilot workload demonstrates 94% prefix overlap and carries no contractual sub-300 ms p99 TTFT requirement, SGLang represents the optimal, cost-efficient deployment choice. vLLM with &lt;code&gt;--enable-prefix-caching&lt;/code&gt; serves as a viable fallback. If product managers later impose a strict p99 TTFT threshold under 250 ms, the engineering team should pivot the deployment to TensorRT-LLM to safeguard tail latency.&lt;/p&gt;

&lt;h2&gt;
  
  
  A benchmark you can run in a day
&lt;/h2&gt;

&lt;p&gt;To avoid vendor bias, establish an internal reproducible benchmark. Fix the technical parameters that benchmark marketing routinely obscures: exact Hugging Face checkpoint revision hash, precision configuration (FP8 versus INT4), physical GPU model, tensor-parallel degree, maximum context window (&lt;code&gt;max_model_len&lt;/code&gt;), host OS kernel, NVIDIA driver, and CUDA toolkit version.&lt;/p&gt;

&lt;p&gt;Evaluate four key operational metrics under your target production concurrency:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;TTFT p50 and p99:&lt;/strong&gt; The critical indicator of perceived interactive responsiveness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output token throughput:&lt;/strong&gt; Total generation speed at target concurrency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KV cache utilisation and prefix hit rate:&lt;/strong&gt; Memory efficiency during sustained load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost per million output tokens:&lt;/strong&gt; True operational expenditure calculated at your realistic traffic rate.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Both vLLM and SGLang bundle native client benchmarking utilities designed to capture end-to-end metrics at the network edge:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# vLLM: Measure throughput and latency percentiles against a running instance&lt;/span&gt;
vllm bench serve &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--backend&lt;/span&gt; vllm &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--model&lt;/span&gt; meta-llama/Llama-3.3-70B-Instruct &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--dataset-name&lt;/span&gt; sharegpt &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--dataset-path&lt;/span&gt; ./sharegpt.json &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--request-rate&lt;/span&gt; 8 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--num-prompts&lt;/span&gt; 400 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--percentile-metrics&lt;/span&gt; ttft,tpot,itl &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--metric-percentiles&lt;/span&gt; 50,99 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output-json&lt;/span&gt; results_vllm.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# SGLang: Run steady-state benchmark with custom operational traces&lt;/span&gt;
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; sglang.bench_serving &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--backend&lt;/span&gt; sglang &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--max-concurrency&lt;/span&gt; 50 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--num-prompts&lt;/span&gt; 400 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--dataset-name&lt;/span&gt; custom &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--dataset-path&lt;/span&gt; ./production_trace.jsonl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For TensorRT-LLM, run the identical load generator against the &lt;code&gt;trtllm-serve&lt;/code&gt; OpenAI-compatible endpoint. Standardising the test harness across all engines ensures parity. As vLLM's official documentation highlights, metric definitions vary significantly across distinct benchmarking packages (&lt;a href="https://docs.vllm.ai/en/stable/benchmarking/cli/" rel="noopener noreferrer"&gt;benchmark CLI documentation&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Follow three rules to ensure reliable data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Replay authentic traces:&lt;/strong&gt; Avoid synthetic pseudo-random token streams. Random strings suppress prefix cache hits and distort memory allocators. Collect 500 to 1,000 anonymised production requests and replay them sequentially.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Warm up before recording:&lt;/strong&gt; Execute 60 seconds of unrecorded traffic to prime memory allocations, CUDA graphs, and caching trees. Record three subsequent five-minute test passes and record median values.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sweep concurrency bounds:&lt;/strong&gt; Test load at 0.5x, 1x, and 2x expected operational concurrency. Engine performance degrades along non-linear curves as KV cache memory saturates.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The operational costs nobody puts in the slide deck
&lt;/h2&gt;

&lt;p&gt;Engine bake-offs frequently disregard platform operational overhead. Factor these practical engineering costs into your architectural plan.&lt;/p&gt;

&lt;h3&gt;
  
  
  TensorRT-LLM compilation overhead
&lt;/h3&gt;

&lt;p&gt;Historically, compiled TensorRT-LLM engines required substantial compilation time: approximately 28 minutes for Llama 3.3 70B FP8 on a single H100 (5 minutes for weight quantisation and 23 minutes for engine graph generation). Building artefacts across multiple GPU counts and quantisation profiles easily demands 1 to 5 hours of engineering effort before serving the first request. Spheron's cold-start benchmarks recorded 28 minutes to readiness for compiled paths, compared to approximately 60 seconds for vLLM and SGLang. For Kubernetes clusters autoscaling from zero, compiled engines introduce unacceptable pod startup delays.&lt;/p&gt;

&lt;h3&gt;
  
  
  The legacy build path has been removed
&lt;/h3&gt;

&lt;p&gt;Platform engineers must note a major architectural change: NVIDIA's &lt;a href="https://nvidia.github.io/TensorRT-LLM/legacy/tensorrt-backend-removal.html" rel="noopener noreferrer"&gt;TensorRT backend removal guide&lt;/a&gt; confirms that the legacy TensorRT engine backend has been removed. PyTorch is now the sole execution backend. Legacy utilities including &lt;code&gt;trtllm-build&lt;/code&gt;, &lt;code&gt;trtllm-refit&lt;/code&gt;, &lt;code&gt;trtllm-prune&lt;/code&gt;, and standalone &lt;code&gt;convert_checkpoint.py&lt;/code&gt; scripts have been deprecated and retired.&lt;/p&gt;

&lt;p&gt;Current versions of TensorRT-LLM load Hugging Face checkpoints directly through the PyTorch runtime backend. This transition eliminates prolonged compilation delays, but historical automation scripts and CI/CD pipelines calling &lt;code&gt;trtllm-build&lt;/code&gt; will break on modern releases. Any architectural assessment must be verified against current PyTorch-backend documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Silent performance regressions during upgrades
&lt;/h3&gt;

&lt;p&gt;High-velocity open-source engines release frequent updates. A minor version bump in vLLM or SGLang can introduce double-digit shifts in p99 latency or alter default memory allocators. Engineering teams should pin container image tags strictly in production and run automated benchmark verification scripts in staging environments prior to promoting updates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory preallocation trade-offs
&lt;/h3&gt;

&lt;p&gt;Serving engines allocate KV cache pools upon process startup. Engineering teams that proactively calibrate parameters such as &lt;code&gt;gpu-memory-utilization&lt;/code&gt; in vLLM and &lt;code&gt;--mem-fraction-static&lt;/code&gt; in SGLang consistently recover 20 to 30% in throughput. Conversely, improper configurations trigger out-of-memory crashes during unexpected context spikes. Memory settings must be tuned systematically per model checkpoint and context length.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-replica tail latency
&lt;/h3&gt;

&lt;p&gt;In scaled Kubernetes deployments, tail latency is frequently dictated by cluster ingress and pod scheduling rather than kernel execution. As demonstrated in the Red Hat MLPerf submission, integrating the llm-d scheduler with queue-aware routing compressed p99 TTFT from 3.4 seconds down to 2.1 seconds purely through intelligent dispatching based on KV cache state and pod queue depth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the serving engine replaceable
&lt;/h2&gt;

&lt;p&gt;Because all three engines expose OpenAI-compatible REST endpoints at &lt;code&gt;/v1/chat/completions&lt;/code&gt;, treating the inference engine as an immutable, tightly coupled dependency is an architectural anti-pattern. The engine should function as a swappable component sitting behind an enterprise routing gateway.&lt;/p&gt;

&lt;p&gt;This decoupling allows organisations to operate a hybrid strategy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploy &lt;strong&gt;vLLM&lt;/strong&gt; for internal innovation sandboxes and long-tail departmental models.&lt;/li&gt;
&lt;li&gt;Deploy &lt;strong&gt;SGLang&lt;/strong&gt; for customer-facing RAG pipelines and multi-turn autonomous agents.&lt;/li&gt;
&lt;li&gt;Deploy &lt;strong&gt;TensorRT-LLM&lt;/strong&gt; for mission-critical core models bound by rigid latency service level agreements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Adopting this architecture requires three capabilities at the gateway layer: unified OpenAI-compatible routing across both self-hosted nodes and external providers, fine-grained access control, and dynamic usage quota management to protect GPU resources from runaway query loops.&lt;/p&gt;

&lt;p&gt;At Azrty, this architectural pattern is standard practice. We deploy &lt;a href="https://www.azrty.com/software/fastllm-proxy" rel="noopener noreferrer"&gt;FastLLM Proxy&lt;/a&gt; as an OpenAI-compatible gateway in front of self-hosted LLM clusters and hosted APIs, managing routing, user access, and team budgets from a single plane. When an enterprise requires an end-to-end platform to orchestrate agents, models, and GPU hardware as a managed internal service, we implement &lt;a href="https://www.azrty.com/software/kuvryn-ai" rel="noopener noreferrer"&gt;Kuvryn AI&lt;/a&gt;. For organisations planning their cluster architecture, our team provides comprehensive &lt;a href="https://www.azrty.com/services/operate" rel="noopener noreferrer"&gt;AI infrastructure engineering&lt;/a&gt;. Azrty is a UAE company based in Dubai. Our own team in the UAE does the consulting, the deployment, and the support for our clients across the region.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do next
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Quantify your prefix overlap:&lt;/strong&gt; Deploy SGLang with &lt;code&gt;--enable-cache-report&lt;/code&gt; or monitor vLLM's prefix cache hit metrics against an active trace. If shared prefixes exceed 60%, prioritise SGLang.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Formalise concrete latency SLOs:&lt;/strong&gt; Define target thresholds explicitly (for example: "p99 TTFT under 250 ms at 64 concurrent requests"). Without explicit figures, engine trade-offs remain ambiguous.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execute the one-day benchmark:&lt;/strong&gt; Deploy your candidate model on target hardware, sweep concurrency levels, and calculate unit economics using the cost formula provided above.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit operational friction:&lt;/strong&gt; Include model onboarding time, cold-start latency, memory tuning, and container upgrade maintenance within your total cost of ownership.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decouple applications with an inference gateway:&lt;/strong&gt; Shield upstream applications behind an abstraction layer. When your inference engine sits behind a unified API gateway, changing serving engines requires a routing adjustment rather than an application refactoring.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Serving engines will continue to iterate rapidly. Maintaining a measurement-driven evaluation process and decoupling your infrastructure ensures your platform captures performance advances without incurring technical debt.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.azrty.com/blog/vllm-vs-sglang-vs-tensorrt-llm-how-to-choose-a-self-hosted-inference-engine-in-2" rel="noopener noreferrer"&gt;Azrty&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>vllm</category>
      <category>sglang</category>
      <category>tensorrtllm</category>
      <category>llminference</category>
    </item>
    <item>
      <title>How to evaluate AI software before buying: a hotel guide</title>
      <dc:creator>Azrty</dc:creator>
      <pubDate>Mon, 19 Oct 2026 05:09:21 +0000</pubDate>
      <link>https://dev.to/azrty/how-to-evaluate-ai-software-before-buying-a-hotel-guide-53cf</link>
      <guid>https://dev.to/azrty/how-to-evaluate-ai-software-before-buying-a-hotel-guide-53cf</guid>
      <description>&lt;p&gt;Every hotel AI vendor demos well, because the vendor chooses the examples. The questions that decide whether a guest messaging or pricing tool is safe to deploy are narrower and harder: how does it handle your real guests, your seasonal tariffs, and your mixed Arabic and English threads? This article sets out a two-week evaluation framework built from 50 past enquiries from your own communication logs, an operational scorecard that distinguishes right, wrong and made-up answers, a strict source traceability check, and pass criteria agreed in writing before testing begins. You can run it with any vendor and walk away from tools that fail.&lt;/p&gt;

&lt;p&gt;To evaluate AI software before buying, stop scoring vendor demonstrations and test competing tools on 50 historical enquiries drawn from your own operational logs. The process requires three steps: establish reference answers with supporting source documents before testing begins, evaluate responses against strict pass gates for accuracy and source grounding, and disqualify any tool that fabricates commercial commitments such as room rates or policies. Whether evaluating guest messaging for a city hotel in Dubai or an enterprise workflow across the GCC, your own past data is the only reliable benchmark.&lt;/p&gt;

&lt;p&gt;Hotel buying committees are already moving. A study by &lt;a href="https://www.canarytechnologies.com/press/hotel-ai-research-report-2026" rel="noopener noreferrer"&gt;Canary Technologies&lt;/a&gt; of over 400 hospitality professionals responsible for technology purchasing decisions found that 71% say AI is having a significant or transformative impact, 82% expect AI usage to increase in their organisation within the next year, and 85% expect to allocate at least 5% of their IT budget to AI tools this year. Guest communications sit at the top of the wish list. That is precisely where the risk sits too, because a message to a guest is a promise, and an AI tool that invents a room rate, a cancellation policy or a facility makes commitments your property never authorised.&lt;/p&gt;

&lt;p&gt;The question every GM, owner and technical lead is asking is how to evaluate AI software before buying with confidence. The answer is identical whether you run a 300-key city hotel in Dubai, a luxury desert resort in Abu Dhabi, or a boutique property group across the GCC: stop scoring the vendor's rehearsed examples and start scoring your own.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do vendor demos and published benchmarks fail to reflect reality?
&lt;/h2&gt;

&lt;p&gt;Vendor demos use rehearsed inputs. Published benchmarks use someone else's inputs. OpenAI's SimpleQA benchmark, released on 30 October 2024, comprises 4,326 short fact-seeking questions with human-verified answers. The &lt;a href="https://openai.com/index/introducing-simpleqa/" rel="noopener noreferrer"&gt;SimpleQA&lt;/a&gt; paper is honest enough to note that GPT-4o scores under 40% on it, and that the dataset itself carries an estimated 3% inherent error rate. Google DeepMind's &lt;a href="https://deepmind.google/blog/facts-grounding-a-new-benchmark-for-evaluating-the-factuality-of-large-language-models/" rel="noopener noreferrer"&gt;FACTS Grounding&lt;/a&gt; benchmark, released on 17 December 2024, evaluates 1,719 document-grounded examples (860 public, 859 held out) where responses are judged across three frontier models: Gemini 1.5 Pro, GPT-4o and Claude 3.5 Sonnet, specifically to reduce family bias.&lt;/p&gt;

&lt;p&gt;These benchmarks are rigorous instruments for measuring model capability under laboratory conditions. Yet they say almost nothing about whether a customer-facing messaging product will quote your Deluxe King weekend rate with your exact cancellation terms in colloquial Gulf Arabic to a guest messaging on WhatsApp at 11pm.&lt;/p&gt;

&lt;p&gt;Worse, the marketing figures vendors quote are often unstable. Digital Applied published an AI hallucination rate study in April 2026 and then formally &lt;a href="https://www.digitalapplied.com/blog/ai-model-hallucination-rate-benchmarks-2026-study" rel="noopener noreferrer"&gt;withdrew its model rankings, error rates and confidence intervals on 4 October 2026&lt;/a&gt; because the claimed 5,000-prompt study could not be substantiated with run-level records. Read that retraction before reading any vendor slide showing an arbitrary hallucination percentage. The enduring value of that page is method rather than static measurement: define the denominator, report abstention alongside errors, and independently verify that a cited source passage actually supports the claim.&lt;/p&gt;

&lt;p&gt;That points to the true method for evaluating AI software before you sign a commercial contract. Freeze an evaluation set of your own past enquiries with verified reference answers. Agree the pass marks in writing before anything runs. Score competing tools on identical data. Preserve the run-level audit trail. Everything that follows applies this discipline to hotel guest messaging and pricing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does an AI hallucination actually cost a hotel?
&lt;/h2&gt;

&lt;p&gt;Braintrust's guide to &lt;a href="https://www.braintrust.dev/articles/ai-hallucination-evaluations-metrics-methods-2026" rel="noopener noreferrer"&gt;hallucination evaluation&lt;/a&gt; splits hallucinations into three distinct failure modes: factually incorrect against reality, unsupported by retrieved reference documents, and inconsistent with earlier context in the same conversation. In hotel operations, each failure mode carries a direct operational or commercial price tag:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Factually wrong.&lt;/strong&gt; The tool quotes AED 850 for a Friday night stay when your current seasonal tariff specifies AED 990. The guest completes the reservation based on that figure, forcing your front desk team to either absorb the loss or provoke an escalation on arrival.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unsupported by your documents.&lt;/strong&gt; The answer sounds natural but exists nowhere in your rate sheet, banquet pack or policy schedule. This is the fabricated answer: confirming early check-in at 10am without charge, promising an airport shuttle service you discontinued last year, or inventing a flexible 6pm cancellation window. The guest treats this as a binding operational promise, and your staff must manage the friction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inconsistent within the conversation thread.&lt;/strong&gt; The system approves a late checkout at 2pm in message three, then claims checkout is strictly 12pm in message seven. The guest captures screenshots of both messages, eroding trust and compromising the front desk team.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A critical lesson from the Braintrust evaluation guide is that an answer can pass an automated groundedness check and still fail on factuality. Groundedness merely checks whether the output reflects whatever context the retriever fetched. If the retrieval engine pulls an outdated 2024 PDF instead of the active 2026 rate schedule, the model can generate a perfectly grounded answer that is factually wrong for the guest. You must evaluate factual accuracy and retrieval grounding as separate metrics.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you build a test set from real past enquiries?
&lt;/h2&gt;

&lt;p&gt;Extract 50 genuine guest enquiries from the last 90 days across your property management system (PMS), CRM, WhatsApp Business logs and central reservations inbox. Avoid synthetic prompts generated by an LLM, and do not let vendors supply test scenarios. Use real historical messages with guest names, phone numbers, room numbers and reservation codes scrubbed clean.&lt;/p&gt;

&lt;p&gt;A balanced distribution for a GCC city hotel or resort:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Block&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;th&gt;What it tests&lt;/th&gt;
&lt;th&gt;Concrete examples&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Routine&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;Recall of stable published operational facts&lt;/td&gt;
&lt;td&gt;Breakfast operating hours, high-speed wifi access, valet parking, pool timings, basic late checkout policies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Money&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;Rates, supplemental fees, deposits and commercial terms&lt;/td&gt;
&lt;td&gt;Net room rate for specific weekend dates, non-refundable deposit terms, early check-in fees, tourism dirham and VAT inclusions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Awkward&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;Contextual judgement, policy trade-offs and thread memory&lt;/td&gt;
&lt;td&gt;A noise complaint combined with a date alteration in one message, mid-thread date changes, complex family room allocation requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unanswerable&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Safe refusal, boundary detection and human escalation&lt;/td&gt;
&lt;td&gt;Real-time room availability without an active PMS sync, unreleased future packages, unlisted custom corporate rates&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three operational rules keep this test set robust:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Write the reference answer first.&lt;/strong&gt; For every enquiry, have an experienced reservations or front office supervisor author the exact response that should be sent. Attach the specific source document: the dated tariff sheet, the room policy PDF, the banquet menu, or the corporate contract terms. If your internal team cannot agree on the correct answer, the question is either unanswerable or reveals an internal documentation gap. Both outcomes provide immediate operational value.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Separate practice enquiries from scored enquiries.&lt;/strong&gt; Allocate 10 of the 50 enquiries as practice material (5 routine, 3 money, 2 awkward) and exclude them from final scoring. The vendor uses this initial batch to index your knowledge base and calibrate retrieval chunking. The scored set comprises the remaining 40 items: 15 routine, 12 money, 8 awkward, and all 5 unanswerable scenarios. Record the source channel, timestamp and selection criteria for every enquiry, following the benchmark transparency principles outlined by Digital Applied.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep Arabic conversations in native phrasing.&lt;/strong&gt; Ensure roughly 20 of the 40 scored threads are conducted natively in Arabic, with the remaining 20 in English. Retain genuine regional phrasing: Gulf dialect terms, Egyptian or Levantine expressions commonly used by staff and guests, mixed Arabic-English code-switching, and Arabizi (transliterated Arabic in Latin characters). The reference answer must be drafted directly in Arabic by a fluent bilingual team member, rather than translated mechanically from an English master. An AI agent producing flawless Modern Standard Arabic while misinterpreting colloquial Gulf hospitality vocabulary has failed your operational test.&lt;/p&gt;

&lt;h2&gt;
  
  
  How should you score AI responses: right, wrong, made up or refused?
&lt;/h2&gt;

&lt;p&gt;Every evaluation run must receive one of four explicit verdicts. This framework adapts the taxonomy of correct, incorrect and not attempted used in SimpleQA, while introducing the specific failure mode that matters most to hospitality risk: fabricated claims.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Verdict&lt;/th&gt;
&lt;th&gt;Definition&lt;/th&gt;
&lt;th&gt;Hotel operational example&lt;/th&gt;
&lt;th&gt;Required remediation&lt;/th&gt;
&lt;th&gt;Standard pass criteria&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Right&lt;/td&gt;
&lt;td&gt;Matches reference answer without contradiction&lt;/td&gt;
&lt;td&gt;Accurately calculates room rate and cancellation cut-off for requested dates&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Minimum 90% on routine; minimum 85% overall among attempted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wrong&lt;/td&gt;
&lt;td&gt;Contradicts an authentic source present in the index&lt;/td&gt;
&lt;td&gt;Quotes superseded rate from an archived tariff sheet still present in the vector store&lt;/td&gt;
&lt;td&gt;Clean index, fix metadata filtering and update retrieval weighting&lt;/td&gt;
&lt;td&gt;Small tolerable margin; rectify and re-evaluate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Made up&lt;/td&gt;
&lt;td&gt;Fabricates an entity, rate, policy or promise absent from all sources&lt;/td&gt;
&lt;td&gt;Claims executive lounge access includes complimentary laundry services&lt;/td&gt;
&lt;td&gt;Enforce strict retrieval grounding or disqualify tool&lt;/td&gt;
&lt;td&gt;Exactly 0 on the money block&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refused and handed off&lt;/td&gt;
&lt;td&gt;Recognises missing data, declines guessing, and escalates to human&lt;/td&gt;
&lt;td&gt;States live room availability is unavailable and transfers conversation to reservations&lt;/td&gt;
&lt;td&gt;Verify routing mechanism, chat state preservation and agent notification&lt;/td&gt;
&lt;td&gt;5 of 5 on unanswerable block&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;To ensure the resulting figures reflect operational reality, apply two measurement practices:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Score at the atomic claim level.&lt;/strong&gt; Break each generated response into standalone factual claims, such as the room rate is AED 1,100, breakfast is included, and free cancellation applies until 48 hours prior to arrival. Verify each individual claim against the source documents. This approach aligns with modern long-form factuality evaluation methods. Validate two conditions for every citation: existence (does the referenced source document and page exist?) and entailment (does the cited excerpt directly substantiate every element of the claim, including dates, occupancy limits, room categories and tax assumptions?). A citation pointing to a generic policy page that lacks the specific detail quoted represents a made-up claim masked by a real link.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Publish coverage alongside accuracy.&lt;/strong&gt; An AI system can artificially inflate its accuracy score by refusing to answer difficult questions. As highlighted in the Digital Applied methodology notes, if a test of 100 questions results in 70 correct responses, 10 incorrect responses and 20 refusals, the error rate is 10% over the full population but 12.5% among attempted answers, with an operational coverage rate of 80%. When comparing competing vendors, always inspect coverage, accuracy across attempted responses, and the raw made-up claim count.&lt;/p&gt;

&lt;p&gt;A concise Python script ensures scoring consistency across evaluation runs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Counter&lt;/span&gt;

&lt;span class="c1"&gt;# Input format: enquiry_id, language, run, verdict, source_shown, source_supports
&lt;/span&gt;&lt;span class="n"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DictReader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;trial_results.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="n"&gt;verdicts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;verdict&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;attempted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;verdicts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;refused&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;coverage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;attempted&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;
&lt;span class="n"&gt;error_attempted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;verdicts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wrong&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;verdicts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;made_up&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;attempted&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;attempted&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;
&lt;span class="n"&gt;made_up_share&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;verdicts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;made_up&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;
&lt;span class="n"&gt;right_attempted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;verdicts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;right&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;attempted&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;attempted&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Total runs: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Operational coverage: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;coverage&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Accuracy among attempted: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;right_attempted&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error rate among attempted: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;error_attempted&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Made-up claim share of total runs: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;made_up_share&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Thresholds agreed in writing prior to commencing evaluation
&lt;/span&gt;&lt;span class="n"&gt;PASS_CRITERIA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max_made_up_on_money_block&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;min_right_on_routine&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.90&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;min_right_among_attempted&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.85&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;min_claims_source_supported&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.95&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;min_unanswerable_handoff_rate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How do you verify that every answer traces back to a source?
&lt;/h2&gt;

&lt;p&gt;Source traceability is frequently resisted by sales teams, yet it represents your strongest contractual safeguard. &lt;/p&gt;

&lt;p&gt;For every scored response, mandate that the software display the document identifier, publication date, version number, and exact text excerpt that informed the output. Conduct two verification checks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Existence:&lt;/strong&gt; Confirm that the cited tariff sheet, operations manual or F&amp;amp;B guide exists in your active document repository.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Entailment:&lt;/strong&gt; Verify that the cited passage logically entails the complete statement made to the guest. If an AI agent states that valet parking is complimentary for visitors attending an event, the cited document must explicitly mention both event visitors and complimentary status, rather than general guest parking fees.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Beware of the document versioning trap. In hospitality environments, rate sheets, promotional packages and seasonal restaurant schedules update frequently. An AI retrieval system that fails to enforce strict timestamp filtering will inadvertently surface an archived 2025 Ramadan buffet price or an expired summer staycation package when responding to a 2026 booking enquiry. Require the vendor to demonstrate how document expiry dates are handled, what underlying foundation model is deployed, and what notification procedure occurs when model versions are updated. If a vendor cannot supply verifiable document references, the software cannot be audited, your reservations team cannot supervise it, and your property cannot defend its statements in a commercial dispute.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to evaluate AI software before buying: the two-week schedule
&lt;/h2&gt;

&lt;p&gt;Running this evaluation requires approximately two person-days of focused internal effort distributed across two weeks, using two property staff members.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Days 1 and 2: Freeze data and agree acceptance gates.&lt;/strong&gt; Lock the 50 enquiry scenarios, the reference answers, and the underlying source documents. Formalise the pass criteria in a written schedule shared with all participating vendors: zero fabricated statements on the 15 money enquiries, at least 90% accuracy on routine enquiries, at least 85% accuracy among attempted answers, at least 95% of factual claims supported by verifiable sources, and 100% handoff on unanswerable enquiries. Pass criteria established after testing begins are invalid.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day 3: Index knowledge base.&lt;/strong&gt; Supply the vendor with a clean document bundle: active room tariffs with effective dates, cancellation terms, standard operating procedures, spa and F&amp;amp;B menus, and property amenity guides. Confirm in writing the specific files indexed into the vector store.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day 4: Practice validation.&lt;/strong&gt; Execute the 10 practice enquiries. Use this phase to identify internal information omissions, such as unwritten pet policies or ambiguous late-checkout surcharges. Rectify missing documentation in the index before proceeding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Days 5 to 8: Scored evaluation runs.&lt;/strong&gt; Submit the 40 scored enquiries in their authentic language format. Execute each enquiry twice across separate sessions, yielding 80 total runs. Running duplicate queries is essential: frontier models exhibit variance, and repeated generations highlight unstable answers when a model is guessing. Braintrust's evaluation methodology underscores this self-consistency approach for open-ended generative responses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Days 9 and 10: Blind independent review.&lt;/strong&gt; Two bilingual reviewers independently evaluate all 80 responses against the reference answers and source files. Avoid averaging out split decisions; resolve discrepancies by examining source documentation and conversation context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day 11: Quantitative calculation.&lt;/strong&gt; Consider a representative outcome across 80 runs: 68 attempted responses and 12 human handoffs (10 on unanswerable scenarios, 2 on complex edge cases). Of the 68 attempted responses, 61 are verified right, 5 wrong due to retriever version confusion, and 2 made up, with both fabrications occurring on pricing queries in the Arabic test track. The resulting metrics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operational coverage: 68 / 80 = 85.0%&lt;/li&gt;
&lt;li&gt;Accuracy among attempted: 61 / 68 = 89.7%&lt;/li&gt;
&lt;li&gt;Combined error rate among attempted: 7 / 68 = 10.3%&lt;/li&gt;
&lt;li&gt;Fabricated response rate across total runs: 2 / 80 = 2.5%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Days 12 to 14: Final procurement decision.&lt;/strong&gt; Evaluate outcomes against the pre-agreed acceptance thresholds. While the overall accuracy figure (89.7%) exceeds the 85% threshold, the product failed the zero-tolerance requirement for fabricated answers on the money block. Fabricating room rates and payment terms exposes your hotel to financial and reputational liability. This outcome represents a contractual failure. You can either reject the vendor or require an architectural fix and a full re-evaluation of the money block before signing. Never select a vendor based solely on aggregate accuracy percentages; enforce the boundary conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What contractual terms, data protection rules and running costs matter?
&lt;/h2&gt;

&lt;p&gt;A successful technical trial proves the model works under controlled conditions. The commercial contract determines whether your hotel can safely operate it at scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data residency and regulatory compliance.&lt;/strong&gt; Guest messaging inevitably processes personally identifiable information (PII), including guest names, contact details, payment references and travel dates. In the UAE, personal data handling is governed by Federal Decree-Law No. 45 of 2021 on the Protection of Personal Data, which took effect on 2 January 2022. Articles 22 and 23 regulate cross-border personal data transfers, allowing transfers either to countries recognised as having an adequate level of protection, or where contractual safeguards, standard contractual clauses or explicit guest consent apply. Because free zones such as DIFC and ADGM operate under distinct data protection statutes, and broad statutory adequacy lists remain unissued, clear contractual guarantees under Article 23 are the practical standard for SaaS deployments in the UAE.&lt;/p&gt;

&lt;p&gt;Insist on written contractual clarity on these points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Physical data storage and inference processing locations, including backup archives and diagnostic log stores.&lt;/li&gt;
&lt;li&gt;Named third-party sub-processors, particularly underlying foundation model providers and vector database hosts.&lt;/li&gt;
&lt;li&gt;Explicit contractual clauses prohibiting the vendor or underlying model providers from training models on your proprietary hotel data or guest transcripts.&lt;/li&gt;
&lt;li&gt;Defined retention schedules, user data deletion rights, and prompt written certification of data destruction upon contract termination.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Commercial and technical terms.&lt;/strong&gt; Ensure the vendor contract specifies the exact model versions powering the system, with a mandatory advance notification requirement before any model switch or parameter modification takes effect. Attach the performance thresholds from your two-week trial as ongoing service level agreements. Outline fallback protocols for system outages, establish clear contract termination terms, and secure full export access to conversation logs in standard formats (such as JSON or CSV) upon contract conclusion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Calculating true operational cost.&lt;/strong&gt; With 85% of hospitality organisations committing 5% or more of their technology budget to AI initiatives, total cost of ownership must be calculated accurately. Look beyond headline software licensing fees. Calculate the fully loaded cost per room per month or cost per completed conversation, including messaging API charges, infrastructure surcharges and ongoing internal supervision overhead. Plan for 30 to 60 minutes of weekly supervisor auditing to inspect live production transcripts using your evaluation rubric. Language models and operational documentation evolve continuously; production accuracy must be monitored systematically rather than evaluated once.&lt;/p&gt;

&lt;h2&gt;
  
  
  What should you do next before signing an AI contract?
&lt;/h2&gt;

&lt;p&gt;Before scheduling another vendor software demonstration, complete three actions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Extract 50 genuine past guest enquiries from your messaging logs and have your reservations team draft reference answers linked to verified source documents.&lt;/li&gt;
&lt;li&gt;Establish formal evaluation thresholds, including a zero-tolerance policy for fabricated pricing statements, and share these criteria with prospective vendors as pre-requisites for your procurement trial.&lt;/li&gt;
&lt;li&gt;Subject every shortlisted vendor to the identical two-week evaluation schedule, scoring responses across identical data using the four-tier rubric.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If your leadership team requires specialist support to run this evaluation, Azrty can assist. We are a UAE company based in Dubai, and our own team delivers AI consulting, technical evaluation and deployment support for regional clients. Through our &lt;a href="https://www.azrty.com/services/ai-strategy" rel="noopener noreferrer"&gt;AI strategy and readiness&lt;/a&gt; engagement, we review your operational processes, data assets and systems to show you exactly where AI will deliver measurable value, what technical prerequisites are necessary, and how to evaluate vendors safely. Any vendor can deliver an impressive demo. A rigorous internal evaluation ensures you select the system that genuinely protects your property.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.azrty.com/blog/how-to-evaluate-ai-software-before-buying-a-hotel-guide" rel="noopener noreferrer"&gt;Azrty&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aisoftwareevaluation</category>
      <category>aiprocurement</category>
      <category>hoteltechnology</category>
      <category>llmevaluation</category>
    </item>
    <item>
      <title>AI Governance That Does Not Slow You Down: The Minimum Operating Model for UAE Enterprises</title>
      <dc:creator>Azrty</dc:creator>
      <pubDate>Fri, 16 Oct 2026 05:00:53 +0000</pubDate>
      <link>https://dev.to/azrty/ai-governance-that-does-not-slow-you-down-the-minimum-operating-model-for-uae-enterprises-2lcb</link>
      <guid>https://dev.to/azrty/ai-governance-that-does-not-slow-you-down-the-minimum-operating-model-for-uae-enterprises-2lcb</guid>
      <description>&lt;p&gt;Most UAE organisations run AI in production without a named owner, a clear intake route, or proof of why models access sensitive data. A 40-page policy will not fix this. Four small, load-bearing artefacts will, giving technical leaders provable governance that aligns directly with ISO/IEC 42001 and the UAE AI Charter.&lt;/p&gt;

&lt;p&gt;Most UAE organisations now run artificial intelligence in production in some form: a customer service assistant on the web portal, a document summarisation pipeline in legal, or a coding assistant deployed across engineering teams. Yet when asked three basic questions that a board, an enterprise client or an auditor will pose, most technology leaders cannot answer with verifiable proof. Who is the named individual accountable for this system? Why is this specific model permitted to process this specific dataset? Where is the immutable audit log confirming that policy was enforced?&lt;/p&gt;

&lt;p&gt;The typical response to this uncertainty is to commission a 40-page AI governance policy, assemble a committee, and consider appointing a Chief AI Officer. For most enterprises in the UAE and wider GCC, both instincts are counterproductive. A dense policy document that developers and product owners do not read does not mitigate operational risk. When a failure occurs, an ignored policy serves only as documented negligence.&lt;/p&gt;

&lt;p&gt;What engineering leaders and risk officers actually need is a lightweight, enforceable operating model. You can establish provable AI governance in about six weeks using four load-bearing artefacts: a one-page use-case intake form with an objective risk scoring table, a named accountable owner per system paired with a 45-minute monthly review, an architectural enforcement layer that intercepts model traffic, and a live model and agent register.&lt;/p&gt;

&lt;p&gt;This operating model satisfies the governance expectations of regional regulators and international counterparties. By designing these four artefacts intentionally, the exact same document set maps directly to clauses 4 through 10 of ISO/IEC 42001 and the core principles of the UAE AI Charter.&lt;/p&gt;

&lt;h2&gt;
  
  
  The gap is operating roles, not appetite
&lt;/h2&gt;

&lt;p&gt;The narrative that regional organisations are hesitant to adopt AI is contradicted by industry data. A global study by the Dubai Future Foundation and IBM found that roughly 20% of UAE organisations have AI governance platforms in place, compared with 12% globally, alongside strong regional leadership across core AI adoption metrics. Executive research cited by CDO Magazine indicates that 100% of GCC chief executive officers are either investing in AI today or plan to invest within twelve months.&lt;/p&gt;

&lt;p&gt;The regional market does not suffer from a lack of tooling or ambition. The breakdown occurs in operational execution: enterprise platforms are acquired, but everyday accountability remains unassigned. Teams deploy workloads using shared API credentials, use cases bypass formal intake, and nobody can produce a definitive list of models operating across internal environments.&lt;/p&gt;

&lt;p&gt;This gap becomes urgent when external scrutiny arrives. Enterprise clients in banking, government and healthcare are embedding detailed AI assurance questionnaires into procurement tenders, demanding proof of human oversight and data residency before signing contracts.&lt;/p&gt;

&lt;p&gt;Simultaneously, the regulatory posture across the Gulf is maturing. The UAE Charter for the Development and Use of AI establishes 12 core principles, prioritising human oversight, accountability, data privacy and transparency. Regulatory analysis by Latham &amp;amp; Watkins highlights that UAE authorities are systematically moving from voluntary, principles-based frameworks toward binding expectations in critical sectors, with public services and regulated industries leading the transition.&lt;/p&gt;

&lt;p&gt;Voluntary guidelines do not withstand commercial procurement or compliance audits. Building an agile operating model now prevents governance from becoming an expensive, disruptive crisis later.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four artefacts at a glance
&lt;/h2&gt;

&lt;p&gt;Enterprise governance must not become an administrative bottleneck. The framework below replaces slow committee approvals and unverified rules with four concrete artefacts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Artefact&lt;/th&gt;
&lt;th&gt;Structural format&lt;/th&gt;
&lt;th&gt;Creation effort&lt;/th&gt;
&lt;th&gt;Operational replacement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. Intake form and tier table&lt;/td&gt;
&lt;td&gt;One-page document: scope, data classification, autonomy level, blast radius, risk tier&lt;/td&gt;
&lt;td&gt;Half a day to draft&lt;/td&gt;
&lt;td&gt;Ad-hoc approvals in messaging channels that cannot be audited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. Named owner and monthly review&lt;/td&gt;
&lt;td&gt;Single accountable person per system, 45-minute monthly cadence with fixed agenda&lt;/td&gt;
&lt;td&gt;1 hour per month&lt;/td&gt;
&lt;td&gt;Multi-departmental committees that meet twice yearly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. Enforcement layer&lt;/td&gt;
&lt;td&gt;Model gateway with team-scoped access tokens, token quotas, and structured logging&lt;/td&gt;
&lt;td&gt;2 to 4 days of infrastructure setup&lt;/td&gt;
&lt;td&gt;Unenforced acceptable use policies buried in employee handbooks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. Model and agent register&lt;/td&gt;
&lt;td&gt;Tabular register: unique ID, owner, data categories, assigned tier, next review date&lt;/td&gt;
&lt;td&gt;1 day to populate&lt;/td&gt;
&lt;td&gt;Tribal knowledge that disappears when a lead developer resigns&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These four artefacts require approximately one working week of collective effort to establish. If an external consultancy proposes a six-month governance design phase before implementing basic intake and technical controls, they are delivering administrative overhead rather than operational resilience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Artefact 1: the one-page intake form with a stop/go tier table
&lt;/h2&gt;

&lt;p&gt;Every AI deployment, including shadow tools already running in engineering or marketing teams, must pass through an intake form. This document must remain strictly one page, take under ten minutes to complete, and capture six mandatory fields:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;System function: a concise summary of what the system does, written in plain business English.&lt;/li&gt;
&lt;li&gt;Data categories touched: explicit classification of input data (for example: public information, internal operations, personally identifiable data, electronic medical records, or payment card details).&lt;/li&gt;
&lt;li&gt;Decision autonomy: the precise level of human intervention required before an output triggers an action.&lt;/li&gt;
&lt;li&gt;Blast radius: the tangible downside if the system produces hallucinations, biased output, or erroneous decisions.&lt;/li&gt;
&lt;li&gt;System owner: the named individual accountable for ongoing operation and maintenance.&lt;/li&gt;
&lt;li&gt;Calculated risk tier: derived deterministically from the scoring rubric below.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To prevent subjective disputes over whether a use case is dangerous, use an objective scoring formula. Evaluate three dimensions on a 1 to 3 scale: Data Sensitivity, System Autonomy, and Blast Radius.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Assigned points&lt;/th&gt;
&lt;th&gt;Data sensitivity&lt;/th&gt;
&lt;th&gt;System autonomy&lt;/th&gt;
&lt;th&gt;Blast radius&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 point&lt;/td&gt;
&lt;td&gt;Public data or synthetic datasets&lt;/td&gt;
&lt;td&gt;Advisory output only: a human reviews and manually acts on every output&lt;/td&gt;
&lt;td&gt;Internal operational impact: errors are immediately reversible with zero external visibility&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2 points&lt;/td&gt;
&lt;td&gt;Internal confidential data: non-personal commercial documentation&lt;/td&gt;
&lt;td&gt;Supervised execution: the system drafts an action that executes upon one-click human approval&lt;/td&gt;
&lt;td&gt;Customer-facing impact: errors reach clients or partners but remain technically recoverable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3 points&lt;/td&gt;
&lt;td&gt;Personal data, sensitive health records, or regulated financial data&lt;/td&gt;
&lt;td&gt;Autonomous execution: the system takes direct action via APIs without prior human sign-off&lt;/td&gt;
&lt;td&gt;Irreversible harm: direct financial loss, regulatory breach, or severe safety impact&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sum the scores across all three dimensions to assign the operational tier:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Total score&lt;/th&gt;
&lt;th&gt;Classification&lt;/th&gt;
&lt;th&gt;Authorisation route&lt;/th&gt;
&lt;th&gt;Operational turnaround&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;3 to 4 points&lt;/td&gt;
&lt;td&gt;Tier 1: Green&lt;/td&gt;
&lt;td&gt;Named system owner approves; entry is recorded in the register&lt;/td&gt;
&lt;td&gt;Within 48 hours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5 to 7 points&lt;/td&gt;
&lt;td&gt;Tier 2: Amber&lt;/td&gt;
&lt;td&gt;Evaluation at the next monthly review; operational conditions assigned&lt;/td&gt;
&lt;td&gt;Up to 30 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8 to 9 points&lt;/td&gt;
&lt;td&gt;Tier 3: Red&lt;/td&gt;
&lt;td&gt;Deployment prohibited until technical controls are verified and executive sponsor signs off&lt;/td&gt;
&lt;td&gt;Strict freeze until controls exist&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Worked deployment scenarios
&lt;/h3&gt;

&lt;p&gt;Consider a private healthcare operator in Dubai seeking to deploy an LLM assistant to draft responses to incoming patient inquiries in its contact centre.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data Sensitivity: 3 points (touches patient inquiries containing identifiable medical symptoms).&lt;/li&gt;
&lt;li&gt;System Autonomy: 1 point (the system generates a draft response inside the CRM; human staff read, edit, and send the message).&lt;/li&gt;
&lt;li&gt;Blast Radius: 2 points (an erroneous message sent to a patient could cause confusion, though clinical staff can issue immediate corrections).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Total score: 6 points (Tier 2, Amber).&lt;/p&gt;

&lt;p&gt;At the monthly review, the project is approved subject to three mandatory conditions: model traffic must route exclusively through an internal gateway with zero data retention by external API vendors, prompts must pass through an automated de-identification filter before leaving the local boundary, and 5% of all agent-approved messages must undergo weekly quality sampling. Intake to conditional clearance takes 18 days. A year earlier, this exact project would have languished in legal limbo for months because there was no transparent mechanism to evaluate its risk.&lt;/p&gt;

&lt;p&gt;Now consider the same healthcare provider evaluating an AI agent that automatically adjusts patient appointments directly inside the electronic health record system without human mediation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data Sensitivity: 3 points (direct access to patient scheduling records).&lt;/li&gt;
&lt;li&gt;System Autonomy: 3 points (writes directly to production databases via automated functions).&lt;/li&gt;
&lt;li&gt;Blast Radius: 2 points (a scheduling error displaces real clinical visits, impacting patient care).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Total score: 8 points (Tier 3, Red).&lt;/p&gt;

&lt;p&gt;The table halts unmediated production deployment immediately. The engineering team is directed to re-architect the service into a Tier 2 workflow: the model may propose schedule optimisations to a human coordinator, but direct database writes are locked until automated rollbacks and audit safeguards are proven.&lt;/p&gt;

&lt;p&gt;This intake rubric aligns conceptually with the govern, map, measure, and manage core functions outlined in the NIST AI Risk Management Framework. Because enterprise buyers widely recognise this taxonomy, internal tier assignments translate cleanly when international clients conduct vendor risk assessments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Artefact 2: a named owner per system and a 45-minute monthly review
&lt;/h2&gt;

&lt;p&gt;Quarterly steering committees do not govern software effectively. By the time a quarterly agenda is finalised, engineering teams have already shipped code or abandoned the project. Real governance requires a short, monthly operating cadence.&lt;/p&gt;

&lt;p&gt;The operating model requires exactly two roles, adapting guidance on agile AI oversight structures from Trustible:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Executive Sponsor: a single executive (such as the CTO, CIO, or Chief Risk Officer) who maintains institutional authority over the tier table and serves as the final escalation authority for Tier 3 projects. The sponsor attends only the opening ten minutes of the review.&lt;/li&gt;
&lt;li&gt;The System Owner: a designated individual (not a team alias or department) assigned to every AI asset. The system owner is personally accountable for completing the intake form, verifying operational constraints, monitoring accuracy, and reporting incidents. If an AI workload lacks an accountable human owner, it is decommissioned.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The monthly review is scheduled for 45 minutes on a fixed recurring date, chaired by an operational lead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minutes 0 to 10: Triage new intakes. Review all Tier 1 and Tier 2 submissions logged over the preceding month. Confirm or adjust assigned tiers (the Executive Sponsor participates in this segment).&lt;/li&gt;
&lt;li&gt;Minutes 10 to 20: Scheduled Tier 2 reviews. Examine running systems approaching their mandatory six-month reassessment. Review changes in underlying foundation models, prompt changes, or shift in data inputs.&lt;/li&gt;
&lt;li&gt;Minutes 20 to 35: Incident evaluation and audit logs. Review reported anomalies, prompt injection attempts, output degradation, or gateway policy violations. Determine required mitigations.&lt;/li&gt;
&lt;li&gt;Minutes 35 to 45: Register hygiene. Flag systems with expired review dates, identify unmaintained prototypes, and issue termination notices for orphaned systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meeting minutes are recorded directly into the model register. This practice prevents governance drift, ensuring that risk registers and operational realities remain identical.&lt;/p&gt;

&lt;h2&gt;
  
  
  Artefact 3: an enforcement layer, not a written rule
&lt;/h2&gt;

&lt;p&gt;The failure of traditional IT governance lies in treating policies as compliance reading material rather than technical guardrails. If a company policy states that external models must not process proprietary customer data, but engineers hold raw API keys in local development environments, that policy provides zero operational security.&lt;/p&gt;

&lt;p&gt;Technical rules must be enforced at the network and runtime layers. The core architectural component is a unified model gateway: an OpenAI-compatible proxy situated between internal software applications and all downstream model providers (whether hosted externally or deployed in private data centres).&lt;/p&gt;

&lt;p&gt;This architecture is precisely what &lt;a href="https://www.azrty.com/software/fastllm-proxy" rel="noopener noreferrer"&gt;FastLLM Proxy&lt;/a&gt; implements: routing, tenant token budgets, model allowlists, and end-to-end request logging consolidated into a single control plane. Engineering teams configure their SDKs to point to the internal gateway URL, keeping credentials entirely out of application source code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Production gateway policy configuration&lt;/span&gt;
&lt;span class="na"&gt;team_identifier&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;contact-centre-ops&lt;/span&gt;
&lt;span class="na"&gt;api_key_ref&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;env:CONTACT_CENTRE_GATEWAY_TOKEN&lt;/span&gt;
&lt;span class="na"&gt;routing&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;default_provider&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;self-hosted-gpu&lt;/span&gt;
  &lt;span class="na"&gt;allowed_models&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;internal/llama-3.1-70b-instruct&lt;/span&gt;  &lt;span class="c1"&gt;# On-premise infrastructure; data remains in-country&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;cloud/gpt-4o-mini&lt;/span&gt;                 &lt;span class="c1"&gt;# Permitted strictly for de-identified general drafting&lt;/span&gt;
&lt;span class="na"&gt;quotas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;monthly_spend_limit_usd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3000&lt;/span&gt;
  &lt;span class="na"&gt;rate_limit_requests_per_minute&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;120&lt;/span&gt;
  &lt;span class="na"&gt;alert_threshold_percentage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
&lt;span class="na"&gt;security_enforcement&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;pii_scrubbing_mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;redact_before_egress&lt;/span&gt;
  &lt;span class="na"&gt;log_prompt_payloads&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;          &lt;span class="c1"&gt;# Prevents recording sensitive health or personal data&lt;/span&gt;
  &lt;span class="na"&gt;log_structured_metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;        &lt;span class="c1"&gt;# Records timestamp, user context, token counts, latency&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With an enforcement proxy operational, compliance rules become automated routing logic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The rule stating sensitive records must remain within national borders is enforced by restricting the team API key to self-hosted models running on domestic infrastructure.&lt;/li&gt;
&lt;li&gt;The rule capping experimental AI spend is enforced via automated token quotas that throttle traffic when budgets are exhausted.&lt;/li&gt;
&lt;li&gt;The requirement to provide auditable evidence to regulators is satisfied by structured metadata logs that record every invocation without persisting sensitive payload text.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The second half of technical enforcement involves standardising prompt configuration. If system instructions reside inside arbitrary application scripts, prompt updates cannot be peer-reviewed. Deploying a version-controlled repository such as &lt;a href="https://www.azrty.com/software/promptforge" rel="noopener noreferrer"&gt;PromptForge&lt;/a&gt; ensures prompt engineering changes are tracked through pull requests, tested against benchmarks, and deployed consistently.&lt;/p&gt;

&lt;p&gt;Storing approved architecture patterns, tier criteria and registry data in an accessible system like &lt;a href="https://www.azrty.com/software/kryton" rel="noopener noreferrer"&gt;Kryton&lt;/a&gt; lets human engineers and automated tools reference identical operating parameters. Governance artefacts that are isolated from developer workflows will be bypassed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Artefact 4: the model and agent register
&lt;/h2&gt;

&lt;p&gt;The model and agent register serves as the central inventory of all artificial intelligence assets across the enterprise. It provides immediate answers during board reviews, customer security audits, and regulatory inquiries.&lt;/p&gt;

&lt;p&gt;Rather than maintaining static spreadsheets that quickly become obsolete, define the register in structured text formats that can integrate with continuous integration checks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Enterprise Model and Agent Register Entry&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;system_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sys-2025-cc-drafter&lt;/span&gt;
  &lt;span class="na"&gt;system_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Contact Centre Patient Message Assistant&lt;/span&gt;
  &lt;span class="na"&gt;system_owner&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;a.almansoori@enterprise.ae&lt;/span&gt;
  &lt;span class="na"&gt;operational_tier&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Tier 2 (Amber)&lt;/span&gt;
  &lt;span class="na"&gt;approval_date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2025-05-10&lt;/span&gt;
  &lt;span class="na"&gt;mandatory_review_date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2025-11-10&lt;/span&gt;
  &lt;span class="na"&gt;data_classification&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;patient_medical_inquiries&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;synthetic_reference_templates&lt;/span&gt;
  &lt;span class="na"&gt;allowed_endpoints&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;internal/llama-3.1-70b-instruct&lt;/span&gt;
  &lt;span class="na"&gt;gateway_team_scope&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;contact-centre-ops&lt;/span&gt;
  &lt;span class="na"&gt;enforced_controls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;automated_pii_redaction&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;outbound_gateway_only&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;weekly_human_audit_sample_pct&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
  &lt;span class="na"&gt;incident_history&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2025-07-22&lt;/span&gt;
      &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Hallucinated clinic opening hours&lt;/span&gt;
      &lt;span class="na"&gt;resolution&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;System prompt updated in PromptForge with canonical schedule reference&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This register provides continuous visibility. If a model identifier surfaces in gateway logs that does not exist in the register, an unapproved system has been detected automatically.&lt;/p&gt;

&lt;p&gt;In enterprise deployments across the UAE, runtime isolation tools such as &lt;a href="https://www.azrty.com/software/kuvryn-ai" rel="noopener noreferrer"&gt;Kuvryn AI&lt;/a&gt; simplify this tracking. By hosting autonomous agents and internal model servers within segregated workspaces on sovereign GPU clusters, infrastructure metrics automatically mirror the system register, eliminating manual reconciliation.&lt;/p&gt;

&lt;h2&gt;
  
  
  One document set, two assurance frameworks
&lt;/h2&gt;

&lt;p&gt;Establishing governance around these four artefacts provides immediate regulatory alignment. The structure satisfies the dual requirements of international certification under ISO/IEC 42001 and local compliance with the UAE AI Charter without requiring duplicative documentation.&lt;/p&gt;

&lt;p&gt;ISO/IEC 42001:2023 represents the international management system standard for artificial intelligence, establishing auditable requirements across clauses 4 through 10. Industry timelines published by accredited certifiers like Konfirmity show that achieving ISO 42001 certification typically spans 4 to 9 months, with significantly compressed timelines for enterprises that already maintain an active ISO 27001 Information Security Management System.&lt;/p&gt;

&lt;p&gt;The table below demonstrates how the four small artefacts satisfy mandatory ISO clauses while fulfilling the operational principles established by the UAE government:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operational artefact&lt;/th&gt;
&lt;th&gt;ISO/IEC 42001 clause mapping&lt;/th&gt;
&lt;th&gt;UAE AI Charter principles fulfilled&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. One-page intake form and tier table&lt;/td&gt;
&lt;td&gt;Clause 4 (Context of the organisation)&lt;br&gt;Clause 6.1 (Actions to address AI risks)&lt;br&gt;Clause 6.2 (AI objectives and planning)&lt;br&gt;Clause 8.1 (Operational planning and control)&lt;/td&gt;
&lt;td&gt;Human Oversight&lt;br&gt;Data Privacy&lt;br&gt;Safety and Resilience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. Named owner and monthly review&lt;/td&gt;
&lt;td&gt;Clause 5.1 (Leadership and commitment)&lt;br&gt;Clause 5.3 (Roles and responsibilities)&lt;br&gt;Clause 9.1 (Monitoring and measurement)&lt;br&gt;Clause 9.3 (Management review)&lt;/td&gt;
&lt;td&gt;Accountability&lt;br&gt;Human Oversight&lt;br&gt;Fairness and Equity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. Gateway enforcement layer&lt;/td&gt;
&lt;td&gt;Clause 7.5 (Documented information)&lt;br&gt;Clause 8.2 (AI risk assessment implementation)&lt;br&gt;Clause 8.3 (AI risk treatment controls)&lt;/td&gt;
&lt;td&gt;Data Privacy&lt;br&gt;Transparency&lt;br&gt;Security and Robustness&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. Model and agent register&lt;/td&gt;
&lt;td&gt;Clause 7.2 (Competence and awareness)&lt;br&gt;Clause 9.2 (Internal audit baseline)&lt;br&gt;Clause 10.1 (Nonconformity and corrective action)&lt;/td&gt;
&lt;td&gt;Accountability&lt;br&gt;Transparency&lt;br&gt;Inclusiveness&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;When a commercial partner or statutory auditor requests evidence of your AI governance framework, you do not need to hand over an abstract policy manual. You provide the intake criteria, the system register showing clear human ownership, the gateway configurations enforcing security boundaries, and the minutes of recurring monthly reviews.&lt;/p&gt;

&lt;p&gt;If your enterprise requires an initial baseline assessment to map these controls across legacy workloads, Azrty's &lt;a href="https://www.azrty.com/services/ai-strategy" rel="noopener noreferrer"&gt;AI strategy &amp;amp; readiness consulting&lt;/a&gt; provides an accelerated diagnostic. We evaluate how your organisation operates across systems, workflows and data pipelines, identifying precisely where artificial intelligence yields measurable commercial returns, what infrastructure changes are required, and what controls must be established first. Azrty is a UAE company based in Dubai. Our own team in the UAE does the consulting, the deployment and the support for our clients.&lt;/p&gt;

&lt;h2&gt;
  
  
  The six-week implementation roadmap
&lt;/h2&gt;

&lt;p&gt;To establish this operating model without stalling delivery, execute the deployment as an agile, six-week sequential project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Week 1: Foundations &amp;amp; Sponsor Alignment
  └── Finalise intake form &amp;amp; 3×3 risk scoring table
  └── Secure Executive Sponsor sign-off (CTO / Head of Risk)

Weeks 2–3: Enterprise Discovery &amp;amp; Registration
  └── Scan gateway/network logs for existing AI traffic
  └── Survey development leads to compile undocumented workloads
  └── Populate baseline Model &amp;amp; Agent Register

Week 3: Ownership Assignment
  └── Assign named individual owner to every active system
  └── Flag orphan workloads for immediate deprecation

Weeks 3–4: Gateway Infrastructure Deployment
  └── Stand up unified proxy (FastLLM Proxy)
  └── Migrate client API credentials to team-scoped gateway tokens
  └── Configure token limits, logging policies, and PII filters

Week 4: The Inaugural Monthly Review
  └── Convene 45-minute review session
  └── Classify legacy systems into Tier 1, 2, or 3
  └── Define binding remediation milestones for Tier 2 systems

Weeks 5–6: Operational Hardening
  └── Ingest production prompts into versioned library (PromptForge)
  └── Publish registry and documentation into Kryton knowledge base
  └── Lock production CI/CD pipelines to enforce gateway routing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Immediate priorities
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Week 1: Define the intake document and risk scoring table. Drafting requires approximately two hours; securing formal approval from the Executive Sponsor requires a single one-hour briefing.&lt;/li&gt;
&lt;li&gt;Weeks 2 to 3: Inventory current operational systems. Review existing firewall and API logs to identify external model providers currently receiving queries. Distribute a single-question inquiry to software and business team leads to capture unlisted workloads. Construct the initial draft of the register.&lt;/li&gt;
&lt;li&gt;Week 3: Enforce operational accountability. Assign a specific, named human owner to every active deployment. If a workload has no identifiable owner willing to assume accountability for its behaviour, schedule it for retirement.&lt;/li&gt;
&lt;li&gt;Weeks 3 to 4: Deploy the gateway layer. Implement the proxy endpoint, update application configuration files to route through the gateway, invalidate direct provider API keys, and implement baseline logging and budget caps.&lt;/li&gt;
&lt;li&gt;Week 4: Conduct the inaugural monthly review. Dedicate 45 minutes to tiering the existing inventory. Establish remediation requirements for any workloads processing customer or sensitive data.&lt;/li&gt;
&lt;li&gt;Weeks 5 to 6: Consolidate operational workflows. Move production prompts into a versioned library, publish the completed register to your internal engineering knowledge base, and formalise upcoming review dates.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once these six weeks are complete, resist the urge to draft additional theoretical documentation. Allow the operating model to run for three consecutive review cycles. The empirical data recorded in your gateway logs and system register will reveal precisely which operational risks require further refinement. Practical governance is built through operational visibility, unambiguous personal accountability, and deterministic technical enforcement.&lt;/p&gt;

&lt;h3&gt;
  
  
  Primary sources and regulatory references
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;UAE Federal Legislative Portal: &lt;a href="https://uaelegislation.gov.ae/en/policy/details/the-uae-charter-for-the-development-and-use-of-artificial-intelligence" rel="noopener noreferrer"&gt;The UAE Charter for the Development and Use of Artificial Intelligence&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Regulatory Overview: &lt;a href="https://www.lw.com/en/insights/ai-in-the-uae-understanding-the-regulatory-landscape-and-key-authorities" rel="noopener noreferrer"&gt;Latham &amp;amp; Watkins on UAE AI Regulation and Authority Oversight&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;International Standards Organisation: &lt;a href="https://www.iso.org/standard/42001" rel="noopener noreferrer"&gt;ISO/IEC 42001:2023 Information Technology: Artificial Intelligence: Management Systems&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Certification Guidance: &lt;a href="https://www.konfirmity.com/blog/iso-42001" rel="noopener noreferrer"&gt;Konfirmity on ISO 42001 Implementation Timelines and Prerequisites&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Regional Adoption Benchmarks: &lt;a href="https://www.mediaoffice.ae/en/news/2026/june/09-06/dff-and-ibm-global-study-shows-uae-ahead-of-peers-in-ai-governance-adoption" rel="noopener noreferrer"&gt;Dubai Future Foundation and IBM Study on Regional AI Governance Leadership&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Operating Roles in Practice: &lt;a href="https://www.cdomagazine.tech/ai-governance/ai-governance-roles-who-owns-what-as-ai-scales-in-the-enterprise" rel="noopener noreferrer"&gt;CDO Magazine on Practical AI Governance Roles and Scaling Accountability&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Committee Structures: &lt;a href="https://trustible.ai/post/how-to-establish-an-effective-ai-governance-committee-in-2026/" rel="noopener noreferrer"&gt;Trustible on Establishing Effective AI Governance Committees&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Risk Framework Reference: &lt;a href="https://www.nist.gov/itl/ai-risk-management-framework" rel="noopener noreferrer"&gt;National Institute of Standards and Technology (NIST) AI Risk Management Framework&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.azrty.com/blog/ai-governance-that-does-not-slow-you-down-the-minimum-operating-model-for-uae-en" rel="noopener noreferrer"&gt;Azrty&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aigovernance</category>
      <category>uae</category>
      <category>iso42001</category>
      <category>aistrategy</category>
    </item>
    <item>
      <title>AI acceptable use policy for employees: what works</title>
      <dc:creator>Azrty</dc:creator>
      <pubDate>Fri, 16 Oct 2026 05:00:53 +0000</pubDate>
      <link>https://dev.to/azrty/ai-acceptable-use-policy-for-employees-what-works-58ea</link>
      <guid>https://dev.to/azrty/ai-acceptable-use-policy-for-employees-what-works-58ea</guid>
      <description>&lt;p&gt;Somewhere in your organisation this morning, someone pasted a client contract, a candidate CV or an unreleased financial projection into a personal ChatGPT account. This is not a hypothetical risk to manage next quarter: 66% of office professionals admit using AI tools at work even when they believed their employer did not permit it. The reflex response, a blanket ban, does not work. It simply pushes confidential data onto personal smartphones and unmonitored home networks. This article sets out the working alternative for a 20 to 200 person firm: a two-page AI acceptable use policy you can write this week, a sanctioned tool under company accounts, and a private gateway for the work that must stay inside your perimeter. With the numbers.&lt;/p&gt;

&lt;p&gt;An effective AI acceptable use policy for employees sets clear data classification boundaries, specifies sanctioned corporate tools, and establishes a no-blame incident reporting path. Rather than attempting an outright ban, a workable policy gives staff approved, low-friction alternatives so confidential company and client data never enters public AI models. For a 20 to 200 person organisation, this means combining a two-page policy document with company-managed accounts and a self-hosted private gateway for sensitive workloads.&lt;/p&gt;

&lt;p&gt;The urgency is driven by frontline behaviour. A PagerDuty survey published in June 2026 found that two-thirds (66%) of office professionals have used AI tools at work despite believing it was not permitted under company policy (&lt;a href="https://www.pagerduty.com/newsroom/shadow-ai-workplace-survey-2026/" rel="noopener noreferrer"&gt;PagerDuty&lt;/a&gt;). The same survey found 88% have shared work-related information with public AI tools such as ChatGPT, Claude or Gemini: 43% shared emails, 40% meeting notes, 34% customer data, and 31% financial information or confidential company documents. &lt;/p&gt;

&lt;p&gt;If your instinct as a leader is to issue a strict ban or block AI domains at the perimeter firewall, the evidence suggests that the ban has already failed. Worse, it actively increases your exposure. When staff need to summarise twenty pages of meeting notes before a 2:00 PM executive call, they do not abandon the technology; they open ChatGPT on a personal smartphone, tether to a 5G hotspot, or forward the document to a personal webmail address.&lt;/p&gt;

&lt;p&gt;Here is what actually works, what it costs, and how a 20 to 200 person organisation can put a working system in place within 30 days.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do employees ignore AI bans and leak company data?
&lt;/h2&gt;

&lt;p&gt;The PagerDuty Shadow AI Survey was conducted by Wakefield Research among 1,250 office professionals in non-IT roles at organisations with annual revenue of USD 500 million or more, across the United States, United Kingdom, Australia and Japan (&lt;a href="https://www.pagerduty.com/newsroom/shadow-ai-workplace-survey-2026/" rel="noopener noreferrer"&gt;PagerDuty&lt;/a&gt;). While your organisation in the UAE or GCC is likely smaller, there is no evidence that staff behaviour differs when deadlines loom. The direction of travel is unambiguous.&lt;/p&gt;

&lt;p&gt;Two operational figures matter most to technical and business leadership:&lt;/p&gt;

&lt;p&gt;First, the volume of confidential material entering public models is accelerating rapidly. &lt;a href="https://unio.digital/chatgpt-sensitive-data" rel="noopener noreferrer"&gt;Figures compiled by Unio Digital&lt;/a&gt; from vendor security research put the share of corporate data entering AI tools that is sensitive at 34.8%, up from 10.7% two years earlier (Cyberhaven, 2025). The same review highlights that 77% of employees paste data directly into generative AI prompts, and 82% of those pastes originate from personal accounts rather than corporate workspaces (LayerX, 2025).&lt;/p&gt;

&lt;p&gt;Second, the financial and operational cost when that exposure triggers a security incident is severe. IBM's Cost of a Data Breach 2026, as compiled in the Unio Digital review, found that security incidents involving shadow AI had more than doubled to 43% of organisations, averaging USD 5.39 million per incident (&lt;a href="https://unio.digital/chatgpt-sensitive-data" rel="noopener noreferrer"&gt;Unio Digital&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The lesson for a mid-market firm is not that you will necessarily face a USD 5.39 million breach bill; those samples skew towards multinational enterprises. The immediate takeaway is that shadow AI use is near-universal, it directly involves your most sensitive commercial material, and it is happening right now through unmanaged personal channels that your IT and security teams cannot audit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do blanket AI bans fail in practice?
&lt;/h2&gt;

&lt;p&gt;Blocking external AI domains at your office firewall feels decisive during an executive committee meeting. In practice, it creates a dangerous illusion of security.&lt;/p&gt;

&lt;p&gt;Start with how your team actually works. Because 82% of corporate data pastes into generative AI tools originate from personal accounts (&lt;a href="https://unio.digital/chatgpt-sensitive-data" rel="noopener noreferrer"&gt;Unio Digital&lt;/a&gt;), the corporate network perimeter is largely irrelevant. Consumer ChatGPT accounts retain chat history by default and use prompt inputs to train and refine foundation models unless an individual user navigates deep into settings to opt out. A consumer account is not covered by your master service agreements, your non-disclosure agreements, or enterprise data protection commitments.&lt;/p&gt;

&lt;p&gt;Furthermore, consumer account credentials represent an active secondary risk. Over 225,000 OpenAI credentials captured by infostealer malware were listed for sale on dark web illicit marketplaces in 2024 (&lt;a href="https://unio.digital/chatgpt-sensitive-data" rel="noopener noreferrer"&gt;Unio Digital&lt;/a&gt;). When an employee uses their personal account on an unmanaged personal device, any paste containing client confidential data sits inside an account that may already be compromised by infostealer malware. A firewall ban does not remove the data from these insecure environments. It simply removes your security team from the conversation, pushing usage to mobile browsers and home Wi-Fi networks where data loss prevention (DLP), conditional access, and audit logging cannot reach.&lt;/p&gt;

&lt;p&gt;Bans also inflict direct damage on talent retention. In the PagerDuty study, 77% of office professionals stated that their employer's AI restrictions limit their professional growth, while 75% said they would be likely to look for a new role that offered better AI skills development (&lt;a href="https://www.pagerduty.com/newsroom/shadow-ai-workplace-survey-2026/" rel="noopener noreferrer"&gt;PagerDuty&lt;/a&gt;). Forcing high-performing analysts, software engineers, and project managers to work with one hand tied behind their backs creates resentment.&lt;/p&gt;

&lt;p&gt;The practical alternative is not unconstrained permission. It is a three-part operating model: a concise, practical acceptable use policy, an approved commercial tool provisioned under company accounts, and a self-hosted private gateway for the sensitive workloads that cannot leave your perimeter.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to write an AI acceptable use policy for employees
&lt;/h2&gt;

&lt;p&gt;An AI acceptable use policy for employees should never be a 40-page legal dissertation. Lengthy governance manuals are rarely read, harder to remember, and virtually impossible for frontline managers to enforce. A policy that works must fit on two pages, present a clear mental model, establish a sanctioned path that is more convenient than personal workarounds, and provide a clear procedure for when someone makes a mistake.&lt;/p&gt;

&lt;p&gt;The policy should centre on a strict three-tier classification model that tells staff exactly where different types of data may go:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Red (Restricted)&lt;/strong&gt;: Client personal data, Emirates ID numbers, bank details, unreleased financial projections, payroll files, intellectual property, and anything covered by an NDA. This tier must never be submitted to a hosted multitenant AI tool. It is routed exclusively to your internal private gateway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amber (Internal)&lt;/strong&gt;: Internal strategy memos, project roadmaps, non-sensitive source code, and business context that contains no personal identifiers or confidential financial metrics. Hosted commercial tools under corporate accounts are permitted only after redaction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Green (Public)&lt;/strong&gt;: Public marketing collateral, standard boilerplate text, generic coding syntax queries, synthetic test data, and general brainstorming. Any sanctioned corporate tool is approved.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Below is a functional policy template. Customise the bracketed operational fields, keep the length under two pages, and issue it immediately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ACME AI Acceptable Use Policy (v1.0, dated DD Month YYYY)

1. Purpose. This policy defines how we use artificial intelligence tools
   at work. Its goal is to enable productive, safe AI adoption, not to
   prohibit it.

2. Sanctioned tools. Staff may use AI exclusively via corporate accounts:
   - ChatGPT Business (under the ACME corporate workspace)
   - Microsoft Copilot Chat (authenticated with your corporate Entra ID account)
   - The ACME Internal AI Gateway at https://ai.internal for Red and Amber data
   Using personal accounts, consumer logins, or unapproved third-party AI
   extensions for company work is strictly prohibited.

3. Data classification rules. Before submitting information, classify it:
   RED: Client PII, national identity numbers, financial records, HR files,
   unreleased company metrics, NDA-governed material. Gateway only.
   AMBER: Internal memos, architectures, source code. Sanctioned hosted
   tools permitted ONLY after redacting identifiers.
   GREEN: Public content, generic drafting, open syntax questions.
   Sanctioned tools permitted freely.

4. Redaction protocol. When preparing Amber content for hosted tools:
   replace client and employee names with placeholders such as [Client A];
   strip account numbers, phone numbers, and addresses; retain only the
   abstract structure required to complete the task.

5. Human accountability. You remain personally responsible for deliverables.
   Verify all facts, calculations, statutory citations, and code outputs
   before sharing with clients or deploying to production.

6. Transparency. Inform clients or counterparties when AI has generated a
   substantial part of a deliverable whenever contracts or regulations require it.

7. No-blame incident reporting. If you inadvertently paste Red data into an
   unapproved or hosted tool, notify [Head of IT] within 24 hours. Prompt
   reporting carries no disciplinary sanction. Concealing a known data leak
   is a disciplinary offence.

8. Governance. This policy is reviewed quarterly by [Head of IT].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two operational principles ensure this policy succeeds:&lt;/p&gt;

&lt;p&gt;First, your sanctioned path must deliver superior performance: low-latency models, generous usage caps, and zero friction. If the internal gateway is slow or difficult to access, staff will revert to consumer accounts.&lt;/p&gt;

&lt;p&gt;Second, enforce network boundaries pragmatically. Block consumer AI login pages on managed laptops via your secure web gateway or endpoint management profile. Configure endpoint DLP rules to detect patterns like UAE Emirates ID numbers (784-XXXX-XXXXXXX-X) and international bank account numbers (IBANs) in browser clipboard events. You cannot control personal mobile devices directly, but you can remove friction from the corporate path and maintain an auditable record of compliance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which AI tools should your company policy sanction?
&lt;/h2&gt;

&lt;p&gt;The fastest risk-reduction step an organisation can take is migrating employees from unmanaged personal accounts to a corporate workspace. The contractual and technical differences between consumer and enterprise tiers are fundamental.&lt;/p&gt;

&lt;p&gt;OpenAI does not use data submitted to ChatGPT Business, ChatGPT Enterprise, or the OpenAI API to train its models by default (&lt;a href="https://openai.com/enterprise-privacy/" rel="noopener noreferrer"&gt;OpenAI enterprise privacy&lt;/a&gt;). Workspace administrators retain administrative oversight, user provisioning, and retention controls, with deleted conversations purged from OpenAI operational systems within 30 days. ChatGPT Business is priced at USD 25 per seat per month on monthly billing, or USD 20 per seat per month on annual billing, with an upgraded Premium seat at USD 125 monthly or USD 100 annually, specifically accommodating organisations sized from 2 to 200 seats (&lt;a href="https://openai.com/business/pricing/" rel="noopener noreferrer"&gt;OpenAI Business pricing&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;For organisations running on Microsoft 365, Microsoft Copilot Chat accessed via an Entra ID corporate account provides commercial data protection at no additional cost (&lt;a href="https://learn.microsoft.com/en-us/copilot/privacy-and-protections" rel="noopener noreferrer"&gt;Microsoft Learn&lt;/a&gt;). Prompts and responses do not cross the Microsoft 365 tenant boundary, are not inspected by humans, are not used to train foundation models, and inherit corporate audit logging and eDiscovery retention policies.&lt;/p&gt;

&lt;p&gt;When developing custom internal tooling using the OpenAI API, inputs have not been used for model training by default since 1 March 2023 (&lt;a href="https://developers.openai.com/api/docs/guides/your-data" rel="noopener noreferrer"&gt;OpenAI platform data controls&lt;/a&gt;). API operational logs are retained for abuse monitoring for up to 30 days, and organisations handling highly regulated workloads can apply for zero data retention (ZDR).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Route&lt;/th&gt;
&lt;th&gt;Direct cost&lt;/th&gt;
&lt;th&gt;Used for model training&lt;/th&gt;
&lt;th&gt;Governance and controls&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Personal accounts (status quo)&lt;/td&gt;
&lt;td&gt;USD 0 direct&lt;/td&gt;
&lt;td&gt;Yes, by default unless opted out&lt;/td&gt;
&lt;td&gt;Zero administrative visibility; personal email logins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChatGPT Business&lt;/td&gt;
&lt;td&gt;USD 25/seat monthly; USD 20/seat annual&lt;/td&gt;
&lt;td&gt;No, by default&lt;/td&gt;
&lt;td&gt;Central admin console, SSO, seat lifecycle, 30-day purge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Microsoft Copilot Chat (work account)&lt;/td&gt;
&lt;td&gt;Included with Entra ID corporate plans&lt;/td&gt;
&lt;td&gt;No, protected&lt;/td&gt;
&lt;td&gt;M365 tenant boundary, corporate audit logs, eDiscovery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI API (custom applications)&lt;/td&gt;
&lt;td&gt;Usage-based token pricing&lt;/td&gt;
&lt;td&gt;No, default policy since March 2023&lt;/td&gt;
&lt;td&gt;30-day abuse monitoring logs; zero retention on approval&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Private self-hosted gateway&lt;/td&gt;
&lt;td&gt;GPU compute leasing&lt;/td&gt;
&lt;td&gt;Never, runs isolated weights&lt;/td&gt;
&lt;td&gt;Complete data residency, raw prompt audit logs, local weights&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A critical constraint for GCC organisations to evaluate: major providers such as OpenAI do not offer an in-country UAE data processing boundary for these software-as-a-service plans. For standard drafting and day-to-day administrative tasks, this trade-off is often acceptable when paired with strict Amber redaction rules. However, for sensitive client files, national identity data, and regulated records, cross-border data transfer without explicit legal grounds introduces significant compliance exposure.&lt;/p&gt;

&lt;h2&gt;
  
  
  When is a private AI gateway worth paying for?
&lt;/h2&gt;

&lt;p&gt;Consider a typical GCC operational structure: an 80-person professional services consultancy in Dubai operating on Microsoft 365. The organisation comprises advisory, marketing, and client delivery teams. Approximately 25 staff members routinely handle Red or Amber material: financial models, audit schedules, M&amp;amp;A due diligence files, and human resources records. The remaining 55 staff members conduct general analysis, drafting, and research.&lt;/p&gt;

&lt;p&gt;A private gateway consists of dedicated GPU hardware running open-weight inference models behind a unified reverse proxy. The proxy handles user authentication, per-department token allowances, and immutable local logging. Your staff interact with standard web interfaces or internal scripts, but the inference processes execute on private hardware hosted within a local data centre. Prompts and responses remain strictly within your controlled perimeter.&lt;/p&gt;

&lt;p&gt;We deploy and manage these environments for clients within our &lt;a href="https://www.azrty.com/services/operate" rel="noopener noreferrer"&gt;AI infrastructure service&lt;/a&gt;, placing &lt;a href="https://www.azrty.com/software/fastllm-proxy" rel="noopener noreferrer"&gt;FastLLM Proxy&lt;/a&gt; in front of model instances. FastLLM Proxy acts as an OpenAI-compatible gateway that centralises request routing, enforces department quotas, and manages access controls across private GPU instances and external hosted endpoints.&lt;/p&gt;

&lt;p&gt;Three triggers indicate that your organisation requires a private gateway:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Data residency mandates&lt;/strong&gt;: Client agreements, public sector contracts, or regional data protection statutes requiring that personal and financial information never leave the UAE.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High volume of confidential data&lt;/strong&gt;: When sensitive workflows are executed daily, human redaction discipline inevitably slips under pressure. Technical segregation prevents leaks by design.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regulatory auditability&lt;/strong&gt;: Regulated entities in financial services, legal, and healthcare sectors must produce verifiable audit trails detailing who issued each prompt, what model generated the response, and where the compute was located.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To evaluate the operational expenditure, consider indicative pricing from GPU providers. Using &lt;a href="https://www.hyperstack.cloud/pricing" rel="noopener noreferrer"&gt;Hyperstack published rates&lt;/a&gt; as an industry benchmark:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;NVIDIA L40 (48 GB VRAM)&lt;/strong&gt;: USD 1.00 per hour on demand, translating to approximately USD 730 per month running 24/7 (roughly AED 2,700). An L40 runs OpenAI's open-weight gpt-oss-20b model (requiring approximately 16 GB VRAM) or high-performance 32B parameter models in 4-bit quantisation with ample headroom.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NVIDIA H100 (80 GB VRAM)&lt;/strong&gt;: USD 2.50 per hour on demand, amounting to roughly USD 1,825 per month (approximately AED 6,700), or from USD 1.75 per hour on reserved terms (roughly USD 1,280 per month). OpenAI's deployment guidelines show that gpt-oss-120b requires approximately 60 GB of VRAM, running on a single H100 instance (&lt;a href="https://developers.openai.com/cookbook/articles/gpt-oss/run-vllm" rel="noopener noreferrer"&gt;OpenAI cookbook&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The production inference layer is powered by &lt;a href="https://github.com/vllm-project/vllm" rel="noopener noreferrer"&gt;vLLM&lt;/a&gt;, an open-source, Apache 2.0 licensed serving engine featuring continuous batching, PagedAttention memory management, and an OpenAI-compatible API structure supporting hundreds of model architectures.&lt;/p&gt;

&lt;p&gt;The service commands for standard open-weight architectures illustrate the operational simplicity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Launch gpt-oss-120b on a single 80 GB GPU instance (requires ~60 GB VRAM)&lt;/span&gt;
vllm serve openai/gpt-oss-120b &lt;span class="nt"&gt;--max-model-len&lt;/span&gt; 32768

&lt;span class="c"&gt;# Launch gpt-oss-20b on an L40 instance (requires ~16 GB VRAM)&lt;/span&gt;
vllm serve openai/gpt-oss-20b &lt;span class="nt"&gt;--max-model-len&lt;/span&gt; 32768
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Internal developers and chat user interfaces connect to the gateway by modifying the base URL in the standard OpenAI client:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="c1"&gt;# Direct internal tools and agent workflows to the secure internal gateway
&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://ai.internal/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AI_GATEWAY_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;  &lt;span class="c1"&gt;# Department-specific key with proxy budget enforcement
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now compare the direct operational cost across potential setups for this 80-person firm:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Architecture&lt;/th&gt;
&lt;th&gt;Monthly compute cost&lt;/th&gt;
&lt;th&gt;Model training risk&lt;/th&gt;
&lt;th&gt;Data residency&lt;/th&gt;
&lt;th&gt;Audit logging control&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unmanaged personal accounts&lt;/td&gt;
&lt;td&gt;USD 0 direct&lt;/td&gt;
&lt;td&gt;High: default training enabled&lt;/td&gt;
&lt;td&gt;No control&lt;/td&gt;
&lt;td&gt;None: inaccessible to IT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChatGPT Business (80 seats)&lt;/td&gt;
&lt;td&gt;USD 1,600 (annual billing)&lt;/td&gt;
&lt;td&gt;Zero: enterprise commitment&lt;/td&gt;
&lt;td&gt;SaaS cloud boundary&lt;/td&gt;
&lt;td&gt;Enterprise console metadata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Private gateway (L40 48 GB)&lt;/td&gt;
&lt;td&gt;~USD 730 hosted&lt;/td&gt;
&lt;td&gt;Zero: self-hosted instance&lt;/td&gt;
&lt;td&gt;UAE perimeter&lt;/td&gt;
&lt;td&gt;Full prompt and response logs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Private gateway (H100 80 GB)&lt;/td&gt;
&lt;td&gt;~USD 1,825 on demand&lt;/td&gt;
&lt;td&gt;Zero: self-hosted instance&lt;/td&gt;
&lt;td&gt;UAE perimeter&lt;/td&gt;
&lt;td&gt;Full prompt and response logs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The strategic approach is a blended model: provision ChatGPT Business seats for the 55 employees engaged in public or generic research (55 seats at USD 20 equals USD 1,100 monthly), while directing the 25 sensitive-work analysts to the private gateway (USD 730 to USD 1,825 monthly). &lt;/p&gt;

&lt;p&gt;For a total monthly budget between USD 1,830 and USD 2,925, the firm eliminates shadow AI, provides high-speed tooling for general staff, and guarantees that sensitive client data never leaves an audited, local GPU instance. Compared against the IBM benchmark cost of USD 5.39 million per shadow AI incident (&lt;a href="https://unio.digital/chatgpt-sensitive-data" rel="noopener noreferrer"&gt;Unio Digital&lt;/a&gt;), the business case is clear.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you roll out an AI policy in 30 days?
&lt;/h2&gt;

&lt;p&gt;Deploying this framework across a mid-sized organisation requires an orderly progression over four weeks:&lt;/p&gt;

&lt;h3&gt;
  
  
  Week 1: Policy sign-off and baseline tooling
&lt;/h3&gt;

&lt;p&gt;Finalise your organisation's two-page acceptable use policy using the template provided. Secure executive sign-off from legal, operations, and IT leadership. Procure an initial pool of five to ten ChatGPT Business seats or confirm Microsoft Copilot commercial protections in your Entra ID tenant. Implement standard web filtering rules blocking consumer generative AI sign-up pages on managed endpoints, and configure endpoint DLP to alert when UAE Emirates ID numbers or IBAN strings appear in web paste events.&lt;/p&gt;

&lt;h3&gt;
  
  
  Week 2: Private gateway staging and integration
&lt;/h3&gt;

&lt;p&gt;Spin up your dedicated GPU instance. Deploy vLLM with your chosen open-weight model weights and configure the reverse proxy layer. Configure departmental API keys with strict monthly token quotas, log retention policies, and rate limits. Onboard the 25 staff members handling sensitive workflows to test latency, prompt responsiveness, and usability.&lt;/p&gt;

&lt;h3&gt;
  
  
  Week 3: Departmental practical training
&lt;/h3&gt;

&lt;p&gt;Policy adoption fails when training is limited to mass email announcements. Conduct one-hour interactive sessions with each department. Review real-world emails and documents from their daily workflow, demonstrating how to categorise items into Red, Amber, and Green. Teach practical redaction techniques, verify that users can access their sanctioned accounts, and reiterate the non-punitive incident reporting policy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Week 4: Production cutover and exception management
&lt;/h3&gt;

&lt;p&gt;Decommission ad-hoc developer access and unapproved API trial accounts. Move the remaining corporate staff onto their sanctioned commercial accounts. Publish the official directory of approved AI tools on the intranet alongside the two-page policy, and schedule the first quarterly governance review. The audit logs generated by your gateway and administrative consoles now form your operational compliance baseline.&lt;/p&gt;

&lt;h2&gt;
  
  
  UAE AI compliance: what does the PDPL require by 2027?
&lt;/h2&gt;

&lt;p&gt;For organisations operating in the United Arab Emirates, establishing AI governance is no longer just a cybersecurity best practice; it is an immediate statutory requirement.&lt;/p&gt;

&lt;p&gt;Federal Decree-Law No. 45 of 2021 on the Protection of Personal Data (PDPL) requires full compliance by 1 January 2027 (&lt;a href="https://wcr.legal/uae-ai-regulation-2026-compliance-guide/" rel="noopener noreferrer"&gt;WCR Legal&lt;/a&gt;). The UAE PDPL is a consent-first framework. Unlike the European Union General Data Protection Regulation (GDPR), the UAE federal statute does not recognise "legitimate interests" as a lawful basis for processing personal information. &lt;/p&gt;

&lt;p&gt;Relying on informal assumptions while employees feed client or employee data into public machine learning systems exposes the organisation directly to statutory sanctions. Administrative fines under the PDPL reach up to AED 5 million (approximately USD 1.36 million) for severe violations, and regulatory compliance guidance explicitly instructs organisations processing UAE personal data at scale to maintain documented AI usage policies covering approved tools and permitted use cases (&lt;a href="https://wcr.legal/uae-ai-regulation-2026-compliance-guide/" rel="noopener noreferrer"&gt;WCR Legal&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;In financial free zones, strict supervision is already in effect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DIFC&lt;/strong&gt;: DIFC Data Protection Regulation 10 has been active since January 2026, establishing mandatory requirements for AI impact assessments, transparency disclosures, and rigorous record-keeping for high-risk data processing, backed by statutory fines between USD 25,000 and USD 50,000 per violation (&lt;a href="https://wcr.legal/uae-ai-regulation-2026-compliance-guide/" rel="noopener noreferrer"&gt;WCR Legal&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ADGM&lt;/strong&gt;: The Data Protection Regulations 2021 (DPR 2021) closely mirror international standards, requiring strict technical safeguards, documented transfer mechanisms, and verifiable audit trails for automated processing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A practical corporate posture recognises that the two-page acceptable use policy, commercial workspaces, and a private inference gateway are not separate initiatives. Together, they constitute the exact compliance package an auditor or regulatory authority will examine: a defined policy, sanctioned tooling, boundary protections against unauthorised processing, and verifiable logs demonstrating where data was processed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What should your organisation do next?
&lt;/h2&gt;

&lt;p&gt;Take these operational steps immediately:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;This week&lt;/strong&gt;: Adapt the acceptable use template to your organisation's reporting lines and get it approved. Enable commercial data protection in your Microsoft 365 environment or purchase a starter tier of ChatGPT Business seats. Review your standard client engagement contracts to identify existing data processing restrictions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This month&lt;/strong&gt;: Evaluate your sensitive data exposure. If contractual data residency, high-volume confidential processing, or regulatory compliance mandates apply to your firm, evaluate your private gateway deployment. Size your compute capacity using published rates: an L40 at USD 1.00 per hour for standard models, or an H100 at USD 2.50 per hour for 120B parameter architectures (&lt;a href="https://www.hyperstack.cloud/pricing" rel="noopener noreferrer"&gt;Hyperstack pricing&lt;/a&gt;).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Azrty is a UAE company based in Dubai. Our own team in the UAE does the consulting, the deployment and the support for our clients, configuring local GPU infrastructure and integrating reverse proxy software to establish secure, audited AI endpoints. If you need a fully compliant, private AI gateway operating within your perimeter, &lt;a href="https://www.azrty.com/services/operate" rel="noopener noreferrer"&gt;explore our AI infrastructure services&lt;/a&gt; to begin.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.azrty.com/blog/ai-acceptable-use-policy-for-employees-what-works" rel="noopener noreferrer"&gt;Azrty&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aistrategy</category>
      <category>acceptableusepolicy</category>
      <category>dataprotection</category>
      <category>uae</category>
    </item>
    <item>
      <title>Why is my AI API bill so high? Where tokens go</title>
      <dc:creator>Azrty</dc:creator>
      <pubDate>Sun, 11 Oct 2026 05:05:58 +0000</pubDate>
      <link>https://dev.to/azrty/why-is-my-ai-api-bill-so-high-where-tokens-go-4458</link>
      <guid>https://dev.to/azrty/why-is-my-ai-api-bill-so-high-where-tokens-go-4458</guid>
      <description>&lt;p&gt;Your AI bill is climbing because total cost is unit count multiplied by unit price, and agents expanded unit counts by 10 to 30 times while unit prices merely halved. A chatbot makes one model call per question; an autonomous agent makes 10 to 20, re-sending system prompts, tool schemas, and conversation state on every turn. The remedies are practical and proven: cached static prefixes, intelligent routing of simple tasks to lightweight models, and gateway budgets that prevent runaway spend. Here are the numbers, an enterprise case in UAE dirhams, and five questions for your technology lead this week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is my AI API bill so high? Unit prices fell, unit counts exploded
&lt;/h2&gt;

&lt;p&gt;If you are asking why is my AI API bill so high when frontier model prices keep dropping, the answer is straightforward: unit prices fell, but unit counts exploded. Total spend equals unit count multiplied by unit price. While providers cut per-token rates by up to 98%, autonomous agents increased the number of tokens required per task by 10 to 30 times. The savings from cheaper inference were quickly erased by multi-turn loops, repeated context transmission, and unmonitored tool calls.&lt;/p&gt;

&lt;p&gt;The headline economics of artificial intelligence look deceptively attractive. Average cost per million tokens across major providers fell from roughly $10 to $2.50 in a single year, per Ramp enterprise spending data cited by &lt;a href="https://www.cockroachlabs.com/blog/agentic-ai-costs-at-scale/" rel="noopener noreferrer"&gt;Cockroach Labs&lt;/a&gt;, whose own analysis calculates that the per-token cost of frontier intelligence fell by about 98% since early 2024. Goldman Sachs, cited by both &lt;a href="https://techcrunch.com/2026/06/05/the-token-bill-comes-due-inside-the-industry-scramble-to-manage-ais-runaway-costs/" rel="noopener noreferrer"&gt;TechCrunch&lt;/a&gt; and &lt;a href="https://www.pointfive.co/blog/why-companies-overspend-on-ai-the-2026-cost-visibility-gap" rel="noopener noreferrer"&gt;PointFive&lt;/a&gt;, projects global token consumption multiplying 24 times by 2030, with semiconductor advances driving underlying compute costs per token down by 60% to 70% a year.&lt;/p&gt;

&lt;p&gt;Crucially, compute cost is what cloud providers spend, not what appears on your corporate invoice. Providers do not pass every operational saving through to enterprise subscribers, and consumption patterns have fundamentally altered.&lt;/p&gt;

&lt;p&gt;The financial divergence occurred when corporate systems transitioned from simple chatbots to autonomous agents. Gartner analysis from March 2026, cited by Cockroach Labs, reveals that agentic workflows consume 5 to 30 times more tokens per task than a standard conversational interface. While a chatbot processes a single prompt and returns a single completion, an autonomous agent executes an iterative loop: it decomposes objectives, inspects environment state, retrieves external context, executes API tools, parses structured schemas, and conducts self-correction passes. A workflow that once required a single inference call now triggers 10 to 20 consecutive calls, with each iteration compounding context size.&lt;/p&gt;

&lt;p&gt;The enterprise consequences are now evident across quarterly balance sheets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uber depleted its entire 2026 artificial intelligence coding budget by April. Developer adoption of autonomous coding agents climbed from 32% to 84% across a 5,000-engineer department in roughly three months. Spend averaged between $150 and $250 per engineer per month, while active power users approached $2,000 per month.&lt;/li&gt;
&lt;li&gt;Microsoft Experiences and Devices division cancelled substantial portions of internal Claude Code licences during the same period to arrest unbudgeted consumption.&lt;/li&gt;
&lt;li&gt;A Priceline engineering lead confirmed to TechCrunch that a routine seat-based renewal for Cursor escalated by a factor of four to five upon contract renegotiation.&lt;/li&gt;
&lt;li&gt;DoiT and Sapio Research surveyed 500 enterprise buyers in February 2026, finding that 79% suffered material AI cost overruns in the preceding 12 months.&lt;/li&gt;
&lt;li&gt;KPMG AI Pulse research in Q2 2026 revealed that only 36% of active organisations maintain direct token caps or programmable usage policies.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://data.finops.org/" rel="noopener noreferrer"&gt;FinOps Foundation State of FinOps 2026&lt;/a&gt; survey shows 98% of practitioners now manage AI compute spend, up from 31% two years ago, identifying granular monitoring of tokens, request paths, and GPU utilisation as their single highest tooling priority.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gartner's 2026 hype cycle estimates that 40% of enterprise agent deployments will be abandoned by 2027 purely on financial grounds: not because the software failed technically, but because operational margins collapsed. For financial controllers, chief technology officers, and engineering directors across the UAE and the wider GCC, understanding where these funds disappear is the prerequisite to regaining control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where does your AI API spend actually go?
&lt;/h2&gt;

&lt;p&gt;When engineering teams audit client inference bills, token leakage routinely clusters within five architectural patterns. In order of fiscal severity:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Context re-transmission
&lt;/h3&gt;

&lt;p&gt;Context re-transmission represents the largest invisible cost in multi-turn architectures. In standard ReAct (Reasoning and Acting) loops, an agent re-submits its entire conversational history, system instructions, tool definitions, and prior environmental observations with every single model invocation.&lt;/p&gt;

&lt;p&gt;Stanford Digital Economy Lab research on agent cost attribution found that re-sent context accounts for 62% of aggregate agent inference expenditure. The organisation pays repeatedly for the model to re-read static instructions that never changed between steps. Retrieval-augmented generation (RAG) compounds this cost: dynamic document lookups expand input context windows by 3x to 5x on each step, according to analysis from PointFive.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Unbounded retries and cyclic loops
&lt;/h3&gt;

&lt;p&gt;When an external API endpoint lags, returns invalid JSON, or yields stale records, an unmanaged agent defaults to self-correction. It attempts alternative queries, modifies formatting, or repeats the tool execution. Because every retry carries the cumulative context history, a three-retry sequence on a minor database query triples token consumption for that specific subtask.&lt;/p&gt;

&lt;p&gt;Without rigid loop detection, agents can enter catastrophic cycles. In one documented incident, a healthcare provider running three production agents saw monthly inference expand from $12,000 to $68,000 in six weeks. A faulty retrieval parameter fetched clinical PDF attachments eight times larger than intended. Because each individual step appeared syntactically valid in isolation, application logs failed to raise alerts while cloud credits evaporated.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Frontier-model over-provisioning
&lt;/h3&gt;

&lt;p&gt;A 15-step agentic sequence rarely requires frontier-grade reasoning across all 15 stages. In typical business workflows, at least half the intermediate steps consist of simple text extraction, sentiment classification, entity disambiguation, or JSON formatting.&lt;/p&gt;

&lt;p&gt;Routing these routine chores to flagship reasoning models is commercial waste. One enterprise team that audited token consumption by task type and re-routed simple parsing steps to lightweight models reduced monthly API invoices from $40,000 to $24,000 without altering application output or accuracy: pure routing hygiene.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Supporting infrastructure overhead
&lt;/h3&gt;

&lt;p&gt;Model inference constitutes roughly 20% of the comprehensive cost of ownership. The supporting software ecosystem introduces substantial recurring fees:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vector database operations and embedding generation contribute an additional 3% to 8% above visible inference billing.&lt;/li&gt;
&lt;li&gt;Enterprise vector storage hosting contributes 5% to 12%.&lt;/li&gt;
&lt;li&gt;Knowledge base synchronisation demands recurring document re-embedding, an operational overhead that requires roughly 20% of the baseline monthly budget.&lt;/li&gt;
&lt;li&gt;Automated evaluation frameworks using LLM-as-a-judge patterns demand between $0.01 and $0.10 per benchmarked response, and a production agent suite can easily execute 100 test variations per release.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Idle capacity and over-provisioned throughput
&lt;/h3&gt;

&lt;p&gt;Organisations running self-hosted models or committed cloud instances often reserve dedicated compute to handle theoretical peak traffic. An audit across 23,000 enterprise GPU clusters revealed average hardware utilisation of merely 5%. PointFive observed committed provisioned throughput running at seven times actual consumption. These fixed monthly platform fees do not appear as token surges, making them particularly difficult for finance teams to spot on line-item reviews.&lt;/p&gt;

&lt;p&gt;Unit price per token is the smallest commercial lever available to an enterprise. The decisive levers are aggregate token volume per completed task, and governance over which systems and individuals possess unmetered API credentials.&lt;/p&gt;

&lt;h2&gt;
  
  
  A worked example: how an AED 8,800 pilot became an AED 132,000 line item
&lt;/h2&gt;

&lt;p&gt;The following model reflects real architectural patterns encountered across GCC financial institutions. The scenario examines a 3,000-employee banking group operating in the UAE that pilot-tested a customer-operations assistant as a single-turn query engine before converting it into an autonomous operational agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 1: The pilot baseline (one call per query)
&lt;/h3&gt;

&lt;p&gt;The initial prototype accepted a customer enquiry, performed a retrieval pass, and generated a resolution. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input: 12,000 tokens (system policy rules, customer metadata, and retrieved knowledge context).&lt;/li&gt;
&lt;li&gt;Output: 800 completion tokens.&lt;/li&gt;
&lt;li&gt;Platform: Claude Sonnet 4.6 priced at standard published rates of $3.00 per million input tokens and $15.00 per million output tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The unit calculation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input cost: (12,000 / 1,000,000) * $3.00 = $0.036&lt;/li&gt;
&lt;li&gt;Output cost: (800 / 1,000,000) * $15.00 = $0.012&lt;/li&gt;
&lt;li&gt;Combined cost: $0.048 (roughly five US cents per customer interaction)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At a volume of 50,000 customer queries per month, the monthly invoice totals $2,400. Converted at the UAE dirham peg of 3.6725, this equals roughly AED 8,814 per month. The CFO approved the business case.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 2: Production agent deployment (15 calls per task)
&lt;/h3&gt;

&lt;p&gt;To automate ticket execution, the engineering team deployed an autonomous agent architecture. Instead of returning text instructions, the agent queries the core banking ledger, checks identity verification databases, executes fraud verification routines, and reconciles system balances.&lt;/p&gt;

&lt;p&gt;Across these actions, the agent averages 15 model calls per completed task. Each call sends approximately 12,000 input tokens (6,000 tokens of immutable system rules and API schemas, plus 6,000 tokens of dynamic state, tool outputs, and conversational context) alongside 800 output tokens.&lt;/p&gt;

&lt;p&gt;The new unit calculation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Task input volume: 15 calls * 12,000 tokens = 180,000 input tokens&lt;/li&gt;
&lt;li&gt;Task input cost: (180,000 / 1,000,000) * $3.00 = $0.54&lt;/li&gt;
&lt;li&gt;Task output volume: 15 calls * 800 tokens = 12,000 output tokens&lt;/li&gt;
&lt;li&gt;Task output cost: (12,000 / 1,000,000) * $15.00 = $0.18&lt;/li&gt;
&lt;li&gt;Combined cost per completed task: $0.72&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At the same volume of 50,000 monthly transactions, total spend reaches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monthly expenditure: 50,000 * $0.72 = $36,000&lt;/li&gt;
&lt;li&gt;Dirham equivalent: AED 132,210 per month (AED 1,586,520 annually)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The customer volume did not expand, the baseline questions did not alter, and provider rates remained static. The monthly invoice multiplied by 15 simply due to the agentic execution structure.&lt;/p&gt;

&lt;p&gt;If integration faults cause five of those 15 steps to retry once due to transient database latencies, input consumption rises by an extra 60,000 tokens, adding $0.24 per task and lifting monthly invoices past AED 176,000.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Implementation stage&lt;/th&gt;
&lt;th&gt;Invocations per task&lt;/th&gt;
&lt;th&gt;Input per call&lt;/th&gt;
&lt;th&gt;Cost per task&lt;/th&gt;
&lt;th&gt;Monthly spend (50k tasks)&lt;/th&gt;
&lt;th&gt;Multiple vs baseline&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pilot chatbot&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;12,000&lt;/td&gt;
&lt;td&gt;$0.048&lt;/td&gt;
&lt;td&gt;$2,400 (AED 8,814)&lt;/td&gt;
&lt;td&gt;Baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent: Sonnet 4.6 (unoptimised)&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;12,000&lt;/td&gt;
&lt;td&gt;$0.720&lt;/td&gt;
&lt;td&gt;$36,000 (AED 132,210)&lt;/td&gt;
&lt;td&gt;15.0x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent: prompt caching applied&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;12,000&lt;/td&gt;
&lt;td&gt;$0.504&lt;/td&gt;
&lt;td&gt;$25,200 (AED 92,547)&lt;/td&gt;
&lt;td&gt;10.5x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent: caching + Haiku 4.5 routing&lt;/td&gt;
&lt;td&gt;15 (8 Haiku, 7 Sonnet)&lt;/td&gt;
&lt;td&gt;Dynamic&lt;/td&gt;
&lt;td&gt;$0.292&lt;/td&gt;
&lt;td&gt;$14,600 (AED 53,618)&lt;/td&gt;
&lt;td&gt;6.1x&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Applying structural engineering controls reduces monthly spend from $36,000 to $14,600: a 59.4% cost reduction. This confirms empirical benchmarks reported by Cockroach Labs, where systematic cost governance delivers 60% to 70% spend reductions on identical operational throughput.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you reduce high AI API bills?
&lt;/h2&gt;

&lt;p&gt;Bringing runaway inference spend back under control requires three foundational engineering controls.&lt;/p&gt;

&lt;h3&gt;
  
  
  Control 1: Cache the static prompt prefix
&lt;/h3&gt;

&lt;p&gt;Prompt caching delivers the highest immediate return on engineering time. As documented in &lt;a href="https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching" rel="noopener noreferrer"&gt;Anthropic prompt caching specifications&lt;/a&gt;, reading a cached token on Claude Sonnet 4.6 costs $0.30 per million tokens, compared to the standard input rate of $3.00 per million: an immediate 90% discount on cache hits. Cache reads are priced at 0.1x of standard input costs across current generations, while a five-minute write costs 1.25x and an extended one-hour write costs 2.0x.&lt;/p&gt;

&lt;p&gt;Because minimum cacheable thresholds sit at 1,024 tokens for Sonnet-class models, enterprise system prompts containing 6,000 tokens of workflow instructions and tool schemas qualify naturally.&lt;/p&gt;

&lt;p&gt;In our financial services workflow, the fixed 6,000-token prefix is written to cache on call 1 at $3.75 per million tokens, and read from cache across the subsequent 14 execution steps at $0.30 per million tokens. The dynamic 6,000-token state payload continues to bill at the baseline $3.00 rate.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Anthropic&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Anthropic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Fixed system instructions and comprehensive OpenAPI tool specifications
&lt;/span&gt;&lt;span class="n"&gt;SYSTEM_PROMPT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AGENT_BASE_PROMPT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-3-7-sonnet-20250219&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;SYSTEM_PROMPT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="c1"&gt;# Cache the static prefix: reads bill at 0.1x standard input rates
&lt;/span&gt;            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cache_control&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ephemeral&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="c1"&gt;# Dynamic execution state sits after the cache breakpoint
&lt;/span&gt;        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Task: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;State: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;current_state&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Operational metrics to track in production monitoring
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cache write tokens: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cache_creation_input_tokens&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cache read tokens:  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cache_read_input_tokens&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Engineering teams must prevent cache invalidation. Any non-static content placed ahead of the cache breakpoint invalidates the cryptographic hash, forcing a full input re-read. Placing timestamps, request IDs, customer identifiers, or non-deterministic schema ordering within the system prompt guarantees a near-zero cache hit rate. In one corporate implementation, an engineering team wondering why prompt caching delivered less than a 2% discount discovered that their orchestration framework inserted the current server microsecond timestamp into line two of the system prompt. Removing that single variable restored an 80% cache hit rate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Control 2: Route cheap work to cheap models
&lt;/h3&gt;

&lt;p&gt;Not every step in an agent pipeline requires flagship frontier reasoning. Complex tasks such as multi-variable planning, ambiguous policy reconciliation, and code synthesis demand frontier models. Simpler subtasks, including string extraction, classification, structural translation, and status formatting, execute reliably on compact models.&lt;/p&gt;

&lt;p&gt;Current standard rates per million tokens illustrate the pricing tiers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model identifier&lt;/th&gt;
&lt;th&gt;Standard input&lt;/th&gt;
&lt;th&gt;Standard completion&lt;/th&gt;
&lt;th&gt;Cached read&lt;/th&gt;
&lt;th&gt;Optimal functional role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 5&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;td&gt;$25.00&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;td&gt;Complex legal reasoning, macro planning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 5&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;td&gt;$10.00&lt;/td&gt;
&lt;td&gt;$0.20&lt;/td&gt;
&lt;td&gt;Balanced enterprise execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 4.6&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;td&gt;$15.00&lt;/td&gt;
&lt;td&gt;$0.30&lt;/td&gt;
&lt;td&gt;Deep agent loops, complex tool calling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Haiku 4.5&lt;/td&gt;
&lt;td&gt;$1.00&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;td&gt;$0.10&lt;/td&gt;
&lt;td&gt;Extraction, schema translation, routing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In our 15-step agent scenario:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;8 intermediate steps comprise deterministic extraction, parameter formatting, and simple checks. Routed to Claude Haiku 4.5 with pruned 4,000-token context windows and 300-token completions, these eight calls cost roughly $0.044 per task.&lt;/li&gt;
&lt;li&gt;7 complex planning and ledger modification steps remain on Claude Sonnet 4.6 with prompt caching enabled, costing $0.248 per task.&lt;/li&gt;
&lt;li&gt;Total per-task expenditure falls to approximately $0.292, saving over AED 78,000 every month on a 50,000-task baseline.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Model routing logic should live entirely within infrastructure configurations rather than hardcoded inside software repositories. Modern vendors are following this pattern: Factory introduced automated routing modules to match code generation tasks to cost-appropriate backends, and major hosted bills frequently show flagship requests routed dynamically to smaller tier endpoints where semantic complexity allows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Regional governance and data residency
&lt;/h3&gt;

&lt;p&gt;For organisations across the GCC, model routing addresses statutory compliance alongside financial waste. Under the UAE Federal Decree-Law No. 45 of 2021 regarding Personal Data Protection, as well as DIFC and ADGM data regulations, customer identifying information, sensitive banking records, and sovereign data assets must remain within controlled jurisdictions.&lt;/p&gt;

&lt;p&gt;Intelligent gateways allow engineering teams to establish strict policy routes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workflows touching personally identifiable customer records, HR databases, or financial ledgers route strictly to self-hosted open-weights models running within local private data centres.&lt;/li&gt;
&lt;li&gt;Sanitised, non-sensitive operational reasoning tasks route outward to international cloud endpoints.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This achieves stringent data sovereignty alongside optimal token spend.&lt;/p&gt;

&lt;h3&gt;
  
  
  Control 3: Token budgets, gateway enforcement, and chargeback
&lt;/h3&gt;

&lt;p&gt;While prompt caching and model routing optimise unit costs, hard gateway guardrails cap total expenditure. Relying on end-of-month cloud provider statements is an expensive mistake:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dedicated API keys per service principal:&lt;/strong&gt; Never permit multiple microservices, engineering pods, or departments to share master provider keys. Issue dedicated, revocable credentials to each isolated workload.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enforced token and spend quotas:&lt;/strong&gt; Configure pre-flight budget allocations on hourly, daily, and monthly intervals. When a service hits 80% of its allocation, notify engineering teams automatically. When it hits 100%, block non-critical operations or degrade traffic gracefully.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graceful degradation protocols:&lt;/strong&gt; Instead of hard-failing mission-critical production systems when budgets expire, intelligent gateways should automatically down-route requests to economical fallback models or local open-source endpoints. The business continues operating, and finance avoids invoice shock.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Loop and retry circuit breakers:&lt;/strong&gt; Implement hard ceiling thresholds on agent iterations. If an autonomous agent fails to converge on a valid tool output within six consecutive cycles, the gateway trips the circuit, halts inference, and alerts human operators.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated departmental chargeback:&lt;/strong&gt; Departmental consumption metrics must map directly back to respective business unit cost centres. When operations, engineering, and compliance foot their own token bills, organizational consumption practices adjust quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The architectural solution: FastLLM Proxy
&lt;/h2&gt;

&lt;p&gt;Managing token governance, routing rules, data sovereignty, and consumption quotas directly within application code leads to brittle architectures. Every code update risks breaking financial guardrails or leaking API keys.&lt;/p&gt;

&lt;p&gt;The reliable architectural solution is a centralized gateway deployed between internal applications and inference providers. This is the exact role fulfilled by &lt;a href="https://www.azrty.com/software/fastllm-proxy" rel="noopener noreferrer"&gt;FastLLM Proxy&lt;/a&gt;, our OpenAI-compatible gateway built to govern enterprise AI workloads. &lt;/p&gt;

&lt;p&gt;FastLLM Proxy sits within your infrastructure, providing a unified access plane for on-premise inference engines such as vLLM, SGLang, and llama.cpp alongside 80 external model providers. It enforces the exact operational controls enterprise controllers require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fine-grained access controls:&lt;/strong&gt; Issue keys with strict role-based access, rate limits, and hard daily or monthly dirham spend limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intelligent traffic routing:&lt;/strong&gt; Route requests based on caller identity, context size, remaining budget, latency, or semantic topic, without changing upstream client code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KV cache affinity:&lt;/strong&gt; Route repeated prefixes to the specific GPU instances that already hold cached KV states, maximizing hardware efficiency and minimizing latency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auditability without privacy risk:&lt;/strong&gt; Log comprehensive token counts, response latencies, and financial costs per department while strictly omitting raw prompt and completion payloads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-throughput performance:&lt;/strong&gt; On benchmarked infrastructure with GPU latency isolated, FastLLM Proxy delivers approximately 15 times the requests per second of standard Python proxies, ensuring zero bottlenecks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Organisations deploying on-premise clusters or hybrid cloud topologies through our &lt;a href="https://www.azrty.com/services/operate" rel="noopener noreferrer"&gt;AI infrastructure&lt;/a&gt; practice use this pattern to establish self-hosted inference alongside audited commercial fallbacks. Sensitive corporate data never departs onshore environments, and financial executives retain full visibility over enterprise inference commitments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five questions for your IT lead this week
&lt;/h2&gt;

&lt;p&gt;You do not need to read model weight matrices or debug CUDA kernels to establish rigorous AI financial governance. Pose these five questions to your technology leadership this week:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;"Can you produce last month's AI inference spend broken down by individual business team, application name, and token volume?"&lt;/strong&gt; If IT returns a consolidated cloud bill or indicates they must request details from vendors, your enterprise belongs to the 64% of organisations lacking direct token observability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"What is our realized cost per completed business outcome, and is that unit cost declining over time?"&lt;/strong&gt; Gross token volume is a measure of compute consumption, not enterprise value. If engineering cannot report cost per ticket resolved, claim processed, or report generated, teams are optimizing for vendor revenue rather than operational efficiency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"What percentage of our production requests hit prompt caches, and what percentage route to lightweight models?"&lt;/strong&gt; If both metrics sit near zero, your software architecture is running basic parsing tasks through premium reasoning tiers, overpaying by up to 70% on standard operations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"What programmatic circuit breakers exist for runaway agent loops, and what happens when an application reaches 80% of its monthly budget?"&lt;/strong&gt; If the answer is that budgets are reviewed after invoices arrive, your infrastructure has no defense against automated retry storms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Where do prompts containing corporate, financial, and customer data physically terminate, and how do we enforce UAE data residency regulations?"&lt;/strong&gt; Routing rules must guarantee that proprietary records and regulated data classes remain inside designated geographic or on-premise boundaries.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What to do next
&lt;/h2&gt;

&lt;p&gt;Remediating runaway AI expenses requires a clear four-step implementation sequence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Conduct a comprehensive footprint inventory.&lt;/strong&gt; Catalog every enterprise entry point consuming model APIs. Include developer coding assistants, department-level SaaS subscriptions, custom internal agents, vector database clusters, and corporate card subscriptions. Most leadership teams discover two to three times more active AI consumption points than originally budgeted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy an infrastructure gateway.&lt;/strong&gt; Insert a unified gateway proxy between your internal microservices and model providers. Channeling traffic through a single ingress point immediately establishes visibility, cost attribution, and access enforcement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implement caching and dynamic routing.&lt;/strong&gt; Restructure system prompts to separate static guidance from dynamic variables, enabling prompt caching across all supported providers. Establish routing configurations that direct basic extraction and formatting workloads to economical models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transition from token metrics to task metrics.&lt;/strong&gt; Review AI financial performance on a cost-per-completed-task basis every month. Tie consumption allocations directly to departmental budgets through automated internal chargeback.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If structuring, deploying, and governing this infrastructure exceeds internal capacity, Azrty is a UAE company based in Dubai. Our own team in the UAE does the consulting, the deployment and the support for our clients.&lt;/p&gt;

&lt;p&gt;Tokens are an accounting abstraction of compute. Completed business tasks are what generate economic enterprise value. Structure your software and financial governance around task delivery, and token costs will take care of themselves.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.azrty.com/blog/why-is-my-ai-api-bill-so-high-where-tokens-go" rel="noopener noreferrer"&gt;Azrty&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aiinfrastructure</category>
      <category>llmcosts</category>
      <category>finops</category>
      <category>apigateway</category>
    </item>
    <item>
      <title>AI demand forecasting for restaurants: a four-week test you can run on one outlet</title>
      <dc:creator>Azrty</dc:creator>
      <pubDate>Sun, 11 Oct 2026 05:00:59 +0000</pubDate>
      <link>https://dev.to/azrty/ai-demand-forecasting-for-restaurants-a-four-week-test-you-can-run-on-one-outlet-1n81</link>
      <guid>https://dev.to/azrty/ai-demand-forecasting-for-restaurants-a-four-week-test-you-can-run-on-one-outlet-1n81</guid>
      <description>&lt;p&gt;Most of the value in restaurant demand forecasting comes from data you already hold in your POS, your delivery channels, and an event calendar, not from another vendor dashboard. Here is how to test forecasting on one outlet and five high-waste items in four weeks, and judge it by waste and stock-outs rather than vendor demos.&lt;/p&gt;

&lt;h2&gt;
  
  
  The case is waste and stock-outs, not dashboards
&lt;/h2&gt;

&lt;p&gt;AI demand forecasting for restaurants means predicting how much of each menu item, and therefore each ingredient, a given outlet will sell on a given day. That means moving beyond a generic sales trend chart to an operational statement: this branch will sell approximately 140 portions of salmon fillet on Friday evening, of which 45 will come through aggregators. Done properly, that output feeds prep lists, thawing schedules, and purchase orders directly. Done badly, it becomes another SaaS dashboard that kitchen teams ignore before morning service.&lt;/p&gt;

&lt;p&gt;In the UAE and across the GCC, the commercial prize is unusually large. The Ministry of Climate Change and Environment estimates 3.27 million tonnes of food are wasted annually in the country, costing the economy roughly $3.5 billion each year. In Dubai, an estimated 38% of prepared food is thrown away, rising to 60% during Ramadan. Demand for meat, vegetables, fruit, and dairy rises by close to 50% during Ramadan, and much of the extra prepped inventory is discarded when service patterns shift. The national &lt;a href="https://u.ae/en/information-and-services/environment-and-energy/Agriculture-and-food-security/food-security" rel="noopener noreferrer"&gt;ne'ma initiative&lt;/a&gt; targets a 50% cut in food loss and waste across the UAE by 2030. For hospitality and F&amp;amp;B groups operating in the Emirates, measurement and reporting on waste will soon move from voluntary corporate sustainability targets to expected operational audits.&lt;/p&gt;

&lt;p&gt;The commercial evidence shows that disciplined forecasting pays for itself rapidly. Hotels in the UAE using automated tracking and forecasting systems cut waste measurably: Hilton reduced food waste by 62% across 13 UAE properties in 2023, while Jumeirah Zabeel Saray avoided 20 tonnes of waste, equivalent to roughly 50,000 meals, in 2022 (&lt;a href="https://farrellymitchell.com/food-waste-consultants/uae-food-waste/" rel="noopener noreferrer"&gt;Farrelly Mitchell&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The strategic question for F&amp;amp;B leaders is therefore not whether forecasting works in theory. It is how to establish whether it pays for your specific brand, at what infrastructure and subscription cost, before committing your teams to an expensive enterprise contract. This guide sets out a disciplined four-week test on a single outlet, using data your business already generates.&lt;/p&gt;

&lt;h2&gt;
  
  
  You already have the data: the four signals that matter
&lt;/h2&gt;

&lt;p&gt;A 2026 review of Dubai restaurant technology found that the average mid-range restaurant runs 5–9 separate software tools and spends over $800 a month on technology, yet most operators cannot answer basic questions about sales by hour and channel because the data sits in disconnected systems (&lt;a href="https://nexaratech.io/blog/dubai-restaurant-technology-2026.html" rel="noopener noreferrer"&gt;Nexara&lt;/a&gt;). Foodics alone holds roughly 40% of the UAE POS market, with competing systems such as Oracle Micros, Revel, and NCR Aloha carving up enterprise hotel dining. The good news for technical teams is that daily item-level forecasting does not require a complex multi-year data lake. You need only four primary signals.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;Where it lives&lt;/th&gt;
&lt;th&gt;What it gives the forecast&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Item-level sales by day and hour&lt;/td&gt;
&lt;td&gt;POS (dine-in, takeaway, and integrated delivery)&lt;/td&gt;
&lt;td&gt;The base series: weekly seasonality, underlying trend, and item mix shifts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delivery orders&lt;/td&gt;
&lt;td&gt;Talabat, Deliveroo, Noon Food, via Deliverect or Otter&lt;/td&gt;
&lt;td&gt;Channel-specific demand, which in Dubai Marina, JLT, and Business Bay can represent 60% of daily revenue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reservations and covers&lt;/td&gt;
&lt;td&gt;SevenRooms, Eat App, OpenTable&lt;/td&gt;
&lt;td&gt;Known future baseline demand that can be banked days in advance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Events and calendar shifts&lt;/td&gt;
&lt;td&gt;Group calendar, venue listings, national gazettes&lt;/td&gt;
&lt;td&gt;Spikes that break naive moving averages: GITEX, Ramadan, Eid, DSF, and arena concerts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two operational realities from the UAE context dictate how you clean and structure these signals:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Include delivery aggregators, or your forecast will fail.&lt;/strong&gt; If aggregator orders flow directly into your POS through an integration bridge such as Deliverect or Otter, your central POS export will capture the full volume. If aggregator orders are received on dedicated tablets and rung in manually, or kept separate, you must export them independently. Deliverect allows operators to &lt;a href="https://help.deliverect.com/en/articles/7979015-export-order-reports" rel="noopener noreferrer"&gt;export order data to CSV&lt;/a&gt; with item-level line items, modifiers, timestamps, and channel tags. Splitting dine-in from delivery in your model is vital because delivery items have different prep lead times, packaging constraints, and margin profiles. Furthermore, sudden shifts in delivery promotions or aggregator commission structures alter item mix without warning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The regional event calendar dictates variance.&lt;/strong&gt; In Europe or North America, baseline weekly seasonality explains most restaurant variance outside statutory holidays. In the Gulf, macro events drive demand shifts of 30% to 100% on specific dates. A tech summit at Dubai World Trade Centre or Expo City floods nearby casual dining outlets while emptying suburban branches. School term dates, the shift from outdoor terrace dining in January to indoor dining in July, and the lunar calendar shifting Ramadan by 10 to 11 days every year make naive rolling averages useless. A model that only looks at the previous four Tuesdays will be confidently wrong on the dates that carry the highest revenue risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Week 0: measure the baseline before buying software
&lt;/h2&gt;

&lt;p&gt;Before evaluating software vendors or building internal models, log physical waste for one full week across candidate items. This is not administrative overhead: it provides the baseline against which any algorithmic improvement must be judged. Choosing software before establishing your baseline waste profile is the primary reason inventory projects underdeliver (&lt;a href="https://focus.hidubai.com/implementing-smart-inventory-management-for-dubais-modern-restaurants-in-2026/" rel="noopener noreferrer"&gt;Focus HiDubai&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Keep the collection mechanism intentionally lightweight during this baseline week: a single laminated sheet or a shared digital spreadsheet with five columns placed directly at the prep and plating stations.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Prep date&lt;/th&gt;
&lt;th&gt;Qty wasted&lt;/th&gt;
&lt;th&gt;Reason (spoilage, over-prep, customer return)&lt;/th&gt;
&lt;th&gt;Est. ingredient cost (AED)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Select five items using two strict criteria:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;High unit purchase cost (prime proteins, imported seafood, specialty cheeses).&lt;/li&gt;
&lt;li&gt;Preparation that must occur before daily demand is known (items that require multi-hour marination, butchering, thawing, or par-cooking during the morning shift).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Omit non-perishable goods and long shelf-life dry stock from this initial pilot. Over-prepping frozen french fries or dry pasta forgives an erroneous forecast; misjudging fresh sea bass or wagyu tenderloin produces immediate financial write-offs.&lt;/p&gt;

&lt;p&gt;From Week 0, calculate three foundational numbers for each of the five items:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Baseline waste percentage: total quantity wasted divided by total quantity prepped.&lt;/li&gt;
&lt;li&gt;Stock-out incidence: count of services where the item had to be marked 86 (unavailable) on the POS and aggregator menus before the shift concluded.&lt;/li&gt;
&lt;li&gt;Day-to-day demand variance: the standard deviation (σ) of daily portion sales, which establishes the required safety buffer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Choose the approach: POS-native, standalone, or your own pipeline
&lt;/h2&gt;

&lt;p&gt;In Dubai, AI forecasting primarily arrives through modern cloud POS providers rather than standalone tools (&lt;a href="https://nexaratech.io/blog/dubai-restaurant-technology-2026.html" rel="noopener noreferrer"&gt;Nexara&lt;/a&gt;), while specialized F&amp;amp;B inventory vendors pitch direct POS-integrated forecasting engines to regional hospitality groups. The architectural choice comes down to organizational scale, technical capability, and the cost of forecast errors.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;What you get&lt;/th&gt;
&lt;th&gt;Underlying data inputs&lt;/th&gt;
&lt;th&gt;Commercial model&lt;/th&gt;
&lt;th&gt;When it is enough&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;POS-native (e.g. Foodics AI)&lt;/td&gt;
&lt;td&gt;Predicted daily consumption per item, days of stock remaining, forecast vs actual analytics&lt;/td&gt;
&lt;td&gt;POS sales and inventory ledger; no external integration plumbing&lt;/td&gt;
&lt;td&gt;Included or sold as an add-on tier to existing POS contract&lt;/td&gt;
&lt;td&gt;Single-brand operators or 1–5 outlets with standard menus and waste below 5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standalone F&amp;amp;B inventory platform&lt;/td&gt;
&lt;td&gt;Item forecasting linked to automated supplier purchasing, invoice digitisation, recipe yield tracking&lt;/td&gt;
&lt;td&gt;Real-time POS bridge, supplier catalogs, digital invoices, and physical waste logs&lt;/td&gt;
&lt;td&gt;Monthly SaaS subscription per outlet (typically several hundred dirhams per site)&lt;/td&gt;
&lt;td&gt;Multi-outlet hospitality groups, central production units, complex supplier networks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom data pipeline (Prophet, LightGBM)&lt;/td&gt;
&lt;td&gt;Fully customizable item-level models incorporating custom event calendars, weather, and custom scrapers&lt;/td&gt;
&lt;td&gt;Unified POS exports, aggregator APIs, table reservation engines, foot-traffic feeds&lt;/td&gt;
&lt;td&gt;Open-source libraries on cloud compute plus internal or fractional engineering time&lt;/td&gt;
&lt;td&gt;Groups with dedicated data engineering, unique menu concepts, or custom procurement backends&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For operators running on regional POS leaders such as Foodics, testing the native route is straightforward. Foodics AI includes an &lt;a href="https://help.foodics.com/hc/en-us/articles/22205776370716-Inventory-Forecast-Deep-Dive-in-Foodics-AI" rel="noopener noreferrer"&gt;inventory forecast dashboard&lt;/a&gt; that calculates anticipated daily consumption per item for the coming 30 days, projects stock-out dates, and provides forecast-versus-actual consumption variance filters by branch and SKU. Its forecasting engine, &lt;a href="https://help.foodics.com/hc/en-us/articles/17190003861276-What-is-Foodics-AI" rel="noopener noreferrer"&gt;Foodics calls it Newton&lt;/a&gt;, runs directly against transaction history inside the POS database. For single-site operators or small regional chains, verifying Newton's projections against your Week 0 baseline is the fastest starting point because it requires zero API integration.&lt;/p&gt;

&lt;p&gt;To structure this decision logically, apply this clear rule:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If food waste is under 3% of total food purchases and stock-outs occur less than once a month, turn on your native POS features, review them weekly, and avoid introducing new software.&lt;/li&gt;
&lt;li&gt;If food waste sits between 3% and 8%, or core high-margin items run out weekly, execute the four-week pilot below using either POS-native tools or a lightweight custom script.&lt;/li&gt;
&lt;li&gt;If your business runs multiple concepts, a central production facility, or experiences waste above 8%, a dedicated forecasting and inventory platform justifies its cost, but should still be piloted on a single high-volume outlet before group rollout.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A minimal forecast you can build yourself
&lt;/h2&gt;

&lt;p&gt;If your POS lacks native predictive features, or if you want to benchmark vendor promises against a standard model before signing an annual contract, you can build an effective baseline using open-source tooling. Facebook's Prophet is well-suited for restaurant demand forecasting because it explicitly accommodates weekly seasonality, annual seasonality, and irregular regional holidays.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://facebook.github.io/prophet/docs/seasonality,_holiday_effects,_and_regressors" rel="noopener noreferrer"&gt;official Prophet documentation&lt;/a&gt; highlights a critical requirement for time-series modeling in our region: every calendar event must be specified historically across your full training window as well as forward into the forecast horizon, with custom lower and upper windows to capture lead-up and spillover effects.&lt;/p&gt;

&lt;p&gt;Below is an operational Python script configured for daily restaurant item sales, complete with UAE-specific holiday windows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;prophet&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Prophet&lt;/span&gt;

&lt;span class="c1"&gt;# Load daily item portions sold, extracted from POS reporting
# Required format: ds (date string YYYY-MM-DD), y (integer portion count)
&lt;/span&gt;&lt;span class="n"&gt;sales&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;salmon_portions_daily.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ds&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ds&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;# Define explicit regional calendar events with adjustment windows.
# Ramadan shifts annually on the Gregorian calendar; windows account for altered dining habits.
# GITEX represents a major multi-day corporate dining surge in central Dubai.
&lt;/span&gt;&lt;span class="n"&gt;events&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;holiday&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ramadan_period&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ramadan_period&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gitex_week&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gitex_week&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;uae_national_day&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;uae_national_day&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ds&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_datetime&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025-02-28&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2026-02-18&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025-10-13&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2026-10-12&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025-12-02&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2026-12-02&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;]),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lower_window&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;upper_window&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;# Instantiate Prophet with multiplicative seasonality for growing concepts
&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Prophet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;holidays&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;events&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;yearly_seasonality&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;weekly_seasonality&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;daily_seasonality&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;seasonality_mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;multiplicative&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Generate predictions for the upcoming 14-day service cycle
&lt;/span&gt;&lt;span class="n"&gt;future&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;make_future_dataframe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;periods&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;forecast&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;future&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Output point predictions alongside 80% confidence boundaries
&lt;/span&gt;&lt;span class="n"&gt;output_columns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ds&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;yhat&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;yhat_lower&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;yhat_upper&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;forecast&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;output_columns&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;tail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;to_string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two architectural insights apply when running models of this nature on restaurant POS datasets:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;One full year of clean transaction history is the minimum threshold.&lt;/strong&gt; Time-series models require at least two complete cycles to distinguish structural trend from seasonal patterns. Because Ramadan migrates through the solar calendar by roughly eleven days each year, historical data spanning 18 to 24 months is ideal to separate summer heat troughs from fasting periods.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never optimize purely on the point forecast.&lt;/strong&gt; If the model predicts a point estimate of 120 salmon mains with an 80% uncertainty interval spanning 102 to 138 portions, setting prep strictly to 120 guarantees that on half of the high-demand evenings your kitchen will run out of stock. Operational safety stock must be derived from the distribution interval, not left to kitchen guesswork.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  From forecast to a prep sheet the kitchen will follow
&lt;/h2&gt;

&lt;p&gt;A demand forecast that does not convert directly into morning kitchen tasks produces zero financial return. The translation from statistical output to line execution is an inventory safety-stock formula:&lt;/p&gt;

&lt;p&gt;$$\text{Prep Target} = \text{Forecast} + (z \times \sigma)$$&lt;/p&gt;

&lt;p&gt;Where $\sigma$ is the standard deviation of historical daily sales (or forecast residuals once the pilot is running), and $z$ represents the standard normal score corresponding to your desired service level.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For a 90% service level (1 stock-out in 10 services): $z = 1.28$&lt;/li&gt;
&lt;li&gt;For a 95% service level (1 stock-out in 20 services): $z = 1.64$&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Consider a worked operational example for Friday evening service:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Model point forecast: 120 portions of salmon fillet&lt;/li&gt;
&lt;li&gt;Standard deviation of historical Friday sales ($\sigma$): 15 portions&lt;/li&gt;
&lt;li&gt;Management target service level: 90% ($z = 1.28$)&lt;/li&gt;
&lt;li&gt;Calculated safety buffer: $1.28 \times 15 = 19.2 \approx 20\text{ portions}$&lt;/li&gt;
&lt;li&gt;Total prep target: $120 + 20 = 140\text{ portions}$&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To prevent the common problem of over-prepping delicate proteins during the morning shift, divide the target into a two-stage prep sequence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stage 1 (Morning Prep, completed by 11:30): 110 portions prepped, portioned, and staged in the low-boy chillers.&lt;/li&gt;
&lt;li&gt;Stage 2 (Service Par Adjustment, reviewed at 16:30): Kitchen display or head chef reviews mid-day sales and active evening reservations. If covers track at or above projection, prep the remaining 30 portions. If lunch service was sluggish or weather deters foot traffic, hold the remaining raw inventory sealed under temperature control.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Format the output as a physical single-page clipboard document or a static station screen. Kitchen staff under pressure will not log into analytical dashboards. The document must display only four columns: item name, morning batch target, afternoon checkpoint par, and actual prepped quantity signed by the station chef.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four-week test schedule and evaluation framework
&lt;/h2&gt;

&lt;p&gt;Execute the pilot across a single outlet and five tracked high-waste items using this four-week progression:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Week 0 (Baseline):&lt;/strong&gt; Maintain standard operational routines. Log all spoilage, prep discard, and stock-outs on the manual tracking sheet. Calculate baseline waste mass, financial loss, and sales variance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weeks 1 and 2 (Assisted Prep):&lt;/strong&gt; Generate daily prep sheets using your forecast model (whether POS-native or the Prophet pipeline). The head chef reviews the numbers each morning, retains authority to override any figure, but must record the reason for every manual adjustment (such as private catering booked off-system).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weeks 3 and 4 (Closed-Loop Execution):&lt;/strong&gt; Retain the prep sheet workflow while incorporating actual usage data from the prior fortnight back into the model parameters. Overrides should decline as kitchen confidence in the baseline figures stabilizes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evaluate the four-week pilot strictly against four objective metrics:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Measurement methodology&lt;/th&gt;
&lt;th&gt;Success criteria after 4 weeks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tracked ingredient waste&lt;/td&gt;
&lt;td&gt;Physical scale logs and discarded portion tallies calculated against total prepped mass&lt;/td&gt;
&lt;td&gt;Sustained reduction of at least 25% relative to Week 0 baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stock-out frequency&lt;/td&gt;
&lt;td&gt;Incident count of tracked items 86'd across POS and aggregator channels&lt;/td&gt;
&lt;td&gt;1 or fewer stock-out incidents per tracked item per month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Forecast accuracy&lt;/td&gt;
&lt;td&gt;Mean Absolute Percentage Error (MAPE) at a 24-hour horizon on target items&lt;/td&gt;
&lt;td&gt;Consistent MAPE under 20% on stable core items&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Protocol adherence&lt;/td&gt;
&lt;td&gt;Proportion of shifts where prep sheets were completed, signed, and logged&lt;/td&gt;
&lt;td&gt;Greater than 85% verified kitchen compliance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The final metric is the most critical. Industry operational benchmarks emphasize that even a 1% to 2% reduction in overall food cost compounds substantially across multi-unit operations, but only if forecasting, ordering, and waste logging are treated as a unified, followed discipline (&lt;a href="https://supy.io/blog/ai-in-restaurants-the-clear-2026-guide-to-forecasting-ordering-waste-reduction-menu-profitability" rel="noopener noreferrer"&gt;Supy&lt;/a&gt;). A sophisticated predictive model exhibiting 12% MAPE that line cooks circumvent is useless. Conversely, a simple moving average with 22% MAPE that kitchen teams respect and execute daily will reliably eliminate over-prepping.&lt;/p&gt;

&lt;p&gt;To understand the financial return on one mid-sized casual dining venue in Dubai:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Average daily revenue: AED 35,000 across dine-in and aggregators.&lt;/li&gt;
&lt;li&gt;Monthly revenue: approximately AED 1,050,000.&lt;/li&gt;
&lt;li&gt;Food cost at 30%: AED 315,000 monthly food expenditure.&lt;/li&gt;
&lt;li&gt;Five tracked hero items represent roughly 20% of total food spend: AED 63,000.&lt;/li&gt;
&lt;li&gt;If Week 0 shows prep discard on these items running at 15% (AED 9,450 monthly waste), reducing that discard by a modest one-third through structured prep targets saves over AED 3,100 per month on just five ingredients. Scaled across an entire kitchen or a group of five branches, the annual net savings exceed AED 180,000, completely outstripping the cost of the underlying technology.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What to do next
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Select the candidate outlet:&lt;/strong&gt; Pick the location with the highest inventory volatility or weakest food-cost margins, not your flagship showcase branch. High-volume, high-variance outlets expose operational friction fastest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execute Week 0 immediately:&lt;/strong&gt; Print five-column waste logs and place them at prep stations on Monday. Measure baseline waste mass and 86 occurrences for seven consecutive days without altering kitchen habits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit existing POS capability:&lt;/strong&gt; Check whether your current POS subscription includes dormant forecasting modules. If you run Foodics, review the built-in inventory forecast views and verify whether historical recipe yields are mapped correctly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benchmark open-source performance:&lt;/strong&gt; If your POS lacks native item forecasting, extract 12 months of daily item CSVs and run the lightweight Prophet script detailed above. Establish whether the open-source model delivers sub-20% MAPE on your five test items.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connect the operating loop:&lt;/strong&gt; When expanding beyond five test items to automated supplier purchase orders, eliminate manual CSV juggling. Connecting POS sales exports, time-series forecasting, and ERP purchasing into a reliable automated workflow requires robust platform engineering.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At Azrty, our team based in Dubai designs and builds these integrated AI pipelines and custom data architectures directly on your private infrastructure through our &lt;a href="https://www.azrty.com/services/build" rel="noopener noreferrer"&gt;AI engineering services&lt;/a&gt;, ensuring your proprietary sales data remains secure. If you are evaluating where AI tools, automation, and predictive analytics will generate the highest financial return across your F&amp;amp;B portfolio before investing in custom software, our &lt;a href="https://www.azrty.com/services/ai-strategy" rel="noopener noreferrer"&gt;AI strategy and readiness&lt;/a&gt; engagement provides a clear, practical roadmap.&lt;/p&gt;

&lt;p&gt;Run the test for four weeks on one outlet. Judge the outcome on kilograms saved and revenue protected, not on vendor slide decks. Your kitchen's own numbers will tell you exactly whether to scale the system.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.azrty.com/blog/ai-demand-forecasting-for-restaurants-a-four-week-test-you-can-run-on-one-outlet" rel="noopener noreferrer"&gt;Azrty&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aistrategy</category>
      <category>demandforecasting</category>
      <category>restaurants</category>
      <category>uae</category>
    </item>
    <item>
      <title>WhatsApp AI for real estate leads in Dubai: what to automate and what a broker must take over</title>
      <dc:creator>Azrty</dc:creator>
      <pubDate>Sun, 11 Oct 2026 05:00:58 +0000</pubDate>
      <link>https://dev.to/azrty/whatsapp-ai-for-real-estate-leads-in-dubai-what-to-automate-and-what-a-broker-must-take-over-4h74</link>
      <guid>https://dev.to/azrty/whatsapp-ai-for-real-estate-leads-in-dubai-what-to-automate-and-what-a-broker-must-take-over-4h74</guid>
      <description>&lt;p&gt;Dubai brokerages are being sold WhatsApp bots that answer every enquiry in seconds but hand agents half-qualified leads and annoy serious buyers with robotic follow-ups. The channel is right, the market is active, and the tooling is accessible. What most implementations get wrong is the boundary: what the AI may do alone, and the exact moment a human broker must take the conversation. This is a working rule for that boundary, with the numbers to hold it to.&lt;/p&gt;

&lt;p&gt;WhatsApp is where Dubai property leads actually live. Buyers browsing from London, Mumbai or Riyadh at midnight tap the green button on Bayut, Property Finder and Instagram, and WhatsApp is the most used platform among internet users in the UAE (&lt;a href="https://www.statista.com/statistics/1391532/uae-most-used-social-media-platforms/" rel="noopener noreferrer"&gt;Statista&lt;/a&gt;). The market they are shopping in is the biggest on record: the Dubai Land Department counted over 270,000 transactions worth AED 917 billion in 2025, up 20% year on year, with an investor base of about 193,100 people, 129,600 of them new (&lt;a href="https://prod.mediaoffice.ae/en/news/2026/january/12-01/dubais-real-estate-market-records-new-historic-milestone" rel="noopener noreferrer"&gt;Dubai Media Office&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;So the pitch writes itself, and 2026 has produced plenty of vendors to deliver it: instant replies, bilingual qualification, viewings booked while the team sleeps. Some of it is true. What brokerages keep discovering after the demo is the failure mode: the bot answers instantly but hands over leads with half the qualifying fields missing, loops buyers through questions they already answered, or fires follow-up sequences that make serious buyers block the number. This article is the independent version: where AI earns its place, the hand-off rule that fixes the half-qualified problem, the compliance constraints specific to Dubai and to Meta's platform, a worked example with the numbers, and the metrics to hold any vendor to. It is written so you can brief an in-house team or a supplier with it directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the vendors claim, and why pilots disappoint
&lt;/h2&gt;

&lt;p&gt;The vendor content dominating this space is written by the people selling the tools, so treat its numbers with care. One vendor promises brokers "close 3x faster" (&lt;a href="https://www.groovyweb.co/blog/dubai-real-estate-ai-lead-agent" rel="noopener noreferrer"&gt;Groovy Web&lt;/a&gt;). Another claims chatbot leads convert "12% higher", that teams report "three times higher conversion rates", and that an agent saves "an average of 30 minutes per lead" in manual qualification (&lt;a href="https://korvax.ai/blog/whatsapp-ai-chatbot-for-real-estate/" rel="noopener noreferrer"&gt;Korvax AI&lt;/a&gt;). A third claims "more than 85% of Dubai property enquiries start or continue on WhatsApp" (&lt;a href="https://www.propphy.com/blog/best-whatsapp-automation-tools-dubai-real-estate-agents-2026" rel="noopener noreferrer"&gt;Propphy&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Check cited market figures to spot quality issues. That same roundup states Dubai recorded "around AED 761B in real estate transactions and 97,000+ deals in 2025". The official figure from the Dubai Media Office quoting DLD is over 270,000 transactions worth AED 917 billion. If vendor arithmetic on verifiable facts misses by that margin, treat conversion claims with caution until your pilot proves otherwise.&lt;/p&gt;

&lt;p&gt;The disappointment usually has three causes, none of them about the underlying foundation model:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No hand-off rule.&lt;/strong&gt; The bot has no explicit condition for when a conversation becomes a human's job, so it either hands over everything (creating spam for agents) or nothing (creating frustrated buyers).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No memory discipline.&lt;/strong&gt; The bot re-asks budget or preferred area because qualification state is not persisted per lead across messages. Buyers read this as an incompetent agency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Follow-up sequences tuned for volume, not judgement.&lt;/strong&gt; Daily automated reminders and multi-step "still interested?" chains get the number blocked, and a blocked number is a dead channel for that buyer forever.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All three are design and process failures. They are cheap to fix relative to the build cost, which is why they belong in the brief before signing anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where AI earns its place
&lt;/h2&gt;

&lt;p&gt;Five tasks suit WhatsApp AI far better than an agent rota, all occurring within the first ten minutes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;First reply at 2am.&lt;/strong&gt; A large share of Dubai enquiries arrive outside working hours, because the buyer is overseas or browsing after work. Vendors claim roughly half (&lt;a href="https://www.groovyweb.co/blog/dubai-real-estate-ai-lead-agent" rel="noopener noreferrer"&gt;Groovy Web&lt;/a&gt;); measure your own inbound timestamps before assuming. The first useful reply in under 60 seconds, at any hour, is the single biggest operational lever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Arabic and English, natively.&lt;/strong&gt; Language detection on the first incoming message, then staying in that language consistently, including for numbers and dates. A vendor that needs separate Arabic and English bots has not architected the system properly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qualification questions.&lt;/strong&gt; Buy or rent, budget, target areas, off-plan or ready, cash or mortgage, resident or overseas, and timeline. Four to five questions maximum, asked conversationally, never repeated.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Answers from your listing data only.&lt;/strong&gt; Service charges, payment plans, handover dates: answered exclusively from the fields in your CRM or portal feed, and "let me have a colleague confirm that" for anything not in the data payload. This single rule prevents most hallucinated-listing disasters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Booking and logging.&lt;/strong&gt; Offer viewing slots directly into an agent's calendar, and write every captured field into the CRM against the contact, with the source attribution (Bayut, Property Finder, Instagram, click-to-WhatsApp ad) attached cleanly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One high-value special case: the AED 2 million property threshold for the UAE Golden Visa. A buyer whose stated budget clears AED 2 million should be flagged and routed to a senior broker immediately rather than sitting in the general qualification queue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meta's rules shape the design more than the AI does
&lt;/h2&gt;

&lt;p&gt;Before arguing about system prompts, understand platform mechanics, as they dictate software architecture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The 24-hour customer service window.&lt;/strong&gt; When a user messages you, a 24-hour window opens for free-form replies, resetting with each user message. Outside this window, you can only send approved templates. The bot operates inside windows the buyer opens, matching the first-contact scenario.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-message pricing since 1 July 2025.&lt;/strong&gt; Meta moved from conversation-based to per-message pricing; only delivered template messages incur charges, with rates varying by category and recipient country (&lt;a href="https://developers.facebook.com/documentation/business-messaging/whatsapp/pricing" rel="noopener noreferrer"&gt;Meta for Developers&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The free entry point window.&lt;/strong&gt; If a lead arrives via a click-to-WhatsApp ad or Facebook page button and you reply within 24 hours, messages sent over the next 72 hours are free (&lt;a href="https://whatsappbusiness.com/products/platform-pricing/" rel="noopener noreferrer"&gt;WhatsApp Business Platform pricing&lt;/a&gt;). This makes running Instagram and Meta lead ads straight into the bot highly economical.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;From 1 October 2026, budget for service messages.&lt;/strong&gt; Meta charges per service message (bot replies), with 1,000 free per business number monthly, and charges utility templates sent inside an open window. UAE marketing message rates rose on 1 October 2025, with another increase scheduled for 1 October 2026. Meta introduced AED billing on 1 April 2026, allowing UAE businesses to track costs locally.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The design implication is clear: build a responder, not a broadcaster. An AI answering inbound enquiries inside open windows costs almost nothing in Meta fees today and modest amounts after October 2026. Running outbound follow-up blasts on marketing templates costs real money, converts worse, and risks phone number blocking.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hand-off rule: brief anyone with this
&lt;/h2&gt;

&lt;p&gt;Write this down before talking to a vendor. The hand-off rule has three parts: qualification conditions, immediate-escalation triggers, and guardrails.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The qualification condition
&lt;/h3&gt;

&lt;p&gt;The bot hands the conversation to a human agent only when all four core fields are confirmed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Budget range&lt;/li&gt;
&lt;li&gt;At least one target area or community&lt;/li&gt;
&lt;li&gt;Financing type (cash versus mortgage)&lt;/li&gt;
&lt;li&gt;Purchasing or rental timeline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the anti-"half-qualified" rule. A lead lacking those four fields is not ready for an agent's active selling time.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Immediate escalation triggers
&lt;/h3&gt;

&lt;p&gt;Regardless of qualification stage, the bot stops generating replies and alerts an on-duty human broker immediately when conversation touches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An offer or price negotiation&lt;/li&gt;
&lt;li&gt;A request for discounts or payment-plan flexibility&lt;/li&gt;
&lt;li&gt;Mortgage specifics beyond pre-approval status&lt;/li&gt;
&lt;li&gt;A customer complaint or expression of frustration&lt;/li&gt;
&lt;li&gt;A legal, title deed or contract query&lt;/li&gt;
&lt;li&gt;Anything about unit status or availability unverified in listing data&lt;/li&gt;
&lt;li&gt;An explicit request to speak with a human broker&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Guardrails
&lt;/h3&gt;

&lt;p&gt;Maximum five qualifying questions per conversation. Never re-ask a field already captured in session state. The phrase "I want to talk to an agent" is always honoured immediately, with thread transfer and notification. The bot identifies itself as an assistant in its opening message: buyers tolerate transparent automated assistants far better than bots pretending to be human brokers.&lt;/p&gt;

&lt;p&gt;Here is a configuration schema your engineering team or vendor can implement directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;"language&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;auto-detect, locked after first message (ar|en)&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,
  &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;identify_as_assistant&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: true,
  &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;max_qualifying_questions&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: 5,
  &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;qualifying_fields&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: [
    &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;intent&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,
    &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;budget&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,
    &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;areas&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,
    &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;finance&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,
    &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;timeline&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;
  ],
  &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;data_sources&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: [
    &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;crm_listings&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,
    &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;portal_feed&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;
  ],
  &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;answer_policy&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;listing_data_only, else defer to agent&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,
  &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;handoff_condition&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;budget &amp;amp;&amp;amp; areas.length &amp;gt; 0 &amp;amp;&amp;amp; finance &amp;amp;&amp;amp; timeline&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,
  &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;escalate_immediately&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: [
    &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;offer&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,
    &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;discount&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,
    &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;payment_plan_flexibility&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,
    &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;mortgage_detail&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,
    &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;complaint&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,
    &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;legal&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,
    &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;agent_request&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;
  ],
  &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;golden_visa_flag&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;budget &amp;gt;= 2000000&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,
  &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;routes&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: {
    &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;hot&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;notify agent within 5 minutes, full thread attached&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,
    &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;warm&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;morning digest, sorted by qualification score&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,
    &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;nurture&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;weekly template update, opt-out link in every message&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;
  }
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What stays with the broker
&lt;/h2&gt;

&lt;p&gt;Be explicit about what never belongs to AI, because this is where reputations and commissions are decided:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Negotiation and offers.&lt;/strong&gt; Any proposed price, counter-offer, or request for bottom pricing routes to a human broker immediately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer payment plans and off-plan specifics.&lt;/strong&gt; Only verified listing data is quoted. Improvised details on escrow accounts, completion dates, or post-handover plans lead to formal disputes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mortgage advice.&lt;/strong&gt; The bot asks if the buyer plans to use cash or mortgage financing and whether they hold pre-approval. It must never advise on banking products, margins, or eligibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance-sensitive content.&lt;/strong&gt; Every property advertised in Dubai requires a permit through the Trakheesi system. Since 24 April 2023, advertisements must carry the Madmoun QR code enabling buyers to verify authenticity. The Dubai Land Department states companies must comply to avoid legal violations (&lt;a href="https://dubailand.gov.ae/en/news-media/dubai-land-department-provides-madmoun-service-to-verify-validity-of-real-estate-ads-via-qr-codes" rel="noopener noreferrer"&gt;Dubai Land Department&lt;/a&gt;). A bot quoting listings in chat delivers marketing material: only listings with active Trakheesi permits belong in responses. Listing feeds must enforce this at data integration rather than prompt layers (&lt;a href="https://dubailand.gov.ae/media/m3dhpakj/trakheesi-user-manual-2025_en.pdf" rel="noopener noreferrer"&gt;Trakheesi user manual&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anything emotional.&lt;/strong&gt; A buyer unhappy about a missed viewing, confused by a Form B agreement, or anxious over deed transfers requires human attention from the first message.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Technical architecture: connecting WhatsApp to your stack
&lt;/h2&gt;

&lt;p&gt;To make this reliable, avoid black-box tools that store customer leads in isolated silos. A production architecture built on the WhatsApp Cloud API requires four connected components:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ Buyer on WhatsApp ]
         │
         ▼
[ Meta WhatsApp Cloud API ]
         │ (Webhook with HMAC-SHA256 signature)
         ▼
[ Ingress Gateway &amp;amp; Idempotency Store ]
         │ (Session state in Redis / PostgreSQL)
         ▼
[ Lead Qualification Engine &amp;amp; LLM Orchestrator ]
    ├── Listing Feed (Trakheesi-validated units only)
    ├── CRM Connector (Salesforce / HubSpot / Proptech CRM)
    └── Calendar Integration (Viewing slots)
         │ (Handoff trigger or Escalation)
         ▼
[ Agent Notification &amp;amp; Live Chat Console ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Webhook ingress and idempotency.&lt;/strong&gt; Meta webhooks deliver incoming messages via HTTP POST with &lt;code&gt;X-Hub-Signature-256&lt;/code&gt; headers. Meta frequently retries webhooks when latency spikes; your ingress service must store message IDs (&lt;code&gt;wamid&lt;/code&gt;) in an idempotency cache (such as Redis) to ensure duplicate events do not trigger double replies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State and session management.&lt;/strong&gt; Maintain the lead's conversation stage, language preference, and captured parameters (&lt;code&gt;budget&lt;/code&gt;, &lt;code&gt;areas&lt;/code&gt;, &lt;code&gt;finance&lt;/code&gt;, &lt;code&gt;timeline&lt;/code&gt;) in persistent storage. If a lead takes four hours to answer the second question, the orchestrator retrieves their exact state rather than restarting the greeting sequence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data integration boundary.&lt;/strong&gt; The LLM receives listing details through a retrieval tool that only queries active listings bearing valid Trakheesi permit numbers. If a buyer asks about a building where you have no verified inventory, the system executes an automated fallback: it records the enquiry, confirms interest, and routes the ticket to the listing acquisition desk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CRM and calendar sync.&lt;/strong&gt; When qualification completes, the orchestrator posts a structured payload to your CRM via REST API, creating or updating the contact record, logging the conversation transcript, and creating an assigned task for the broker with calendar viewing links generated through tools such as Microsoft Graph or Google Calendar.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Worked example: the night shift at a 12-agent brokerage
&lt;/h2&gt;

&lt;p&gt;Take a 12-agent brokerage in Business Bay with a mix of portal and Instagram leads. These figures illustrate the model; you can substitute your own in an afternoon to evaluate whether automation pays for itself before contracting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Baseline inputs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;400 total enquiries monthly across WhatsApp and portal-to-WhatsApp flows.&lt;/li&gt;
&lt;li&gt;Inbox timestamps show 30% (120 enquiries) arrive between 10pm and 8am or on weekends, when unstaffed.&lt;/li&gt;
&lt;li&gt;The sales team chases those 120 leads next morning, reaching roughly 60% (72 leads); agents report half have booked viewings with rival brokerages or stopped responding.&lt;/li&gt;
&lt;li&gt;Average gross commission on a secondary sale is AED 80,000.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;With the automated agent:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All 120 after-hours enquiries receive a relevant reply under 60 seconds, in the buyer's language, with qualifying criteria evaluated against live listing records.&lt;/li&gt;
&lt;li&gt;45% complete initial qualification (54 leads).&lt;/li&gt;
&lt;li&gt;Agents review and accept 70% as qualified (38 completed hand-offs) with budget, target area, finance method, and timeline logged in the CRM.&lt;/li&gt;
&lt;li&gt;25% of accepted hand-offs convert into attended viewings (9 to 10 viewings monthly scheduled from after-hours traffic).&lt;/li&gt;
&lt;li&gt;Over a six-month cycle, 15% of those viewings close (around 1.5 sales closings monthly, or 4 to 5 deals per quarter).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Financial return:&lt;/strong&gt;&lt;br&gt;
Four to five incremental sales closings quarterly generate AED 320,000 to AED 400,000 in gross commission from inbound leads that previously leaked to competing brokers.&lt;/p&gt;

&lt;p&gt;Against that upside:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom builds range from AED 45,000 to AED 150,000, as quoted by Dubai market vendors (&lt;a href="https://korvax.ai/blog/whatsapp-ai-chatbot-for-real-estate/" rel="noopener noreferrer"&gt;Korvax AI&lt;/a&gt;), typically requiring a 2 to 3 week WhatsApp Business API verification period, followed by a 6 to 10 week integration cycle.&lt;/li&gt;
&lt;li&gt;Meta message fees: minimal today for in-window customer service replies, and from October 2026 modest monthly costs at this volume once the initial 1,000 free service messages per business number are consumed.&lt;/li&gt;
&lt;li&gt;LLM inference costs per conversation: a fraction of the AED 0.15 to AED 0.40 per conversation fee typical of regional WhatsApp providers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even at the upper build estimate, the deployment achieves capital payback within the first operating quarter. The point is not buying software impulsively, but testing these unit economics against your brokerage's actual conversion numbers before allocating budget.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build it, buy it, or bolt it on
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;What it looks like&lt;/th&gt;
&lt;th&gt;Cost shape&lt;/th&gt;
&lt;th&gt;Control over script and hand-off&lt;/th&gt;
&lt;th&gt;Best suited for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Off-the-shelf tool on WhatsApp Business API&lt;/td&gt;
&lt;td&gt;Third-party chatbot platform connected directly to your messaging inbox&lt;/td&gt;
&lt;td&gt;Monthly recurring SaaS fee, plus template fees&lt;/td&gt;
&lt;td&gt;Limited: vendor decides routing logic and dialogue trees&lt;/td&gt;
&lt;td&gt;Solo brokers and small teams under 5 agents testing initial channel demand&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dubai real estate CRM with native WhatsApp&lt;/td&gt;
&lt;td&gt;Built-in connector and workflow automation supplied by your existing CRM&lt;/td&gt;
&lt;td&gt;CRM seat licences plus add-on messaging fees&lt;/td&gt;
&lt;td&gt;Moderate: configurable workflows, but bound to the CRM vendor's roadmap&lt;/td&gt;
&lt;td&gt;Brokerages already deeply embedded in that specific CRM platform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom agent on WhatsApp Cloud API with private LLM pipeline&lt;/td&gt;
&lt;td&gt;Tailored integration connecting your listing feed, CRM and calendars to a dedicated AI backend&lt;/td&gt;
&lt;td&gt;One-off implementation (AED 45,000 to 150,000) plus direct API consumption&lt;/td&gt;
&lt;td&gt;Complete: full control over prompts, hand-off criteria, data privacy and custom models&lt;/td&gt;
&lt;td&gt;Brokerages with 5 or more agents and significant monthly lead volume&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If your brokerage already runs a real estate CRM with functional WhatsApp integration, test your script there first. Replacing a functioning core system solely for chatbot features adds unnecessary risk.&lt;/p&gt;

&lt;p&gt;If your lead volume and brand standards justify owning the pipeline, build directly on the WhatsApp Cloud API. This ensures qualification scripts, customer records, and hand-off rules remain proprietary assets rather than data locked in third-party platforms. This is the integration architecture we design at &lt;a href="https://www.azrty.com/services/build" rel="noopener noreferrer"&gt;Azrty&lt;/a&gt;, where our team in Dubai manages consulting, deployment, and ongoing technical support for clients across the UAE.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers to track
&lt;/h2&gt;

&lt;p&gt;An automation deployment is only as effective as its operational reporting. Track these seven metrics weekly from day one:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;First response time (median and p95), segmented by hour.&lt;/strong&gt; Maintain a target under 60 seconds at 2am as strictly as at 2pm.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qualification completion rate.&lt;/strong&gt; The percentage of inbound conversations capturing all four required qualifying fields. Rates below 40% suggest conversational friction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hand-off acceptance rate.&lt;/strong&gt; The proportion of AI-transferred leads accepted by brokers as qualified. This monitors the half-qualified lead problem: if it drops below 60%, refine qualifying logic before investing more marketing budget.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Viewing booking conversion rate.&lt;/strong&gt; Viewings booked per 100 inbound enquiries, comparing automated flows against manual handling, alongside attendance rates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Escalation and block rate.&lt;/strong&gt; Frequency of buyer agent requests or number blocks. Increasing drop-offs indicate poor tone or aggressive cadence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WhatsApp cost per qualified hand-off.&lt;/strong&gt; Monitor monthly to track Meta's October 2026 pricing updates and refine campaign sourcing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gross commission attributed to after-hours leads.&lt;/strong&gt; The commercial metric justifying operational spend at annual review.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What to do next
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Audit your last 100 unconverted enquiries.&lt;/strong&gt; Review your previous 100 portal and social enquiries: record arrival timestamps, first-response latencies, and documented qualifying details. This afternoon spreadsheet exercise reveals whether your revenue bottleneck is after-hours responsiveness, follow-up discipline, or unqualified noise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Formalise hand-off specifications before contracting.&lt;/strong&gt; Use the configuration schema above. Any vendor unable to implement your exact hand-off rules and escalation triggers produces a generic chatbot rather than a lead engine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify regulatory compliance at the database level.&lt;/strong&gt; Ensure every listing in the agent's knowledge feed contains an active Trakheesi permit number, format listing cards with Madmoun QR verification codes, pre-approve outbound message templates with Meta, and ensure customer data complies with UAE data protection standards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run a four-week after-hours pilot.&lt;/strong&gt; Restrict automated qualification strictly to WhatsApp enquiries arriving between 8pm and 8am and across weekends. Measure performance against the seven metrics above and compare directly with your 100-lead baseline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scale based on measured acceptance.&lt;/strong&gt; Once broker hand-off acceptance sustains above 60% and confirmed after-hours viewings create pipeline value, expand integration across portal webhooks, Instagram direct messages, and click-to-WhatsApp paid campaigns, taking full economic advantage of Meta's 72-hour free messaging window.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;An automated agent should never be tasked with closing complex real estate transactions. Its true objective is winning the first ten minutes of prospective buyer conversations, in Arabic and English, at any hour, delivering qualified leads directly to your brokers. When setting that boundary clearly, the underlying software delivers genuine commercial value.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://www.azrty.com/blog/whatsapp-ai-for-real-estate-leads-in-dubai-what-to-automate-and-what-a-broker-mu" rel="noopener noreferrer"&gt;Azrty&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>whatsappai</category>
      <category>dubairealestate</category>
      <category>leadqualification</category>
      <category>aistrategy</category>
    </item>
  </channel>
</rss>
