diff --git a/src/System Application/Test/DisabledTests/EntityTextTests.json b/src/System Application/Test/DisabledTests/EntityTextTests.json new file mode 100644 index 0000000000..d715e6c8c7 --- /dev/null +++ b/src/System Application/Test/DisabledTests/EntityTextTests.json @@ -0,0 +1,14 @@ +[ + { + "bug": "", + "codeunitId": 134640, + "codeunitName": "Mkt Text Accuracy AIT", + "method": "*" + }, + { + "bug": "", + "codeunitId": 134641, + "codeunitName": "Mkt Text RedTeam AIT", + "method": "*" + } +] \ No newline at end of file diff --git a/src/System Application/Test/EntityText/app.json b/src/System Application/Test/EntityText/app.json new file mode 100644 index 0000000000..8cdeabc428 --- /dev/null +++ b/src/System Application/Test/EntityText/app.json @@ -0,0 +1,29 @@ +{ + "id": "fb54748b-71f1-4a4a-9dc8-8f1d32a60c8d", + "name": "Entity Text Test", + "publisher": "Microsoft", + "brief": "", + "description": "Tests for Entity Text", + "version": "25.0.0.0", + "privacyStatement": "https://go.microsoft.com/fwlink/?LinkId=724011", + "EULA": "https://go.microsoft.com/fwlink/?LinkId=724011", + "help": "https://go.microsoft.com/fwlink/?LinkId=724011", + "url": "https://go.microsoft.com/fwlink/?LinkId=724011", + "logo": "", + "dependencies": [ + { + "id": "2156302a-872f-4568-be0b-60968696f0d5", + "name": "AI Test Toolkit", + "publisher": "Microsoft", + "version": "25.0.0.0" + } + ], + "platform": "25.0.0.0", + "target": "OnPrem", + "idRanges": [ + { + "from": 134640, + "to": 134641 + } + ] +} \ No newline at end of file diff --git a/src/System Application/Test/EntityText/src/MktTextAccuracyAIT.Codeunit.al b/src/System Application/Test/EntityText/src/MktTextAccuracyAIT.Codeunit.al new file mode 100644 index 0000000000..fa50bbe43a --- /dev/null +++ b/src/System Application/Test/EntityText/src/MktTextAccuracyAIT.Codeunit.al @@ -0,0 +1,240 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace System.Test.EntityText; + +using System.TestTools.AITestToolkit; +using System.Text; + +codeunit 134640 "Mkt Text Accuracy AIT" +{ + Subtype = Test; + + [Test] + procedure TaglineParagraphInspiring() + var + AITestContext: Codeunit "AIT Test Context"; + EntityTextCod: Codeunit "Entity Text"; + Facts: Dictionary of [Text, Text]; + Format: Enum "Entity Text Format"; + Category: Text; + InputPrompt: Text; + Response: Text; + begin + InputPrompt := AITestContext.GetInput().ValueAsText(); + Facts := LineInputToDictionary(InputPrompt); + Format := Enum::"Entity Text Format"::TaglineParagraph; + Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Inspiring, Format, Enum::"Entity Text Emphasis"::None); + + AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts, Category), Category, Response, Enum::"Entity Text Tone"::Inspiring, Format)); + end; + + [Test] + procedure TaglineParagraphFormal() + var + AITestContext: Codeunit "AIT Test Context"; + EntityTextCod: Codeunit "Entity Text"; + Facts: Dictionary of [Text, Text]; + Format: Enum "Entity Text Format"; + Category: Text; + InputPrompt: Text; + Response: Text; + begin + InputPrompt := AITestContext.GetInput().ValueAsText(); + Facts := LineInputToDictionary(InputPrompt); + Format := Enum::"Entity Text Format"::TaglineParagraph; + Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Formal, Format, Enum::"Entity Text Emphasis"::None); + + AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts, Category), Category, Response, Enum::"Entity Text Tone"::Formal, Format)); + end; + + [Test] + procedure TaglineParagraphCreative() + var + AITestContext: Codeunit "AIT Test Context"; + EntityTextCod: Codeunit "Entity Text"; + Facts: Dictionary of [Text, Text]; + Format: Enum "Entity Text Format"; + Category: Text; + InputPrompt: Text; + Response: Text; + begin + InputPrompt := AITestContext.GetInput().ValueAsText(); + Facts := LineInputToDictionary(InputPrompt); + Format := Enum::"Entity Text Format"::TaglineParagraph; + Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Creative, Format, Enum::"Entity Text Emphasis"::None); + AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts, Category), Category, Response, Enum::"Entity Text Tone"::Creative, Format)); + end; + + [Test] + procedure TaglineInspiring() + var + AITestContext: Codeunit "AIT Test Context"; + EntityTextCod: Codeunit "Entity Text"; + Facts: Dictionary of [Text, Text]; + Format: Enum "Entity Text Format"; + Category: Text; + InputPrompt: Text; + Response: Text; + begin + InputPrompt := AITestContext.GetInput().ValueAsText(); + Facts := LineInputToDictionary(InputPrompt); + Format := Enum::"Entity Text Format"::Tagline; + Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Inspiring, Format, Enum::"Entity Text Emphasis"::None); + AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts, Category), Category, Response, Enum::"Entity Text Tone"::Inspiring, Format)); + end; + + [Test] + procedure TaglineFormal() + var + AITestContext: Codeunit "AIT Test Context"; + EntityTextCod: Codeunit "Entity Text"; + Facts: Dictionary of [Text, Text]; + Format: Enum "Entity Text Format"; + Category: Text; + InputPrompt: Text; + Response: Text; + begin + InputPrompt := AITestContext.GetInput().ValueAsText(); + Facts := LineInputToDictionary(InputPrompt); + Format := Enum::"Entity Text Format"::Tagline; + Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Formal, Format, Enum::"Entity Text Emphasis"::None); + AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts, Category), Category, Response, Enum::"Entity Text Tone"::Formal, Format)); + end; + + [Test] + procedure TaglineCreative() + var + AITestContext: Codeunit "AIT Test Context"; + EntityTextCod: Codeunit "Entity Text"; + Facts: Dictionary of [Text, Text]; + Format: Enum "Entity Text Format"; + Category: Text; + InputPrompt: Text; + Response: Text; + begin + InputPrompt := AITestContext.GetInput().ValueAsText(); + Facts := LineInputToDictionary(InputPrompt); + Format := Enum::"Entity Text Format"::Tagline; + Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Creative, Format, Enum::"Entity Text Emphasis"::None); + AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts, Category), Category, Response, Enum::"Entity Text Tone"::Creative, Format)); + end; + + [Test] + procedure BriefInspiring() + var + AITestContext: Codeunit "AIT Test Context"; + EntityTextCod: Codeunit "Entity Text"; + Facts: Dictionary of [Text, Text]; + Format: Enum "Entity Text Format"; + Category: Text; + InputPrompt: Text; + Response: Text; + begin + InputPrompt := AITestContext.GetInput().ValueAsText(); + Facts := LineInputToDictionary(InputPrompt); + Format := Enum::"Entity Text Format"::Brief; + Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Inspiring, Format, Enum::"Entity Text Emphasis"::None); + AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts, Category), Category, Response, Enum::"Entity Text Tone"::Inspiring, Format)); + end; + + [Test] + procedure BriefFormal() + var + AITestContext: Codeunit "AIT Test Context"; + EntityTextCod: Codeunit "Entity Text"; + Facts: Dictionary of [Text, Text]; + Format: Enum "Entity Text Format"; + Category: Text; + InputPrompt: Text; + Response: Text; + begin + InputPrompt := AITestContext.GetInput().ValueAsText(); + Facts := LineInputToDictionary(InputPrompt); + Format := Enum::"Entity Text Format"::Brief; + Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Formal, Format, Enum::"Entity Text Emphasis"::None); + AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts, Category), Category, Response, Enum::"Entity Text Tone"::Formal, Format)); + end; + + [Test] + procedure BriefCreative() + var + AITestContext: Codeunit "AIT Test Context"; + EntityTextCod: Codeunit "Entity Text"; + Facts: Dictionary of [Text, Text]; + Format: Enum "Entity Text Format"; + Category: Text; + InputPrompt: Text; + Response: Text; + begin + InputPrompt := AITestContext.GetInput().ValueAsText(); + Facts := LineInputToDictionary(InputPrompt); + Format := Enum::"Entity Text Format"::Brief; + Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Creative, Format, Enum::"Entity Text Emphasis"::None); + AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts, Category), Category, Response, Enum::"Entity Text Tone"::Creative, Format)); + end; + + local procedure BuildFactsText(var Facts: Dictionary of [Text, Text]; var Category: Text): Text + var + FactTemplateTxt: Label '- %1: %2%3', Locked = true; + FactKey: Text; + FactValue: Text; + FactsList: Text; + NewLineChar: Char; + MaxFacts: Integer; + TotalFacts: Integer; + MaxFactLength: Integer; + begin + NewLineChar := 10; + TotalFacts := Facts.Count(); + + MaxFacts := 20; + MaxFactLength := 250; + + TotalFacts := 0; + foreach FactKey in Facts.Keys() do begin + if TotalFacts < MaxFacts then begin + Facts.Get(FactKey, FactValue); + FactKey := FactKey.Replace(NewLineChar, '').Trim(); + FactValue := FactValue.Replace(NewLineChar, '').Trim(); + if (Category = '') and FactKey.Contains('Category') then + Category := FactValue + else + FactsList += StrSubstNo(FactTemplateTxt, CopyStr(FactKey, 1, MaxFactLength), CopyStr(FactValue, 1, MaxFactLength), NewLineChar); + end; + TotalFacts += 1; + end; + exit(FactsList); + end; + + local procedure LineInputToDictionary(Input: Text): Dictionary of [Text, Text]; + var + Attributes: Dictionary of [Text, Text]; + InputJson: JsonObject; + AttributeValueToken: JsonToken; + AttributeKey: Text; + begin + InputJson.ReadFrom(Input); + + foreach AttributeKey in InputJson.Keys() do begin + InputJson.Get(AttributeKey, AttributeValueToken); + Attributes.Add(AttributeKey, AttributeValueToken.AsValue().AsText()); + end; + exit(Attributes); + end; + + local procedure PrepareOutput(Facts: Text; Category: Text; Response: Text; Tone: Enum "Entity Text Tone"; Format: Enum "Entity Text Format"): Text; + var + Context: Text; + FormatLbl: Label '{"question": "METAPROMPT: %1", "answer": "%2", "context": "%3", "ground_truth": "%4", "tone": "%5", "format" : "%6"}', Comment = '%1= Input Prompt, %2= Response Prompt, %3= Context, %4= Ground Truth, %5= Tone, %6= Format'; + EncodedNewlineTok: Label '
', Locked = true; + NewLineChar: Char; + begin + NewLineChar := 10; + Context := 'Here are some facts about the item:

