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.
- lalamo/__init__.py +26 -2
- lalamo/commands.py +429 -0
- lalamo/common.py +14 -1
- lalamo/main.py +375 -229
- lalamo/message_processor.py +4 -1
- lalamo/model_import/common.py +8 -17
- lalamo/model_import/decoder_configs/huggingface/lfm2.py +14 -4
- lalamo/model_import/decoder_configs/huggingface/llamba.py +2 -2
- lalamo/model_import/decoder_configs/huggingface/modern_bert.py +2 -2
- lalamo/model_import/huggingface_generation_config.py +21 -3
- lalamo/model_import/loaders/executorch.py +2 -2
- lalamo/model_import/loaders/huggingface.py +3 -3
- lalamo/model_import/model_specs/common.py +8 -4
- lalamo/model_import/model_specs/lfm2.py +41 -9
- lalamo/models/common.py +3 -3
- lalamo/models/language_model.py +7 -6
- lalamo/modules/activations.py +1 -1
- lalamo/modules/classifier.py +11 -24
- lalamo/modules/common.py +4 -1
- lalamo/modules/decoder.py +5 -11
- lalamo/modules/embedding.py +25 -62
- lalamo/modules/linear.py +19 -33
- lalamo/modules/mlp.py +9 -19
- lalamo/modules/mlx_interop.py +1 -1
- lalamo/modules/rope.py +1 -1
- lalamo/modules/token_mixers/__init__.py +1 -1
- lalamo/modules/token_mixers/attention.py +9 -27
- lalamo/modules/token_mixers/mamba.py +9 -24
- lalamo/modules/token_mixers/short_conv.py +5 -12
- lalamo/modules/transformer.py +10 -20
- lalamo/modules/transformer_layer.py +8 -20
- lalamo/registry_abc.py +4 -4
- lalamo/safetensors.py +97 -0
- lalamo/sampling.py +14 -0
- lalamo/speculator/estimator.py +11 -4
- lalamo/speculator/ngram.py +1 -1
- lalamo/utils.py +0 -13
- {lalamo-0.5.16.dist-info → lalamo-0.6.0.dist-info}/METADATA +1 -2
- {lalamo-0.5.16.dist-info → lalamo-0.6.0.dist-info}/RECORD +43 -41
- {lalamo-0.5.16.dist-info → lalamo-0.6.0.dist-info}/WHEEL +0 -0
- {lalamo-0.5.16.dist-info → lalamo-0.6.0.dist-info}/entry_points.txt +0 -0
- {lalamo-0.5.16.dist-info → lalamo-0.6.0.dist-info}/licenses/LICENSE +0 -0
- {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))
|
lalamo/speculator/estimator.py
CHANGED
|
@@ -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",
|
|
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
|
|
43
|
-
+ memory_analysis.output_size_in_bytes
|
|
44
|
-
+ memory_analysis.temp_size_in_bytes
|
|
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
|
|
lalamo/speculator/ngram.py
CHANGED
|
@@ -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],
|
|
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.
|
|
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=
|
|
2
|
-
lalamo/
|
|
3
|
-
lalamo/
|
|
4
|
-
lalamo/
|
|
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=
|
|
7
|
-
lalamo/
|
|
8
|
-
lalamo/
|
|
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=
|
|
15
|
-
lalamo/model_import/huggingface_generation_config.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
35
|
-
lalamo/model_import/loaders/huggingface.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
56
|
-
lalamo/models/language_model.py,sha256=
|
|
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=
|
|
59
|
-
lalamo/modules/classifier.py,sha256=
|
|
60
|
-
lalamo/modules/common.py,sha256=
|
|
61
|
-
lalamo/modules/decoder.py,sha256=
|
|
62
|
-
lalamo/modules/embedding.py,sha256=
|
|
63
|
-
lalamo/modules/linear.py,sha256=
|
|
64
|
-
lalamo/modules/mlp.py,sha256=
|
|
65
|
-
lalamo/modules/mlx_interop.py,sha256=
|
|
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=
|
|
69
|
+
lalamo/modules/rope.py,sha256=HbIv5ESLGNAK47HAtqu1whLLUa20Sb28U8kEs6KclZM,10127
|
|
68
70
|
lalamo/modules/torch_interop.py,sha256=-mujd1zI4ec2w92Hd50RtDa0K3jl6ZSnPxc5r3Fp9nU,916
|
|
69
|
-
lalamo/modules/transformer.py,sha256=
|
|
70
|
-
lalamo/modules/transformer_layer.py,sha256=
|
|
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=
|
|
73
|
-
lalamo/modules/token_mixers/attention.py,sha256=
|
|
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=
|
|
76
|
-
lalamo/modules/token_mixers/short_conv.py,sha256=
|
|
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=
|
|
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=
|
|
88
|
+
lalamo/speculator/ngram.py,sha256=Fy3A-oVxZql3gE5M5ot0hKPu0772-kcEPDvD9MkldpA,5889
|
|
87
89
|
lalamo/speculator/utils.py,sha256=0wZoMMIzzk0Q-3zq5H5f-JBplePNHxywndkrNtOJOyo,1697
|
|
88
|
-
lalamo-0.
|
|
89
|
-
lalamo-0.
|
|
90
|
-
lalamo-0.
|
|
91
|
-
lalamo-0.
|
|
92
|
-
lalamo-0.
|
|
93
|
-
lalamo-0.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|