{
  "product": "NanoChat.NET",
  "title": "NanoChat.NET",
  "summary": "The .NET port of nanochat, graded capability by capability against the Python reference.",
  "category": "ports",
  "source": "D:\\Dev\\Lab\\NanoChat.NET",
  "entries": [
    {
      "path": [
        "AI",
        "Tokenizer",
        "BPE tokenizer training"
      ],
      "value": "",
      "status": "partial",
      "note": "BpeTokenizer.cs; extra <|eos|>/<|pad|> specials diverge vocab ids from upstream (PARITY.md 3.7)"
    },
    {
      "path": [
        "AI",
        "Tokenizer",
        "GPT-4-style split pattern"
      ],
      "value": "",
      "status": "yes",
      "note": "NanoChatSplitPattern.cs rune scanner, pinned by 4017-case corpus"
    },
    {
      "path": [
        "AI",
        "Tokenizer",
        "tiktoken interop"
      ],
      "value": "",
      "status": "partial",
      "note": "ImportPinnedNanoChatTiktoken + export_tiktoken_ranks.py; never exercised against a real upstream tokenizer.pkl"
    },
    {
      "path": [
        "AI",
        "Tokenizer",
        "Chat special tokens"
      ],
      "value": "9 pinned",
      "status": "yes",
      "note": "PinnedNanoChatSpecialTokens, upstream order"
    },
    {
      "path": [
        "AI",
        "Tokenizer",
        "Conversation render + loss mask"
      ],
      "value": "",
      "status": "yes",
      "note": "NanoChatConversationRenderer.cs incl. python/output parts"
    },
    {
      "path": [
        "AI",
        "Tokenizer",
        "Tokenizer persistence"
      ],
      "value": "tokenizer.bin",
      "status": "yes",
      "note": "portable save/load (TokenizationRecords.cs)"
    },
    {
      "path": [
        "AI",
        "Tokenizer",
        "Compression metrics"
      ],
      "value": "",
      "status": "yes",
      "note": "TokenizationMetrics.cs, UTF-8-correct"
    },
    {
      "path": [
        "AI",
        "Data pipeline",
        "ClimbMix shard downloader"
      ],
      "value": "",
      "status": "yes",
      "note": "ShardDownloader.cs: backoff, atomic rename"
    },
    {
      "path": [
        "AI",
        "Data pipeline",
        "In-app Parquet ingestion"
      ],
      "value": "",
      "status": "no",
      "note": "only out-of-app tools/normalize_bpb_train.py -> JSONL (PARITY.md 4)"
    },
    {
      "path": [
        "AI",
        "Data pipeline",
        "BOS best-fit packing loader"
      ],
      "value": "",
      "status": "yes",
      "note": "ShardDataLoader.cs + BestFitPacker.cs with utilization stats"
    },
    {
      "path": [
        "AI",
        "Data pipeline",
        "Resumable loader state"
      ],
      "value": "",
      "status": "yes",
      "note": "ShardCursor.cs (shard,row,epoch)"
    },
    {
      "path": [
        "AI",
        "Data pipeline",
        "SFT conversation packing"
      ],
      "value": "",
      "status": "yes",
      "note": "ChatSftDatasetComposer.cs + ConversationObjective.cs"
    },
    {
      "path": [
        "AI",
        "Data pipeline",
        "Upstream RNG reproduction"
      ],
      "value": "",
      "status": "yes",
      "note": "PythonRandom/NumpyRandom.cs, verified vs CPython 3.12 / numpy 2.2.6"
    },
    {
      "path": [
        "AI",
        "Model & kernels",
        "GPT transformer (RoPE, QK-norm, relu2)"
      ],
      "value": "",
      "status": "yes",
      "note": "NanoGpt.cs/TransformerBlock.cs, gradient-checked"
    },
    {
      "path": [
        "AI",
        "Model & kernels",
        "Grouped-query attention"
      ],
      "value": "",
      "status": "yes",
      "note": "incl. cached GQA windowed kernel"
    },
    {
      "path": [
        "AI",
        "Model & kernels",
        "Sliding-window attention"
      ],
      "value": "SSSL",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Model & kernels",
        "Value embeddings + gates"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Model & kernels",
        "Smear + backout"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Model & kernels",
        "Optimized attention kernels"
      ],
      "value": "custom CUDA",
      "status": "partial",
      "note": "own kernels, no FA3; cudaDeviceSynchronize after every launch, 53 sites (3.9)"
    },
    {
      "path": [
        "AI",
        "Model & kernels",
        "Backward pass"
      ],
      "value": "hand-written",
      "status": "yes",
      "note": "~15 CUDA backward kernels, central-difference gradient-checked"
    },
    {
      "path": [
        "AI",
        "Pretraining",
        "Base training loop"
      ],
      "value": "",
      "status": "yes",
      "note": "Trainer.cs + EngineService.cs (8 pipeline stages)"
    },
    {
      "path": [
        "AI",
        "Pretraining",
        "Muon + AdamW optimizer"
      ],
      "value": "",
      "status": "yes",
      "note": "MuonAdamW.cs + optim.cu, verified; CPU stage trace mirror"
    },
    {
      "path": [
        "AI",
        "Pretraining",
        "LR/momentum/WD schedules"
      ],
      "value": "",
      "status": "yes",
      "note": "TrainingSchedule.cs, verified at every boundary"
    },
    {
      "path": [
        "AI",
        "Pretraining",
        "Scaling-law autotuning"
      ],
      "value": "opt-in",
      "status": "yes",
      "note": "PinnedTrainingScalePolicy.cs"
    },
    {
      "path": [
        "AI",
        "Pretraining",
        "Gradient accumulation"
      ],
      "value": "",
      "status": "yes",
      "note": "GPU-resident; adds optional clipping beyond upstream (3.6)"
    },
    {
      "path": [
        "AI",
        "Pretraining",
        "Resume mid-run"
      ],
      "value": "",
      "status": "yes",
      "note": "TrainingCheckpointStore.cs + TrainingRunSignature.cs validation"
    },
    {
      "path": [
        "AI",
        "Pretraining",
        "In-training evals & samples"
      ],
      "value": "",
      "status": "partial",
      "note": "validate loop + telemetry; no in-training CORE/wandb equivalent"
    },
    {
      "path": [
        "AI",
        "SFT",
        "SFT training flow"
      ],
      "value": "",
      "status": "yes",
      "note": "ChatSftSchedule.cs + TaskDataPipeline.cs (5 objective kinds)"
    },
    {
      "path": [
        "AI",
        "SFT",
        "Data mixture (SmolTalk+MMLU+GSM8K)"
      ],
      "value": "",
      "status": "yes",
      "note": "ChatSftDatasetComposer.cs, upstream shuffle-then-cap order"
    },
    {
      "path": [
        "AI",
        "SFT",
        "Progress-driven LR schedule"
      ],
      "value": "",
      "status": "yes",
      "note": "ChatSftProgressPolicy.cs"
    },
    {
      "path": [
        "AI",
        "SFT",
        "Optimizer warm-start from base"
      ],
      "value": "",
      "status": "no",
      "note": "resume exists, but no cross-stage momentum warm-start found"
    },
    {
      "path": [
        "AI",
        "Reinforcement learning",
        "GRPO rollouts & advantages"
      ],
      "value": "",
      "status": "yes",
      "note": "GrpoRollout.cs, tested; PARITY.md 'absent' row is stale"
    },
    {
      "path": [
        "AI",
        "Reinforcement learning",
        "RL training loop"
      ],
      "value": "",
      "status": "partial",
      "note": "RlTrainingLoop.cs complete at model level; no UI activity, no rl lineage"
    },
    {
      "path": [
        "AI",
        "Reinforcement learning",
        "pass@k evaluation"
      ],
      "value": "",
      "status": "yes",
      "note": "MultiSampleProblemEvaluator.cs"
    },
    {
      "path": [
        "AI",
        "Evaluation",
        "CORE benchmark"
      ],
      "value": "22 tasks",
      "status": "yes",
      "note": "3 scoring rules + few-shot sampler, verified; bundle projected to JSONL"
    },
    {
      "path": [
        "AI",
        "Evaluation",
        "Bits-per-byte metric"
      ],
      "value": "",
      "status": "yes",
      "note": "BpbBenchmark.cs exact byte accounting; pilot with provenance"
    },
    {
      "path": [
        "AI",
        "Evaluation",
        "ChatCORE aggregate"
      ],
      "value": "",
      "status": "partial",
      "note": "unscoreable while HumanEval is not executed (3.8)"
    },
    {
      "path": [
        "AI",
        "Evaluation",
        "GSM8K evaluation"
      ],
      "value": "",
      "status": "yes",
      "note": "Gsm8kBenchmark.cs, durable resumable runs"
    },
    {
      "path": [
        "AI",
        "Evaluation",
        "HumanEval execution"
      ],
      "value": "",
      "status": "no",
      "note": "prepares 164 tasks but refuses to score without isolated executor (deliberate, D-02)"
    },
    {
      "path": [
        "AI",
        "Evaluation",
        "MMLU/ARC categorical eval"
      ],
      "value": "",
      "status": "yes",
      "note": "pinned rendering + restricted answer labels"
    },
    {
      "path": [
        "AI",
        "Evaluation",
        "Inference benchmark"
      ],
      "value": "",
      "status": "yes",
      "note": "InferenceBenchmark.cs: first-token latency + decode tok/s"
    },
    {
      "path": [
        "AI",
        "Evaluation",
        "Durable eval history & integrity"
      ],
      "value": "",
      "status": "yes",
      "note": "EvaluationHistory.cs + BenchmarkFileIntegrity.cs (SHA-256 gates)"
    },
    {
      "path": [
        "AI",
        "Inference engine",
        "KV-cache incremental decode"
      ],
      "value": "",
      "status": "yes",
      "note": "KvCache.cs + cached GQA windowed kernel"
    },
    {
      "path": [
        "AI",
        "Inference engine",
        "Prefill-once, clone-for-samples"
      ],
      "value": "",
      "status": "no",
      "note": "GenerateBatch loops different prompts; no KV-replicate n-row decode (B-3)"
    },
    {
      "path": [
        "AI",
        "Inference engine",
        "Streaming generation"
      ],
      "value": "",
      "status": "yes",
      "note": "GenerateStream with per-token callback, cancellable"
    },
    {
      "path": [
        "AI",
        "Inference engine",
        "Temperature/top-k sampling"
      ],
      "value": "",
      "status": "yes",
      "note": "InferenceOptions.cs"
    },
    {
      "path": [
        "AI",
        "Inference engine",
        "Calculator tool-use loop"
      ],
      "value": "",
      "status": "yes",
      "note": "ToolUseStateMachine.cs + CalculatorTool.cs, Python-exact formatting"
    },
    {
      "path": [
        "AI",
        "Inference engine",
        "Multi-turn chat session"
      ],
      "value": "",
      "status": "yes",
      "note": "ChatSession.cs, token-native with legacy fallback"
    },
    {
      "path": [
        "AI",
        "Inference engine",
        "CPU fallback inference"
      ],
      "value": "",
      "status": "yes",
      "note": "CpuModel.cs, parity-tested against CUDA"
    },
    {
      "path": [
        "UI",
        "Chat CLI"
      ],
      "value": "",
      "status": "no",
      "note": "no dotnet CLI entrypoint; WPF app or MCP only"
    },
    {
      "path": [
        "UI",
        "Web chat UI"
      ],
      "value": "",
      "status": "no",
      "note": "no HTTP chat server counterpart"
    },
    {
      "path": [
        "UI",
        "MCP server"
      ],
      "value": "21 tools",
      "status": "yes",
      "note": "ASP.NET MCP on port 5110: training/models/chat/datasets/inference/bpb-pilot"
    },
    {
      "path": [
        "UI",
        "Desktop observatory app"
      ],
      "value": "18 activities",
      "status": "yes",
      "note": "WPF VsCode-style shell (Dpp.Nano.WinApp)"
    },
    {
      "path": [
        "UI",
        "Architecture visualizers"
      ],
      "value": "12 renderers",
      "status": "partial",
      "note": "41 synthetic Random sites; ~4 of ~99 render entry points read the real model"
    },
    {
      "path": [
        "UI",
        "Interactive tokenizer explorer"
      ],
      "value": "",
      "status": "yes",
      "note": "live retokenization, vocab + merge-history browsers"
    },
    {
      "path": [
        "UI",
        "Training workflow UI"
      ],
      "value": "",
      "status": "yes",
      "note": "TrainingActionCatalog.cs: actions with preconditions, run cards, ETA"
    },
    {
      "path": [
        "UI",
        "End-to-end speedrun script"
      ],
      "value": "",
      "status": "no",
      "note": "no speedrun.sh equivalent"
    },
    {
      "path": [
        "AI",
        "Infrastructure",
        "Checkpoint save/load + resume"
      ],
      "value": "schema v11",
      "status": "yes",
      "note": "atomic publish, latest.txt, mid-epoch resume"
    },
    {
      "path": [
        "AI",
        "Infrastructure",
        "Model lineage registry (base/sft/rl)"
      ],
      "value": "",
      "status": "partial",
      "note": "lineage/tag/step inventory exists; no rl lineage yet"
    },
    {
      "path": [
        "AI",
        "Infrastructure",
        "Model deploy/rollback registry"
      ],
      "value": "",
      "status": "yes",
      "note": "ModelRegistry.cs: register-activate-rollback per task kind"
    },
    {
      "path": [
        "AI",
        "Infrastructure",
        "Artifact integrity (hashes)"
      ],
      "value": "SHA-256",
      "status": "yes",
      "note": "ModelArtifactStore.cs sidecars enforced by both loaders"
    },
    {
      "path": [
        "AI",
        "Infrastructure",
        "Cross-implementation checkpoint import"
      ],
      "value": "",
      "status": "partial",
      "note": "UpstreamCheckpointImporter.cs + exporter; never run against a real upstream checkpoint; no meta emission"
    },
    {
      "path": [
        "AI",
        "Infrastructure",
        "Distributed multi-GPU training"
      ],
      "value": "",
      "status": "no",
      "note": "single-GPU only (3.5)"
    },
    {
      "path": [
        "AI",
        "Infrastructure",
        "Mixed precision (bf16/FP8)"
      ],
      "value": "fp32 only",
      "status": "no",
      "note": "~2x embedding/KV memory; open decision (3.3, D-01)"
    },
    {
      "path": [
        "AI",
        "Infrastructure",
        "Config provenance tracking"
      ],
      "value": "",
      "status": "yes",
      "note": "ConfigProvenance.cs: chosen vs derived, diffable vs upstream defaults"
    }
  ]
}
