Skip to content

Commit a5b5bb9

Browse files
wip
1 parent 86d3a09 commit a5b5bb9

File tree

5 files changed

+55
-13
lines changed

5 files changed

+55
-13
lines changed

src/AzureAppConfigurationImpl.ts

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,12 @@ import {
2424
CONDITIONS_KEY_NAME,
2525
CLIENT_FILTERS_KEY_NAME
2626
} from "./featureManagement/constants.js";
27-
import { FM_PACKAGE_NAME } from "./requestTracing/constants.js";
27+
import { FM_PACKAGE_NAME, AI_MIME_PROFILE, AI_CHAT_COMPLETION_MIME_PROFILE } from "./requestTracing/constants.js";
2828
import { AzureKeyVaultKeyValueAdapter } from "./keyvault/AzureKeyVaultKeyValueAdapter.js";
2929
import { RefreshTimer } from "./refresh/RefreshTimer.js";
3030
import { RequestTracingOptions, getConfigurationSettingWithTrace, listConfigurationSettingsWithTrace, requestTracingEnabled } from "./requestTracing/utils.js";
3131
import { FeatureFlagTracingOptions } from "./requestTracing/FeatureFlagTracingOptions.js";
32+
import { AIConfigurationTracingOptions } from "./requestTracing/AIConfigurationTracingOptions.js";
3233
import { KeyFilter, LabelFilter, SettingSelector } from "./types.js";
3334
import { ConfigurationClientManager } from "./ConfigurationClientManager.js";
3435

@@ -58,6 +59,7 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
5859
#isFailoverRequest: boolean = false;
5960
#featureFlagTracing: FeatureFlagTracingOptions | undefined;
6061
#fmVersion: string | undefined;
62+
#aiConfigurationTracing: AIConfigurationTracingOptions | undefined;
6163

6264
// Refresh
6365
#refreshInProgress: boolean = false;
@@ -178,7 +180,8 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
178180
replicaCount: this.#clientManager.getReplicaCount(),
179181
isFailoverRequest: this.#isFailoverRequest,
180182
featureFlagTracing: this.#featureFlagTracing,
181-
fmVersion: this.#fmVersion
183+
fmVersion: this.#fmVersion,
184+
aiConfigurationTracing: this.#aiConfigurationTracing
182185
};
183186
}
184187

@@ -634,11 +637,22 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
634637
}
635638

636639
async #processKeyValues(setting: ConfigurationSetting<string>): Promise<[string, unknown]> {
640+
this.#setAIConfigurationTracing(setting);
641+
637642
const [key, value] = await this.#processAdapters(setting);
638643
const trimmedKey = this.#keyWithPrefixesTrimmed(key);
639644
return [trimmedKey, value];
640645
}
641646

647+
#setAIConfigurationTracing(setting: ConfigurationSetting<string>): void {
648+
if (this.#requestTracingEnabled && this.#aiConfigurationTracing !== undefined) {
649+
// Reset old AI configuration tracing in order to track the information present in the current response from server.
650+
this.#aiConfigurationTracing.reset();
651+
652+
653+
}
654+
}
655+
642656
async #processAdapters(setting: ConfigurationSetting<string>): Promise<[string, unknown]> {
643657
for (const adapter of this.#adapters) {
644658
if (adapter.canProcess(setting)) {
@@ -675,7 +689,24 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
675689
};
676690
}
677691

692+
this.#setFeatureFlagTracing(featureFlag);
693+
694+
return featureFlag;
695+
}
696+
697+
#createFeatureFlagReference(setting: ConfigurationSetting<string>): string {
698+
let featureFlagReference = `${this.#clientManager.endpoint.origin}/kv/${setting.key}`;
699+
if (setting.label && setting.label.trim().length !== 0) {
700+
featureFlagReference += `?label=${setting.label}`;
701+
}
702+
return featureFlagReference;
703+
}
704+
705+
#setFeatureFlagTracing(featureFlag: any): void {
678706
if (this.#requestTracingEnabled && this.#featureFlagTracing !== undefined) {
707+
// Reset old feature flag tracing in order to track the information present in the current response from server.
708+
this.#featureFlagTracing.reset();
709+
679710
if (featureFlag[CONDITIONS_KEY_NAME] &&
680711
featureFlag[CONDITIONS_KEY_NAME][CLIENT_FILTERS_KEY_NAME] &&
681712
Array.isArray(featureFlag[CONDITIONS_KEY_NAME][CLIENT_FILTERS_KEY_NAME])) {
@@ -693,16 +724,6 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
693724
this.#featureFlagTracing.usesSeed = true;
694725
}
695726
}
696-
697-
return featureFlag;
698-
}
699-
700-
#createFeatureFlagReference(setting: ConfigurationSetting<string>): string {
701-
let featureFlagReference = `${this.#clientManager.endpoint.origin}/kv/${setting.key}`;
702-
if (setting.label && setting.label.trim().length !== 0) {
703-
featureFlagReference += `?label=${setting.label}`;
704-
}
705-
return featureFlagReference;
706727
}
707728
}
708729

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT license.
3+
4+
export class AIConfigurationTracingOptions {
5+
usesAIConfiguration: boolean = false;
6+
usesAIChatCompletionConfiguration: boolean = false;
7+
8+
reset(): void {
9+
this.usesAIConfiguration = false;
10+
this.usesAIChatCompletionConfiguration = false;
11+
}
12+
}

src/requestTracing/FeatureFlagTracingOptions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export class FeatureFlagTracingOptions {
1818
usesSeed: boolean = false;
1919
maxVariants: number = 0;
2020

21-
resetFeatureFlagTracing(): void {
21+
reset(): void {
2222
this.usesCustomFilter = false;
2323
this.usesTimeWindowFilter = false;
2424
this.usesTargetingFilter = false;

src/requestTracing/constants.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,11 @@ export const FF_MAX_VARIANTS_KEY = "MaxVariants";
7070
export const FF_SEED_USED_TAG = "Seed";
7171
export const FF_FEATURES_KEY = "FFFeatures";
7272

73+
// AI Configuration tracing
74+
export const AI_CONFIGURATION_TAG = "AI";
75+
export const AI_CHAT_COMPLETION_CONFIGURATION_TAG = "AICC";
76+
77+
export const AI_MIME_PROFILE = "https://azconfig.io/mime-profiles/ai";
78+
export const AI_CHAT_COMPLETION_MIME_PROFILE = "https://azconfig.io/mime-profiles/ai/chat-completion";
79+
7380
export const DELIMITER = "+";

src/requestTracing/utils.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import { AppConfigurationClient, ConfigurationSettingId, GetConfigurationSettingOptions, ListConfigurationSettingsOptions } from "@azure/app-configuration";
55
import { AzureAppConfigurationOptions } from "../AzureAppConfigurationOptions.js";
66
import { FeatureFlagTracingOptions } from "./FeatureFlagTracingOptions.js";
7+
import { AIConfigurationTracingOptions } from "./AIConfigurationTracingOptions.js";
78
import {
89
AZURE_FUNCTION_ENV_VAR,
910
AZURE_WEB_APP_ENV_VAR,
@@ -39,6 +40,7 @@ export interface RequestTracingOptions {
3940
isFailoverRequest: boolean;
4041
featureFlagTracing: FeatureFlagTracingOptions | undefined;
4142
fmVersion: string | undefined;
43+
aiConfigurationTracing: AIConfigurationTracingOptions | undefined;
4244
}
4345

4446
// Utils

0 commit comments

Comments
 (0)