github microsoft/Foundry-Local v1.2.1
v1.2.1 Foundry Local

8 hours ago

🛠️ 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!

Don't miss a new Foundry-Local release

NewReleases is sending notifications on new releases.