economize 0.3.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.

Potentially problematic release.


This version of economize might be problematic. Click here for more details.

Files changed (297) hide show
  1. economize/__init__.py +120 -0
  2. economize/_deprecation.py +59 -0
  3. economize/_version.py +4 -0
  4. economize/_wiring.py +22 -0
  5. economize/arch/__init__.py +63 -0
  6. economize/arch/base.py +594 -0
  7. economize/arch/config.py +90 -0
  8. economize/arch/families/__init__.py +12 -0
  9. economize/arch/families/deepseek_v3.py +16 -0
  10. economize/arch/families/gemma.py +13 -0
  11. economize/arch/families/gemma2.py +13 -0
  12. economize/arch/families/gemma3.py +23 -0
  13. economize/arch/families/gemma4.py +136 -0
  14. economize/arch/families/gemma4_unified.py +37 -0
  15. economize/arch/families/gpt_oss.py +18 -0
  16. economize/arch/families/granite.py +23 -0
  17. economize/arch/families/llama.py +15 -0
  18. economize/arch/families/ministral.py +13 -0
  19. economize/arch/families/ministral3.py +16 -0
  20. economize/arch/families/mistral.py +18 -0
  21. economize/arch/families/mixtral.py +13 -0
  22. economize/arch/families/nemotron_h.py +110 -0
  23. economize/arch/families/olmo2.py +13 -0
  24. economize/arch/families/olmo3.py +13 -0
  25. economize/arch/families/olmoe.py +13 -0
  26. economize/arch/families/phi3.py +13 -0
  27. economize/arch/families/qwen2.py +16 -0
  28. economize/arch/families/qwen2_moe.py +15 -0
  29. economize/arch/families/qwen3.py +16 -0
  30. economize/arch/families/qwen3_5.py +33 -0
  31. economize/arch/families/qwen3_moe.py +13 -0
  32. economize/arch/families/recurrent.py +34 -0
  33. economize/arch/families/smollm3.py +13 -0
  34. economize/arch/spec.py +217 -0
  35. economize/arch/standard.py +120 -0
  36. economize/backends/__init__.py +49 -0
  37. economize/backends/drafter.py +32 -0
  38. economize/backends/exporters.py +185 -0
  39. economize/backends/sglang/__init__.py +47 -0
  40. economize/backends/sglang/export.py +40 -0
  41. economize/backends/vllm/__init__.py +71 -0
  42. economize/backends/vllm/drafters.py +150 -0
  43. economize/backends/vllm/export.py +109 -0
  44. economize/backends/vllm/jump/__init__.py +34 -0
  45. economize/backends/vllm/jump/export.py +98 -0
  46. economize/backends/vllm/jump/model.py +414 -0
  47. economize/backends/vllm/jump/proposer.py +214 -0
  48. economize/backends/vllm/model.py +27 -0
  49. economize/backends/vllm/plugin.py +153 -0
  50. economize/backends/vllm/proposer.py +20 -0
  51. economize/backends/vllm/spec.py +68 -0
  52. economize/bench/__init__.py +58 -0
  53. economize/bench/cost_model.py +559 -0
  54. economize/bench/prompts.py +145 -0
  55. economize/bench/shape_readers.py +80 -0
  56. economize/bench/timing.py +215 -0
  57. economize/compat/__init__.py +12 -0
  58. economize/compat/tskip.py +454 -0
  59. economize/core/__init__.py +60 -0
  60. economize/core/calibration.py +548 -0
  61. economize/core/config.py +81 -0
  62. economize/core/hub.py +314 -0
  63. economize/core/lora_capable.py +29 -0
  64. economize/core/model.py +290 -0
  65. economize/core/recipe.py +167 -0
  66. economize/core/serialization.py +373 -0
  67. economize/core/technique.py +183 -0
  68. economize/decoding/__init__.py +72 -0
  69. economize/decoding/capabilities.py +123 -0
  70. economize/decoding/commit.py +166 -0
  71. economize/decoding/config.py +92 -0
  72. economize/decoding/cost.py +203 -0
  73. economize/decoding/drafting.py +65 -0
  74. economize/decoding/generation.py +188 -0
  75. economize/decoding/graphs.py +171 -0
  76. economize/decoding/loop.py +220 -0
  77. economize/decoding/passes.py +144 -0
  78. economize/decoding/plain.py +73 -0
  79. economize/decoding/policies.py +45 -0
  80. economize/decoding/protocols.py +401 -0
  81. economize/decoding/request.py +252 -0
  82. economize/decoding/result.py +44 -0
  83. economize/decoding/selectors.py +112 -0
  84. economize/decoding/stop.py +40 -0
  85. economize/decoding/verifiers.py +413 -0
  86. economize/distributed/__init__.py +27 -0
  87. economize/distributed/ssd.py +266 -0
  88. economize/distributed/tp.py +143 -0
  89. economize/distributed/workers.py +334 -0
  90. economize/errors.py +58 -0
  91. economize/integrations/__init__.py +21 -0
  92. economize/integrations/_generation_args.py +223 -0
  93. economize/integrations/_scoring.py +111 -0
  94. economize/integrations/_trl_common.py +29 -0
  95. economize/integrations/compressed_tensors.py +201 -0
  96. economize/integrations/generate.py +283 -0
  97. economize/integrations/hub.py +98 -0
  98. economize/integrations/kernels.py +252 -0
  99. economize/integrations/lm_eval.py +205 -0
  100. economize/integrations/peft.py +295 -0
  101. economize/integrations/quantized.py +39 -0
  102. economize/integrations/trl.py +323 -0
  103. economize/integrations/trl_vllm.py +445 -0
  104. economize/modules/__init__.py +31 -0
  105. economize/modules/dtype.py +119 -0
  106. economize/modules/kv_cache.py +145 -0
  107. economize/modules/lora.py +134 -0
  108. economize/modules/norm.py +42 -0
  109. economize/modules/readout.py +34 -0
  110. economize/modules/rotary.py +164 -0
  111. economize/modules/swiglu.py +70 -0
  112. economize/py.typed +0 -0
  113. economize/registry.py +192 -0
  114. economize/runtime/__init__.py +44 -0
  115. economize/runtime/cache.py +573 -0
  116. economize/runtime/context.py +205 -0
  117. economize/runtime/graphs.py +97 -0
  118. economize/runtime/mask.py +184 -0
  119. economize/runtime/phase.py +52 -0
  120. economize/runtime/policy.py +79 -0
  121. economize/runtime/runner.py +230 -0
  122. economize/runtime/transfer.py +31 -0
  123. economize/techniques/__init__.py +28 -0
  124. economize/techniques/_drafting/__init__.py +82 -0
  125. economize/techniques/_drafting/drafters.py +206 -0
  126. economize/techniques/_drafting/formats.py +72 -0
  127. economize/techniques/_drafting/head.py +118 -0
  128. economize/techniques/_drafting/training.py +40 -0
  129. economize/techniques/_drafting/wrapping.py +263 -0
  130. economize/techniques/_kv/__init__.py +41 -0
  131. economize/techniques/_kv/base.py +79 -0
  132. economize/techniques/_kv/wrapper.py +408 -0
  133. economize/techniques/_weights/__init__.py +61 -0
  134. economize/techniques/_weights/hessian.py +47 -0
  135. economize/techniques/_weights/layerwise.py +106 -0
  136. economize/techniques/_weights/obs.py +79 -0
  137. economize/techniques/_weights/snapshot.py +75 -0
  138. economize/techniques/_weights/technique.py +59 -0
  139. economize/techniques/_weights/transaction.py +71 -0
  140. economize/techniques/draft_model/__init__.py +16 -0
  141. economize/techniques/draft_model/config.py +43 -0
  142. economize/techniques/draft_model/drafter.py +213 -0
  143. economize/techniques/draft_model/technique.py +163 -0
  144. economize/techniques/dynamic_depth/__init__.py +149 -0
  145. economize/techniques/dynamic_depth/base.py +514 -0
  146. economize/techniques/dynamic_depth/calm.py +349 -0
  147. economize/techniques/dynamic_depth/flexidepth.py +232 -0
  148. economize/techniques/dynamic_depth/gateskip.py +137 -0
  149. economize/techniques/dynamic_depth/loradrop.py +244 -0
  150. economize/techniques/dynamic_depth/mod.py +161 -0
  151. economize/techniques/dynamic_depth/objective.py +267 -0
  152. economize/techniques/dynamic_depth/skipdecode.py +130 -0
  153. economize/techniques/eagle3/__init__.py +33 -0
  154. economize/techniques/eagle3/config.py +142 -0
  155. economize/techniques/eagle3/drafter.py +109 -0
  156. economize/techniques/eagle3/formats.py +220 -0
  157. economize/techniques/eagle3/layer.py +148 -0
  158. economize/techniques/eagle3/objective.py +100 -0
  159. economize/techniques/eagle3/technique.py +322 -0
  160. economize/techniques/early_exit/__init__.py +42 -0
  161. economize/techniques/early_exit/config.py +69 -0
  162. economize/techniques/early_exit/drafter.py +95 -0
  163. economize/techniques/early_exit/formats.py +27 -0
  164. economize/techniques/early_exit/layerskip.py +196 -0
  165. economize/techniques/early_exit/objective.py +140 -0
  166. economize/techniques/early_exit/path.py +96 -0
  167. economize/techniques/early_exit/rollout.py +59 -0
  168. economize/techniques/early_exit/technique.py +161 -0
  169. economize/techniques/frspec/__init__.py +20 -0
  170. economize/techniques/frspec/config.py +64 -0
  171. economize/techniques/frspec/drafter.py +122 -0
  172. economize/techniques/frspec/technique.py +100 -0
  173. economize/techniques/frspec/vocab.py +54 -0
  174. economize/techniques/hybrid/__init__.py +15 -0
  175. economize/techniques/hybrid/config.py +72 -0
  176. economize/techniques/hybrid/drafter.py +138 -0
  177. economize/techniques/hybrid/technique.py +76 -0
  178. economize/techniques/jump/__init__.py +75 -0
  179. economize/techniques/jump/aware.py +68 -0
  180. economize/techniques/jump/config.py +141 -0
  181. economize/techniques/jump/drafter.py +170 -0
  182. economize/techniques/jump/export.py +220 -0
  183. economize/techniques/jump/formats.py +29 -0
  184. economize/techniques/jump/mixer.py +97 -0
  185. economize/techniques/jump/objective.py +224 -0
  186. economize/techniques/jump/predictor.py +457 -0
  187. economize/techniques/jump/predictor_flow.py +147 -0
  188. economize/techniques/jump/rl.py +120 -0
  189. economize/techniques/jump/rollout.py +153 -0
  190. economize/techniques/jump/technique.py +254 -0
  191. economize/techniques/kv_evict/__init__.py +47 -0
  192. economize/techniques/kv_evict/policies.py +214 -0
  193. economize/techniques/kv_evict/tap.py +89 -0
  194. economize/techniques/kv_evict/technique.py +410 -0
  195. economize/techniques/kv_quant/__init__.py +58 -0
  196. economize/techniques/kv_quant/fp8.py +153 -0
  197. economize/techniques/kv_quant/kivi.py +183 -0
  198. economize/techniques/layer_skip/__init__.py +37 -0
  199. economize/techniques/layer_skip/config.py +85 -0
  200. economize/techniques/layer_skip/drafter.py +16 -0
  201. economize/techniques/layer_skip/metrics.py +66 -0
  202. economize/techniques/layer_skip/policy.py +32 -0
  203. economize/techniques/layer_skip/search.py +143 -0
  204. economize/techniques/layer_skip/technique.py +120 -0
  205. economize/techniques/lookup/__init__.py +29 -0
  206. economize/techniques/lookup/config.py +55 -0
  207. economize/techniques/lookup/drafter.py +70 -0
  208. economize/techniques/lookup/matching.py +66 -0
  209. economize/techniques/lookup/proposal.py +69 -0
  210. economize/techniques/lookup/technique.py +45 -0
  211. economize/techniques/lowrank/__init__.py +32 -0
  212. economize/techniques/lowrank/config.py +56 -0
  213. economize/techniques/lowrank/factorize.py +118 -0
  214. economize/techniques/lowrank/model.py +76 -0
  215. economize/techniques/lowrank/module.py +55 -0
  216. economize/techniques/lowrank/technique.py +36 -0
  217. economize/techniques/medusa/__init__.py +38 -0
  218. economize/techniques/medusa/config.py +76 -0
  219. economize/techniques/medusa/drafter.py +105 -0
  220. economize/techniques/medusa/formats.py +129 -0
  221. economize/techniques/medusa/heads.py +52 -0
  222. economize/techniques/medusa/objective.py +107 -0
  223. economize/techniques/medusa/technique.py +140 -0
  224. economize/techniques/medusa/trees.py +123 -0
  225. economize/techniques/prune/__init__.py +42 -0
  226. economize/techniques/prune/calibration.py +45 -0
  227. economize/techniques/prune/config.py +144 -0
  228. economize/techniques/prune/depth.py +190 -0
  229. economize/techniques/prune/masks.py +95 -0
  230. economize/techniques/prune/methods.py +100 -0
  231. economize/techniques/prune/model.py +99 -0
  232. economize/techniques/prune/semi_structured.py +40 -0
  233. economize/techniques/prune/sparsegpt.py +82 -0
  234. economize/techniques/prune/technique.py +71 -0
  235. economize/techniques/prune/wanda.py +40 -0
  236. economize/techniques/quant/__init__.py +73 -0
  237. economize/techniques/quant/awq.py +346 -0
  238. economize/techniques/quant/backends.py +233 -0
  239. economize/techniques/quant/config.py +187 -0
  240. economize/techniques/quant/constraints.py +152 -0
  241. economize/techniques/quant/draft.py +109 -0
  242. economize/techniques/quant/gptq.py +179 -0
  243. economize/techniques/quant/grid.py +242 -0
  244. economize/techniques/quant/marlin.py +488 -0
  245. economize/techniques/quant/methods.py +199 -0
  246. economize/techniques/quant/model.py +160 -0
  247. economize/techniques/quant/technique.py +80 -0
  248. economize/techniques/sparsity/__init__.py +48 -0
  249. economize/techniques/sparsity/backends.py +76 -0
  250. economize/techniques/sparsity/config.py +100 -0
  251. economize/techniques/sparsity/model.py +192 -0
  252. economize/techniques/sparsity/sparsify.py +269 -0
  253. economize/techniques/sparsity/technique.py +115 -0
  254. economize/techniques/vendor_mtp/__init__.py +42 -0
  255. economize/techniques/vendor_mtp/config.py +113 -0
  256. economize/techniques/vendor_mtp/drafter.py +177 -0
  257. economize/techniques/vendor_mtp/families.py +146 -0
  258. economize/techniques/vendor_mtp/formats.py +263 -0
  259. economize/techniques/vendor_mtp/module.py +67 -0
  260. economize/techniques/vendor_mtp/objective.py +18 -0
  261. economize/techniques/vendor_mtp/technique.py +213 -0
  262. economize/train/__init__.py +185 -0
  263. economize/train/checkpoint.py +302 -0
  264. economize/train/data/__init__.py +57 -0
  265. economize/train/data/chat.py +134 -0
  266. economize/train/data/masks.py +23 -0
  267. economize/train/data/sources.py +304 -0
  268. economize/train/data/tokens.py +81 -0
  269. economize/train/evaluate.py +160 -0
  270. economize/train/loop.py +442 -0
  271. economize/train/module.py +124 -0
  272. economize/train/objective.py +535 -0
  273. economize/train/objectives/__init__.py +59 -0
  274. economize/train/objectives/base.py +45 -0
  275. economize/train/objectives/ce.py +52 -0
  276. economize/train/objectives/common.py +220 -0
  277. economize/train/objectives/distill.py +107 -0
  278. economize/train/objectives/divergences.py +86 -0
  279. economize/train/objectives/steps.py +288 -0
  280. economize/train/objectives/weights.py +58 -0
  281. economize/train/offload.py +96 -0
  282. economize/train/optim.py +70 -0
  283. economize/train/rl.py +139 -0
  284. economize/train/rollout/__init__.py +36 -0
  285. economize/train/rollout/cache.py +175 -0
  286. economize/train/rollout/recurrent.py +171 -0
  287. economize/train/schedule.py +43 -0
  288. economize/train/teacher.py +113 -0
  289. economize/train/trainer.py +427 -0
  290. economize/train/utils.py +64 -0
  291. economize/unwrap.py +42 -0
  292. economize/validation.py +167 -0
  293. economize-0.3.0.dist-info/METADATA +372 -0
  294. economize-0.3.0.dist-info/RECORD +297 -0
  295. economize-0.3.0.dist-info/WHEEL +4 -0
  296. economize-0.3.0.dist-info/entry_points.txt +14 -0
  297. economize-0.3.0.dist-info/licenses/LICENSE +201 -0
