lalamo 0.5.16__py3-none-any.whl → 0.6.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. lalamo/__init__.py +26 -2
  2. lalamo/commands.py +429 -0
  3. lalamo/common.py +14 -1
  4. lalamo/main.py +375 -229
  5. lalamo/message_processor.py +4 -1
  6. lalamo/model_import/common.py +8 -17
  7. lalamo/model_import/decoder_configs/huggingface/lfm2.py +14 -4
  8. lalamo/model_import/decoder_configs/huggingface/llamba.py +2 -2
  9. lalamo/model_import/decoder_configs/huggingface/modern_bert.py +2 -2
  10. lalamo/model_import/huggingface_generation_config.py +21 -3
  11. lalamo/model_import/loaders/executorch.py +2 -2
  12. lalamo/model_import/loaders/huggingface.py +3 -3
  13. lalamo/model_import/model_specs/common.py +8 -4
  14. lalamo/model_import/model_specs/lfm2.py +41 -9
  15. lalamo/models/common.py +3 -3
  16. lalamo/models/language_model.py +7 -6
  17. lalamo/modules/activations.py +1 -1
  18. lalamo/modules/classifier.py +11 -24
  19. lalamo/modules/common.py +4 -1
  20. lalamo/modules/decoder.py +5 -11
  21. lalamo/modules/embedding.py +25 -62
  22. lalamo/modules/linear.py +19 -33
  23. lalamo/modules/mlp.py +9 -19
  24. lalamo/modules/mlx_interop.py +1 -1
  25. lalamo/modules/rope.py +1 -1
  26. lalamo/modules/token_mixers/__init__.py +1 -1
  27. lalamo/modules/token_mixers/attention.py +9 -27
  28. lalamo/modules/token_mixers/mamba.py +9 -24
  29. lalamo/modules/token_mixers/short_conv.py +5 -12
  30. lalamo/modules/transformer.py +10 -20
  31. lalamo/modules/transformer_layer.py +8 -20
  32. lalamo/registry_abc.py +4 -4
  33. lalamo/safetensors.py +97 -0
  34. lalamo/sampling.py +14 -0
  35. lalamo/speculator/estimator.py +11 -4
  36. lalamo/speculator/ngram.py +1 -1
  37. lalamo/utils.py +0 -13
  38. {lalamo-0.5.16.dist-info → lalamo-0.6.0.dist-info}/METADATA +1 -2
  39. {lalamo-0.5.16.dist-info → lalamo-0.6.0.dist-info}/RECORD +43 -41
  40. {lalamo-0.5.16.dist-info → lalamo-0.6.0.dist-info}/WHEEL +0 -0
  41. {lalamo-0.5.16.dist-info → lalamo-0.6.0.dist-info}/entry_points.txt +0 -0
  42. {lalamo-0.5.16.dist-info → lalamo-0.6.0.dist-info}/licenses/LICENSE +0 -0
  43. {lalamo-0.5.16.dist-info → lalamo-0.6.0.dist-info}/top_level.txt +0 -0
