IronProw.Core
0.1.0
See the version list below for details.
dotnet add package IronProw.Core --version 0.1.0
NuGet\Install-Package IronProw.Core -Version 0.1.0
<PackageReference Include="IronProw.Core" Version="0.1.0" />
<PackageVersion Include="IronProw.Core" Version="0.1.0" />
<PackageReference Include="IronProw.Core" />
paket add IronProw.Core --version 0.1.0
#r "nuget: IronProw.Core, 0.1.0"
#:package IronProw.Core@0.1.0
#addin nuget:?package=IronProw.Core&version=0.1.0
#tool nuget:?package=IronProw.Core&version=0.1.0
iron-prow
safe-inference gateway — every LLM call's first gate.
provider selection (frontier ∨ LAN GpuStack) · guardrail · resilience — delivered as a standardMicrosoft.Extensions.AI.IChatClient.
두 갈래 필수: frontier/LAN 게이트웨이(A) and local-provider safety(B).
역할·범위·설계 근거는 CHARTER.md 참조.
Packages
| Package | 역할 |
|---|---|
IronProw.Core |
게이트웨이 계약, resilience, 선택 로직 — iyulab 구현 의존 0 |
IronProw.IronHive |
IronHive provider 어댑터 — OpenAI · Anthropic · GoogleAI (frontier) · GpuStack (LAN) |
IronProw.FluxGuard |
FluxGuard guardrail 어댑터 (IGuard 구현) |
IronProw.LMSupply |
로컬 추론 안전 래퍼 (length-bounding + readiness gate) |
dotnet add package IronProw.Core
dotnet add package IronProw.IronHive # frontier provider adapters
dotnet add package IronProw.FluxGuard # guardrail adapter
dotnet add package IronProw.LMSupply # local-provider safety adapter
Quick Start
A. Frontier / LAN 게이트웨이
IronHive 기반 frontier provider + FluxGuard guardrail을 등록한다.
DI 컨테이너가 표준 IChatClient를 resolve하며, 게이트웨이가 selection·retry·입출력 검사를 자동 처리한다.
using IronProw.Core;
using IronProw.IronHive;
using IronProw.FluxGuard;
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
services.AddIronProw()
.AddIronHiveOpenAI(
id: "openai",
priority: 10,
modelId: "gpt-4o",
configure: cfg => cfg.ApiKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!)
.AddIronHiveAnthropic(
id: "anthropic",
priority: 5,
modelId: "claude-opus-4-5",
configure: cfg => cfg.ApiKey = Environment.GetEnvironmentVariable("ANTHROPIC_API_KEY")!)
.UseFluxGuard(); // Standard preset (L1 regex guards, offline)
// 표준 Microsoft.Extensions.AI.IChatClient 반환
IChatClient chat = host.Services.GetRequiredService<IChatClient>();
var response = await chat.GetResponseAsync("Hello");
IronProw.IronHive는 네 가지 provider 어댑터를 제공한다:
AddIronHiveOpenAI·AddIronHiveAnthropic·AddIronHiveGoogleAI— frontier (ProviderKind.Frontier)AddIronHiveGpuStack— LAN GpuStack (ProviderKind.Lan, key-optional).cfg => cfg.BaseUrl = "http://gpustack.lan:8080"형태로 endpoint 지정.
Ollama / 기타 OpenAI-호환(LMStudio·vLLM)은 아직 어댑터가 없다 — ironhive에 해당 provider가 없기 때문이다(generic OpenAI-Compatible provider 도입 예정).
UseFluxGuard() (파라미터 없음) 는 Standard preset(L1 regex, offline)을 적용한다.
커스텀 FluxGuard 인스턴스를 주입하려면 UseFluxGuard(IFluxGuard) 오버로드를 사용한다.
fail mode: 기본은 fail-closed(불확실 verdict 차단). 가용성을 우선하는 소비자는 UseFluxGuard(failMode: FluxGuardFailMode.Open)으로 opt-in — Flagged/NeedsEscalation을 통과시킨다(정의된 Block은 mode 무관 항상 차단).
B. Local-provider safety (lm-supply / ONNX / DirectML)
로컬 추론을 iron-prow 안전 레이어로 감싼다. lm-supply 생성자(IGeneratorModel/ITextGenerator)를 그대로 넘기면 iron-prow가 내부 GeneratorChatClient 브리지로 IChatClient에 적응시킨다 — 소비자가 브리지를 직접 작성할 필요가 없다.
using IronProw.Core;
using IronProw.LMSupply;
using IronProw.FluxGuard;
using LMSupply.Generator;
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
// generator: lm-supply가 로드한 IGeneratorModel/ITextGenerator (생명주기는 호출자 소유).
// 예: var generator = await LocalGenerator.LoadAsync("gguf:default", options, null, ct);
// probe: IReadinessProbe — 모델 로드 상태를 보고하는 구현체.
// lm-supply GeneratorPool 기반은 GeneratorPoolProbe를 사용한다.
// GeneratorPool 없이 LoadAsync로 단일 모델을 직접 로드하는 경우
// (예: textree)는 LazyReadinessProbe(() => loaded, [modelId])를 사용한다.
services.AddIronProw()
.AddLMSupplyLocal(
id: "local-phi3",
priority: 20,
generator: generator,
probe: probe,
options: new LocalSafetyOptions { DefaultMaxOutputTokens = 1024 })
.UseFluxGuard();
IChatClient chat = host.Services.GetRequiredService<IChatClient>();
AddLMSupplyLocal이 제공하는 safety:
- bridge —
GeneratorChatClient가 lm-supply 생성자를IChatClient로 적응(role 매핑,MaxOutputTokens→MaxNewTokens, sampler/tool 전파, streaming flatten). 이미 브리지된IChatClient를 보유한 호출자(예: ironhive-host)는AddLMSupplyLocal(..., IChatClient rawClient, ...)오버로드를 쓸 수 있다. - model-ID preflight —
IReadinessProbe.GetAvailableModelIdsAsync로 모델 존재 검증 - readiness gate —
IReadinessProbe.IsReadyAsync로 로드 완료 확인 - length-bounding —
LocalSafetyOptions.DefaultMaxOutputTokens(미설정 호출에 자동 적용, 기본 512)
두 갈래 조합
두 갈래를 같은 DI 등록에서 조합할 수 있다. priority가 높은 provider가 먼저 선택되고, fallback 시 낮은 우선순위 provider로 강등된다.
services.AddIronProw()
.AddIronHiveOpenAI("openai", priority: 10, "gpt-4o",
cfg => cfg.ApiKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!)
.AddLMSupplyLocal("local", priority: 20, generator, probe)
.UseFluxGuard()
.Configure(opt =>
{
opt.EnableFallback = true; // 기본값
opt.Resilience.MaxRetries = 3; // 기본값: 2
opt.Resilience.BaseDelay = TimeSpan.FromMilliseconds(300); // 기본값: 200ms
opt.OnTransition = t => // retry/fallback/exhausted 이벤트 (UI 칩 등)
Console.WriteLine($"[{t.Kind}] {t.ProviderId} ({t.ProviderIndex + 1}/{t.TotalProviders})");
});
OnTransition(선택)은 각 게이트웨이 전환(retry / fallback / exhausted)마다 호출되는 best-effort 콜백이다. 소비자가 어느 provider로 강등됐는지 UI에 표시(예: resilience 칩)할 수 있다. 콜백이 던지는 예외는 삼켜지며 추론을 절대 깨지 않는다. 미설정 시 동작은 기존과 동일(무보고).
Crash-fallback 제한
LocalSafetyChatClient(갈래 B)는 IReadinessProbe로 로컬 추론 불가를 감지하고, 게이트웨이 SelectingChatClient의 provider-level fallback으로 승격한다. 이것은 게이트웨이 수준 fallback(M2-4 범위)이다.
진짜 하드웨어 수준 fallback(예: ONNX GenAI DirectML → CPU)은 upstream lm-supply의 책임이다.
lm-supply 0.35.x 기준, ONNX GenAI 생성 경로는 DirectML → CPU 폴백이 없다(임베딩 경로·llama-server 경로는 보유). iron-prow는 이 gap을 감싸지 않는다 — upstream이 수정되면 iron-prow 변경 없이 이득이 흡수된다.
두 갈래 필수 설계
iron-prow는 두 시나리오를 독립적이면서도 조합 가능하게 커버한다:
| 갈래 | 진입점 | 책임 |
|---|---|---|
| A. Frontier / LAN | AddIronHiveOpenAI · AddIronHiveAnthropic · AddIronHiveGoogleAI · AddIronHiveGpuStack |
provider 레지스트리, 우선순위 선택, retry, provider-level fallback, 전환 이벤트(OnTransition) |
| B. local-provider safety | AddLMSupplyLocal |
model-ID preflight, readiness gate, length-bounding, crash→fallback |
어느 한 갈래만 구현하면 수요의 절반을 놓친다 (CHARTER §기능 표면).
UseFluxGuard()는 두 갈래 공통 — 관문에서 일괄 적용된다.
⚠️ The guard is opt-in.
AddIronProw()installs a defaultNullGuardthat allows all traffic. A gateway withoutUseFluxGuard()(or a customUseGuard(...)) performs NO input/output guardrail checks. Always register a guard in production.
See also
CHARTER.md— iron-prow 정체성, 범위, 의존 규칙, 로드맵 앵커
License
MIT
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.AI.Abstractions (>= 10.7.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.9)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.9)
- Microsoft.Extensions.Options (>= 10.0.9)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on IronProw.Core:
| Package | Downloads |
|---|---|
|
IronProw.IronHive
iron-prow adapter: ironhive providers as gateway candidates. |
|
|
IronProw.LMSupply
iron-prow local-provider safety adapter: model-ID preflight, readiness gate, and length-bounding for lm-supply local inference. |
|
|
IronProw.FluxGuard
iron-prow guard adapter: FluxGuard guardrails as IGuard. |
GitHub repositories
This package is not used by any popular GitHub repositories.