ReleaseMicrosoftMicrosoftpublished Jun 5, 2026seen 2d

microsoft/Foundry-Local v1.2.1

microsoft/Foundry-Local

Open original ↗

Captured source

source ↗
published Jun 5, 2026seen 2dcaptured 15hhttp 200method plain

v1.2.1 Foundry Local

Repository: microsoft/Foundry-Local

Tag: v1.2.1

Published: 2026-06-05T03:12:50Z

Prerelease: no

Release notes:

🛠️ Foundry Local v1.2.1 Release Notes

We're excited to announce Foundry Local v1.2.1, a patch on top of v1.2.0 with bring-your-own-model (BYOM) cache discovery while running, more resilient Azure catalog/registry calls, broader multilingual ASR coverage, and a Windows DLL-load fix for non-ANSI paths.

---

🆕 What's New

🔄 BYOM cache discovery — no service restart required

You can now drop a model directory into the local cache while Foundry Local is running and have the SDKs surface it without restarting the service or waiting for the 4-hour catalog refresh using getCachedModels / getLoadedModels / getModel(alias) / getModelVariant(id).

C#

using Microsoft.AI.Foundry.Local;
using Microsoft.Extensions.Logging.Abstractions;

var config = new Configuration { AppName = "MyApp" };
await FoundryLocalManager.CreateAsync(config, NullLogger.Instance);
var catalog = await FoundryLocalManager.Instance.GetCatalogAsync();

// At any point during the process lifetime, drop a model directory into the ModelCacheDir.
// For a valid model, inference_model.json must set the model's id, e.g. { "Name": "my-byom-model:1" }.

// 1. No service restart needed - the SDK re-scans the cache on miss for getCachedModelsAsync.
foreach (var m in await catalog.GetCachedModelsAsync())
Console.WriteLine($"cached: {m.Alias} ({m.Id})");

var byom   = await catalog.GetModelVariantAsync("my-byom-model:1"); // 2. resolves the BYOM id
var hot    = await catalog.GetModelAsync("my-byom-model");           // 3. resolves the BYOM alias
var loaded = await catalog.GetLoadedModelsAsync();

JavaScript

import { FoundryLocalManager } from 'foundry-local-sdk';
const manager = FoundryLocalManager.create({ appName: 'MyApp' });
const catalog = manager.catalog;

// At any point during the process lifetime, drop a model directory into the modelCacheDir.
// For a valid model, inference_model.json must set the model's id, e.g. { "Name": "my-byom-model:1" }.

// 1. No service restart needed - the SDK re-scans the cache on miss for getCachedModels.
for (const m of await catalog.getCachedModels()) {
console.log(`cached: ${m.alias} (${m.id})`);
}

const byom   = await catalog.getModelVariant('my-byom-model:1'); // 2. resolves the BYOM id
const hot    = await catalog.getModel('my-byom-model');          // 3. resolves the BYOM alias
const loaded = await catalog.getLoadedModels();

Python

from foundry_local_sdk import Configuration, FoundryLocalManager

config = Configuration(app_name="MyApp")
FoundryLocalManager.initialize(config)
catalog = FoundryLocalManager.instance.catalog

// At any point during the process lifetime, drop a model directory into the model_cache_dir.
// For a valid model, inference_model.json must set the model's id, e.g. { "Name": "my-byom-model:1" }.

// 1. No service restart needed - the SDK re-scans the cache on miss for get_cached_models.
for m in catalog.get_cached_models():
print(f"cached: {m.alias} ({m.id})")

byom   = catalog.get_model_variant("my-byom-model:1")  # 2. resolves the BYOM id
hot    = catalog.get_model("my-byom-model")            # 3. resolves the BYOM alias
loaded = catalog.get_loaded_models()

Rust

use foundry_local_sdk::{FoundryLocalConfig, FoundryLocalManager};

let config = FoundryLocalConfig::new("MyApp");
let manager = FoundryLocalManager::create(config)?;
let catalog = manager.catalog();

// At any point during the process lifetime, drop a model directory into the model.
// For a valid model, inference_model.json must set the model's id, e.g. { "Name": "my-byom-model:1" }.

// 1. No service restart needed - the SDK re-scans the cache on miss for get_cached_models.
for m in catalog.get_cached_models().await? {
println!("cached: {} ({})", m.alias(), m.id());
}

let byom   = catalog.get_model_variant("my-byom-model:1").await?; // 2. resolves the BYOM id
let hot    = catalog.get_model("my-byom-model").await?;           // 3. resolves the BYOM alias
let loaded = catalog.get_loaded_models().await?;

---

🐛 Fixed

  • JavaScript SDK: Fixed a bug on Windows where onnxruntime.dll failed to load when the path contained characters outside the active ANSI code page.

---

⚡ Improved

🌐 Regional fallback for Azure catalog and registry requests

  • A single throttled or unhealthy Azure region (HTTP 408/429/5xx, DNS/connect failures, per-attempt timeouts) no longer blocks model listing or download. The client retries against nearby regions and caches a healthy one for the process.

🗣️ Multilingual ASR language coverage

  • Language-to-ID mappings in AudioStreamingSession are aligned with the canonicalNVIDIA-Nemotron-3.5-ASR-Streaming-Multilingual-0.6b prompt dictionary:
  • Added region-specific variants (e.g., hi-IN, ja-JP, ko-KR)
  • Added Lithuanian, Thai, Vietnamese, Estonian, Latvian, Slovenian, Hebrew, Maltese, and Norwegian variants

📦 Runtime & Dependency Updates

  • Upgraded to ONNX Runtime GenAI 0.14.1 for performance, security, and model support improvements

---

📚 Resources

| Resource | Link | |----------|------| | 📖 MSLearn Docs | learn.microsoft.com/en-us/azure/foundry-local/get-started | | 🐙 GitHub | github.com/microsoft/Foundry-Local | | 🧪 Samples | samples/ | ---

💙 Thank You

Thank you to our community for your feedback and contributions!