{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://moemodels.ai/schemas/hub-catalog-v1.json","title":"MOEModels Hub-derived catalogue v1","description":"A snapshot of expert-routed model repositories derived from the Hugging Face Hub API. Evidence class hub_derived: computed mechanically from publisher metadata, never measured by MOEModels and never human-reviewed. The derived data is published under CC BY 4.0; the model weights it describes are not, and carry the licence recorded on each record. Objects below do not forbid additional properties, so a later ingestion can add a field without invalidating this schema; every property named here keeps the meaning stated here.","type":"object","required":["schemaVersion","kind","evidenceClass","generatedAt","source","counts","records"],"properties":{"schemaVersion":{"const":"1.0.0"},"kind":{"const":"hub_catalog"},"evidenceClass":{"const":"hub_derived","description":"Every field was computed from a Hugging Face Hub API response. Not a measurement and not a reviewed registry record."},"generatedAt":{"type":"string","format":"date-time","description":"When the snapshot was taken. The file is a point in time, not a live view."},"source":{"type":"object","required":["publisher","api","termsUrl"],"properties":{"publisher":{"const":"Hugging Face"},"api":{"const":"https://huggingface.co/api/models"},"termsUrl":{"type":"string","format":"uri"}}},"counts":{"type":"object","required":["records","mixtureOfExperts","withExactParameterCount"],"properties":{"records":{"type":"integer","minimum":0},"mixtureOfExperts":{"type":"integer","minimum":0},"withExactParameterCount":{"type":"integer","minimum":0,"description":"Records whose total parameter count was established by the safetensors index rather than estimated."}}},"records":{"type":"array","items":{"$ref":"#/$defs/catalogRecord"}}},"$defs":{"undeterminedValue":{"title":"Undetermined","type":"object","additionalProperties":false,"required":["status","reason"],"properties":{"status":{"const":"undetermined"},"reason":{"type":"string","minLength":1,"description":"Why the Hub response does not establish the value. Present so a blank field can be read rather than guessed at."}}},"parameterBreakdown":{"type":"object","additionalProperties":false,"required":["dtype","parameters","bytesPerParameter","bytes"],"properties":{"dtype":{"type":"string","minLength":1,"description":"dtype exactly as the Hub reports it, e.g. BF16, F8_E4M3."},"parameters":{"type":"integer","minimum":0},"bytesPerParameter":{"type":"number","minimum":0,"description":"Fractional for sub-byte dtypes: a packed 4-bit tensor is 0.5."},"bytes":{"type":"number","minimum":0}}},"catalogAccess":{"enum":["open","gated_automatic","gated_manual"],"description":"A gated repository still publishes this metadata. Its weights require an accepted licence and an authenticated request."},"expertProfile":{"type":"object","required":["routedExperts","expertsPerToken","sharedExperts","routingSparsity"],"properties":{"routedExperts":{"description":"Total routed experts per MoE layer.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"integer","minimum":0},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"expertsPerToken":{"description":"Experts activated per token.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"integer","minimum":0},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"sharedExperts":{"description":"Always-on shared experts, where the architecture declares them.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"integer","minimum":0},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"routingSparsity":{"description":"routedExperts / expertsPerToken. A routing ratio, not an active-parameter count: attention, embedding and shared-expert weights are dense, so active parameters cannot be derived from the Hub API alone.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"number","minimum":0},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]}}},"artifactSizing":{"type":"object","required":["totalParameters","tensorBytes","breakdown","nativelyCompressed"],"properties":{"totalParameters":{"description":"Total parameters from the safetensors index.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"integer","minimum":0},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"tensorBytes":{"description":"Sum over dtypes of parameters x width. Undetermined for packed-quantisation checkpoints (MLX, GPTQ, AWQ and similar), where low-bit weights sit inside wider integer containers and element count x container width would overstate the real size.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"number","minimum":0},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"breakdown":{"description":"Per-dtype parameter counts and bytes, which is what makes tensorBytes checkable.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"array","items":{"$ref":"#/$defs/parameterBreakdown"}},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"nativelyCompressed":{"description":"True when any tensor dtype is narrower than 16 bits.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"boolean"},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"repositoryBytes":{"description":"Total repository bytes from usedStorage: the download size and an upper bound on weight bytes, since it also counts tokenizer files, configs and any extra formats the publisher ships. The value is copied from the Hub verbatim and is deliberately NOT constrained to be non-negative, because the Hub reports a negative usedStorage for a small number of repositories — an upstream accounting defect the snapshot preserves rather than silently corrects. Check the sign before using it; the catalogue API publishes a negative repository size as null. Present only in snapshots produced by an ingestion build that computes it.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"integer"},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"quantizationBits":{"description":"Declared weight bit-width for a packed-quantisation checkpoint. Present only in snapshots produced by an ingestion build that computes it.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"integer","minimum":1},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"packedQuantization":{"type":"boolean","description":"True when weights are packed into wider integer containers. Present only in snapshots produced by an ingestion build that computes it."}}},"catalogRecord":{"type":"object","required":["id","owner","name","revision","architecture","architectureClasses","isMixtureOfExperts","experts","sizing","contextTokens","license","quantizationMethod","chatTemplatePresent","access","pipeline","library","downloads","likes","createdAt","lastModified","fileCount","baseModel","sourceUrl","apiUrl"],"properties":{"id":{"type":"string","pattern":"^[^/]+/[^/]+$","description":"owner/name exactly as the Hub addresses the repository."},"owner":{"description":"Publishing account.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"string","minLength":1},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"name":{"type":"string","minLength":1},"revision":{"description":"Commit SHA of the indexed revision. This is what makes a record exact: two records with different SHAs describe different artifacts under the same name.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"string","pattern":"^[a-f0-9]{40}$"},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"architecture":{"description":"config.model_type.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"string","minLength":1},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"architectureClasses":{"description":"config.architectures.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"array","items":{"type":"string","minLength":1}},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"isMixtureOfExperts":{"type":"boolean","description":"True when the published config declares expert routing."},"experts":{"$ref":"#/$defs/expertProfile"},"sizing":{"$ref":"#/$defs/artifactSizing"},"contextTokens":{"description":"max_position_embeddings. Trained context is a model-card claim, not a derivable fact.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"integer","minimum":0},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"license":{"description":"The licence identifier the publisher declared in card metadata. An undetermined licence is not permission: without a grant, default copyright applies to the weights.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"string","minLength":1},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"quantizationMethod":{"description":"Declared quantisation method.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"string","minLength":1},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"chatTemplatePresent":{"description":"Whether the tokenizer config ships a chat template.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"boolean"},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"access":{"$ref":"#/$defs/catalogAccess"},"pipeline":{"description":"pipeline_tag.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"string","minLength":1},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"library":{"description":"library_name.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"string","minLength":1},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"downloads":{"description":"The Hub's own download count. Hugging Face counts every GET and HEAD on a repository's query files and counts GGUF files individually, which double-counts a repository clone. It orders a listing; it does not measure adoption.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"integer","minimum":0},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"likes":{"description":"The Hub's own like count.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"integer","minimum":0},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"createdAt":{"description":"Repository creation time.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"string","format":"date-time"},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"lastModified":{"description":"Last modification time of the repository.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"string","format":"date-time"},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"fileCount":{"description":"Files in the repository at the indexed revision.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"integer","minimum":0},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"baseModel":{"description":"Declared base model, where the card names one.","oneOf":[{"title":"Derived","type":"object","additionalProperties":false,"required":["status","value","derivedFrom"],"properties":{"status":{"const":"derived"},"value":{"type":"string","minLength":1},"derivedFrom":{"type":"string","minLength":1,"description":"Dotted path into the Hugging Face model API response the value was computed from, e.g. safetensors.parameters."}}},{"$ref":"#/$defs/undeterminedValue"}]},"sourceUrl":{"type":"string","format":"uri","description":"Canonical Hub URL for the exact revision."},"apiUrl":{"type":"string","format":"uri","description":"The API endpoint the record was derived from."}}}}}