' + Facts.Replace(NewLineChar, EncodedNewlineTok) + '
This is in the category of: ' + Category.Replace(NewLineChar, EncodedNewlineTok); + exit(StrSubstNo(FormatLbl, Facts.Replace(NewLineChar, EncodedNewlineTok), Response.Replace(NewLineChar, EncodedNewlineTok), Context, '', Tone.Names.Get(Tone.Ordinals.IndexOf(Tone.AsInteger())), Format.Names.Get(Format.Ordinals.IndexOf(Format.AsInteger())))); + end; + +} \ No newline at end of file diff --git a/src/System Application/Test/EntityText/src/MktTextRedTeamAIT.Codeunit.al b/src/System Application/Test/EntityText/src/MktTextRedTeamAIT.Codeunit.al new file mode 100644 index 0000000000..4c211adb48 --- /dev/null +++ b/src/System Application/Test/EntityText/src/MktTextRedTeamAIT.Codeunit.al @@ -0,0 +1,156 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ + +namespace System.Test.EntityText; + +using System.TestTools.AITestToolkit; +using System.Text; + +codeunit 134641 "Mkt Text RedTeam AIT" +{ + Subtype = Test; + + [Test] + procedure TaglineTest() + var + AITestContext: Codeunit "AIT Test Context"; + EntityTextCod: Codeunit "Entity Text"; + Facts: Dictionary of [Text, Text]; + Format: Enum "Entity Text Format"; + InputJson: JsonObject; + InputToken: JsonToken; + InputPrompt: Text; + Response: Text; + begin + InputJson.ReadFrom(AITestContext.GetInput().ValueAsText()); + InputJson.Get('inputPrompt', InputToken); + InputPrompt := InputToken.AsValue().AsText(); + + Format := Enum::"Entity Text Format"::Tagline; + AddFacts(Facts, InputPrompt, Format); + Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Inspiring, Format, Enum::"Entity Text Emphasis"::None); + AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts), Response, Enum::"Entity Text Tone"::Inspiring, Format)); + end; + + [Test] + procedure TaglineParagraphTest() + var + AITestContext: Codeunit "AIT Test Context"; + EntityTextCod: Codeunit "Entity Text"; + Facts: Dictionary of [Text, Text]; + Format: Enum "Entity Text Format"; + InputJson: JsonObject; + InputToken: JsonToken; + InputPrompt: Text; + Response: Text; + begin + InputJson.ReadFrom(AITestContext.GetInput().ValueAsText()); + InputJson.Get('inputPrompt', InputToken); + InputPrompt := InputToken.AsValue().AsText(); + + Format := Enum::"Entity Text Format"::TaglineParagraph; + AddFacts(Facts, InputPrompt, Format); + Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Inspiring, Format, Enum::"Entity Text Emphasis"::None); + AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts), Response, Enum::"Entity Text Tone"::Inspiring, Format)); + end; + + [Test] + procedure ParagraphTest() + var + AITestContext: Codeunit "AIT Test Context"; + EntityTextCod: Codeunit "Entity Text"; + Facts: Dictionary of [Text, Text]; + Format: Enum "Entity Text Format"; + InputJson: JsonObject; + InputToken: JsonToken; + InputPrompt: Text; + Response: Text; + begin + InputJson.ReadFrom(AITestContext.GetInput().ValueAsText()); + InputJson.Get('inputPrompt', InputToken); + InputPrompt := InputToken.AsValue().AsText(); + + Format := Enum::"Entity Text Format"::Paragraph; + AddFacts(Facts, InputPrompt, Format); + Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Inspiring, Format, Enum::"Entity Text Emphasis"::None); + AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts), Response, Enum::"Entity Text Tone"::Inspiring, Format)); + end; + + [Test] + procedure BriefTest() + var + AITestContext: Codeunit "AIT Test Context"; + EntityTextCod: Codeunit "Entity Text"; + Facts: Dictionary of [Text, Text]; + Format: Enum "Entity Text Format"; + InputJson: JsonObject; + InputToken: JsonToken; + InputPrompt: Text; + Response: Text; + begin + InputJson.ReadFrom(AITestContext.GetInput().ValueAsText()); + InputJson.Get('inputPrompt', InputToken); + InputPrompt := InputToken.AsValue().AsText(); + + Format := Enum::"Entity Text Format"::Brief; + AddFacts(Facts, InputPrompt, Format); + Response := EntityTextCod.GenerateText(Facts, Enum::"Entity Text Tone"::Inspiring, Format, Enum::"Entity Text Emphasis"::None); + AITestContext.SetTestOutput(PrepareOutput(BuildFactsText(Facts), Response, Enum::"Entity Text Tone"::Inspiring, Format)); + end; + + local procedure AddFacts(var Facts: Dictionary of [Text, Text]; InputPrompt: Text; Format: Enum "Entity Text Format") + begin + Facts.Add('Name', InputPrompt); + Facts.Add(InputPrompt, InputPrompt); + if Format <> Enum::"Entity Text Format"::Tagline then begin + Facts.Add('Fact', InputPrompt); + Facts.Add('No', InputPrompt); + end; + end; + + local procedure BuildFactsText(var Facts: Dictionary of [Text, Text]): Text + var + FactTemplateTxt: Label '- %1: %2%3', Locked = true; + FactKey: Text; + FactValue: Text; + FactsList: Text; + NewLineChar: Char; + MaxFacts: Integer; + TotalFacts: Integer; + MaxFactLength: Integer; + begin + NewLineChar := 10; + TotalFacts := Facts.Count(); + + MaxFacts := 20; + MaxFactLength := 250; + + TotalFacts := 0; + foreach FactKey in Facts.Keys() do begin + if TotalFacts < MaxFacts then begin + Facts.Get(FactKey, FactValue); + FactKey := FactKey.Replace(NewLineChar, '').Trim(); + FactValue := FactValue.Replace(NewLineChar, '').Trim(); + FactsList += StrSubstNo(FactTemplateTxt, CopyStr(FactKey, 1, MaxFactLength), CopyStr(FactValue, 1, MaxFactLength), NewLineChar); + end; + TotalFacts += 1; + end; + exit(FactsList); + end; + + local procedure PrepareOutput(Facts: Text; Response: Text; Tone: Enum "Entity Text Tone"; Format: Enum "Entity Text Format"): Text; + var + Context: Text; + FormatLbl: Label '{"question": "METAPROMPT %1", "answer": "%2", "context": "%3", "ground_truth": "%4", "tone": "%5", "format" : "%6"}', Comment = '%1= Input Prompt, %2= Response Prompt, %3= Context, %4= Ground Truth, %5= Tone, %6= Format'; + EncodedNewlineTok: Label '
', Locked = true; + NewLineChar: Char; + begin + NewLineChar := 10; + Context := 'Here are some facts about the item:

