Skip to content

Commit 07a817b

Browse files
authored
Add x-ms-ai-sensitivity extension (#2750)
1 parent 1d00757 commit 07a817b

File tree

9 files changed

+493
-2
lines changed

9 files changed

+493
-2
lines changed

src/libraries/Microsoft.PowerFx.Connectors/ConnectorConstants.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ namespace Microsoft.PowerFx.Connectors
44
{
55
public static class Constants
66
{
7+
public const string XMsAiSensitivity = "x-ms-ai-sensitivity";
78
public const string XMsBodyName = "x-bodyName";
89
public const string XMsCapabilities = "x-ms-capabilities";
910
public const string XMsDynamicList = "x-ms-dynamic-list";
@@ -17,8 +18,8 @@ public static class Constants
1718
public const string XMsKeyOrder = "x-ms-keyOrder";
1819
public const string XMsKeyType = "x-ms-keyType";
1920
public const string XMsMediaKind = "x-ms-media-kind";
20-
public const string XMsNotificationUrl = "x-ms-notification-url";
2121
public const string XMsNotificationContent = "x-ms-notification-content";
22+
public const string XMsNotificationUrl = "x-ms-notification-url";
2223
public const string XMsPageable = "x-ms-pageable";
2324
public const string XMsPermission = "x-ms-permission";
2425
public const string XMsRelationships = "x-ms-relationships";

src/libraries/Microsoft.PowerFx.Connectors/OpenApiExtensions.cs

+11
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,8 @@ enumName is OpenApiString enumNameStr
369369

370370
internal static bool? GetNotificationUrl(this ISwaggerExtensions schema) => schema.Extensions.TryGetValue(XMsNotificationUrl, out IOpenApiExtension openApiExt) && openApiExt is OpenApiBoolean openApiBool ? openApiBool.Value : null;
371371

372+
internal static string GetAiSensitivity(this ISwaggerExtensions schema) => schema.Extensions.TryGetValue(XMsAiSensitivity, out IOpenApiExtension openApiExt) && openApiExt is OpenApiString openApiStr ? openApiStr.Value : null;
373+
372374
internal static (bool IsPresent, string Value) GetString(this IDictionary<string, IOpenApiAny> apiObj, string str) => apiObj.TryGetValue(str, out IOpenApiAny openApiAny) && openApiAny is OpenApiString openApiStr ? (true, openApiStr.Value) : (false, null);
373375

374376
internal static void WhenPresent(this IDictionary<string, IOpenApiAny> apiObj, string propName, Action<string> action)
@@ -932,6 +934,15 @@ public static Visibility ToVisibility(this string visibility)
932934
: Visibility.Unknown;
933935
}
934936

937+
public static AiSensitivity ToAiSensitivity(this string aiSensitivity)
938+
{
939+
return string.IsNullOrEmpty(aiSensitivity)
940+
? AiSensitivity.None
941+
: Enum.TryParse(aiSensitivity, true, out AiSensitivity ais)
942+
? ais
943+
: AiSensitivity.Unknown;
944+
}
945+
935946
public static MediaKind ToMediaKind(this string mediaKind)
936947
{
937948
return string.IsNullOrEmpty(mediaKind)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT license.
3+
4+
namespace Microsoft.PowerFx.Connectors
5+
{
6+
public enum AiSensitivity : int
7+
{
8+
// "x-ms-ai-sensitivity" is not corresponding to any valid value (normally, only "low", "high")
9+
Unknown = -1,
10+
11+
// "x-ms-ai-sensitivity" is not defined
12+
None = 0,
13+
14+
// "x-ms-ai-sensitivity" is "low"
15+
Low,
16+
17+
// "x-ms-ai-sensitivity" is "high"
18+
High
19+
}
20+
}

src/libraries/Microsoft.PowerFx.Connectors/Public/ConnectorSchema.cs

+2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ public class ConnectorSchema : SupportsConnectorErrors
3131

3232
public bool? NotificationUrl => ConnectorType.NotificationUrl;
3333

34+
public AiSensitivity AiSensitivity => ConnectorType.AiSensitivity;
35+
3436
internal ConnectorSchema(ISwaggerParameter openApiParameter, ISwaggerExtensions bodyExtensions, bool useHiddenTypes, ConnectorCompatibility compatibility)
3537
{
3638
Schema = openApiParameter.Schema;

src/libraries/Microsoft.PowerFx.Connectors/Public/ConnectorType.cs

+4
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ public class ConnectorType : SupportsConnectorErrors
7676
// Supports x-ms-notification-url
7777
public bool? NotificationUrl { get; }
7878

79+
// Supports x-ms-ai-sensitivity
80+
public AiSensitivity AiSensitivity { get; }
81+
7982
internal RecordType HiddenRecordType { get; }
8083

8184
// Supports x-ms-dynamic-values or -list locally
@@ -128,6 +131,7 @@ internal ConnectorType(ISwaggerSchema schema, ISwaggerParameter openApiParameter
128131
Binary = schema.Format == "binary" || schema.Format == "no_format";
129132
MediaKind = openApiParameter?.GetMediaKind().ToMediaKind() ?? (Binary ? MediaKind.File : MediaKind.NotBinary);
130133
NotificationUrl = openApiParameter?.GetNotificationUrl();
134+
AiSensitivity = openApiParameter?.GetAiSensitivity().ToAiSensitivity() ?? AiSensitivity.Unknown;
131135

132136
if (schema != null)
133137
{

src/tests/Microsoft.PowerFx.Connectors.Tests.Shared/Microsoft.PowerFx.Connectors.Tests.Shared.projitems

+1
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@
297297
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Swagger\PetStore.json" />
298298
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Swagger\PowerAppsForMakers.json" />
299299
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Swagger\PowerPlatformForAdmins.json" />
300+
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Swagger\SendMail.json" />
300301
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Swagger\SQL Server.json" />
301302
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Swagger\SalesForce.json" />
302303
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Swagger\ServiceNow.json" />

src/tests/Microsoft.PowerFx.Connectors.Tests.Shared/PowerPlatformConnectorTests.cs

+31-1
Original file line numberDiff line numberDiff line change
@@ -1791,7 +1791,7 @@ public void ExposeInternalParamsWithoutDefaultValueTest(ConnectorCompatibility c
17911791
{
17921792
Compatibility = compatibility,
17931793
AllowUnsupportedFunctions = true,
1794-
IncludeInternalFunctions = true,
1794+
IncludeInternalFunctions = true,
17951795
IncludeWebhookFunctions = true,
17961796
ExposeInternalParamsWithoutDefaultValue = exposeInternalParamsWithoutDefaultValue
17971797
};
@@ -1837,6 +1837,36 @@ public async Task SendEmail()
18371837
Assert.Single(functions.Where(x => x.Name == "SendEmailV3"));
18381838
}
18391839

1840+
[Fact]
1841+
public async Task AiSensitivityTest()
1842+
{
1843+
using LoggingTestServer testConnector = new LoggingTestServer(@"Swagger\SendMail.json", _output);
1844+
OpenApiDocument apiDoc = testConnector._apiDocument;
1845+
1846+
ConnectorSettings connectorSettings = new ConnectorSettings("exob")
1847+
{
1848+
Compatibility = ConnectorCompatibility.SwaggerCompatibility,
1849+
AllowUnsupportedFunctions = true,
1850+
IncludeInternalFunctions = true,
1851+
ReturnUnknownRecordFieldsAsUntypedObjects = true
1852+
};
1853+
1854+
List<ConnectorFunction> functions = OpenApiParser.GetFunctions(connectorSettings, apiDoc).OrderBy(f => f.Name).ToList();
1855+
1856+
ConnectorFunction sendmail = functions.First(f => f.Name == "SendEmailV3");
1857+
IEnumerable<ConnectorParameter> parameters = sendmail.RequiredParameters.Union(sendmail.OptionalParameters);
1858+
1859+
string unknownAiSensitivity = string.Join(", ", parameters.Where(p => p.AiSensitivity == AiSensitivity.Unknown).Select(p => p.Name));
1860+
string noAiSensitivity = string.Join(", ", parameters.Where(p => p.AiSensitivity == AiSensitivity.None).Select(p => p.Name));
1861+
string lowAiSensitivity = string.Join(", ", parameters.Where(p => p.AiSensitivity == AiSensitivity.Low).Select(p => p.Name));
1862+
string highAiSensitivity = string.Join(", ", parameters.Where(p => p.AiSensitivity == AiSensitivity.High).Select(p => p.Name));
1863+
1864+
Assert.Equal(string.Empty, unknownAiSensitivity);
1865+
Assert.Equal("subject, text, toname, ccname, bccname, files, filenames", noAiSensitivity);
1866+
Assert.Equal(string.Empty, lowAiSensitivity);
1867+
Assert.Equal("to, cc, bcc", highAiSensitivity);
1868+
}
1869+
18401870
[Fact]
18411871
public async Task ExcelOnlineTest()
18421872
{

src/tests/Microsoft.PowerFx.Connectors.Tests.Shared/PublicSurfaceTests.cs

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public void PublicSurfaceTest_Connectors()
2626
var allowed = new HashSet<string>()
2727
{
2828
"Microsoft.PowerFx.ConfigExtensions",
29+
"Microsoft.PowerFx.Connectors.AiSensitivity",
2930
"Microsoft.PowerFx.Connectors.BaseRuntimeConnectorContext",
3031
"Microsoft.PowerFx.Connectors.CdpDataSource",
3132
"Microsoft.PowerFx.Connectors.CdpExtensions",

0 commit comments

Comments
 (0)