~/products/fuuga

The sovereign LLM stack for .NET.

Fuuga is the complete toolchain for making a language model, or retraining an existing one — preparing data, training, fine-tuning, shrinking, testing and running it — delivered on .NET, the platform your business systems already run on, for the engineers you already employ. No separate research stack. GPU or CPU. Your data never leaves your hardware.

dotnet add package FuugaFuuga.cpuFuuga.Imagepublic domain
A developer workstation running a local large language model alongside code

> the-problem

Enterprises rent their AI and cannot maintain the AI they build. The regulated back-offices of the world run on .NET, and the AI path Microsoft offers them is rented: Copilot and Azure OpenAI, running OpenAI and Anthropic models in someone else's cloud.

Rented models, rising prices

A hosted AI subscription sends customer records, contracts and code to a third party, bills every request, and can change or retire the model at any time. Today's per-token prices are subsidised by investor capital, and they will rise. Compliance teams say no to the most valuable uses.

In-house models today are a specialist's side project

A company's own models are usually built by a data scientist in Python research tools its engineers do not use. They ship as a one-off; when that person leaves, nobody can maintain them.

Regulation asks who owns the model

The EU AI Act, DORA and data-residency rules ask for provenance, auditability and control over the model. A model you trained on data you can trace is the simplest answer.

> the-idea

An open model already knows most of what a hosted model knows. Retrained on your own work, it goes further than the hosted model in the domain that matters to you.

Ahead where your business is
Ahead where your business isRetrained on your own work and grounded in all your documents, searched in-house, an open model rises above the hosted model across your domain. A hosted model handed your documents narrows the gap, but only for documents that may leave your network; classified and confidential ones may not. Fine-tuning costs a little general ability just outside the domain; we keep it small and measure it against the base model before release.

Skills and facts

Retraining teaches how your business works: your own terms, code conventions, message formats and decisions, so the model speaks your domain language by default rather than the industry average. Facts that change every week, such as fee tables and contracts, are looked up in your own documents at the moment of the question, in-house, including the ones that may never leave.

Measured both ways

Every pilot measures the gain and the loss on your own held-out tasks, before and after retraining, so you know what improved and what did not.

More than accuracy

Even where the curves are level, an in-house model keeps customer data and classified documents inside your network, costs the same at any volume, runs offline, and cannot be changed or retired by a vendor.

An illustration, not a benchmark: each pilot measures the curves on your own tasks.

> where-it-pays-first

Typed decisions are the part of AI a business can actually measure. Nothing here generates text: Fuuga scores a fixed set of options in one pass and returns a calibrated probability for each, so the answer can be logged, audited, priced and trusted.

The data you have

Outcomes, not a corpus

Few companies own a training corpus, and building one is a project nobody funds. Every company owns outcomes: which team took the case, whether the claim was approved, whether the transaction turned out to be fraud. Those are labels, produced by running the business, and a decision engine learns from them directly.

The number you get

An answer to "is it better?"

Nobody can say whether a fine-tuned chat model beats the one it replaced. A typed decision has ground truth, so it has arithmetic: accuracy, log loss, Brier score and calibration error on held-out cases — right so often, and right about how sure it is.

The line it moves

Act, or escalate

Above the confidence threshold, the software acts; below it, the case goes to a person. The share handled without a human is the return, and it is measured rather than asserted — which is also what lets a regulated buyer approve it at all.

> public-showcase

Two open models taken down the common path on one consumer GPU: proof that the pipeline works end to end, with every result measured against the model before retraining. The decision model is also measured against a hosted, closed one on the same cases. Real work starts from larger donors such as Gemma and Phi, and each pilot measures the gain on your own data. The retrained text model is available for a live demo.

Decisions

59% → 90% accuracy

Laya, an open decision model, imported into Fuuga and retrained on 4,000 labelled rows of a public emotion dataset in 6.5 minutes: accuracy on 2,000 unseen rows rose from 58.7% as published to 89.9%. TypeSafe's Jev, a hosted, closed decision model, scored 58.5% on the same questions; the retrained Laya is right on 684 of the 741 cases the two decide differently (paired test, p < 0.0001).

Acts on its own

66% → 94% right

The model decides without a person only when it is at least 90% sure. As published, Laya decided 68% of cases alone and was right on 66% of those. Retrained, it decides 92% of cases alone and is right on 94% of those.

General ability

Nothing fell

A small donor, Qwen3-1.7B, retrained with LoRA on 80 MB of private text in 2 h 18 min on one 12 GB consumer GPU (RTX 4070). None of six public benchmarks fell: MMLU, ARC, HellaSwag, WinoGrande and PIQA held or rose within noise, and TruthfulQA rose eight points.

Public datasets and benchmarks, so the decision runs can be repeated as published. Jev was asked through its API with the same question and option names as Laya; its documentation recommends a description per option, which may raise its score. The full record, result files and scripts are in the Fuuga repository.

> the-pipeline

Start from an open model. Make it yours. Keep it in-house. One recipe file drives each workflow: scaffold it, edit a few paths, run.

[01]

Ingest

Documents, Parquet and text become a hashed, traceable corpus. Every checkpoint records which sources trained it.

