Download eval/local_intelligence/providers/mlx.py from arach/training-lab: direct link, hf CLI and curl.
- Browser
- Download file 1.47 kB
-
https://huggingface.co/arach/training-lab/resolve/main/eval/local_intelligence/providers/mlx.py
- Command line
-
hf download hf://arach/training-lab/eval/local_intelligence/providers/mlx.py
-
curl -L -o mlx.py https://huggingface.co/arach/training-lab/resolve/main/eval/local_intelligence/providers/mlx.py
1.47 kB
| from __future__ import annotations | |
| import time | |
| from .base import BaseProvider, ProviderResponse | |
| class MLXProvider(BaseProvider): | |
| name = "mlx" | |
| def __init__(self, model_name: str | None, adapter_path: str | None = None, max_tokens: int = 400): | |
| if not model_name: | |
| raise ValueError("MLX provider requires --model.") | |
| from mlx_lm import generate, load # Imported lazily. | |
| from mlx_lm.sample_utils import make_sampler | |
| self._generate = generate | |
| self._sampler = make_sampler(temp=0.0) | |
| self._model, self._tokenizer = load(model_name, adapter_path=adapter_path) | |
| self.model_name = model_name | |
| self.adapter_path = adapter_path | |
| self.max_tokens = max_tokens | |
| def generate(self, card: dict, messages: list[dict[str, str]], prompt_text: str) -> ProviderResponse: | |
| prompt = self._tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) | |
| start = time.perf_counter() | |
| raw_text = self._generate( | |
| self._model, | |
| self._tokenizer, | |
| prompt=prompt, | |
| max_tokens=self.max_tokens, | |
| verbose=False, | |
| sampler=self._sampler, | |
| ) | |
| latency_ms = (time.perf_counter() - start) * 1000 | |
| return ProviderResponse( | |
| raw_text=raw_text.strip(), | |
| latency_ms=latency_ms, | |
| metadata={"model": self.model_name, "adapter": self.adapter_path}, | |
| ) | |