economize/__init__.py ADDED
@@ -0,0 +1,120 @@
1
+ """economize: composable efficiency techniques for Hugging Face causal language models.
2
+
3
+ import economize
4
+ from transformers import AutoModelForCausalLM
5
+
6
+ base = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-0.5B")
7
+ model = economize.apply(base, economize.JumpConfig(target_layer=12, source_layer=18))
8
+ ... # train the added parameters, or load trained ones:
9
+ model = economize.from_pretrained("path/to/checkpoint")
10
+ out = model.generate(input_ids, max_new_tokens=128, decoding=economize.DecodeConfig(cycle_length=4))
11
+
12
+ The root holds the technique-independent API (``apply``, ``EfficientModel``, decoding, errors, registries). The
13
+ configuration of each technique lives in its subpackage (``from economize.techniques.quant import QuantConfig``), with
14
+ one deliberate exception: :class:`~economize.techniques.jump.JumpConfig`, economize's own method and the subject of the
15
+ quick starts, is re-exported here as ``economize.JumpConfig``. It is the only one, so a new technique never edits this
16
+ module (``tests/unit/test_root_api.py`` guards both rules).
17
+ """
18
+
19
+ from __future__ import annotations
20
+
21
+ # Imported for their side effects: they register the built-in techniques, formats, exporters and backends.
22
+ from . import _wiring, compat, techniques # noqa: F401
23
+ from ._version import __version__
24
+ from .core import (
25
+ FORMATS,
26
+ TECHNIQUES,
27
+ AttachContext,
28
+ Capability,
29
+ Checkpoint,
30
+ CheckpointFormat,
31
+ EfficientModel,
32
+ Technique,
33
+ TechniqueConfig,
34
+ apply,
35
+ attach,
36
+ from_pretrained,
37
+ load,
38
+ read_checkpoint,
39
+ register_technique,
40
+ save,
41
+ teacher_fingerprint,
42
+ )
43
+ from .decoding import (
44
+ POLICIES,
45
+ VERIFIERS,
46
+ CostLog,
47
+ CycleDecoder,
48
+ DecodeConfig,
49
+ DecodeResult,
50
+ Draft,
51
+ Drafter,
52
+ DraftPolicy,
53
+ DraftRequest,
54
+ GreedySelector,
55
+ TokenSelector,
56
+ TopPSampler,
57
+ Verifier,
58
+ VerifyEvent,
59
+ )
60
+ from .errors import (
61
+ CheckpointFormatError,
62
+ ConfigError,
63
+ DuplicateNameError,
64
+ EconomizeError,
65
+ IncompatibleTechniquesError,
66
+ TeacherMismatchWarning,
67
+ UnknownNameError,
68
+ UnregisteredNameError,
69
+ UnsupportedModelError,
70
+ )
71
+ from .runtime import current_phase, phase
72
+ from .techniques.jump import JumpConfig # the one technique config at the root (see the module docstring)
73
+
74
+ __all__ = [
75
+ "FORMATS",
76
+ "POLICIES",
77
+ "TECHNIQUES",
78
+ "VERIFIERS",
79
+ "AttachContext",
80
+ "Capability",
81
+ "Checkpoint",
82
+ "CheckpointFormat",
83
+ "CheckpointFormatError",
84
+ "ConfigError",
85
+ "CostLog",
86
+ "CycleDecoder",
87
+ "DecodeConfig",
88
+ "DecodeResult",
89
+ "Draft",
90
+ "DraftPolicy",
91
+ "DraftRequest",
92
+ "Drafter",
93
+ "DuplicateNameError",
94
+ "EconomizeError",
95
+ "EfficientModel",
96
+ "GreedySelector",
97
+ "IncompatibleTechniquesError",
98
+ "JumpConfig",
99
+ "TeacherMismatchWarning",
100
+ "Technique",
101
+ "TechniqueConfig",
102
+ "TokenSelector",
103
+ "TopPSampler",
104
+ "UnknownNameError",
105
+ "UnregisteredNameError",
106
+ "UnsupportedModelError",
107
+ "Verifier",
108
+ "VerifyEvent",
109
+ "__version__",
110
+ "apply",
111
+ "attach",
112
+ "current_phase",
113
+ "from_pretrained",
114
+ "load",
115
+ "phase",
116
+ "read_checkpoint",
117
+ "register_technique",
118
+ "save",
119
+ "teacher_fingerprint",
120
+ ]
@@ -0,0 +1,59 @@
1
+ """Deprecation warnings for names that moved or were renamed (layer 0: imports nothing of economize).
2
+
3
+ A module that keeps old names alive sets its module-level ``__getattr__`` to :func:`moved_getattr`. The ``load``
4
+ function it passes imports the new home explicitly inside the shim module, so that the layering test sees the edge.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import sys
10
+ import warnings
11
+ from collections.abc import Callable, Iterable, Mapping
12
+ from typing import Any
13
+
14
+ __all__ = ["moved_getattr", "warn_moved"]
15
+
16
+
17
+ def warn_moved(old: str, new: str, *, stacklevel: int = 3) -> None:
18
+ """Warn that ``old`` (a dotted name) is deprecated in favour of ``new``.
19
+
20
+ The default ``stacklevel`` points at the caller of the shim that calls this function (the module
21
+ ``__getattr__`` or the deprecated method).
22
+ """
23
+ warnings.warn(f"{old} is deprecated; use {new} instead", DeprecationWarning, stacklevel=stacklevel)
24
+
25
+
26
+ def moved_getattr(
27
+ module: str,
28
+ moved: Mapping[str, str] | Iterable[str],
29
+ new_home: str | None = None,
30
+ load: Callable[[], object] | None = None,
31
+ ) -> Callable[[str], Any]:
32
+ """A module ``__getattr__`` (PEP 562) that resolves deprecated names with a :class:`DeprecationWarning`.
33
+
34
+ Args:
35
+ module: the shim module's ``__name__``.
36
+ moved: old name -> name in the new home, or an iterable of names that kept their name.
37
+ new_home: dotted name of the new home, used in the warning (default: ``module`` itself, for renames).
38
+ load: imports and returns the new home (default: ``module`` itself).
39
+
40
+ Unknown names raise :class:`AttributeError` as usual. Usage::
41
+
42
+ def _tskip() -> ModuleType:
43
+ from ...compat import tskip
44
+
45
+ return tskip
46
+
47
+ __getattr__ = moved_getattr(__name__, {"OldName": "NewName"}, "economize.compat.tskip", _tskip)
48
+ """
49
+ names = dict(moved) if isinstance(moved, Mapping) else {name: name for name in moved}
50
+ home = new_home or module
51
+
52
+ def _getattr(name: str) -> Any:
53
+ if name not in names:
54
+ raise AttributeError(f"module {module!r} has no attribute {name!r}")
55
+ target = load() if load is not None else sys.modules[module]
56
+ warn_moved(f"{module}.{name}", f"{home}.{names[name]}")
57
+ return getattr(target, names[name])
58
+
59
+ return _getattr
economize/_version.py ADDED
@@ -0,0 +1,4 @@
1
+ """The version of economize. The single source of the version: ``economize.__version__`` re-exports it, the core records
2
+ it in every checkpoint, and ``pyproject.toml`` reads it at build time (``[tool.hatch.version]``). Imports nothing."""
3
+
4
+ __version__ = "0.3.0"
economize/_wiring.py ADDED
@@ -0,0 +1,22 @@
1
+ """The composition root: it connects the lower layers to implementations that live in higher ones.
2
+
3
+ A layer imports only layers below it (``docs/ARCHITECTURE.md``, Section 2.1). Where a lower layer needs behaviour
4
+ from a higher one, it exposes a registry and the package root registers the implementation here, importing the
5
+ higher module on first use so that ``import economize`` stays light.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from typing import Any
11
+
12
+ from .core.model import GENERATE_IMPLEMENTATIONS
13
+
14
+ __all__: list[str] = []
15
+
16
+
17
+ @GENERATE_IMPLEMENTATIONS.register("transformers")
18
+ def _transformers_generate(model: Any, inputs: Any = None, **kwargs: Any) -> Any:
19
+ """:func:`economize.integrations.generate.generate`, imported on the first ``EfficientModel.generate`` call."""
20
+ from .integrations.generate import generate
21
+
22
+ return generate(model, inputs, **kwargs)
@@ -0,0 +1,63 @@
1
+ """Architecture adapters (one per model family, looked up by ``config.model_type``)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from .base import (
6
+ ARCHITECTURES,
7
+ SUPPORTED_ATTENTION,
8
+ ArchAdapter,
9
+ adapter_for,
10
+ module_device,
11
+ register_adapter,
12
+ )
13
+ from .config import (
14
+ PER_LAYER_CONFIG_FIELDS,
15
+ config_value,
16
+ is_heterogeneous,
17
+ kept_below,
18
+ layer_overrides,
19
+ renumbered,
20
+ set_layer_overrides,
21
+ text_config,
22
+ )
23
+ from .spec import (
24
+ LAYER_KINDS,
25
+ AttentionSpec,
26
+ HeadGeometry,
27
+ LayerKind,
28
+ PassContext,
29
+ StateKind,
30
+ layer_kind_of,
31
+ register_layer_kind,
32
+ )
33
+ from .standard import SoftcappedLogitsMixin, SparseStepMoeMixin, StandardDecoderAdapter
34
+
35
+ __all__ = [
36
+ "ARCHITECTURES",
37
+ "LAYER_KINDS",
38
+ "PER_LAYER_CONFIG_FIELDS",
39
+ "SUPPORTED_ATTENTION",
40
+ "ArchAdapter",
41
+ "AttentionSpec",
42
+ "HeadGeometry",
43
+ "LayerKind",
44
+ "PassContext",
45
+ "SoftcappedLogitsMixin",
46
+ "SparseStepMoeMixin",
47
+ "StandardDecoderAdapter",
48
+ "StateKind",
49
+ "adapter_for",
50
+ "config_value",
51
+ "is_heterogeneous",
52
+ "kept_below",
53
+ "layer_kind_of",
54
+ "layer_overrides",
55
+ "module_device",
56
+ "register_adapter",
57
+ "register_layer_kind",
58
+ "renumbered",
59
+ "set_layer_overrides",
60
+ "text_config",
61
+ ]
62
+
63
+ from . import families # noqa: F401 (registers every family adapter)