[02]

Transfer

Donor weights from Llama 3, Phi, Qwen, Mistral, Gemma, DeepSeek, GLM and Kimi, mapped architecture-aware — or pre-train a small model from scratch.

[03]

Fine-tune

LoRA and QLoRA on consumer GPUs, DPO for preferences, GRPO reinforcement learning with verifiable rewards.

[04]

Compress

Distil, merge, prune and quantise to a bit budget; export GGUF for llama.cpp and Ollama, ONNX, or HuggingFace safetensors.

[05]

Serve

OpenAI- and Anthropic-compatible APIs, both mounted by default, with continuous batching, guardrails, tool calling, MCP and A2A — on your own hardware.

the common path — donor model to served model

> fuuga scaffold finetune> fuuga transfer --recipe my.json> fuuga sft --recipe my.json> fuuga eval --recipe my.json> fuuga export gguf --tokenizer tok/> fuuga-serve --checkpoint best/

> what-runs-today

Not a roadmap. Everything below is in the repository, with tests, and can be walked through live.

Training

BPE tokenizer, transformer with RoPE, GQA, MLA and MoE, AdamW and Muon, gradient checkpointing, CPU and NVMe offload for models larger than VRAM.

Fine-tuning

SFT, prompt tuning, DPO, GRPO, rejection sampling, LoRA and QLoRA, adapter merging.

Model operations

Weight transfer from nine donor families, distillation, N-ary merging, pruning, NF4 and INT8 quantisation, bit-exact export round-trips.

Evaluation

MMLU, HellaSwag, ARC, GSM8K, MATH-500 and HumanEval built in, a typed judge arena that compares old against new on your own work, plus drift detection and a quality gate that reports regressions plainly.

Serving and agents

Streaming, function calling, structured outputs, bearer auth, guardrails, local minion delegation with sandboxed tools and skills.

Image and video

Stable Diffusion 1.5 implemented from scratch in F#, text-to-video and captioning, exposed as MCP tools.

Metered hosting

Run your own model as a paid service: per-token pricing per model, a prepaid credit ledger per API key, and a price list in the format OpenRouter uses.

> how-we-work-with-you

The library is public domain by choice: source is the cheap part now. Adoption is free, every line can be audited, and what organisations pay for is the part that does not copy — reliability, the evidence behind a model's behaviour, and somebody answerable when it is wrong.

Engagement

Decision engagements

Fixed scope on outcomes you already record, ending with a calibrated decision engine in production and the recipe that produced it.

Managed

We run it for you

We operate the engine inside your environment: retraining on new outcomes, drift monitoring, the evidence your supervisor asks for, and somebody on call. Your data and weights never leave; you can take it in-house at any time.

Continuity

Supported builds for your team

Signed builds, long-term support branches, security advisories, an SLA and the provenance record — and when your people change, we bring the next ones up to speed on your own models. The capability outlives the team that built it.

Partner

Enablement and certification

For consultancies implementing Fuuga for their own clients: training, certification and an escalation path to the people who wrote it.

What you buy

The work that puts a calibrated model into production, and then keeping it there: we run it for you inside your own environment, or we support the team of yours that runs it — supported releases, the evidence behind how the model behaves, and people who bring your next engineers up to speed on it.

Who buys it

Regulated organisations running on-premises .NET estates — air-gapped, sovereignty-bound, or needing evidence rather than a vendor statement — and the consultancies that implement for them. Vendors shipping on-premises .NET products are the later door, once the stack is proven inside their customers' networks.

How it starts

A fixed-scope pilot on outcomes you already record, ending with a calibrated decision engine in production and the recipe that produced it — then we run it, or your team does with our support.

What stays yours

The library stays public domain: no licence key, no phone-home, no obligation to buy anything. Your data and your weights stay on your hardware, and we never need a copy of either.

> already-on-a-hosted-api

An existing AI strategy is not replaced. It gains an in-house option for the parts compliance blocks, the bills that keep growing, and the models a vendor may retire. Nothing is rewritten: coexistence first, then migration by evidence. Fuuga speaks the OpenAI and the Anthropic interface, and the weights leave again as GGUF, safetensors or ONNX — the model runs anywhere, including without us.

[01]

Connect, do not rewrite

Fuuga speaks both the OpenAI and the Anthropic interface, and serves them together by default. An application built on either is pointed at a new address; the code that calls the model stays as it is.

[02]

Run both, route by rule

Fuuga's cost-aware router sends sensitive or routine requests to the in-house model and the rest to the existing subscription, within a budget.

[03]

Learn from the incumbent

Endpoint distillation collects the hosted model's answers to your own prompts and trains your model on them; a typed judge compares the two on your own work, both ways round, on held-out data.

[04]

Switch when the numbers say so

When the gate passes, the workload moves and the subscription shrinks. The next workload repeats the loop, faster.

for-customers-and-partners

Start with a pilot on outcomes you already record.

Built by the maintainer of SQLProvider and LINQKit, with twenty-five years of building software, and funded by our own client work. Ask for a pilot, a code walkthrough, or a conversation about running a model for you.