module Coppelius.Model import Coppelius.Learner import Model.Architecture import Model.Config import Model.Parameter import Model.Word32 import Std.Word -- Coppelius is the 60M-class dense attention transformer inspired by -- huggingface.co/ajaxdavis/alpha-60m-base: 16 layers, width 512, 8 heads of -- 64, FFN 1408, vocabulary 12288, context 1024, RoPE, RMSNorm, tied -- embeddings, no matrix biases, and an exact-vocabulary objective. -- -- The physically qualified SM86 realization recorded in docs/WORKLOG.md uses -- LayerNorm and a gated GELU feed-forward block because those are the -- maintained SM86 owners. The reference family remains explicit here rather -- than silently encoding realization-specific padding or substitutions. def modelCoppeliusVocab : StdU32 = 12_288 def modelCoppeliusBlock : StdU32 = 1_024 def modelCoppeliusLayers : StdU32 = 16 def modelCoppeliusWidth : StdU32 = 512 def modelCoppeliusHeads : StdU32 = 8 def modelCoppeliusFfnWidth : StdU32 = 1_408 def modelCoppeliusOne : StdU32 = 1 -- the rotary positions' base: head-dimension pair i of a head width w turns -- at theta_i = base^(-2i / w) radians per position def coppeliusRotaryBase : Nat = 10000 -- a fresh model's matrices (the embedding, and every layer's projections) -- are drawn with standard deviation 1 / this; the norms' gains are one and -- their shifts zero def coppeliusInitializationDeviationDenominator : Nat = 50 def modelCoppelius = (record ModelConfig (modelVocabSize = modelCoppeliusVocab) (modelBlockSize = modelCoppeliusBlock) (modelLayers = modelCoppeliusLayers) (modelWidth = modelCoppeliusWidth) (modelHeads = modelCoppeliusHeads) (modelFfnStoredWidth = modelCoppeliusFfnWidth) (modelExperts = modelCoppeliusOne) (modelTopK = modelCoppeliusOne) (modelRoute = (constructor ModelRouteKind ModelCyclicRoute)) (modelStackedExperts = (constructor ModelBoolean ModelFalse)) (modelHeadRank = (constructor ModelOptionalWord32 ModelNoWord32)) (modelAttentionRank = (constructor ModelOptionalWord32 ModelNoWord32)) (modelPositionEncoding = (constructor ModelPositionEncoding ModelRotaryPositions)) (modelNormKind = (constructor ModelNormKind ModelRMSNormalization)) (modelTieEmbeddings = (constructor ModelBoolean ModelTrue)) (modelObjective = coppeliusObjective))