From 30ec52e13aff0852908653c707ce74707be28869 Mon Sep 17 00:00:00 2001 From: Saswato-Microsoft Date: Fri, 3 Jul 2026 14:04:12 +0530 Subject: [PATCH 1/8] fix: replace hardcoded GUIDs with placeholders for workspace and lakehouse IDs --- infra/fabric/deploy/fabric_solution_installer.ipynb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/infra/fabric/deploy/fabric_solution_installer.ipynb b/infra/fabric/deploy/fabric_solution_installer.ipynb index 74302f62..9321d199 100644 --- a/infra/fabric/deploy/fabric_solution_installer.ipynb +++ b/infra/fabric/deploy/fabric_solution_installer.ipynb @@ -90,10 +90,9 @@ "ONTOLOGY_TARGET_FOLDER = \"ontology\" # Target folder where ontologies will be moved after deployment\n", "\n", "# ── Source environment GUIDs (from parameter.yml) ───────────────────────────\n", - "# These are the hardcoded GUIDs from the source DEV workspace that need to be replaced\n", - "# during ontology deployment with actual target workspace/lakehouse IDs\n", - "SOURCE_WORKSPACE_ID = \"27818fad-0450-42b9-a4a0-db84075ac8d7\"\n", - "SOURCE_LAKEHOUSE_ID = \"e6cd0b76-50e8-498f-9cd0-89251fae70c2\"" + "# ontology deployment with the actual target workspace/lakehouse IDs.\n", + "SOURCE_WORKSPACE_ID = \"PLACEHOLDER_ID\"\n", + "SOURCE_LAKEHOUSE_ID = \"PLACEHOLDER_ID\"" ] }, { From 7881656d65abc6eaf2e8331044038a3076bf84d2 Mon Sep 17 00:00:00 2001 From: Saswato-Microsoft Date: Fri, 3 Jul 2026 15:33:56 +0530 Subject: [PATCH 2/8] fix: update placeholder GUIDs for workspace and lakehouse IDs in deployment notebook --- infra/fabric/deploy/fabric_solution_installer.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/infra/fabric/deploy/fabric_solution_installer.ipynb b/infra/fabric/deploy/fabric_solution_installer.ipynb index 9321d199..076e3b25 100644 --- a/infra/fabric/deploy/fabric_solution_installer.ipynb +++ b/infra/fabric/deploy/fabric_solution_installer.ipynb @@ -91,8 +91,8 @@ "\n", "# ── Source environment GUIDs (from parameter.yml) ───────────────────────────\n", "# ontology deployment with the actual target workspace/lakehouse IDs.\n", - "SOURCE_WORKSPACE_ID = \"PLACEHOLDER_ID\"\n", - "SOURCE_LAKEHOUSE_ID = \"PLACEHOLDER_ID\"" + "SOURCE_WORKSPACE_ID = \"PLACEHOLDER-WORKSPACE-ID\"\n", + "SOURCE_LAKEHOUSE_ID = \"PLACEHOLDER-LAKEHOUSE-ID\"" ] }, { From 63b91c325de41f8e2676e46359a7e1a61672ff40 Mon Sep 17 00:00:00 2001 From: Saswato-Microsoft Date: Fri, 3 Jul 2026 18:26:52 +0530 Subject: [PATCH 3/8] Update itemId to placeholder in data bindings across multiple entity and relationship types in Retail Supply Chain Ontology Model --- .../deploy/fabric_solution_installer.ipynb | 16 ++ .../utils/Get-FabricOntologyDefinition.ps1 | 162 ++++++++++++++---- .../688600ec-8c75-4910-940a-23c2e23bd144.json | 2 +- .../271405da-1e26-4b22-a9d3-dc2c8297ce85.json | 2 +- .../f9fabcfe-54ac-45a4-be7b-18f3c3e3f115.json | 2 +- .../aaf05d1e-94bb-4fed-92d2-0a240f58f55c.json | 2 +- .../2196afb7-ce18-4508-ac00-fa279f1c3b02.json | 2 +- .../05bd70ed-8dcf-4b67-be34-99b8b4674b84.json | 2 +- .../f2755cb0-640a-4097-a064-20313f55af09.json | 2 +- .../afc3f38a-1ee5-4f4f-a258-e9e95a13b9bb.json | 2 +- .../fcf4e257-aa96-40e4-96a5-11461e2e40fd.json | 2 +- .../ef7b8f02-1a0f-4ffd-811c-7edcb61da809.json | 2 +- .../8cac8ae8-94e7-4857-85ea-bd5b3fef59d2.json | 2 +- .../6726d420-45ab-4273-b263-3e17fee34d6f.json | 2 +- .../e08ce15c-18c0-4661-a33c-13b095c304a5.json | 2 +- .../57ff55b3-6316-44a2-b6f3-a2a0abaeeab3.json | 2 +- .../1b908aa2-9429-4733-8e7a-d5add8a7406b.json | 2 +- .../6720c72e-b587-410d-90dc-ac44fe92aa54.json | 2 +- .../d412be81-0303-48a9-9fe2-7d1bfcd001d2.json | 2 +- .../7cc6fe33-6471-4196-865e-d50bcd008ff4.json | 2 +- .../587e8aa5-8d37-4b63-a190-ebd73da07232.json | 2 +- .../9d7c3569-2809-4e5d-96d2-b80f66505a51.json | 2 +- .../9fed72f7-5027-4f65-bdb1-804303511433.json | 2 +- .../28e11476-a8eb-4713-a332-53d52c28785a.json | 2 +- .../4bafaaec-7fa0-45eb-93e6-529ab6cc268d.json | 2 +- .../23ff3bf8-57f2-47dd-a0c2-1133cec36c1d.json | 2 +- .../cdd03415-e33d-4ebf-9dea-9fe82a46eb75.json | 2 +- .../8668c1a3-b303-4789-bffd-ec1b221bb1a8.json | 2 +- .../25df2273-af36-4557-9ff4-edcf5feffdde.json | 2 +- .../aed6634e-6e0a-49a5-8a15-770e8b0c352d.json | 2 +- 30 files changed, 173 insertions(+), 61 deletions(-) diff --git a/infra/fabric/deploy/fabric_solution_installer.ipynb b/infra/fabric/deploy/fabric_solution_installer.ipynb index 076e3b25..a81345a6 100644 --- a/infra/fabric/deploy/fabric_solution_installer.ipynb +++ b/infra/fabric/deploy/fabric_solution_installer.ipynb @@ -315,6 +315,22 @@ " actual_lakehouse_id = lakehouse_id_map[LAKEHOUSE_NAME]\n", " content_str = content_str.replace(SOURCE_LAKEHOUSE_ID, actual_lakehouse_id)\n", "\n", + " # Defensive check: fail fast if the lakehouse placeholder still remains.\n", + " # This catches two failure modes: (1) LAKEHOUSE_NAME was not in\n", + " # lakehouse_id_map at this point (lakehouse not provisioned yet or\n", + " # wrong name), or (2) SOURCE_LAKEHOUSE_ID was misconfigured and did\n", + " # not match the sentinel in the source files. Either would deploy a\n", + " # broken ontology binding, so we halt now with an actionable error.\n", + " if SOURCE_LAKEHOUSE_ID in content_str:\n", + " raise RuntimeError(\n", + " f\"Lakehouse placeholder '{SOURCE_LAKEHOUSE_ID}' still present in \"\n", + " f\"'{rel_path}' after substitution. Ensure the target lakehouse \"\n", + " f\"'{LAKEHOUSE_NAME}' is provisioned and appears in lakehouse_id_map \"\n", + " f\"before deploying the ontology, and that SOURCE_LAKEHOUSE_ID \"\n", + " f\"matches the sentinel used by Get-FabricOntologyDefinition.ps1 \"\n", + " f\"(-ItemIdPlaceholder).\"\n", + " )\n", + "\n", " # Replace SQL endpoint values using the sibling itemId to select the correct lakehouse endpoint\n", " data_replaced = json.loads(content_str)\n", " _replace_sql_endpoints(data_replaced, lakehouse_sql_endpoint_map)\n", diff --git a/infra/scripts/utils/Get-FabricOntologyDefinition.ps1 b/infra/scripts/utils/Get-FabricOntologyDefinition.ps1 index 163534c0..e80f3885 100644 --- a/infra/scripts/utils/Get-FabricOntologyDefinition.ps1 +++ b/infra/scripts/utils/Get-FabricOntologyDefinition.ps1 @@ -26,6 +26,22 @@ .PARAMETER Format Optional format parameter for the ontology definition (as supported by the API) +.PARAMETER SanitizeItemIds + When $true (default), replaces any non-zero Lakehouse itemId GUID in the decoded + DataBindings/Contextualizations with the -ItemIdPlaceholder value. This prevents + source-environment Lakehouse IDs from being committed to source control and + aligns with the fabric_solution_installer.ipynb deployment logic that rewrites + the placeholder to the target lakehouse GUID via SOURCE_LAKEHOUSE_ID. + The zero GUID (returned by the API for workspaceId) is never modified. + Set to $false only for one-off diagnostics where the real GUID is needed. + +.PARAMETER ItemIdPlaceholder + Sentinel string used to replace real Lakehouse itemId GUIDs when + -SanitizeItemIds is $true. Defaults to "PLACEHOLDER-LAKEHOUSE-ID", which + matches the default SOURCE_LAKEHOUSE_ID in + infra/fabric/deploy/fabric_solution_installer.ipynb. If you change this, + update the notebook's SOURCE_LAKEHOUSE_ID accordingly. + .EXAMPLE .\Get-FabricOntologyDefinition.ps1 -WorkspaceId "aaaabbbb-0000-cccc-1111-dddd2222eeee" -OntologyId "bbbbcccc-1111-dddd-2222-eeee3333ffff" @@ -87,7 +103,22 @@ param( [string]$Format, [Parameter(Mandatory = $false)] - [int]$TimeoutSeconds = 240 + [int]$TimeoutSeconds = 240, + + # Replace real workspaceId and Lakehouse itemId GUIDs in DataBindings/Contextualizations + # so committed source files never contain source-environment IDs. The Fabric getDefinition + # API preserves both fields as real GUIDs, so both must be sanitized client-side: + # - workspaceId → 00000000-0000-0000-0000-000000000000 (zero GUID; the installer + # notebook rewrites this to the target workspace at deploy time) + # - itemId → -ItemIdPlaceholder value (default: PLACEHOLDER-LAKEHOUSE-ID; the + # installer notebook rewrites this via SOURCE_LAKEHOUSE_ID) + # Values that are already the zero GUID are left untouched. + # Set -SanitizeItemIds:$false to keep the raw GUIDs (e.g., for one-off diagnostics). + [Parameter(Mandatory = $false)] + [bool]$SanitizeItemIds = $true, + + [Parameter(Mandatory = $false)] + [string]$ItemIdPlaceholder = "PLACEHOLDER-LAKEHOUSE-ID" ) # Global variables @@ -351,6 +382,53 @@ function Invoke-FabricApiRequest { throw "Maximum retries ($MaxRetries) exceeded" } +function ConvertTo-SanitizedOntologyPart { + <# + .SYNOPSIS + Replace real workspaceId and Lakehouse itemId GUIDs with sanitized values. + + .DESCRIPTION + The Fabric getDefinition API preserves the real workspaceId and itemId + GUIDs inside DataBindings/*.json and Contextualizations/*.json. + Committing those raw GUIDs leaks source-environment IDs and prevents + redeployment to a different workspace/lakehouse. + + This function does field-scoped text-level replacements: + - "workspaceId": "" → "00000000-0000-0000-0000-000000000000" + - "itemId": "" → "" + + Values that are already the zero GUID are left untouched (negative + lookahead). Only values of the specific JSON keys are affected — other + GUIDs in the payload are not modified. + + The Fabric solution installer notebook picks up these sanitized values + at deploy time and rewrites them to the real target IDs: + - zero GUID → target workspace_id + - SOURCE_LAKEHOUSE_ID → target lakehouse item ID + #> + param( + [Parameter(Mandatory = $true)] + [string]$Content, + + [Parameter(Mandatory = $true)] + [string]$Placeholder + ) + + $guid = '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}' + $zeroGuid = '00000000-0000-0000-0000-000000000000' + $notZero = '(?!00000000-0000-0000-0000-000000000000)' + + # "workspaceId": "" → zero GUID + $wsPattern = "(`"workspaceId`"\s*:\s*`")$notZero$guid(`")" + $Content = [System.Text.RegularExpressions.Regex]::Replace($Content, $wsPattern, "`${1}$zeroGuid`${2}") + + # "itemId": "" → placeholder + $itemPattern = "(`"itemId`"\s*:\s*`")$notZero$guid(`")" + $Content = [System.Text.RegularExpressions.Regex]::Replace($Content, $itemPattern, "`${1}$Placeholder`${2}") + + return $Content +} + function ConvertFrom-Base64 { <# .SYNOPSIS @@ -408,43 +486,48 @@ function Get-OntologyDefinition { $uri += "?format=$Format" } - # Make initial API request + # Make initial API request. The Fabric getDefinition endpoint may return + # either 200 (definition inline in body) or 202 (long-running operation + # that must be polled). Both are valid per Microsoft LRO conventions. $response = Invoke-FabricApiRequest -Uri $uri -Method "POST" - # Always expect 202 for long-running operation - if ($response.StatusCode -ne 202) { - throw "Unexpected response status: $($response.StatusCode)" + if ($response.StatusCode -eq 200) { + Write-Log "Definition returned synchronously (200)" } + elseif ($response.StatusCode -eq 202) { + # Poll for completion + $location = [string]$response.Headers['Location'] + $retryAfter = if ($response.Headers['Retry-After']) { [int]([string]$response.Headers['Retry-After']) } else { 20 } - # Poll for completion - $location = [string]$response.Headers['Location'] - $retryAfter = if ($response.Headers['Retry-After']) { [int]([string]$response.Headers['Retry-After']) } else { 20 } - - Write-Log "Polling every $retryAfter seconds (typical operation completes in 20-60 seconds)" - - do { - Start-Sleep -Seconds $retryAfter - - $statusResponse = Invoke-WebRequest -Uri $location -Headers @{ - 'Authorization' = "Bearer $(Get-AuthToken)" - } -UseBasicParsing - - $operationStatus = $statusResponse.Content | ConvertFrom-Json - - if ($operationStatus.status -eq "Succeeded") { - # Retrieve result from Location header - $resultLocation = [string]$statusResponse.Headers['Location'] - - $response = Invoke-WebRequest -Uri $resultLocation -Headers @{ + Write-Log "Polling every $retryAfter seconds (typical operation completes in 20-60 seconds)" + + do { + Start-Sleep -Seconds $retryAfter + + $statusResponse = Invoke-WebRequest -Uri $location -Headers @{ 'Authorization' = "Bearer $(Get-AuthToken)" } -UseBasicParsing - - break - } - elseif ($operationStatus.status -eq "Failed") { - throw "Operation failed: $($operationStatus.error | ConvertTo-Json -Compress)" - } - } while ($true) + + $operationStatus = $statusResponse.Content | ConvertFrom-Json + + if ($operationStatus.status -eq "Succeeded") { + # Retrieve result from Location header + $resultLocation = [string]$statusResponse.Headers['Location'] + + $response = Invoke-WebRequest -Uri $resultLocation -Headers @{ + 'Authorization' = "Bearer $(Get-AuthToken)" + } -UseBasicParsing + + break + } + elseif ($operationStatus.status -eq "Failed") { + throw "Operation failed: $($operationStatus.error | ConvertTo-Json -Compress)" + } + } while ($true) + } + else { + throw "Unexpected response status: $($response.StatusCode)" + } # Parse and validate response @@ -458,13 +541,26 @@ function Get-OntologyDefinition { # Decode all parts $decodedParts = @{} + $sanitizedCount = 0 foreach ($part in $responseData.definition.parts) { if ($part.payloadType -eq "InlineBase64") { - $decodedParts[$part.path] = ConvertFrom-Base64 -Base64String $part.payload + $decoded = ConvertFrom-Base64 -Base64String $part.payload + + if ($SanitizeItemIds) { + $before = $decoded + $decoded = ConvertTo-SanitizedOntologyPart -Content $decoded -Placeholder $ItemIdPlaceholder + if ($decoded -ne $before) { $sanitizedCount++ } + } + + $decodedParts[$part.path] = $decoded } } + if ($SanitizeItemIds) { + Write-Log "Sanitized workspaceId (-> zero GUID) and itemId (-> '$ItemIdPlaceholder') in $sanitizedCount part(s)" + } + Write-Log "Successfully decoded ontology definition" # Save to files diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/107549390124998/DataBindings/688600ec-8c75-4910-940a-23c2e23bd144.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/107549390124998/DataBindings/688600ec-8c75-4910-940a-23c2e23bd144.json index de2342b0..dd4a00ec 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/107549390124998/DataBindings/688600ec-8c75-4910-940a-23c2e23bd144.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/107549390124998/DataBindings/688600ec-8c75-4910-940a-23c2e23bd144.json @@ -56,7 +56,7 @@ "sourceTableProperties": { "sourceType": "LakehouseTable", "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "suppliers", "sourceSchema": "supplychain" } diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/113325854257683/DataBindings/271405da-1e26-4b22-a9d3-dc2c8297ce85.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/113325854257683/DataBindings/271405da-1e26-4b22-a9d3-dc2c8297ce85.json index 4e976b10..7e1e3a9e 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/113325854257683/DataBindings/271405da-1e26-4b22-a9d3-dc2c8297ce85.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/113325854257683/DataBindings/271405da-1e26-4b22-a9d3-dc2c8297ce85.json @@ -72,7 +72,7 @@ "sourceTableProperties": { "sourceType": "LakehouseTable", "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "inventorytransactions", "sourceSchema": "inventory" } diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/120698763730570/DataBindings/f9fabcfe-54ac-45a4-be7b-18f3c3e3f115.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/120698763730570/DataBindings/f9fabcfe-54ac-45a4-be7b-18f3c3e3f115.json index 0fd85eb6..c5bff535 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/120698763730570/DataBindings/f9fabcfe-54ac-45a4-be7b-18f3c3e3f115.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/120698763730570/DataBindings/f9fabcfe-54ac-45a4-be7b-18f3c3e3f115.json @@ -96,7 +96,7 @@ "sourceTableProperties": { "sourceType": "LakehouseTable", "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "warehouses", "sourceSchema": "inventory" } diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/122254761916513/DataBindings/aaf05d1e-94bb-4fed-92d2-0a240f58f55c.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/122254761916513/DataBindings/aaf05d1e-94bb-4fed-92d2-0a240f58f55c.json index 309b56ea..6a33f7f7 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/122254761916513/DataBindings/aaf05d1e-94bb-4fed-92d2-0a240f58f55c.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/122254761916513/DataBindings/aaf05d1e-94bb-4fed-92d2-0a240f58f55c.json @@ -64,7 +64,7 @@ "sourceTableProperties": { "sourceType": "LakehouseTable", "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "productsuppliers", "sourceSchema": "supplychain" } diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/130227575921799/DataBindings/2196afb7-ce18-4508-ac00-fa279f1c3b02.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/130227575921799/DataBindings/2196afb7-ce18-4508-ac00-fa279f1c3b02.json index 8ee78c81..e50e05e8 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/130227575921799/DataBindings/2196afb7-ce18-4508-ac00-fa279f1c3b02.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/130227575921799/DataBindings/2196afb7-ce18-4508-ac00-fa279f1c3b02.json @@ -68,7 +68,7 @@ "sourceTableProperties": { "sourceType": "LakehouseTable", "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "inventory", "sourceSchema": "inventory" } diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/150097852588650/DataBindings/05bd70ed-8dcf-4b67-be34-99b8b4674b84.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/150097852588650/DataBindings/05bd70ed-8dcf-4b67-be34-99b8b4674b84.json index bc644d1d..d0cadda6 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/150097852588650/DataBindings/05bd70ed-8dcf-4b67-be34-99b8b4674b84.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/150097852588650/DataBindings/05bd70ed-8dcf-4b67-be34-99b8b4674b84.json @@ -28,7 +28,7 @@ "sourceTableProperties": { "sourceType": "LakehouseTable", "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "productline", "sourceSchema": "product" } diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/161336334468822/DataBindings/f2755cb0-640a-4097-a064-20313f55af09.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/161336334468822/DataBindings/f2755cb0-640a-4097-a064-20313f55af09.json index 170b98d9..35df6bef 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/161336334468822/DataBindings/f2755cb0-640a-4097-a064-20313f55af09.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/161336334468822/DataBindings/f2755cb0-640a-4097-a064-20313f55af09.json @@ -40,7 +40,7 @@ "sourceTableProperties": { "sourceType": "LakehouseTable", "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "productcategory", "sourceSchema": "product" } diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/177023137565323/DataBindings/afc3f38a-1ee5-4f4f-a258-e9e95a13b9bb.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/177023137565323/DataBindings/afc3f38a-1ee5-4f4f-a258-e9e95a13b9bb.json index 430fd8a9..0fd0cdee 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/177023137565323/DataBindings/afc3f38a-1ee5-4f4f-a258-e9e95a13b9bb.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/177023137565323/DataBindings/afc3f38a-1ee5-4f4f-a258-e9e95a13b9bb.json @@ -92,7 +92,7 @@ "sourceTableProperties": { "sourceType": "LakehouseTable", "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "product", "sourceSchema": "product" } diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/212018112555376/DataBindings/fcf4e257-aa96-40e4-96a5-11461e2e40fd.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/212018112555376/DataBindings/fcf4e257-aa96-40e4-96a5-11461e2e40fd.json index 5718af9e..965dbcb3 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/212018112555376/DataBindings/fcf4e257-aa96-40e4-96a5-11461e2e40fd.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/212018112555376/DataBindings/fcf4e257-aa96-40e4-96a5-11461e2e40fd.json @@ -68,7 +68,7 @@ "sourceTableProperties": { "sourceType": "LakehouseTable", "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "purchaseorders", "sourceSchema": "inventory" } diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/224432779600142/DataBindings/ef7b8f02-1a0f-4ffd-811c-7edcb61da809.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/224432779600142/DataBindings/ef7b8f02-1a0f-4ffd-811c-7edcb61da809.json index cc664f1e..b6330e13 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/224432779600142/DataBindings/ef7b8f02-1a0f-4ffd-811c-7edcb61da809.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/224432779600142/DataBindings/ef7b8f02-1a0f-4ffd-811c-7edcb61da809.json @@ -68,7 +68,7 @@ "sourceTableProperties": { "sourceType": "LakehouseTable", "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "purchaseorderitems", "sourceSchema": "inventory" } diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/263228276373168/DataBindings/8cac8ae8-94e7-4857-85ea-bd5b3fef59d2.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/263228276373168/DataBindings/8cac8ae8-94e7-4857-85ea-bd5b3fef59d2.json index ea614d51..eeac6033 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/263228276373168/DataBindings/8cac8ae8-94e7-4857-85ea-bd5b3fef59d2.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/263228276373168/DataBindings/8cac8ae8-94e7-4857-85ea-bd5b3fef59d2.json @@ -76,7 +76,7 @@ "sourceTableProperties": { "sourceType": "LakehouseTable", "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "demandforecast", "sourceSchema": "inventory" } diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/85700348291860/DataBindings/6726d420-45ab-4273-b263-3e17fee34d6f.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/85700348291860/DataBindings/6726d420-45ab-4273-b263-3e17fee34d6f.json index adb3e5f8..beece6f1 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/85700348291860/DataBindings/6726d420-45ab-4273-b263-3e17fee34d6f.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/85700348291860/DataBindings/6726d420-45ab-4273-b263-3e17fee34d6f.json @@ -76,7 +76,7 @@ "sourceTableProperties": { "sourceType": "LakehouseTable", "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "supplychainevents", "sourceSchema": "supplychain" } diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/96760205414813/DataBindings/e08ce15c-18c0-4661-a33c-13b095c304a5.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/96760205414813/DataBindings/e08ce15c-18c0-4661-a33c-13b095c304a5.json index 598aa2f7..5f4b40b9 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/96760205414813/DataBindings/e08ce15c-18c0-4661-a33c-13b095c304a5.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/EntityTypes/96760205414813/DataBindings/e08ce15c-18c0-4661-a33c-13b095c304a5.json @@ -52,7 +52,7 @@ "sourceTableProperties": { "sourceType": "LakehouseTable", "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "supplychaineventimpacts", "sourceSchema": "supplychain" } diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1373833960763083416/Contextualizations/57ff55b3-6316-44a2-b6f3-a2a0abaeeab3.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1373833960763083416/Contextualizations/57ff55b3-6316-44a2-b6f3-a2a0abaeeab3.json index 6fe58eab..1d739239 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1373833960763083416/Contextualizations/57ff55b3-6316-44a2-b6f3-a2a0abaeeab3.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1373833960763083416/Contextualizations/57ff55b3-6316-44a2-b6f3-a2a0abaeeab3.json @@ -3,7 +3,7 @@ "id": "57ff55b3-6316-44a2-b6f3-a2a0abaeeab3", "dataBindingTable": { "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "demandforecast", "sourceSchema": "inventory", "sourceType": "LakehouseTable" diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1388107711466745284/Contextualizations/1b908aa2-9429-4733-8e7a-d5add8a7406b.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1388107711466745284/Contextualizations/1b908aa2-9429-4733-8e7a-d5add8a7406b.json index 92a04976..b208b4ac 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1388107711466745284/Contextualizations/1b908aa2-9429-4733-8e7a-d5add8a7406b.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1388107711466745284/Contextualizations/1b908aa2-9429-4733-8e7a-d5add8a7406b.json @@ -3,7 +3,7 @@ "id": "1b908aa2-9429-4733-8e7a-d5add8a7406b", "dataBindingTable": { "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "inventorytransactions", "sourceSchema": "inventory", "sourceType": "LakehouseTable" diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1391745311470047016/Contextualizations/6720c72e-b587-410d-90dc-ac44fe92aa54.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1391745311470047016/Contextualizations/6720c72e-b587-410d-90dc-ac44fe92aa54.json index 308f5796..bb6a8a6c 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1391745311470047016/Contextualizations/6720c72e-b587-410d-90dc-ac44fe92aa54.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1391745311470047016/Contextualizations/6720c72e-b587-410d-90dc-ac44fe92aa54.json @@ -3,7 +3,7 @@ "id": "6720c72e-b587-410d-90dc-ac44fe92aa54", "dataBindingTable": { "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "inventorytransactions", "sourceSchema": "inventory", "sourceType": "LakehouseTable" diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1399631645059782351/Contextualizations/d412be81-0303-48a9-9fe2-7d1bfcd001d2.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1399631645059782351/Contextualizations/d412be81-0303-48a9-9fe2-7d1bfcd001d2.json index adeb817e..0fbd2dce 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1399631645059782351/Contextualizations/d412be81-0303-48a9-9fe2-7d1bfcd001d2.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1399631645059782351/Contextualizations/d412be81-0303-48a9-9fe2-7d1bfcd001d2.json @@ -3,7 +3,7 @@ "id": "d412be81-0303-48a9-9fe2-7d1bfcd001d2", "dataBindingTable": { "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "inventory", "sourceSchema": "inventory", "sourceType": "LakehouseTable" diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1437352217556373213/Contextualizations/7cc6fe33-6471-4196-865e-d50bcd008ff4.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1437352217556373213/Contextualizations/7cc6fe33-6471-4196-865e-d50bcd008ff4.json index a925cc0e..ee091c21 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1437352217556373213/Contextualizations/7cc6fe33-6471-4196-865e-d50bcd008ff4.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/1437352217556373213/Contextualizations/7cc6fe33-6471-4196-865e-d50bcd008ff4.json @@ -3,7 +3,7 @@ "id": "7cc6fe33-6471-4196-865e-d50bcd008ff4", "dataBindingTable": { "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "inventory", "sourceSchema": "inventory", "sourceType": "LakehouseTable" diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288267357653180801/Contextualizations/587e8aa5-8d37-4b63-a190-ebd73da07232.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288267357653180801/Contextualizations/587e8aa5-8d37-4b63-a190-ebd73da07232.json index 5d9aa804..1d3b3751 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288267357653180801/Contextualizations/587e8aa5-8d37-4b63-a190-ebd73da07232.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288267357653180801/Contextualizations/587e8aa5-8d37-4b63-a190-ebd73da07232.json @@ -3,7 +3,7 @@ "id": "587e8aa5-8d37-4b63-a190-ebd73da07232", "dataBindingTable": { "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "supplychaineventimpacts", "sourceSchema": "supplychain", "sourceType": "LakehouseTable" diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288278139092624702/Contextualizations/9d7c3569-2809-4e5d-96d2-b80f66505a51.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288278139092624702/Contextualizations/9d7c3569-2809-4e5d-96d2-b80f66505a51.json index 2477b207..4ed4a3fd 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288278139092624702/Contextualizations/9d7c3569-2809-4e5d-96d2-b80f66505a51.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288278139092624702/Contextualizations/9d7c3569-2809-4e5d-96d2-b80f66505a51.json @@ -3,7 +3,7 @@ "id": "9d7c3569-2809-4e5d-96d2-b80f66505a51", "dataBindingTable": { "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "supplychaineventimpacts", "sourceSchema": "supplychain", "sourceType": "LakehouseTable" diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288293874245742539/Contextualizations/9fed72f7-5027-4f65-bdb1-804303511433.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288293874245742539/Contextualizations/9fed72f7-5027-4f65-bdb1-804303511433.json index b5e0cd52..e5c2e8cb 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288293874245742539/Contextualizations/9fed72f7-5027-4f65-bdb1-804303511433.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288293874245742539/Contextualizations/9fed72f7-5027-4f65-bdb1-804303511433.json @@ -3,7 +3,7 @@ "id": "9fed72f7-5027-4f65-bdb1-804303511433", "dataBindingTable": { "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "productsuppliers", "sourceSchema": "supplychain", "sourceType": "LakehouseTable" diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288309570472540204/Contextualizations/28e11476-a8eb-4713-a332-53d52c28785a.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288309570472540204/Contextualizations/28e11476-a8eb-4713-a332-53d52c28785a.json index ca12bd32..fee7b7de 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288309570472540204/Contextualizations/28e11476-a8eb-4713-a332-53d52c28785a.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288309570472540204/Contextualizations/28e11476-a8eb-4713-a332-53d52c28785a.json @@ -3,7 +3,7 @@ "id": "28e11476-a8eb-4713-a332-53d52c28785a", "dataBindingTable": { "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "productsuppliers", "sourceSchema": "supplychain", "sourceType": "LakehouseTable" diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288334507981587855/Contextualizations/4bafaaec-7fa0-45eb-93e6-529ab6cc268d.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288334507981587855/Contextualizations/4bafaaec-7fa0-45eb-93e6-529ab6cc268d.json index b3bf4b51..d96fd5ae 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288334507981587855/Contextualizations/4bafaaec-7fa0-45eb-93e6-529ab6cc268d.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288334507981587855/Contextualizations/4bafaaec-7fa0-45eb-93e6-529ab6cc268d.json @@ -3,7 +3,7 @@ "id": "4bafaaec-7fa0-45eb-93e6-529ab6cc268d", "dataBindingTable": { "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "demandforecast", "sourceSchema": "inventory", "sourceType": "LakehouseTable" diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288348907473383913/Contextualizations/23ff3bf8-57f2-47dd-a0c2-1133cec36c1d.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288348907473383913/Contextualizations/23ff3bf8-57f2-47dd-a0c2-1133cec36c1d.json index ba1dc937..fc9fa151 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288348907473383913/Contextualizations/23ff3bf8-57f2-47dd-a0c2-1133cec36c1d.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288348907473383913/Contextualizations/23ff3bf8-57f2-47dd-a0c2-1133cec36c1d.json @@ -3,7 +3,7 @@ "id": "23ff3bf8-57f2-47dd-a0c2-1133cec36c1d", "dataBindingTable": { "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "purchaseorderitems", "sourceSchema": "inventory", "sourceType": "LakehouseTable" diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288359282880415630/Contextualizations/cdd03415-e33d-4ebf-9dea-9fe82a46eb75.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288359282880415630/Contextualizations/cdd03415-e33d-4ebf-9dea-9fe82a46eb75.json index be4c3c2b..438179e7 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288359282880415630/Contextualizations/cdd03415-e33d-4ebf-9dea-9fe82a46eb75.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288359282880415630/Contextualizations/cdd03415-e33d-4ebf-9dea-9fe82a46eb75.json @@ -3,7 +3,7 @@ "id": "cdd03415-e33d-4ebf-9dea-9fe82a46eb75", "dataBindingTable": { "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "purchaseorderitems", "sourceSchema": "inventory", "sourceType": "LakehouseTable" diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288374575683302702/Contextualizations/8668c1a3-b303-4789-bffd-ec1b221bb1a8.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288374575683302702/Contextualizations/8668c1a3-b303-4789-bffd-ec1b221bb1a8.json index e4e29cdd..018fe352 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288374575683302702/Contextualizations/8668c1a3-b303-4789-bffd-ec1b221bb1a8.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288374575683302702/Contextualizations/8668c1a3-b303-4789-bffd-ec1b221bb1a8.json @@ -3,7 +3,7 @@ "id": "8668c1a3-b303-4789-bffd-ec1b221bb1a8", "dataBindingTable": { "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "purchaseorders", "sourceSchema": "inventory", "sourceType": "LakehouseTable" diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288446588143522240/Contextualizations/25df2273-af36-4557-9ff4-edcf5feffdde.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288446588143522240/Contextualizations/25df2273-af36-4557-9ff4-edcf5feffdde.json index 9a5aa5b1..65146b38 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288446588143522240/Contextualizations/25df2273-af36-4557-9ff4-edcf5feffdde.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288446588143522240/Contextualizations/25df2273-af36-4557-9ff4-edcf5feffdde.json @@ -3,7 +3,7 @@ "id": "25df2273-af36-4557-9ff4-edcf5feffdde", "dataBindingTable": { "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "product", "sourceSchema": "product", "sourceType": "LakehouseTable" diff --git a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288461549892414157/Contextualizations/aed6634e-6e0a-49a5-8a15-770e8b0c352d.json b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288461549892414157/Contextualizations/aed6634e-6e0a-49a5-8a15-770e8b0c352d.json index 15509f4c..92d72869 100644 --- a/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288461549892414157/Contextualizations/aed6634e-6e0a-49a5-8a15-770e8b0c352d.json +++ b/src/fabric/fabric_workspace/ontology/RetailSupplyChainOntologyModel.Ontology/RelationshipTypes/2288461549892414157/Contextualizations/aed6634e-6e0a-49a5-8a15-770e8b0c352d.json @@ -3,7 +3,7 @@ "id": "aed6634e-6e0a-49a5-8a15-770e8b0c352d", "dataBindingTable": { "workspaceId": "00000000-0000-0000-0000-000000000000", - "itemId": "1fae70c2-8925-9cd0-498f-50e8e6cd0b76", + "itemId": "PLACEHOLDER-LAKEHOUSE-ID", "sourceTableName": "product", "sourceSchema": "product", "sourceType": "LakehouseTable" From bdb456320ca9c78ffd4b06d8e214c692b3ee5834 Mon Sep 17 00:00:00 2001 From: Saswato-Microsoft Date: Fri, 3 Jul 2026 19:03:50 +0530 Subject: [PATCH 4/8] fix: remove unused placeholder sanitization logic from ontology definition scripts --- .../deploy/fabric_solution_installer.ipynb | 16 ---- .../utils/Get-FabricOntologyDefinition.ps1 | 95 +------------------ 2 files changed, 2 insertions(+), 109 deletions(-) diff --git a/infra/fabric/deploy/fabric_solution_installer.ipynb b/infra/fabric/deploy/fabric_solution_installer.ipynb index a81345a6..076e3b25 100644 --- a/infra/fabric/deploy/fabric_solution_installer.ipynb +++ b/infra/fabric/deploy/fabric_solution_installer.ipynb @@ -315,22 +315,6 @@ " actual_lakehouse_id = lakehouse_id_map[LAKEHOUSE_NAME]\n", " content_str = content_str.replace(SOURCE_LAKEHOUSE_ID, actual_lakehouse_id)\n", "\n", - " # Defensive check: fail fast if the lakehouse placeholder still remains.\n", - " # This catches two failure modes: (1) LAKEHOUSE_NAME was not in\n", - " # lakehouse_id_map at this point (lakehouse not provisioned yet or\n", - " # wrong name), or (2) SOURCE_LAKEHOUSE_ID was misconfigured and did\n", - " # not match the sentinel in the source files. Either would deploy a\n", - " # broken ontology binding, so we halt now with an actionable error.\n", - " if SOURCE_LAKEHOUSE_ID in content_str:\n", - " raise RuntimeError(\n", - " f\"Lakehouse placeholder '{SOURCE_LAKEHOUSE_ID}' still present in \"\n", - " f\"'{rel_path}' after substitution. Ensure the target lakehouse \"\n", - " f\"'{LAKEHOUSE_NAME}' is provisioned and appears in lakehouse_id_map \"\n", - " f\"before deploying the ontology, and that SOURCE_LAKEHOUSE_ID \"\n", - " f\"matches the sentinel used by Get-FabricOntologyDefinition.ps1 \"\n", - " f\"(-ItemIdPlaceholder).\"\n", - " )\n", - "\n", " # Replace SQL endpoint values using the sibling itemId to select the correct lakehouse endpoint\n", " data_replaced = json.loads(content_str)\n", " _replace_sql_endpoints(data_replaced, lakehouse_sql_endpoint_map)\n", diff --git a/infra/scripts/utils/Get-FabricOntologyDefinition.ps1 b/infra/scripts/utils/Get-FabricOntologyDefinition.ps1 index e80f3885..45da647a 100644 --- a/infra/scripts/utils/Get-FabricOntologyDefinition.ps1 +++ b/infra/scripts/utils/Get-FabricOntologyDefinition.ps1 @@ -26,22 +26,6 @@ .PARAMETER Format Optional format parameter for the ontology definition (as supported by the API) -.PARAMETER SanitizeItemIds - When $true (default), replaces any non-zero Lakehouse itemId GUID in the decoded - DataBindings/Contextualizations with the -ItemIdPlaceholder value. This prevents - source-environment Lakehouse IDs from being committed to source control and - aligns with the fabric_solution_installer.ipynb deployment logic that rewrites - the placeholder to the target lakehouse GUID via SOURCE_LAKEHOUSE_ID. - The zero GUID (returned by the API for workspaceId) is never modified. - Set to $false only for one-off diagnostics where the real GUID is needed. - -.PARAMETER ItemIdPlaceholder - Sentinel string used to replace real Lakehouse itemId GUIDs when - -SanitizeItemIds is $true. Defaults to "PLACEHOLDER-LAKEHOUSE-ID", which - matches the default SOURCE_LAKEHOUSE_ID in - infra/fabric/deploy/fabric_solution_installer.ipynb. If you change this, - update the notebook's SOURCE_LAKEHOUSE_ID accordingly. - .EXAMPLE .\Get-FabricOntologyDefinition.ps1 -WorkspaceId "aaaabbbb-0000-cccc-1111-dddd2222eeee" -OntologyId "bbbbcccc-1111-dddd-2222-eeee3333ffff" @@ -103,22 +87,7 @@ param( [string]$Format, [Parameter(Mandatory = $false)] - [int]$TimeoutSeconds = 240, - - # Replace real workspaceId and Lakehouse itemId GUIDs in DataBindings/Contextualizations - # so committed source files never contain source-environment IDs. The Fabric getDefinition - # API preserves both fields as real GUIDs, so both must be sanitized client-side: - # - workspaceId → 00000000-0000-0000-0000-000000000000 (zero GUID; the installer - # notebook rewrites this to the target workspace at deploy time) - # - itemId → -ItemIdPlaceholder value (default: PLACEHOLDER-LAKEHOUSE-ID; the - # installer notebook rewrites this via SOURCE_LAKEHOUSE_ID) - # Values that are already the zero GUID are left untouched. - # Set -SanitizeItemIds:$false to keep the raw GUIDs (e.g., for one-off diagnostics). - [Parameter(Mandatory = $false)] - [bool]$SanitizeItemIds = $true, - - [Parameter(Mandatory = $false)] - [string]$ItemIdPlaceholder = "PLACEHOLDER-LAKEHOUSE-ID" + [int]$TimeoutSeconds = 240 ) # Global variables @@ -382,53 +351,6 @@ function Invoke-FabricApiRequest { throw "Maximum retries ($MaxRetries) exceeded" } -function ConvertTo-SanitizedOntologyPart { - <# - .SYNOPSIS - Replace real workspaceId and Lakehouse itemId GUIDs with sanitized values. - - .DESCRIPTION - The Fabric getDefinition API preserves the real workspaceId and itemId - GUIDs inside DataBindings/*.json and Contextualizations/*.json. - Committing those raw GUIDs leaks source-environment IDs and prevents - redeployment to a different workspace/lakehouse. - - This function does field-scoped text-level replacements: - - "workspaceId": "" → "00000000-0000-0000-0000-000000000000" - - "itemId": "" → "" - - Values that are already the zero GUID are left untouched (negative - lookahead). Only values of the specific JSON keys are affected — other - GUIDs in the payload are not modified. - - The Fabric solution installer notebook picks up these sanitized values - at deploy time and rewrites them to the real target IDs: - - zero GUID → target workspace_id - - SOURCE_LAKEHOUSE_ID → target lakehouse item ID - #> - param( - [Parameter(Mandatory = $true)] - [string]$Content, - - [Parameter(Mandatory = $true)] - [string]$Placeholder - ) - - $guid = '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}' - $zeroGuid = '00000000-0000-0000-0000-000000000000' - $notZero = '(?!00000000-0000-0000-0000-000000000000)' - - # "workspaceId": "" → zero GUID - $wsPattern = "(`"workspaceId`"\s*:\s*`")$notZero$guid(`")" - $Content = [System.Text.RegularExpressions.Regex]::Replace($Content, $wsPattern, "`${1}$zeroGuid`${2}") - - # "itemId": "" → placeholder - $itemPattern = "(`"itemId`"\s*:\s*`")$notZero$guid(`")" - $Content = [System.Text.RegularExpressions.Regex]::Replace($Content, $itemPattern, "`${1}$Placeholder`${2}") - - return $Content -} - function ConvertFrom-Base64 { <# .SYNOPSIS @@ -541,26 +463,13 @@ function Get-OntologyDefinition { # Decode all parts $decodedParts = @{} - $sanitizedCount = 0 foreach ($part in $responseData.definition.parts) { if ($part.payloadType -eq "InlineBase64") { - $decoded = ConvertFrom-Base64 -Base64String $part.payload - - if ($SanitizeItemIds) { - $before = $decoded - $decoded = ConvertTo-SanitizedOntologyPart -Content $decoded -Placeholder $ItemIdPlaceholder - if ($decoded -ne $before) { $sanitizedCount++ } - } - - $decodedParts[$part.path] = $decoded + $decodedParts[$part.path] = ConvertFrom-Base64 -Base64String $part.payload } } - if ($SanitizeItemIds) { - Write-Log "Sanitized workspaceId (-> zero GUID) and itemId (-> '$ItemIdPlaceholder') in $sanitizedCount part(s)" - } - Write-Log "Successfully decoded ontology definition" # Save to files From 73966bd687691becbfeb0fb106af79c8f4c76b98 Mon Sep 17 00:00:00 2001 From: Avijit-Microsoft Date: Fri, 3 Jul 2026 20:01:56 +0530 Subject: [PATCH 5/8] fix: reverted - streamline API response handling in Get-OntologyDefinition function --- .../utils/Get-FabricOntologyDefinition.ps1 | 69 +++++++++---------- 1 file changed, 32 insertions(+), 37 deletions(-) diff --git a/infra/scripts/utils/Get-FabricOntologyDefinition.ps1 b/infra/scripts/utils/Get-FabricOntologyDefinition.ps1 index 45da647a..9c62c65a 100644 --- a/infra/scripts/utils/Get-FabricOntologyDefinition.ps1 +++ b/infra/scripts/utils/Get-FabricOntologyDefinition.ps1 @@ -408,48 +408,43 @@ function Get-OntologyDefinition { $uri += "?format=$Format" } - # Make initial API request. The Fabric getDefinition endpoint may return - # either 200 (definition inline in body) or 202 (long-running operation - # that must be polled). Both are valid per Microsoft LRO conventions. + # Make initial API request $response = Invoke-FabricApiRequest -Uri $uri -Method "POST" - if ($response.StatusCode -eq 200) { - Write-Log "Definition returned synchronously (200)" + # Always expect 202 for long-running operation + if ($response.StatusCode -ne 202) { + throw "Unexpected response status: $($response.StatusCode)" } - elseif ($response.StatusCode -eq 202) { - # Poll for completion - $location = [string]$response.Headers['Location'] - $retryAfter = if ($response.Headers['Retry-After']) { [int]([string]$response.Headers['Retry-After']) } else { 20 } - - Write-Log "Polling every $retryAfter seconds (typical operation completes in 20-60 seconds)" - do { - Start-Sleep -Seconds $retryAfter - - $statusResponse = Invoke-WebRequest -Uri $location -Headers @{ + # Poll for completion + $location = [string]$response.Headers['Location'] + $retryAfter = if ($response.Headers['Retry-After']) { [int]([string]$response.Headers['Retry-After']) } else { 20 } + + Write-Log "Polling every $retryAfter seconds (typical operation completes in 20-60 seconds)" + + do { + Start-Sleep -Seconds $retryAfter + + $statusResponse = Invoke-WebRequest -Uri $location -Headers @{ + 'Authorization' = "Bearer $(Get-AuthToken)" + } -UseBasicParsing + + $operationStatus = $statusResponse.Content | ConvertFrom-Json + + if ($operationStatus.status -eq "Succeeded") { + # Retrieve result from Location header + $resultLocation = [string]$statusResponse.Headers['Location'] + + $response = Invoke-WebRequest -Uri $resultLocation -Headers @{ 'Authorization' = "Bearer $(Get-AuthToken)" } -UseBasicParsing - - $operationStatus = $statusResponse.Content | ConvertFrom-Json - - if ($operationStatus.status -eq "Succeeded") { - # Retrieve result from Location header - $resultLocation = [string]$statusResponse.Headers['Location'] - - $response = Invoke-WebRequest -Uri $resultLocation -Headers @{ - 'Authorization' = "Bearer $(Get-AuthToken)" - } -UseBasicParsing - - break - } - elseif ($operationStatus.status -eq "Failed") { - throw "Operation failed: $($operationStatus.error | ConvertTo-Json -Compress)" - } - } while ($true) - } - else { - throw "Unexpected response status: $($response.StatusCode)" - } + + break + } + elseif ($operationStatus.status -eq "Failed") { + throw "Operation failed: $($operationStatus.error | ConvertTo-Json -Compress)" + } + } while ($true) # Parse and validate response @@ -541,4 +536,4 @@ catch { exit 1 } -Write-Log "Script completed successfully" +Write-Log "Script completed successfully" \ No newline at end of file From b8310a5115bbf37b0f57caad187f6af92d863788 Mon Sep 17 00:00:00 2001 From: Saswato-Microsoft Date: Fri, 3 Jul 2026 20:41:53 +0530 Subject: [PATCH 6/8] fix: add newline at end of file in Get-FabricOntologyDefinition.ps1 --- infra/scripts/utils/Get-FabricOntologyDefinition.ps1 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/infra/scripts/utils/Get-FabricOntologyDefinition.ps1 b/infra/scripts/utils/Get-FabricOntologyDefinition.ps1 index 9c62c65a..83ff7103 100644 --- a/infra/scripts/utils/Get-FabricOntologyDefinition.ps1 +++ b/infra/scripts/utils/Get-FabricOntologyDefinition.ps1 @@ -536,4 +536,5 @@ catch { exit 1 } -Write-Log "Script completed successfully" \ No newline at end of file +Write-Log "Script completed successfully" +# Script ends here \ No newline at end of file From 2ea9611f02ec8a0628d83cfa75734bfff5356a5d Mon Sep 17 00:00:00 2001 From: Saswato-Microsoft Date: Wed, 8 Jul 2026 10:36:15 +0530 Subject: [PATCH 7/8] fix: update OpenAI model references from gpt-4.1-mini to gpt-5-mini across documentation and scripts --- .github/workflows/azure-dev.yml | 2 +- TRANSPARENCY_FAQ.md | 2 +- docs/DeploymentGuide.md | 8 ++++---- docs/foundry/DeploymentGuideFoundry.md | 10 +++++----- infra/deploy_ai_foundry.bicep | 1 + infra/deploy_foundry_role_assignment.bicep | 1 + infra/main.bicep | 4 ++-- infra/main.parameters.json | 6 +++--- infra/scripts/install_microsoft_iq_solution.py | 8 ++++---- 9 files changed, 22 insertions(+), 20 deletions(-) diff --git a/.github/workflows/azure-dev.yml b/.github/workflows/azure-dev.yml index c28ce2e4..c98e9013 100644 --- a/.github/workflows/azure-dev.yml +++ b/.github/workflows/azure-dev.yml @@ -355,7 +355,7 @@ jobs: echo "- 🏗️ **Microsoft Fabric capacity** and user-assigned **managed identity**" >> $GITHUB_STEP_SUMMARY echo "- 🧠 **Microsoft Foundry hub & project** with AI Search and Storage connections" >> $GITHUB_STEP_SUMMARY echo "- 🔍 **Azure AI Search** service and **Azure Storage** account for document indexing" >> $GITHUB_STEP_SUMMARY - echo "- 🤖 **Azure OpenAI deployments**: \`gpt-4.1-mini\` (chat) and \`text-embedding-3-small\` (embeddings)" >> $GITHUB_STEP_SUMMARY + echo "- 🤖 **Azure OpenAI deployments**: \`gpt-5-mini\` (chat) and \`text-embedding-3-small\` (embeddings)" >> $GITHUB_STEP_SUMMARY echo "- 📈 **Log Analytics workspace** and **Application Insights** for diagnostics" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "### Phase 2 — Solution bootstrap (\`install_microsoft_iq_solution.py\` postprovision hook)" >> $GITHUB_STEP_SUMMARY diff --git a/TRANSPARENCY_FAQ.md b/TRANSPARENCY_FAQ.md index 6a5c3de1..7547628e 100644 --- a/TRANSPARENCY_FAQ.md +++ b/TRANSPARENCY_FAQ.md @@ -22,7 +22,7 @@ Microsoft M365 Copilot users can choose one of the following generative AI model - Claude Sonnet 4.6 - Claude Opus 4.6 -Foundry IQ component uses GPT-4.1-mini for chat and text-embedding-3-small for search. +Foundry IQ component uses GPT-5-mini for chat and text-embedding-3-small for search. The Fabric IQ component uses built-in AI capabilities provided by the Fabric Platform, such as Copilot for Power BI and Fabric. The Fabric IQ component source code does not explicitly use generative AI. The source code consists of PySpark Notebooks. The source code also includes Python Programs that can be used to generate configurable sample data. diff --git a/docs/DeploymentGuide.md b/docs/DeploymentGuide.md index 7f1f30f2..abb0cb42 100644 --- a/docs/DeploymentGuide.md +++ b/docs/DeploymentGuide.md @@ -251,7 +251,7 @@ Customize your deployment by setting `azd` environment variables before running | **Fabric Workspace** | `FABRIC_WORKSPACE_NAME` | Override the default Fabric workspace name | `Microsoft IQ - {suffix}` | `azd env set FABRIC_WORKSPACE_NAME "My Workspace"` | | | `FABRIC_WORKSPACE_ADMINISTRATORS` | Comma-separated additional workspace admins (UPNs and/or object IDs) | _(empty)_ | `azd env set FABRIC_WORKSPACE_ADMINISTRATORS "user@contoso.com,11111111-2222-3333-4444-555555555555"` | | **Microsoft Foundry** | `AZURE_AI_DEPLOYMENTS_LOCATION` | AI deployment region (**required**) | _(prompted)_ | `azd env set AZURE_AI_DEPLOYMENTS_LOCATION eastus` | -| | `AZURE_OPENAI_DEPLOYMENT_MODEL` | GPT model to deploy | `gpt-4.1-mini` | `azd env set AZURE_OPENAI_DEPLOYMENT_MODEL gpt-4o` | +| | `AZURE_OPENAI_DEPLOYMENT_MODEL` | GPT model to deploy | `gpt-5-mini` | `azd env set AZURE_OPENAI_DEPLOYMENT_MODEL gpt-4o` | | | `AZURE_OPENAI_MODEL_VERSION` | GPT model version | `2025-04-14` | `azd env set AZURE_OPENAI_MODEL_VERSION 2025-04-14` | | | `AZURE_OPENAI_DEPLOYMENT_MODEL_CAPACITY` | GPT capacity (tokens/min in thousands) | `150` | `azd env set AZURE_OPENAI_DEPLOYMENT_MODEL_CAPACITY 200` | | | `AZURE_OPENAI_MODEL_DEPLOYMENT_TYPE` | GPT deployment type | `GlobalStandard` | `azd env set AZURE_OPENAI_MODEL_DEPLOYMENT_TYPE Standard` | @@ -293,7 +293,7 @@ The deployment creates two integrated components in a single Azure Resource Grou - **[Azure AI Search](https://learn.microsoft.com/azure/search/search-what-is-azure-search)**: Document indexing with [vector search](https://learn.microsoft.com/azure/search/vector-search-overview) and [knowledge base](https://learn.microsoft.com/en-us/azure/search/agentic-retrieval-how-to-create-knowledge-base?tabs=rbac%2C2025-11-01-preview&pivots=csharp) - **[Azure Storage Account](https://learn.microsoft.com/azure/storage/common/storage-account-overview)**: [Blob storage](https://learn.microsoft.com/azure/storage/blobs/storage-blobs-overview) for documents with direct citations - **[Azure OpenAI Models](https://learn.microsoft.com/azure/ai-services/openai/)**: - - [`gpt-4.1-mini`](https://learn.microsoft.com/azure/ai-services/openai/concepts/models) - Chat completion (150K TPM) + - [`gpt-5-mini`](https://learn.microsoft.com/azure/ai-services/openai/concepts/models) - Chat completion (150K TPM) - [`text-embedding-3-small`](https://learn.microsoft.com/azure/ai-services/openai/concepts/models#embeddings) - Vector embeddings (80K TPM) - **[Chat Agent](https://learn.microsoft.com/azure/ai-studio/how-to/develop/create-agent)**: Knowledge Base-powered agent for document Q&A @@ -327,7 +327,7 @@ After successful deployment, you will have a single Azure Resource Group contain | **Fabric Capacity** (`{solution_suffix}-fabric-capacity` or your existing capacity) | Compute backing the Fabric workspace. Resumed automatically if paused. | | **User-assigned Managed Identity** | Identity used by deployment scripts and Foundry connections to call Azure AI Search and Storage without secrets. | | **Microsoft Foundry Hub & Project** | Container for AI agents, model deployments, knowledge bases, and connections. | -| **Azure OpenAI deployments** | Two model deployments inside the Foundry project: a chat completion model (default `gpt-4.1-mini`) and an embedding model (default `text-embedding-3-small`). | +| **Azure OpenAI deployments** | Two model deployments inside the Foundry project: a chat completion model (default `gpt-5-mini`) and an embedding model (default `text-embedding-3-small`). | | **Azure AI Search** | Vector + keyword search service. Backs the Foundry knowledge base; index name `{solution_suffix}-documents`. | | **Azure Storage Account** | Blob storage for source documents. Container `{solution_suffix}-documents` is uploaded to by `setup_knowledge_base` and referenced by AI Search citations. | | **Log Analytics workspace + Application Insights** | Diagnostic and monitoring sink for the Foundry project, AI Search, and the chat agent. Reused if `AZURE_EXISTING_LOG_ANALYTICS_WORKSPACE_ID` is set. | @@ -384,7 +384,7 @@ Sourced and named by [`install_microsoft_iq_solution.py`](../infra/scripts/insta Open [ai.azure.com](https://ai.azure.com) and sign in with the same account used for `azd auth login`. From the landing page, select your hub and then your project (the project name is stored as `AZURE_AI_PROJECT_NAME` in your `azd` environment; the endpoint is `AZURE_AI_AGENT_ENDPOINT`). Once inside the project, confirm: 1. **Knowledge Bases** → `{solution_suffix}-kb` exists, status is *Ready*, and it lists `{solution_suffix}-ks` as its source. -2. **Agents** → an agent named `ChatAgent` exists, its model matches `AZURE_AI_AGENT_MODEL_DEPLOYMENT_NAME` / `AZURE_CHAT_MODEL` (default `gpt-4.1-mini`), and the **Tools** panel shows the `{solution_suffix}-kb-mcp-connection` MCP tool attached. +2. **Agents** → an agent named `ChatAgent` exists, its model matches `AZURE_AI_AGENT_MODEL_DEPLOYMENT_NAME` / `AZURE_CHAT_MODEL` (default `gpt-5-mini`), and the **Tools** panel shows the `{solution_suffix}-kb-mcp-connection` MCP tool attached. 3. **Connections** → the AI Search, Blob Storage, and KB MCP connections are all *Connected*. > If `setup_agent` finished with a warning during deployment, this verification is the recommended way to check whether the agent was actually created. If `ChatAgent` is missing, simply re-run `azd up`. diff --git a/docs/foundry/DeploymentGuideFoundry.md b/docs/foundry/DeploymentGuideFoundry.md index 5c4bdc55..a9cdd572 100644 --- a/docs/foundry/DeploymentGuideFoundry.md +++ b/docs/foundry/DeploymentGuideFoundry.md @@ -41,7 +41,7 @@ In addition to the [common requirements](../DeploymentGuide.md#deployment-enviro ### Model availability -- **`gpt-4.1-mini`** (or your `AZURE_CHAT_MODEL` override) available in the target `AZURE_AI_DEPLOYMENTS_LOCATION` region. +- **`gpt-5-mini`** (or your `AZURE_CHAT_MODEL` override) available in the target `AZURE_AI_DEPLOYMENTS_LOCATION` region. - **`text-embedding-3-small`** (or your `AZURE_OPENAI_EMBEDDING_MODEL` override) available in the same region. > Check model availability at [Azure OpenAI model summary](https://learn.microsoft.com/azure/ai-services/openai/concepts/models#model-summary-table-and-region-availability). @@ -57,7 +57,7 @@ Phase 1 (Bicep) creates the following Foundry-related resources in a single reso | **[Azure AI Foundry Hub & Project](https://learn.microsoft.com/azure/ai-studio/concepts/ai-resources)** | Container for agents, model deployments, knowledge bases, and connections. | | **[Azure AI Search](https://learn.microsoft.com/azure/search/search-what-is-azure-search)** | Document indexing with vector + keyword hybrid search. | | **[Azure Storage Account](https://learn.microsoft.com/azure/storage/common/storage-account-overview)** | Blob storage for PDF documents with direct citation links. | -| **Azure OpenAI deployments** | `gpt-4.1-mini` for chat (150K TPM) and `text-embedding-3-small` for embeddings (80K TPM). | +| **Azure OpenAI deployments** | `gpt-5-mini` for chat (150K TPM) and `text-embedding-3-small` for embeddings (80K TPM). | | **User-assigned Managed Identity** | Secure authentication between Foundry, Search, and Storage — no secrets stored. | | **Log Analytics + Application Insights** | Diagnostics and monitoring for the Foundry project and AI Search. | | **Foundry connections** | Project connections wiring Foundry to AI Search, Blob Storage, and the Knowledge Base MCP endpoint. | @@ -151,7 +151,7 @@ The `ChatAgent` is configured with: | Setting | Value | |---|---| -| **Model** | `gpt-4.1-mini` (override with `AZURE_CHAT_MODEL` or `AZURE_AI_AGENT_MODEL_DEPLOYMENT_NAME`) | +| **Model** | `gpt-5-mini` (override with `AZURE_CHAT_MODEL` or `AZURE_AI_AGENT_MODEL_DEPLOYMENT_NAME`) | | **Tool** | Knowledge Base MCP connection for document retrieval | | **Capabilities** | Document Q&A, semantic search, citation generation, chart creation | @@ -177,7 +177,7 @@ Foundry-specific variables set via `azd env set ` before `azd up`: | Variable | Purpose | Default | |---|---|---| | `AZURE_AI_DEPLOYMENTS_LOCATION` | Region for AI model deployments (**required**) | _(prompted)_ | -| `AZURE_CHAT_MODEL` | Chat completion model name | `gpt-4.1-mini` | +| `AZURE_CHAT_MODEL` | Chat completion model name | `gpt-5-mini` | | `AZURE_OPENAI_EMBEDDING_MODEL` | Embedding model name | `text-embedding-3-small` | | `AZURE_AI_SEARCH_INDEX` | Search index name | `{solution_suffix}-documents` | | `KB_MCP_CONNECTION_NAME` | MCP connection name | `{solution_suffix}-kb-mcp-connection` | @@ -223,7 +223,7 @@ This sends a sample question to the deployed agent and prints the response with **Symptom**: Bicep deployment fails with a quota or capacity error for OpenAI model deployments. -**Why**: The target region may not have sufficient quota for `gpt-4.1-mini` (150K TPM) or `text-embedding-3-small` (80K TPM). +**Why**: The target region may not have sufficient quota for `gpt-5-mini` (150K TPM) or `text-embedding-3-small` (80K TPM). **Fix**: Either request a quota increase, or deploy to a different region: ```bash diff --git a/infra/deploy_ai_foundry.bicep b/infra/deploy_ai_foundry.bicep index ecc1fe54..4d39f22e 100644 --- a/infra/deploy_ai_foundry.bicep +++ b/infra/deploy_ai_foundry.bicep @@ -189,6 +189,7 @@ resource aiServicesDeployments 'Microsoft.CognitiveServices/accounts/deployments model: { format: 'OpenAI' name: aiModeldeployment.model + version: aiModeldeployment.?version } raiPolicyName: aiModeldeployment.raiPolicyName } diff --git a/infra/deploy_foundry_role_assignment.bicep b/infra/deploy_foundry_role_assignment.bicep index 95e812e2..1a580ab3 100644 --- a/infra/deploy_foundry_role_assignment.bicep +++ b/infra/deploy_foundry_role_assignment.bicep @@ -78,6 +78,7 @@ resource aiServicesDeployments 'Microsoft.CognitiveServices/accounts/deployments model: { format: 'OpenAI' name: aiModeldeployment.model + version: aiModeldeployment.?version } raiPolicyName: aiModeldeployment.raiPolicyName } diff --git a/infra/main.bicep b/infra/main.bicep index 11b9d2ed..14b02420 100644 --- a/infra/main.bicep +++ b/infra/main.bicep @@ -102,10 +102,10 @@ param aiDeploymentsLocation string param deploymentType string = 'GlobalStandard' @description('Name of the GPT model to deploy') -param gptModelName string = 'gpt-4.1-mini' +param gptModelName string = 'gpt-5-mini' @description('Version of the GPT model to deploy') -param gptModelVersion string = '2025-04-14' +param gptModelVersion string = '2025-08-07' @minValue(10) @description('Capacity of the GPT deployment') diff --git a/infra/main.parameters.json b/infra/main.parameters.json index 1f43304b..1ee3a7ab 100644 --- a/infra/main.parameters.json +++ b/infra/main.parameters.json @@ -33,16 +33,16 @@ "value": "${AZURE_SEARCH_SERVICE_LOCATION=}" }, "aiDeploymentsLocation": { - "value": "${AZURE_AI_DEPLOYMENTS_LOCATION=westus}" + "value": "${AZURE_AI_DEPLOYMENTS_LOCATION=}" }, "deploymentType": { "value": "${AZURE_OPENAI_MODEL_DEPLOYMENT_TYPE=GlobalStandard}" }, "gptModelName": { - "value": "${AZURE_OPENAI_DEPLOYMENT_MODEL=gpt-4.1-mini}" + "value": "${AZURE_OPENAI_DEPLOYMENT_MODEL=gpt-5-mini}" }, "gptModelVersion": { - "value": "${AZURE_OPENAI_MODEL_VERSION=2025-04-14}" + "value": "${AZURE_OPENAI_MODEL_VERSION=2025-08-07}" }, "gptDeploymentCapacity": { "value": "${AZURE_OPENAI_DEPLOYMENT_MODEL_CAPACITY=150}" diff --git a/infra/scripts/install_microsoft_iq_solution.py b/infra/scripts/install_microsoft_iq_solution.py index b92671a4..438d3eb8 100755 --- a/infra/scripts/install_microsoft_iq_solution.py +++ b/infra/scripts/install_microsoft_iq_solution.py @@ -54,11 +54,11 @@ AZURE_OPENAI_EMBEDDING_MODEL (optional) Embedding model deployment name. Defaults to text-embedding-3-small. AZURE_CHAT_MODEL (optional) Chat model deployment name. - Defaults to gpt-4.1-mini. + Defaults to gpt-5-mini. AZURE_AI_SEARCH_INDEX (optional) Search index name. Defaults to -documents. AZURE_AI_AGENT_MODEL_DEPLOYMENT_NAME (optional) Chat model deployment name for the agent. - Falls back to AZURE_CHAT_MODEL, then gpt-4.1-mini. + Falls back to AZURE_CHAT_MODEL, then gpt-5-mini. KB_MCP_CONNECTION_NAME (optional) Project connection name for the Knowledge Base MCP tool. Defaults to -kb-mcp-connection. """ @@ -159,7 +159,7 @@ def main() -> None: or agent_endpoint.split("/api/projects")[0] ) embedding_model = os.getenv("AZURE_OPENAI_EMBEDDING_MODEL", "text-embedding-3-small") - chat_model = os.getenv("AZURE_CHAT_MODEL", "gpt-4.1-mini") + chat_model = os.getenv("AZURE_CHAT_MODEL", "gpt-5-mini") search_index_name = os.getenv("AZURE_AI_SEARCH_INDEX", f"{solution_suffix}-documents") blob_container_name = f"{solution_suffix}-documents" knowledge_base_name = f"{solution_suffix}-kb" @@ -168,7 +168,7 @@ def main() -> None: # Agent model selection agent_model = ( os.getenv("AZURE_CHAT_MODEL") - or os.getenv("AZURE_AI_AGENT_MODEL_DEPLOYMENT_NAME", "gpt-4.1-mini") + or os.getenv("AZURE_AI_AGENT_MODEL_DEPLOYMENT_NAME", "gpt-5-mini") ) kb_mcp_connection_name = os.getenv("KB_MCP_CONNECTION_NAME", f"{solution_suffix}-kb-mcp-connection") From 95a151cb95eb087221539431d9fabe3e7492d02e Mon Sep 17 00:00:00 2001 From: Saswato-Microsoft Date: Wed, 8 Jul 2026 12:53:26 +0530 Subject: [PATCH 8/8] fix: update OpenAI model references from gpt-4.1-mini to gpt-5-mini in main.bicep --- infra/main.bicep | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/infra/main.bicep b/infra/main.bicep index 14b02420..01b8c559 100644 --- a/infra/main.bicep +++ b/infra/main.bicep @@ -85,7 +85,7 @@ param searchServiceLocation string = resourceGroup().location azd: { type: 'location' usageName: [ - 'OpenAI.GlobalStandard.gpt4.1-mini,100' + 'OpenAI.GlobalStandard.gpt-5-mini,150' 'OpenAI.GlobalStandard.text-embedding-3-small,80' ] } @@ -238,7 +238,7 @@ output AZURE_FABRIC_CAPACITY_ADMINISTRATORS array = fabricTotalAdminMembers // AI Foundry Outputs -@description('GPT model deployment name (e.g., gpt-4o-mini)') +@description('GPT model deployment name (e.g., gpt-5-mini)') output AZURE_OPENAI_DEPLOYMENT_MODEL string = gptModelName @description('Azure OpenAI service endpoint URL')