Download src/model/config.py from lollix91/boccaccioAI: direct link, hf CLI and curl.
- Browser
- Download file 2.06 kB
-
https://huggingface.co/lollix91/boccaccioAI/resolve/main/src/model/config.py
- Command line
-
hf download hf://lollix91/boccaccioAI/src/model/config.py
-
curl -L -o config.py https://huggingface.co/lollix91/boccaccioAI/resolve/main/src/model/config.py
2.06 kB
| from __future__ import annotations | |
| from dataclasses import dataclass | |
| from pathlib import Path | |
| import yaml | |
| class BoccaccioConfig: | |
| vocab_size: int = 32000 | |
| hidden_size: int = 1536 | |
| num_layers: int = 26 | |
| num_attention_heads: int = 12 | |
| num_kv_heads: int = 4 | |
| intermediate_size: int = 4096 | |
| max_position_embeddings: int = 2048 | |
| activation_function: str = "swiglu" | |
| positional_embedding: str = "rope" | |
| rope_theta: float = 10000.0 | |
| norm_type: str = "rmsnorm" | |
| norm_eps: float = 1e-5 | |
| attention_dropout: float = 0.0 | |
| hidden_dropout: float = 0.0 | |
| embedding_dropout: float = 0.0 | |
| initializer_range: float = 0.02 | |
| tie_word_embeddings: bool = True | |
| def __post_init__(self) -> None: | |
| self.validate() | |
| def head_dim(self) -> int: | |
| return self.hidden_size // self.num_attention_heads | |
| def validate(self) -> None: | |
| if self.hidden_size % self.num_attention_heads != 0: | |
| raise ValueError( | |
| f"hidden_size ({self.hidden_size}) must be divisible by " | |
| f"num_attention_heads ({self.num_attention_heads})" | |
| ) | |
| if self.num_attention_heads % self.num_kv_heads != 0: | |
| raise ValueError( | |
| f"num_attention_heads ({self.num_attention_heads}) must be divisible by " | |
| f"num_kv_heads ({self.num_kv_heads})" | |
| ) | |
| def from_yaml(cls, path: str, variant: str = "model") -> BoccaccioConfig: | |
| raw = Path(path).read_text(encoding="utf-8") | |
| data = yaml.safe_load(raw) | |
| section = data[variant] | |
| fields = {f.name for f in cls.__dataclass_fields__.values()} | |
| kwargs = {k: v for k, v in section.items() if k in fields} | |
| return cls(**kwargs) | |
| def nano(cls) -> BoccaccioConfig: | |
| return cls( | |
| hidden_size=256, | |
| num_layers=4, | |
| num_attention_heads=8, | |
| num_kv_heads=2, | |
| intermediate_size=704, | |
| max_position_embeddings=512, | |
| ) | |