Loom Data Agent Editor — Fabric-parity spec¶
Captured 2026-05-26 by catalog agent
data-agent-parity-2026-05-26. Sources: Microsoft Learn — Create a Fabric data agent, Fabric data agent concepts, Configure your data agent, Configure Fabric data agent tenant settings, Consume Fabric data agent from Microsoft Foundry Services, Consume a Fabric Data Agent in Microsoft Copilot Studio, Fabric data agent end-to-end tutorial. Cross-checked against the current Loom editor atapps/fiab-console/lib/editors/phase4-editors.tsx::DataAgentEditor(lines 900–943) and registry entry'data-agent'inapps/fiab-console/lib/editors/registry.ts.
What it is¶
A Fabric Data Agent (preview) is a first-class Data Science workspace item that exposes a natural-language Q&A surface over governed OneLake data. Under the hood the agent calls the Azure OpenAI Assistants API to plan a query, generate SQL/DAX/KQL, execute it against an attached data source, and return a natural-language answer with the underlying query visible for inspection. A single agent can ground on up to five data sources in any combination of: Lakehouse, Warehouse, Power BI semantic model, KQL DB (Eventhouse-backed), Ontology, or Microsoft Graph.
Data agents have two versions: a draft (refined in the builder) and a published version (shared with consumers and consumed externally). Once published, the agent is reachable via a Fabric endpoint shaped https://<env>.fabric.microsoft.com/groups/<workspace_id>/aiskills/<artifact_id> and can be added as a tool inside Azure AI Foundry agents (via FabricTool) or Microsoft Copilot Studio custom agents. Consumers need at least READ on the data agent plus the per-source minimum (Build on PBI semantic models, Read on Lakehouse/Warehouse, Reader on KQL DB).
UI components¶
Page chrome¶
- Title bar: agent name (editable inline at create time and via Settings) + saved-state indicator
- Standard Fabric global bar (search, notifications, settings, help, account)
- Right-side actions: Share, Settings, Publish, View
- Top toolbar: Save, Publish, Diagnostics, version switcher (Draft / Published)
Left pane — Data sources panel¶
- Header Data sources + count chip (
N / 5) - + Add data source button → modal lets the user pick a source type then resolve it:
- Lakehouse — workspace picker → lakehouse picker → then table picker (select only the tables the agent should use; files are NOT supported, ingest first)
- Warehouse — workspace + warehouse + table picker
- Power BI semantic model — workspace + model picker (consumer needs
Build, not just Read) - KQL database (Eventhouse-backed) — workspace + eventhouse + KQL DB + table picker (encourage time filters for high-volume telemetry)
- Ontology — workspace + ontology item (preview)
- Microsoft Graph — connector-style picker (preview)
- Each attached source becomes a node in the left tree; expanding it reveals the selected tables / models
Per-source configuration drawer¶
Clicking an attached source opens a configuration drawer with: - Source name + read-only ID - Selected tables / model sub-picker (add/remove tables without re-attaching) - Data source instructions — multi-line text using a structured template:
- Example queries — repeating editor ofquestion → SQL/DAX/KQL pairs (few-shot pairs; few-shot is the headline accuracy lever) Agent-level instructions pane¶
- Data agent instructions button opens a full-screen editor (up to 15,000 characters)
- Free-text English-only instructions; recommended pattern is to declare which data source handles which question type, e.g. "Route financial metrics to the PBI semantic model; raw exploration to the lakehouse; log analysis to the KQL DB"
- Inline character counter and lint hints (e.g. "no instructions yet — add at least one routing rule")
Test / chat pane (right side, primary surface during draft)¶
- Conversation history with the agent
- User prompts on the right, agent responses on the left
- Each agent message shows:
- Natural-language answer
- Generated query expander (SQL / DAX / KQL) with copy button
- Source used badge
- Thumbs-up / thumbs-down feedback
- New thread button resets context
- Threads are scoped to the draft; not persisted post-publish
Publish dialog¶
- Publish button opens a dialog asking for a description (multi-line) that orchestrators + colleagues will see when invoking the agent — important because Foundry agents read this string to decide when to call the Fabric tool
- After publish: shows the published endpoint URL + the
workspace_idandartifact_idGUIDs that external Foundry / Copilot Studio connections need (both marked as secrets in the consumer)
ALM, diagnostics, governance surfaces¶
- Diagnostics tab — agent runs, latency, success rate, query failure samples
- Git integration — author/edit data-agent config in source control (instructions, examples, source selection are versioned text)
- Deployment pipelines — promote draft from dev → test → prod workspaces
- Purview — applies sensitivity labels + access policies at the source level; agents inherit them
Consume — external surfaces (information only in the editor)¶
The editor doesn't host these but should link to them: - Azure AI Foundry: FabricTool add via the Foundry portal (Agents → Knowledge → Add → Microsoft Fabric → new connection with workspace-id + artifact-id as secrets) - Microsoft Copilot Studio: Agents pane → + Add → Microsoft Fabric → pick this published agent - Microsoft 365 Copilot: published agents surface in M365 Copilot with Purview policies honored
What Loom has¶
The current DataAgentEditor (apps/fiab-console/lib/editors/phase4-editors.tsx, lines 900–943) is a config-only stub:
- A
MessageBar intent="warning"titled "v2.1: configuration only — runtime deferred" explaining live chat against AI Foundry will land in a later release - Free-text System prompt / AI instructions textarea (no character counter, no template scaffolding)
- Model input (free text, default
gpt-4o) — invented; real Fabric data agents do not let the author pick the NL2SQL model (only the orchestrator model on the consumer side) - Sources (free text) input — single comma-separated string, no typed picker
- Synapse Serverless SQL endpoints, KQL databases, Lakehouse paths — three separate free-text inputs (none correspond to Fabric's typed source picker, and Synapse Serverless isn't a Fabric data-agent source type)
- Example queries (one per line) textarea — flat list, not the question→query few-shot pair format Fabric requires
SaveBarpersists the bag to Cosmos viauseItemState('data-agent', id, …)- Ribbon has a Chat preview label but is not wired
- No publish, no draft/published version split, no per-source instructions drawer, no test chat pane, no diagnostics, no Foundry connection mint, no Copilot Studio handoff
Gaps for parity¶
- Five-source typed picker — replace the three free-text endpoint fields with the proper add-source modal covering Lakehouse / Warehouse / PBI semantic model / KQL DB / Ontology / Graph. Enforce 5-source max.
- Per-source table selection — Fabric requires selecting specific tables (or model) per source; Loom has no concept of this.
- Per-source instructions drawer — the
## General knowledge / ## Table descriptions / ## When asked abouttemplate editor is entirely missing. - Example queries as question→query pairs — current flat textarea must become a repeating two-field editor (NL question on top, generated SQL/DAX/KQL underneath) so few-shot learning actually works.
- 15,000-character instructions surface — needs a dedicated full-screen instructions editor with a character counter, not the shared 5-row textarea.
- Remove invented Model picker — Fabric data agents don't let authors choose the NL2SQL model; the consumer (Foundry / Copilot Studio) picks its orchestrator model. Strip this field.
- Remove Synapse Serverless SQL endpoints field — not a supported Fabric data-agent source. (If we want Synapse-bound semantics on Loom, expose it as a Warehouse-alias source.)
- Draft vs Published version model — Cosmos state needs to mirror the dual-version model; today a single bag is overwritten on save.
- Publish dialog + published endpoint — no "Publish" button, no description prompt, no surfacing of the
workspace_id / artifact_idpair that downstream Foundry connections need. - Test chat pane — no conversation surface, no rendered SQL/DAX/KQL expander on agent replies, no per-message source badge, no feedback thumbs.
- Diagnostics tab — no run history, latency, failure-sample surface.
- Foundry connection handoff — no UX to mint or surface the
FabricToolconnection (workspace-id + artifact-id withis_secret=true) to be pasted into a Foundry project's Connected Resources. - Copilot Studio handoff — no link or instructions to add this agent under Copilot Studio's Agents pane.
- Purview / sharing model — share dialog absent; per-source minimum permission documentation absent.
- Tenant-settings gate — Fabric requires admin enable of operations-agent + Copilot + cross-geo AI processing tenant settings; Loom should surface a
MessageBarif those aren't on (and link todocs/fiab/v3-tenant-bootstrap.md). - User-identity-only auth — service-principal auth isn't supported for Fabric data agents; the test chat must use the signed-in Loom user's delegated token, not the platform SP.
Backend mapping¶
The Fabric Data Agent itself is a Fabric-native item, but its runtime is the Azure OpenAI Assistants API plus the source-specific query engines (TDS for Warehouse, ADBC/Spark for Lakehouse, KQL endpoint for KQL DB, DAX/XMLA for PBI semantic models). Loom's backing strategy:
| Loom surface | Backing service | Notes |
|---|---|---|
| Agent config persistence (instructions, sources, per-source instructions, examples, description, draft + published versions) | Cosmos (loomdb / items, partition data-agent) | Mirror Fabric's draft/published split so external connections always point at the published GUID |
| NL2SQL planning + tool dispatch | Azure OpenAI Assistants on the AI Foundry hub (aifoundry-csa-loom-eastus2) | One assistant per published agent; tools per attached source |
| Lakehouse source | Existing Loom lakehouse editor + Synapse Spark / Databricks SQL endpoint | Tool runs Spark SQL against the table list |
| Warehouse source | Existing Loom warehouse editor (or synapse-dedicated-sql-pool alias) | Tool runs T-SQL via TDS over Private Endpoint with AAD MI |
| KQL DB source | Existing Loom kql-database editor | Tool runs KQL via the KQL DB endpoint |
| Power BI semantic model source | New Loom semantic-model editor wiring | Tool runs DAX via XMLA / executeQueries REST |
| Ontology source | Existing Loom ontology editor (preview) | Tool resolves entity/property queries |
| Test chat pane | Loom BFF route → Assistants threads.messages.create + runs.create | Each turn streams back the natural-language answer + the underlying tool query for the expander |
| Publish | Cosmos write (flip publishedAt, snapshot config) + emit the published GUID pair | The GUID pair is the artifact id Foundry connections paste in as secrets |
| Diagnostics | Log Analytics + Cosmos runs sub-container | Latency, failures, token counts |
| Sharing + Purview policy enforcement | Existing Loom share flow + Purview labels on the underlying source items | Per-source minimum-permission checks pre-flight in the editor |
| Foundry consumption | External — Foundry portal Management Center → Connected resources → new Microsoft Fabric connection with workspace-id + artifact-id as secrets | Surface as a "Connect to Foundry" link with the two GUIDs copyable |
| Copilot Studio consumption | External — Copilot Studio Agents pane → Add → Microsoft Fabric → pick agent | Surface as a "Use in Copilot Studio" deep link |
Required Azure resources¶
The following must exist (most already wired in platform/fiab/bicep/): - Azure AI Foundry hub + project (already deployed; gpt-4o deployment used for NL2SQL planning) - Azure OpenAI with Content Safety integration + abuse-monitoring tenant settings enabled - Cross-geo AI processing tenant setting enabled (required outside US/EU regions per Fabric data-agent tenant settings) - Azure AI Search (optional but recommended for retrieval over per-source instructions / few-shot examples — reuse existing loom-items index plus a new data-agent-instructions index) - At least one bound data source from: Lakehouse, Warehouse, KQL DB (Eventhouse), Power BI semantic model, Ontology — each already deployable via existing bicep modules - AAD app role assignments so the signed-in Loom user can be granted: Build on PBI semantic models, Read on Lakehouse/Warehouse, Reader on KQL DB, READ on the data agent itself (these are user-level, not MI — Fabric data agents are user-identity-only) - AI Foundry RBAC: developers need Foundry User (formerly Azure AI User) for the Foundry-side consumption demo - Purview account + scanned data sources for governance policy enforcement (already in bicep) - Tenant admin steps (document in docs/fiab/v3-tenant-bootstrap.md): enable Fabric data-agent tenant setting, enable Microsoft Copilot in Fabric tenant setting, enable cross-geo AI processing if applicable
Estimated effort¶
- Session N+1 (~3 hrs) — typed five-source picker + per-source table selection + remove invented Model/Synapse-Serverless fields + Cosmos state migration to source-array shape
- Session N+2 (~3 hrs) — per-source instructions drawer with the structured template + question→query pair editor + 15k-char agent-level instructions full-screen editor
- Session N+3 (~3 hrs) — test chat pane (Assistants API integration, streaming responses, SQL/DAX/KQL expander, source badge, feedback thumbs)
- Session N+4 (~2 hrs) — Publish flow (description prompt, draft/published version split, surface workspace_id/artifact_id pair with copy-to-clipboard for Foundry connection mint)
- Session N+5 (~3 hrs) — Diagnostics tab, sharing + Purview pre-flight, Foundry/Copilot-Studio handoff links, tenant-settings MessageBar gate
- Session N+6 (~2 hrs) — Vitest + Playwright coverage; end-to-end UAT publishing a draft and consuming it from a real Foundry project
Total: ~16 hrs spread across 6 focused sessions. Current grade: D (stubbed) — renders, persists to Cosmos, but no backing service and several invented fields. Target: A+ after Session N+6 with bicep parity + tenant-bootstrap docs + Vitest/Playwright coverage.