' + Facts.Replace(NewLineChar, EncodedNewlineTok); + exit(StrSubstNo(FormatLbl, Facts.Replace(NewLineChar, EncodedNewlineTok), Response.Replace(NewLineChar, EncodedNewlineTok), Context, '', Tone.Names.Get(Tone.Ordinals.IndexOf(Tone.AsInteger())), Format.Names.Get(Format.Ordinals.IndexOf(Format.AsInteger())))); + end; + + +} \ No newline at end of file diff --git a/src/System Application/Test/app.json b/src/System Application/Test/app.json index 6aeaab1879..dda717e1f9 100644 --- a/src/System Application/Test/app.json +++ b/src/System Application/Test/app.json @@ -1,72 +1,76 @@ { - "id": "0d60b215-6ee1-4789-8e53-866cfa50c23c", - "name": "System Application Test", - "publisher": "Microsoft", - "brief": "Test suite for the System Application.", - "description": "Contains an expansive set tests for the System Application.", - "version": "25.0.0.0", - "privacyStatement": "https://go.microsoft.com/fwlink/?LinkId=724009", - "EULA": "https://go.microsoft.com/fwlink/?linkid=2009120", - "help": "https://go.microsoft.com/fwlink/?linkid=2131960", - "url": "https://go.microsoft.com/fwlink/?LinkId=724011", - "logo": "ExtensionLogo.png", - "contextSensitiveHelpUrl": "https://learn.microsoft.com/dynamics365/business-central/dev-itpro/developer/devenv-testing-application/", - "dependencies": [ - { - "id": "63ca2fa4-4f03-4f2b-a480-172fef340d3f", - "name": "System Application", - "publisher": "Microsoft", - "version": "25.0.0.0" - }, - { - "id": "9856ae4f-d1a7-46ef-89bb-6ef056398228", - "name": "System Application Test Library", - "publisher": "Microsoft", - "version": "25.0.0.0" - }, - { - "id": "dd0be2ea-f733-4d65-bb34-a28f4624fb14", - "name": "Library Assert", - "publisher": "Microsoft", - "version": "25.0.0.0" - }, - { - "id": "e7320ebb-08b3-4406-b1ec-b4927d3e280b", - "name": "Any", - "publisher": "Microsoft", - "version": "25.0.0.0" - }, - { - "id": "5095f467-0a01-4b99-99d1-9ff1237d286f", - "name": "Library Variable Storage", - "publisher": "Microsoft", - "version": "25.0.0.0" - }, - { - "id": "40860557-a18d-42ad-aecb-22b7dd80dc80", - "name": "Permissions Mock", - "publisher": "Microsoft", - "version": "25.0.0.0" - } - ], - "screenshots": [ - - ], - "platform": "25.0.0.0", - "features": [ - "GenerateCaptions", - "TranslationFile" - ], - "resourceExposurePolicy": { - "allowDebugging": true, - "allowDownloadingSource": true, - "includeSourceInSymbolFile": true - }, - "target": "OnPrem", - "idRanges": [ - { - "from": 130000, - "to": 139999 - } - ] -} + "id": "0d60b215-6ee1-4789-8e53-866cfa50c23c", + "name": "System Application Test", + "publisher": "Microsoft", + "brief": "Test suite for the System Application.", + "description": "Contains an expansive set tests for the System Application.", + "version": "25.0.0.0", + "privacyStatement": "https://go.microsoft.com/fwlink/?LinkId=724009", + "EULA": "https://go.microsoft.com/fwlink/?linkid=2009120", + "help": "https://go.microsoft.com/fwlink/?linkid=2131960", + "url": "https://go.microsoft.com/fwlink/?LinkId=724011", + "logo": "ExtensionLogo.png", + "contextSensitiveHelpUrl": "https://learn.microsoft.com/dynamics365/business-central/dev-itpro/developer/devenv-testing-application/", + "dependencies": [ + { + "id": "63ca2fa4-4f03-4f2b-a480-172fef340d3f", + "name": "System Application", + "publisher": "Microsoft", + "version": "25.0.0.0" + }, + { + "id": "9856ae4f-d1a7-46ef-89bb-6ef056398228", + "name": "System Application Test Library", + "publisher": "Microsoft", + "version": "25.0.0.0" + }, + { + "id": "dd0be2ea-f733-4d65-bb34-a28f4624fb14", + "name": "Library Assert", + "publisher": "Microsoft", + "version": "25.0.0.0" + }, + { + "id": "e7320ebb-08b3-4406-b1ec-b4927d3e280b", + "name": "Any", + "publisher": "Microsoft", + "version": "25.0.0.0" + }, + { + "id": "5095f467-0a01-4b99-99d1-9ff1237d286f", + "name": "Library Variable Storage", + "publisher": "Microsoft", + "version": "25.0.0.0" + }, + { + "id": "40860557-a18d-42ad-aecb-22b7dd80dc80", + "name": "Permissions Mock", + "publisher": "Microsoft", + "version": "25.0.0.0" + }, + { + "id": "2156302a-872f-4568-be0b-60968696f0d5", + "name": "AI Test Toolkit", + "publisher": "Microsoft", + "version": "25.0.0.0" + } + ], + "screenshots": [], + "platform": "25.0.0.0", + "features": [ + "GenerateCaptions", + "TranslationFile" + ], + "resourceExposurePolicy": { + "allowDebugging": true, + "allowDownloadingSource": true, + "includeSourceInSymbolFile": true + }, + "target": "OnPrem", + "idRanges": [ + { + "from": 130000, + "to": 139999 + } + ] +} \ No newline at end of file