public void TestMultiActionOfflineModeArgument() { var metaData = new ApplicationClientMetadata { TrainArguments = "--cb_explore_adf --epsilon 0.3", InitialExplorationEpsilon = 1f }; using (var ds = DecisionService.CreateJson( new DecisionServiceConfiguration("") { OfflineMode = true, OfflineApplicationID = "" }, metaData)) { ds.ChooseAction("", "{}"); } }
public async Task InitialFullExplorationTest() { var recorder = new MyRecorder(); using (var model = new MemoryStream()) { using (var vw = new VowpalWabbit("--cb_explore_adf --epsilon 0.3")) { vw.Learn(new[] { "1:-3:0.2 | b:2" }); vw.ID = "123"; vw.SaveModel(model); } var config = new DecisionServiceConfiguration("") { OfflineMode = true, OfflineApplicationID = "", DevelopmentMode = true }; var metaData = new ApplicationClientMetadata { TrainArguments = "--cb_explore_adf --epsilon 0.3", InitialExplorationEpsilon = 1f }; using (var ds = DecisionService.CreateJson(config, metaData: metaData).WithRecorder(recorder)) { var decision = await ds.ChooseRankingAsync("abc", "{\"a\":1,\"_multi\":[{\"b\":2}]}"); // since there's not a model loaded why should get 100% exploration // Assert.AreEqual(1f, recorder.LastExplorerState.Probability); model.Position = 0; ds.UpdateModel(model); decision = await ds.ChooseRankingAsync("abc", "{\"a\":1,\"_multi\":[{\"b\":2}, {\"b\":3}]}"); // Assert.AreNotEqual(1f, recorder.LastExplorerState.Probability); var vwState = recorder.LastMapperState as VWState; Assert.IsNotNull(vwState); Assert.AreEqual("123", vwState.ModelId); } } }
public static void Initialize(string settingsUrl) { var telemetry = new TelemetryClient(); var config = new DecisionServiceConfiguration(settingsUrl) { InteractionUploadConfiguration = new BatchingConfiguration { MaxDuration = TimeSpan.FromSeconds(2), UploadRetryPolicy = BatchUploadRetryPolicy.ExponentialRetry }, ModelPollFailureCallback = e => telemetry.TrackException(e, new Dictionary <string, string> { { "Pool failure", "model" } }), SettingsPollFailureCallback = e => telemetry.TrackException(e, new Dictionary <string, string> { { "Pool failure", "settings" } }), // AzureStorageConnectionString = ConfigurationManager.AppSettings[ApplicationMetadataStore.AKConnectionString] }; client = DecisionService.CreateJson(config); }
public static DecisionServiceClient <string> AddOrGetExisting(Action <byte[]> modelSuccessNotifier) { return(DecisionServiceStaticClient.AddOrGetExisting("single", _ => { var telemetry = new TelemetryClient(); string azureStorageConnectionString = ConfigurationManager.AppSettings[ApplicationMetadataStore.AKConnectionString]; var storageAccount = CloudStorageAccount.Parse(azureStorageConnectionString); var blobClient = storageAccount.CreateCloudBlobClient(); var settingsBlobContainer = blobClient.GetContainerReference(ApplicationBlobConstants.SettingsContainerName); var clientSettingsBlob = settingsBlobContainer.GetBlockBlobReference(ApplicationBlobConstants.LatestClientSettingsBlobName); //var settingsUrl = clientSettingsBlob.StorageUri.PrimaryUri.ToString(); var settingsUrl = APIUtil.GetSettingsUrl(); telemetry.TrackEvent($"DecisionServiceClient created: '{settingsUrl}'"); var config = new DecisionServiceConfiguration(settingsUrl) { InteractionUploadConfiguration = new BatchingConfiguration { MaxDuration = TimeSpan.FromSeconds(2), UploadRetryPolicy = BatchUploadRetryPolicy.ExponentialRetry }, ModelPollSuccessCallback = modelSuccessNotifier, ModelPollFailureCallback = e => telemetry.TrackException(e, new Dictionary <string, string> { { "Pool failure", "model" } }), SettingsPollFailureCallback = e => telemetry.TrackException(e, new Dictionary <string, string> { { "Pool failure", "settings" } }), AzureStorageConnectionString = ConfigurationManager.AppSettings[ApplicationMetadataStore.AKConnectionString] }; return DecisionService.CreateJson(config); })); }
public static DecisionServiceClient <string> AddOrGetExisting(string settingsUrl) { return(DecisionServiceStaticClient.AddOrGetExisting(settingsUrl, _ => DecisionService.CreateJson(CreateConfiguration(settingsUrl)))); }