Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Azure Weights & Biases SDK for .NET. ML experiment tracking and model management via Azure Marketplace. Use for creating W&B instances, managing SSO, marketplace integration, and ML observability.
.claude/skills/azure-mgmt-weightsandbiases-dotnet/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | — | — |
| case-10 | ✗→✓ | ▲ Improved | — | — |
| case-19 | ✗→✓ | ▲ Improved | — | — |
| case-02 | ✗→✓ | ▲ Improved | — | — |
| case-13 | ✗→✓ | ▲ Improved | — | — |
Azure Resource Manager SDK for deploying and managing Weights & Biases ML experiment tracking instances via Azure Marketplace.
bashdotnet add package Azure.ResourceManager.WeightsAndBiases --prerelease dotnet add package Azure.Identity
Current Version: v1.0.0-beta.1 (preview) API Version: 2024-09-18-preview
bashAZURE_SUBSCRIPTION_ID=<your-subscription-id> AZURE_RESOURCE_GROUP=<your-resource-group> AZURE_WANDB_INSTANCE_NAME=<your-wandb-instance>
csharpusing Azure.Identity; using Azure.ResourceManager; using Azure.ResourceManager.WeightsAndBiases; ArmClient client = new ArmClient(new DefaultAzureCredential());
Subscription
└── ResourceGroup
└── WeightsAndBiasesInstance # W&B deployment from Azure Marketplace
├── Properties
│ ├── Marketplace # Offer details, plan, publisher
│ ├── User # Admin user info
│ ├── PartnerProperties # W&B-specific config (region, subdomain)
│ └── SingleSignOnPropertiesV2 # Entra ID SSO configuration
└── Identity # Managed identity (optional)csharpusing Azure.ResourceManager.WeightsAndBiases; using Azure.ResourceManager.WeightsAndBiases.Models; ResourceGroupResource resourceGroup = await client .GetDefaultSubscriptionAsync() .Result .GetResourceGroupAsync("my-resource-group"); WeightsAndBiasesInstanceCollection instances = resourceGroup.GetWeightsAndBiasesInstances(); WeightsAndBiasesInstanceData data = new WeightsAndBiasesInstanceData(AzureLocation.EastUS) { Properties = new WeightsAndBiasesInstanceProperties { // Marketplace configuration Marketplace = new WeightsAndBiasesMarketplaceDetails { SubscriptionId = "<marketplace-subscription-id>", OfferDetails = new WeightsAndBiasesOfferDetails { PublisherId = "wandb", OfferId = "wandb-pay-as-you-go", PlanId = "wandb-payg", PlanName = "Pay As You Go", TermId = "monthly", TermUnit = "P1M" } }, // Admin user User = new WeightsAndBiasesUserDetails { FirstName = "Admin", LastName = "User", EmailAddress = "admin@example.com", Upn = "admin@example.com" }, // W&B-specific configuration PartnerProperties = new WeightsAndBiasesPartnerProperties { Region = WeightsAndBiasesRegion.EastUS, Subdomain = "my-company-wandb" } }, // Optional: Enable managed identity Identity = new ManagedServiceIdentity(ManagedServiceIdentityType.SystemAssigned) }; ArmOperation<WeightsAndBiasesInstanceResource> operation = await instances .CreateOrUpdateAsync(WaitUntil.Completed, "my-wandb-instance", data); WeightsAndBiasesInstanceResource instance = operation.Value; Console.WriteLine($"W&B Instance created: {instance.Data.Name}"); Console.WriteLine($"Provisioning state: {instance.Data.Properties.ProvisioningState}");
csharpWeightsAndBiasesInstanceResource instance = await resourceGroup .GetWeightsAndBiasesInstanceAsync("my-wandb-instance"); Console.WriteLine($"Instance: {instance.Data.Name}"); Console.WriteLine($"Location: {instance.Data.Location}"); Console.WriteLine($"State: {instance.Data.Properties.ProvisioningState}"); if (instance.Data.Properties.PartnerProperties != null) { Console.WriteLine($"Region: {instance.Data.Properties.PartnerProperties.Region}"); Console.WriteLine($"Subdomain: {instance.Data.Properties.PartnerProperties.Subdomain}"); }
csharp// List in resource group await foreach (WeightsAndBiasesInstanceResource instance in resourceGroup.GetWeightsAndBiasesInstances()) { Console.WriteLine($"Instance: {instance.Data.Name}"); Console.WriteLine($" Location: {instance.Data.Location}"); Console.WriteLine($" State: {instance.Data.Properties.ProvisioningState}"); } // List in subscription SubscriptionResource subscription = await client.GetDefaultSubscriptionAsync(); await foreach (WeightsAndBiasesInstanceResource instance in subscription.GetWeightsAndBiasesInstancesAsync()) { Console.WriteLine($"{instance.Data.Name} in {instance.Id.ResourceGroupName}"); }
csharpWeightsAndBiasesInstanceResource instance = await resourceGroup .GetWeightsAndBiasesInstanceAsync("my-wandb-instance"); // Update with SSO configuration WeightsAndBiasesInstanceData updateData = instance.Data; updateData.Properties.SingleSignOnPropertiesV2 = new WeightsAndBiasSingleSignOnPropertiesV2 { Type = WeightsAndBiasSingleSignOnType.Saml, State = WeightsAndBiasSingleSignOnState.Enable, EnterpriseAppId = "<entra-app-id>", AadDomains = { "example.com", "contoso.com" } }; ArmOperation<WeightsAndBiasesInstanceResource> operation = await resourceGroup .GetWeightsAndBiasesInstances() .CreateOrUpdateAsync(WaitUntil.Completed, "my-wandb-instance", updateData);
csharpWeightsAndBiasesInstanceResource instance = await resourceGroup .GetWeightsAndBiasesInstanceAsync("my-wandb-instance"); // Update tags WeightsAndBiasesInstancePatch patch = new WeightsAndBiasesInstancePatch { Tags = { { "environment", "production" }, { "team", "ml-platform" }, { "costCenter", "CC-ML-001" } } }; instance = await instance.UpdateAsync(patch); Console.WriteLine($"Updated instance: {instance.Data.Name}");
csharpWeightsAndBiasesInstanceResource instance = await resourceGroup .GetWeightsAndBiasesInstanceAsync("my-wandb-instance"); await instance.DeleteAsync(WaitUntil.Completed); Console.WriteLine("Instance deleted");
csharp// Check if name is available before creating // (Implement via direct ARM call if SDK doesn't expose this) try { await resourceGroup.GetWeightsAndBiasesInstanceAsync("desired-name"); Console.WriteLine("Name is already taken"); } catch (RequestFailedException ex) when (ex.Status == 404) { Console.WriteLine("Name is available"); }
| Type | Purpose | |------|---------| | WeightsAndBiasesInstanceResource | W&B instance resource | | WeightsAndBiasesInstanceData | Instance configuration data | | WeightsAndBiasesInstanceCollection | Collection of instances | | WeightsAndBiasesInstanceProperties | Instance properties | | WeightsAndBiasesMarketplaceDetails | Marketplace subscription info | | WeightsAndBiasesOfferDetails | Marketplace offer details | | WeightsAndBiasesUserDetails | Admin user information | | WeightsAndBiasesPartnerProperties | W&B-specific configuration | | WeightsAndBiasSingleSignOnPropertiesV2 | SSO configuration | | WeightsAndBiasesInstancePatch | Patch for updates | | WeightsAndBiasesRegion | Supported regions enum |
| Region Enum | Azure Region | |-------------|--------------| | WeightsAndBiasesRegion.EastUS | East US | | WeightsAndBiasesRegion.CentralUS | Central US | | WeightsAndBiasesRegion.WestUS | West US | | WeightsAndBiasesRegion.WestEurope | West Europe | | WeightsAndBiasesRegion.JapanEast | Japan East | | WeightsAndBiasesRegion.KoreaCentral | Korea Central |
For Azure Marketplace integration:
| Property | Value | |----------|-------| | Publisher ID | wandb | | Offer ID | wandb-pay-as-you-go | | Plan ID | wandb-payg (Pay As You Go) |
Succeeded before using instancecsharpusing Azure; try { ArmOperation<WeightsAndBiasesInstanceResource> operation = await instances .CreateOrUpdateAsync(WaitUntil.Completed, "my-wandb", data); } catch (RequestFailedException ex) when (ex.Status == 409) { Console.WriteLine("Instance already exists or name conflict"); } catch (RequestFailedException ex) when (ex.Status == 400) { Console.WriteLine($"Invalid configuration: {ex.Message}"); } catch (RequestFailedException ex) { Console.WriteLine($"Azure error: {ex.Status} - {ex.Message}"); }
After creating the Azure resource, use the W&B Python SDK for experiment tracking:
python# Install: pip install wandb import wandb # Login with your W&B API key from the Azure-deployed instance wandb.login(host="https://my-company-wandb.wandb.ai") # Initialize a run run = wandb.init(project="my-ml-project") # Log metrics wandb.log({"accuracy": 0.95, "loss": 0.05}) # Finish run run.finish()
| SDK | Purpose | Install | |-----|---------|---------| | Azure.ResourceManager.WeightsAndBiases | W&B instance management (this SDK) | dotnet add package Azure.ResourceManager.WeightsAndBiases --prerelease | | Azure.ResourceManager.MachineLearning | Azure ML workspaces | dotnet add package Azure.ResourceManager.MachineLearning |
| Resource | URL | |----------|-----| | NuGet Package | https://www.nuget.org/packages/Azure.ResourceManager.WeightsAndBiases | | W&B Documentation | https://docs.wandb.ai/ | | Azure Marketplace | https://azuremarketplace.microsoft.com/marketplace/apps/wandb.wandb-pay-as-you-go | | GitHub Source | https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/weightsandbiases |
This skill is applicable to execute the workflow or actions described in the overview.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-05 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +64 percentage points is the difference between those two pass rates over the 22 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.