lalamo/safetensors.py ADDED
@@ -0,0 +1,97 @@
1
+ import json
2
+ import struct
3
+ from collections.abc import Mapping
4
+ from dataclasses import dataclass
5
+ from io import BufferedReader, BufferedWriter
6
+ from typing import Any, ClassVar, Self
7
+
8
+ import cattrs
9
+ import jax
10
+ import jax.numpy as jnp
11
+ import numpy as np
12
+ from jaxtyping import Array
13
+
14
+ from lalamo.utils import LazyDict
15
+
16
+ SF2J = {
17
+ "BOOL": jnp.dtype(jnp.bool_),
18
+ "U8": jnp.dtype(jnp.uint8),
19
+ "I8": jnp.dtype(jnp.int8),
20
+ "I16": jnp.dtype(jnp.int16),
21
+ "U16": jnp.dtype(jnp.uint16),
22
+ "F16": jnp.dtype(jnp.float16),
23
+ "BF16": jnp.dtype(jnp.bfloat16),
24
+ "I32": jnp.dtype(jnp.int32),
25
+ "U32": jnp.dtype(jnp.uint32),
26
+ "F32": jnp.dtype(jnp.float32),
27
+ "C64": jnp.dtype(jnp.complex64),
28
+ "F64": jnp.dtype(jnp.float64),
29
+ "I64": jnp.dtype(jnp.int64),
30
+ "U64": jnp.dtype(jnp.uint64),
31
+ }
32
+
33
+ J2SF = {v: k for k, v in SF2J.items()}
34
+
35
+
36
+ @dataclass(frozen=True)
37
+ class SFTensorInfo:
38
+ _converter: ClassVar[cattrs.Converter] = cattrs.Converter()
39
+ _converter.register_structure_hook(jnp.dtype, lambda x, _: SF2J[x])
40
+ _converter.register_unstructure_hook(jnp.dtype, lambda x: J2SF[x])
41
+
42
+ dtype: jnp.dtype
43
+ shape: tuple[int, ...]
44
+ data_offsets: tuple[int, int]
45
+
46
+ @property
47
+ def start(self) -> int:
48
+ return self.data_offsets[0]
49
+
50
+ @property
51
+ def end(self) -> int:
52
+ return self.data_offsets[1]
53
+
54
+ @property
55
+ def size(self) -> int:
56
+ return self.end - self.start
57
+
58
+ @classmethod
59
+ def from_dict(cls, obj: dict) -> Self:
60
+ return cls._converter.structure(obj, cls)
61
+
62
+ def to_dict(self) -> dict:
63
+ return self._converter.unstructure(self)
64
+
65
+
66
+ def safe_read(fd: BufferedReader) -> tuple[dict[str, str] | None, LazyDict[str, Array]]:
67
+ header_size = struct.unpack("<Q", fd.read(8))[0]
68
+ header: dict[str, dict[str, Any]] = json.loads(fd.read(header_size))
69
+ metadata: dict[str, str] | None = header.pop("__metadata__", None)
70
+ data_offset = fd.tell()
71
+
72
+ def _load_tensor(key: str) -> Array:
73
+ info = SFTensorInfo.from_dict(header[key])
74
+ fd.seek(data_offset + info.start)
75
+ return jnp.asarray(np.fromfile(fd, info.dtype, info.size // info.dtype.itemsize)).reshape(info.shape)
76
+
77
+ lazy_tensors = LazyDict(set(header.keys()), _load_tensor)
78
+ return (metadata, lazy_tensors)
79
+
80
+
81
+ def safe_write(fd: BufferedWriter, tensors: Mapping[str, Array]) -> None:
82
+ sorted_tensors = dict(sorted(tensors.items(), key=lambda x: (-x[1].dtype.alignment, x[0])))
83
+
84
+ header_dict = {}
85
+ offset = 0
86
+ for key, tensor in sorted_tensors.items():
87
+ assert offset % tensor.dtype.alignment == 0
88
+ header_dict[key] = SFTensorInfo(tensor.dtype, tensor.shape, (offset, offset + tensor.nbytes)).to_dict()
89
+ offset += tensor.nbytes
90
+
91
+ data_alignment = max(8, next((t.dtype.alignment for t in sorted_tensors.values()), 1))
92
+ header = json.dumps(header_dict).encode()
93
+ header += b" " * (-len(header) % data_alignment)
94
+ fd.write(struct.pack("<Q", len(header)) + header)
95
+
96
+ for tensor in sorted_tensors.values():
97
+ jax.device_get(tensor).tofile(fd)
lalamo/sampling.py CHANGED
@@ -1,5 +1,6 @@
1
1
  from abc import abstractmethod
2
2
  from collections.abc import Iterable
3
+ from math import log
3
4
 
4
5
  import equinox as eqx
5
6
  import jax
@@ -10,6 +11,7 @@ __all__ = [
10
11
  "BanTokensPolicy",
11
12
  "CompositePolicy",
12
13
  "GreedyPolicy",
14
+ "MinPPolicy",
13
15
  "SamplingPolicy",
14
16
  "TemperaturePolicy",
15
17
  "TopKPolicy",
@@ -64,6 +66,15 @@ class TopPPolicy(SamplingPolicy):
64
66
  return jnp.where(to_remove_unsorted, -jnp.inf, logits)
65
67
 
66
68
 
69
+ class MinPPolicy(SamplingPolicy):
70
+ p: float = eqx.field(static=True)
71
+
72
+ def process_logits(self, logits: Float[Array, " vocabulary"]) -> Float[Array, " vocabulary"]:
73
+ max_logit = jnp.max(logits)
74
+ logit_cutoff = max_logit + log(self.p)
75
+ return jnp.where(logits >= logit_cutoff, logits, -jnp.inf)
76
+
77
+
67
78
  class BanTokensPolicy(SamplingPolicy):
68
79
  banned_tokens: tuple[int, ...] = eqx.field(static=True)
69
80
 
@@ -85,6 +96,7 @@ def make_policy(
85
96
  temperature: float | None = None,
86
97
  top_k: int | None = None,
87
98
  top_p: float | None = None,
99
+ min_p: float | None = None,
88
100
  banned_tokens: Iterable[int] | None = None,
89
101
  ) -> SamplingPolicy:
90
102
  policies = []
@@ -96,4 +108,6 @@ def make_policy(
96
108
  policies.append(TopKPolicy(top_k))
97
109
  if top_p is not None:
98
110
  policies.append(TopPPolicy(top_p))
111
+ if min_p is not None:
112
+ policies.append(MinPPolicy(min_p))
99
113
  return CompositePolicy(tuple(policies))
@@ -9,6 +9,13 @@ import jax.numpy as jnp
9
9
  from lalamo.models import LanguageModel
10
10
 
11
11
 
12
+ def get_default_device_memory() -> int | None:
13
+ memory_stats = jax.local_devices()[0].memory_stats()
14
+ if memory_stats is None or "bytes_limit" not in memory_stats:
15
+ return None
16
+ return memory_stats["bytes_limit"]
17
+
18
+
12
19
  def estimate_memory_from_batchsize(
13
20
  model: LanguageModel,
14
21
  max_input_length: int,
@@ -23,7 +30,7 @@ def estimate_memory_from_batchsize(
23
30
  max_output_length=max_output_length,
24
31
  num_top_logits_to_return=num_logits_per_token,
25
32
  ),
26
- backend="cpu", # cuda backend tries to allocate in .compile() and ooms
33
+ backend="cpu", # cuda backend tries to allocate in .compile() and ooms
27
34
  )
28
35
  .lower(
29
36
  model,
@@ -39,9 +46,9 @@ def estimate_memory_from_batchsize(
39
46
  assert hasattr(memory_analysis, "temp_size_in_bytes")
40
47
 
41
48
  return (
42
- memory_analysis.argument_size_in_bytes # type: ignore (pyright bug)
43
- + memory_analysis.output_size_in_bytes # type: ignore (pyright bug)
44
- + memory_analysis.temp_size_in_bytes # type: ignore (pyright bug)
49
+ memory_analysis.argument_size_in_bytes
50
+ + memory_analysis.output_size_in_bytes
51
+ + memory_analysis.temp_size_in_bytes
45
52
  )
46
53
 
47
54
 
@@ -129,7 +129,7 @@ class NGramSpeculator(Speculator):
129
129
 
130
130
  return (
131
131
  memoryview(self.ngram_keys)[idx_start:idx_end],
132
- memoryview(self.ngram_values)[idx_start:idx_end], # type: ignore (typechecker bug)
132
+ memoryview(self.ngram_values)[idx_start:idx_end].cast("f"), # noop cast to make typechecker happy
133
133
  memoryview(self.ngram_counts)[seq_hash : (seq_hash + 1)],
134
134
  )
135
135
 
lalamo/utils.py CHANGED
@@ -9,21 +9,17 @@ from collections.abc import (
9
9
  Sequence,
10
10
  ValuesView,
11
11
  )
12
- from contextlib import contextmanager
13
12
  from dataclasses import dataclass
14
- from pathlib import Path
15
13
  from typing import overload
16
14
 
17
15
  import einops
18
16
  import jax.numpy as jnp
19
17
  from jaxtyping import Array
20
- from safetensors import safe_open
21
18
 
22
19
  __all__ = [
23
20
  "MapDictValues",
24
21
  "MapSequence",
25
22
  "jax_uint4_to_packed_uint8",
26
- "open_safetensors",
27
23
  "process_chat_template",
28
24
  ]
29
25
 
@@ -45,15 +41,6 @@ class LazyDict[K, V](Mapping[K, V]):
45
41
  return len(self.stored_keys)
46
42
 
47
43
 
48
- @contextmanager
49
- def open_safetensors(filename: Path | str) -> Iterator[tuple[Mapping[str, Array], Mapping[str, str]]]:
50
- with safe_open(filename, framework="flax") as safetensors_nonsense:
51
- yield (
52
- LazyDict(set(safetensors_nonsense.keys()), safetensors_nonsense.get_tensor),
53
- safetensors_nonsense.metadata(),
54
- )
55
-
56
-
57
44
  @dataclass(frozen=True)
58
45
  class MapIterable[OldT, NewT](Iterable[NewT]):
59
46
  map_func: Callable[[OldT], NewT]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lalamo
3
- Version: 0.5.16
3
+ Version: 0.6.0
4
4
  Summary: JAX library for optimization and export of models for use with the UZU inference engine.
5
5
  Requires-Python: <4,>=3.12
6
6
  Description-Content-Type: text/markdown
@@ -19,7 +19,6 @@ Requires-Dist: rich>=14.0.0
19
19
  Requires-Dist: thefuzz>=0.22.1
20
20
  Requires-Dist: tokenizers>=0.21.2
21
21
  Requires-Dist: typer>=0.15.1
22
- Requires-Dist: safetensors>=0.6.2
23
22
  Requires-Dist: polars>=1.33.1
24
23
  Requires-Dist: xxhash>=3.5.0
25
24
  Provides-Extra: cpu
@@ -1,18 +1,20 @@
1
- lalamo/__init__.py,sha256=FjfGsBVSl14mNsDoFJEwXMRUq1-Kg_lessRzlJNG3KM,815
2
- lalamo/common.py,sha256=5NUFD26yQgOnEEk3LaQnce8n-VwJxILkEpFesHZhtQU,3820
3
- lalamo/main.py,sha256=GgUT7lT48-XQuAEH7qzsDKG8Lx9iBf-sYBIRhZL9q7E,23978
4
- lalamo/message_processor.py,sha256=bSUAQg7CemLTnBV4LtPxJBicAalruDCA-JXjkTYPZ8U,5797
1
+ lalamo/__init__.py,sha256=vJX2fu1UJdIdtVlBjxWtPNTw8dEge9G2PI1eQOGF-qA,1386
2
+ lalamo/commands.py,sha256=zXyyrLTHhP9wouwtpX4RUZeEF6No-_9ee-y_GWGhw7k,10972
3
+ lalamo/common.py,sha256=WaNJx20eUX4CBF50aym9lniGAiX-SzBJzDzO5Jh6zXA,4312
4
+ lalamo/main.py,sha256=Tez84CtMxUi1ySuRSqQElu4Zr1UWs_Gw6HX1xtCZknQ,27383
5
+ lalamo/message_processor.py,sha256=PMKte9YijT3h9N7DjTNp8H4V45A_qlDqJaubqFevLX8,5924
5
6
  lalamo/quantization.py,sha256=8o6ryIZLzzDYQuvBTboPfaVVdfijAKGpTxOcg3GKVD8,2752
6
- lalamo/registry_abc.py,sha256=ENjXiD_wEH100fNjG-W5Em1L_EQ0Lf0pdRhRGvf3qZk,2197
7
- lalamo/sampling.py,sha256=g_dNiJyZrRqoQIiLid4cr6nRT9N5tSz3GtHr8Bt4n-E,3404
8
- lalamo/utils.py,sha256=QwATVXAeHBsQEDyt_31SHgxFphFVZYHpv3ZaklXks9Y,4585
7
+ lalamo/registry_abc.py,sha256=qTikqviqqeseNzkjqoyQvL4dEWJYWzN0rI05T-JNTmo,2187
8
+ lalamo/safetensors.py,sha256=kUiTSgx2zhfD1hxV_AA1DOLaKAKzjRd_vOYZCFf0em0,3048
9
+ lalamo/sampling.py,sha256=GE6Av7zS-pr5Bg7FtOivRce7I0JIYuNYqfqsRe-yjQk,3867
10
+ lalamo/utils.py,sha256=c88IP110gHZJ6hYDq7p36A9u-vLRM_YdavFom56gsNQ,4111
9
11
  lalamo/data/__init__.py,sha256=exfhBLxHrg7BWutM0tAln5QuIWlNQmOhaG2noFYxfPI,189
10
12
  lalamo/data/huggingface_message.py,sha256=-7lN9eIcETQzt1Pnx3d4d8p3_I7WYMNf4mp1P91N7fI,1115
11
13
  lalamo/data/lalamo_completions.py,sha256=U_m3UNSJASUFz3rJq_taZOtL_U4B8Oj-ndkTF-JH-v4,1509
12
14
  lalamo/data/utils.py,sha256=B96gLaULyStKYuR8wjFdTpFc6YIDC8EEvGh1eiMe_Ec,338
13
15
  lalamo/model_import/__init__.py,sha256=Z8pS9rbKKx1QgUy7KZtHxiNWlZhII3mdovT9d37vAxg,168
14
- lalamo/model_import/common.py,sha256=wvyGD-iLut_Pm3HjDMI05upqdtCW3HWeoeB0YmiFeqk,12419
15
- lalamo/model_import/huggingface_generation_config.py,sha256=mot6VQ6ezCtEhN6VjhnvaU-nR5P5T2BuBUgpFNnWJxU,1495
16
+ lalamo/model_import/common.py,sha256=MIbvK3mxgrDSXea6jujvCOu9Jjyip6MXeTsJjNTBJAU,12325
17
+ lalamo/model_import/huggingface_generation_config.py,sha256=xicv_kJOfIGlz4gi5fRFIkiAZ9_QRDLRtW8nKMm5tVU,2022
16
18
  lalamo/model_import/huggingface_tokenizer_config.py,sha256=xvwdmio7b9nhn2H3uMBVligiYj58JaCFCvHY3-8dBvM,2502
17
19
  lalamo/model_import/decoder_configs/__init__.py,sha256=YvlSsJqNEQPCNKcUzCw0MLjt8H3vcfjc4sz1OK7qdIQ,679
18
20
  lalamo/model_import/decoder_configs/common.py,sha256=L8PCgF5fIt3RqPlmLiJpBzDguKk9iTjk4XSItxwVG4c,3260
@@ -22,26 +24,26 @@ lalamo/model_import/decoder_configs/huggingface/common.py,sha256=YYIDEQy8x7lqL2q
22
24
  lalamo/model_import/decoder_configs/huggingface/gemma2.py,sha256=g8LH_GlSNyL04WWi596zI0rWsD3ahnfNjDk-9zZNcDE,4759
23
25
  lalamo/model_import/decoder_configs/huggingface/gemma3.py,sha256=UXiEyNqlD0Czc5Gj3n4hNqNDp9Ml5YzH1XZ6BXj0mgU,10223
24
26
  lalamo/model_import/decoder_configs/huggingface/gpt_oss.py,sha256=MBCoPbuWyzbJiBRtHOtpaPHJjQ1UVCAYcVrfIejTnlQ,7446
25
- lalamo/model_import/decoder_configs/huggingface/lfm2.py,sha256=vrBMxtiKEg0eHNDL_bWM9odlrsab7jlMXEY8vjEB7-c,7595
27
+ lalamo/model_import/decoder_configs/huggingface/lfm2.py,sha256=tOx4EsDGRd-87E1Q94DkbGlRBeIvBOvapfr9WeUxFYE,8027
26
28
  lalamo/model_import/decoder_configs/huggingface/llama.py,sha256=pGuBQTY6qpx6CriWwdsLpuTSRS7ECoTP1kt5pSKRlNQ,8549
27
- lalamo/model_import/decoder_configs/huggingface/llamba.py,sha256=ANB-vQK8U-zVFubZSTDXXt2S70T5SVOGzf7eOVvPzIQ,5773
29
+ lalamo/model_import/decoder_configs/huggingface/llamba.py,sha256=NVvr7_3bfcLHGRrHG3b0IylgTt-knH31oLz3yFqrkqQ,5775
28
30
  lalamo/model_import/decoder_configs/huggingface/mistral.py,sha256=MDGC0ivzJuUpOC11n8vFdcVzqccUyaRw_hkL74mVlAg,4599
29
- lalamo/model_import/decoder_configs/huggingface/modern_bert.py,sha256=A8nNIMhPVumvPWIFR3RexRc6XkFyUd_3mmNpmvyPEGE,8816
31
+ lalamo/model_import/decoder_configs/huggingface/modern_bert.py,sha256=Crh20pjSa35fP22D3J-29mv4yzdrjzW6VhOjY4Tasmg,8801
30
32
  lalamo/model_import/decoder_configs/huggingface/qwen2.py,sha256=n3qIANMPbtQsTtk5QEWWFZ6R85eDxR_kaZd0NDlJ3T4,5786
31
33
  lalamo/model_import/decoder_configs/huggingface/qwen3.py,sha256=i99mfL2DbeJ0l5aFRV84MTT-PsWf6q-8B-SGPIVGe1w,7522
32
34
  lalamo/model_import/loaders/__init__.py,sha256=3THc1wQ4EPBzQkL_4EaKCa7Ev5Z7oczcvc4AHy9v5EI,228
33
35
  lalamo/model_import/loaders/common.py,sha256=kkugV-bMQlN1zvGHoj3uc7z0FbXKoMtXEBTvyu4KxK4,1844
34
- lalamo/model_import/loaders/executorch.py,sha256=t2Ey_mBMNC8bTSTdYWjuGXdPTRoohFlYrqtWyNkBU_8,9219
35
- lalamo/model_import/loaders/huggingface.py,sha256=qWdzoSvHvb_3prn2kwfxgnYPW2bVB0Q49m_wyRYha8Q,34677
36
+ lalamo/model_import/loaders/executorch.py,sha256=JCeylxmkXT2iOfVmrvgAyP-9Th-96w3sRtssIW43Ag4,9187
37
+ lalamo/model_import/loaders/huggingface.py,sha256=4zIKuYd5-BC1nkf6rtuKxnOmefEWafv6yXuKEdxg9p4,34629
36
38
  lalamo/model_import/loaders/utils.py,sha256=eiX3WKFRrAfBY-dugodscNInl5o5w3KmVcgma4atpGY,2456
37
39
  lalamo/model_import/model_specs/__init__.py,sha256=JISqwJkloQkGD2jvi1MakNEWapIwlNXXVi5giZyXB74,1275
38
- lalamo/model_import/model_specs/common.py,sha256=RLySCIkmGiA1IVZgLeemssMBMo4hMYMpmBjV0cRwBb4,6586
40
+ lalamo/model_import/model_specs/common.py,sha256=OcE6wzDz4MsETxYdcOvRT6x6_NpsyBeIlK1Zl6qkMMo,6823
39
41
  lalamo/model_import/model_specs/deepseek.py,sha256=Umef93_ZBuq93yYsejIRNwj3udoln1gHfrv3SK5jyMo,417
40
42
  lalamo/model_import/model_specs/essential_ai.py,sha256=xbHcwRpAWhR9gOgypVzcgunFspoUEk3iNsw-46CVR4o,390
41
43
  lalamo/model_import/model_specs/gemma.py,sha256=dwKwOHU1sBJNLFAwtEyydsRUF9QENN3SHtjbfqtOSic,3876
42
44
  lalamo/model_import/model_specs/gpt_oss.py,sha256=PLo0QGrXKdX61ReTRdyOaP_EH3Dmj5lp3fpJjZRwRVA,542
43
45
  lalamo/model_import/model_specs/huggingface.py,sha256=TEkU8y95_hmUWyF-Q5hn0dE2SvXbApghAsQwhWRu4D0,431
44
- lalamo/model_import/model_specs/lfm2.py,sha256=uzuFbcj4Wj2OqL7XJE8Q431VYZelS_HkfPFpl7rJuJY,1038
46
+ lalamo/model_import/model_specs/lfm2.py,sha256=wg4Ggt6BbMO4ScJ6h8tjvBc3IVSrMudESQxjleUF9Ds,2198
45
47
  lalamo/model_import/model_specs/llama.py,sha256=TxhKbIBFmGV2NopOg_k3ltsKlJccbxKyu-GQ7hYWCyw,3140
46
48
  lalamo/model_import/model_specs/llamba.py,sha256=Ic3sWTv34FLJ4fG6OR_Mc5goGJQR6fa5b2WbVXbn9FA,1471
47
49
  lalamo/model_import/model_specs/mirai.py,sha256=eifYVV5-fABiLH6rr82_DiVFtDyqpW0vbvXCYsQQzto,617
@@ -52,28 +54,28 @@ lalamo/model_import/model_specs/qwen.py,sha256=HvN080ILpOwkqJbRLMqCa8Z8ImlLfTwiE
52
54
  lalamo/model_import/model_specs/reka.py,sha256=dOUYbEMMvovQdzQuBO_DCsjGI39syhoKCvnxLkNEDCw,423
53
55
  lalamo/models/__init__.py,sha256=Vn5PcvSqKppIchkSZwQVTn_GpRvOOzZVxo5PUeDl6N8,283
54
56
  lalamo/models/classifier.py,sha256=LvL54crCVi4HVSIXuoaSLB_5jtcx74GL7kgdy2Y16Zc,2094
55
- lalamo/models/common.py,sha256=PDteofGxjSBWYw_mPxbN1DTUba70aOURrAIjl13SSHc,2954
56
- lalamo/models/language_model.py,sha256=QPeVEyhutSze7fSNhvOvwSoYt24QMk-dtTJkos38amY,13465
57
+ lalamo/models/common.py,sha256=uU6eCHtIqMeC_aRGVo09NdpAtvQ6RKSbm6pumVvL8pc,2943
58
+ lalamo/models/language_model.py,sha256=HtFS-R4Uqr7SohFstoAZFVrJI293N9cG_LVkXhZxgFI,13546
57
59
  lalamo/modules/__init__.py,sha256=OHIQn08jx2c3L2KIQA-7SJ4yVb2E5m6T6FqTHFJTDdM,4006
58
- lalamo/modules/activations.py,sha256=U3qTQtZawPAUcoqbkIJnmTYcaNiQuSPMLcBeJ398GhI,1022
59
- lalamo/modules/classifier.py,sha256=_jtJ3INEq1dJP5HpUmcDk9YYzpRYlQ04zvFGaWBV6Lg,12101
60
- lalamo/modules/common.py,sha256=dqDEOi-C3H4U9iWUisU32RA-wRDCGuaUNGbObRBhyQM,3315
61
- lalamo/modules/decoder.py,sha256=Opd3QIq1mpGr9P7sLH-Fryitlfp6ESTpcX71vgm89t0,7129
62
- lalamo/modules/embedding.py,sha256=LLiH8mTu81JSpUTj-XhsrVIUfl_GhapnXxw1yGSUBgM,28428
63
- lalamo/modules/linear.py,sha256=XfIYhmpk-bwNHIzIgsL48ZUTclHD2KB4uXHMw9NTE-8,42991
64
- lalamo/modules/mlp.py,sha256=bL3sQ46vCNt1MBRwlzmXZx9nQfRe4axpGe5UOFVanBI,17959
65
- lalamo/modules/mlx_interop.py,sha256=FdfU_1iES-HQ9r4K0SkYwJTyvE0f-_T5ursNCjPLZKY,467
60
+ lalamo/modules/activations.py,sha256=25F4XytJMIwPPmUbxiDUrcrdUi4c-O9SUbwv9lnZbuU,992
61
+ lalamo/modules/classifier.py,sha256=Q5eNzJ68to6JGk8IDZiKv6Rmwh15UyT2xC52tP5njoQ,11767
62
+ lalamo/modules/common.py,sha256=Rc9zenrUMntDKZydI1tzt1ZIY8ggfyk3ZDB-xi81ibw,3406
63
+ lalamo/modules/decoder.py,sha256=I30fptNifcdw9OOCU50aZnEqsJ2X4VM9YXdtRkxbqGc,7014
64
+ lalamo/modules/embedding.py,sha256=PdNy4tGt9F1zve4X73WKNS0DXL-nHUFOlZmGFUAarkQ,27727
65
+ lalamo/modules/linear.py,sha256=4xIhmeouD7R10lt8KJBLxgypVXYhpGmXdHUc-96Upfk,42871
66
+ lalamo/modules/mlp.py,sha256=ogxi9q8J38FnuBkAtC7_KTMc7JZG4BRdsAHYprHZNvM,17690
67
+ lalamo/modules/mlx_interop.py,sha256=kgCm6cPvY62ZNY3icuyKY0bow50j73UdyfVym2WqEUk,483
66
68
  lalamo/modules/normalization.py,sha256=cBdOq6OmJssunVeEwFRJD0BDhgFAN7J8gOKwzIUAY8I,3005
67
- lalamo/modules/rope.py,sha256=rCik7vBNqRXYg3LGbmc1mezPRNbIYMg5cydTFpQy-eU,10157
69
+ lalamo/modules/rope.py,sha256=HbIv5ESLGNAK47HAtqu1whLLUa20Sb28U8kEs6KclZM,10127
68
70
  lalamo/modules/torch_interop.py,sha256=-mujd1zI4ec2w92Hd50RtDa0K3jl6ZSnPxc5r3Fp9nU,916
69
- lalamo/modules/transformer.py,sha256=4olEO8Eh7U6RwSnaECn39ooPuTKUZp_6QmvO6vdirrQ,10532
70
- lalamo/modules/transformer_layer.py,sha256=ZYmGR2Ej328l7K-YpV4eEiBk8SzLsw1RiuSiUP94UpY,12731
71
+ lalamo/modules/transformer.py,sha256=9FD2k_5qwDHYUG5_6M0wVI9-YxfMv0mXlHS-QKiKcP4,10319
72
+ lalamo/modules/transformer_layer.py,sha256=mOqmfVpT7yfHpU87Koso3lvjH5zc-hgPvgVgk04r6ck,12412
71
73
  lalamo/modules/utils.py,sha256=t_TayWT6g5LtYKhJaod-u_COWaI_VbNd3eYek9Nj0lc,441
72
- lalamo/modules/token_mixers/__init__.py,sha256=z6x8cNjis6xIi_2llIoByKqMF2W4xJ05rDnxitHQ3jU,1139
73
- lalamo/modules/token_mixers/attention.py,sha256=gkGMFah2OHB_tyJpkshM1KhMnzG6U7Xt273MkBvDk58,16584
74
+ lalamo/modules/token_mixers/__init__.py,sha256=lwxUl0eG5IvuVc_HOsINP2vtbv9F0cUmSNHFHaEmPGk,1109
75
+ lalamo/modules/token_mixers/attention.py,sha256=ielw1-KWBfCPCPmzSHgM0TaSUcmSkWKTxrN3N_FsGm4,16144
74
76
  lalamo/modules/token_mixers/common.py,sha256=CcrbXXvGU27uxGLh5L-G8VDtcOiW5Wpm13uBEOd6lVg,1986
75
- lalamo/modules/token_mixers/mamba.py,sha256=fo8xvvmIQss2lKLhav19Jzk1-hTykNp2sjcN6ntcWj4,18789
76
- lalamo/modules/token_mixers/short_conv.py,sha256=93SmoVsuAtdX4ckAkvhHXHiO67pU6soYFpBZxdPFEwc,5219
77
+ lalamo/modules/token_mixers/mamba.py,sha256=d5hq1M_fk467EKm9Nyu3xu5OyrUmp04eeTyPSKh4HVI,18422
78
+ lalamo/modules/token_mixers/short_conv.py,sha256=xLoTiN44cFuPva9gdjjC8EQqI5RYSWRd_YFxTpyOsmE,5076
77
79
  lalamo/modules/token_mixers/state/__init__.py,sha256=OKWPmiwszMWgwamewoVHd28owanHAO2j2e30Iivtv-4,384
78
80
  lalamo/modules/token_mixers/state/common.py,sha256=dcwBevAdeJpBjf7_YRk7TKrJHsCnpljhfzZy-3h9898,661
79
81
  lalamo/modules/token_mixers/state/kv_cache.py,sha256=QfnS3XgSmyDI9MBUbeLI4ABHLxiMcXDbZsqe0fd3KQo,8788
@@ -81,13 +83,13 @@ lalamo/modules/token_mixers/state/mamba_state.py,sha256=LHzJvNE6MkB7nrsZSNto6pxb
81
83
  lalamo/modules/token_mixers/state/short_conv_state.py,sha256=osjcDHoeFWQaUoOROzeJe8F1qC8rvqunimGD4CuIDHo,895
82
84
  lalamo/speculator/__init__.py,sha256=9-tmZcbCom_lIGpJYn6xLlnEahFLFidpqmgkafmu--k,456
83
85
  lalamo/speculator/common.py,sha256=PudF_gkpe5_nQ-57sAC-foE1xCy_H2Axh5KwRoA86lo,587
84
- lalamo/speculator/estimator.py,sha256=4D8dPZCWsrpORb7y8pQ6VsiIg1Cblvvxe6gXCoYtcD4,2530
86
+ lalamo/speculator/estimator.py,sha256=S_TRwMnjWg5qt9le2AYua_Vmo6QkIT-0Si7TjCfC7xc,2670
85
87
  lalamo/speculator/inference.py,sha256=5GntUgj0HQLeLn3HIHnVX8EEO0EBzmKeP5-_U7kdFAM,3670
86
- lalamo/speculator/ngram.py,sha256=95mdfAWhx4d5XOnOwhyhElnvcy6nlUjYhcbJzqDs414,5875
88
+ lalamo/speculator/ngram.py,sha256=Fy3A-oVxZql3gE5M5ot0hKPu0772-kcEPDvD9MkldpA,5889
87
89
  lalamo/speculator/utils.py,sha256=0wZoMMIzzk0Q-3zq5H5f-JBplePNHxywndkrNtOJOyo,1697
88
- lalamo-0.5.16.dist-info/licenses/LICENSE,sha256=diHRfjSEJHD1nnEeMIfMRCjR3UERf8bT3eseD6b1ayA,1072
89
- lalamo-0.5.16.dist-info/METADATA,sha256=dcs0vT9RULTxt4cxJJmfjP-4UJi7ZkrifXAaSMAgKeU,3147
90
- lalamo-0.5.16.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
91
- lalamo-0.5.16.dist-info/entry_points.txt,sha256=qli7qTfnBk5WP10rOGXXEckHMtt-atJMDWd8jN89Uks,43
92
- lalamo-0.5.16.dist-info/top_level.txt,sha256=VHvWL5JN5XRG36NsN_MieJ7EwRihEOrEjyDaTdFJ-aI,7
93
- lalamo-0.5.16.dist-info/RECORD,,
90
+ lalamo-0.6.0.dist-info/licenses/LICENSE,sha256=diHRfjSEJHD1nnEeMIfMRCjR3UERf8bT3eseD6b1ayA,1072
91
+ lalamo-0.6.0.dist-info/METADATA,sha256=6cDrL3A2Hksel4WIH3kXyNx0YquoJy96siJDHX8MPa8,3112
92
+ lalamo-0.6.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
93
+ lalamo-0.6.0.dist-info/entry_points.txt,sha256=qli7qTfnBk5WP10rOGXXEckHMtt-atJMDWd8jN89Uks,43
94
+ lalamo-0.6.0.dist-info/top_level.txt,sha256=VHvWL5JN5XRG36NsN_MieJ7EwRihEOrEjyDaTdFJ-aI,7
95
+ lalamo-0.6.0.dist-info/RECORD,,