Instructions to use ukisai/Swift-1.5-4bit-MLX with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use ukisai/Swift-1.5-4bit-MLX with MLX:
# Make sure mlx-lm is installed # pip install --upgrade mlx-lm # Generate text with mlx-lm from mlx_lm import load, generate model, tokenizer = load("ukisai/Swift-1.5-4bit-MLX") prompt = "Write a story about Einstein" messages = [{"role": "user", "content": prompt}] prompt = tokenizer.apply_chat_template( messages, add_generation_prompt=True ) text = generate(model, tokenizer, prompt=prompt, verbose=True) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- LM Studio
- Pi
How to use ukisai/Swift-1.5-4bit-MLX with Pi:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "ukisai/Swift-1.5-4bit-MLX"
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "mlx-lm": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "ukisai/Swift-1.5-4bit-MLX" } ] } } }Run Pi
# Start Pi in your project directory: pi
- MLX LM
How to use ukisai/Swift-1.5-4bit-MLX with MLX LM:
Generate or start a chat session
# Install MLX LM uv tool install mlx-lm # Interactive chat REPL mlx_lm.chat --model "ukisai/Swift-1.5-4bit-MLX"
Run an OpenAI-compatible server
# Install MLX LM uv tool install mlx-lm # Start the server mlx_lm.server --model "ukisai/Swift-1.5-4bit-MLX" # Calling the OpenAI-compatible server with curl curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "ukisai/Swift-1.5-4bit-MLX", "messages": [ {"role": "user", "content": "Hello"} ] }' - Hermes Agent
How to use ukisai/Swift-1.5-4bit-MLX with Hermes Agent:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "ukisai/Swift-1.5-4bit-MLX"
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default ukisai/Swift-1.5-4bit-MLX
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use ukisai/Swift-1.5-4bit-MLX with OpenClaw:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "ukisai/Swift-1.5-4bit-MLX"
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "ukisai/Swift-1.5-4bit-MLX" \ --custom-provider-id mlx-lm \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
Download compatibility/run-conversion.py from ukisai/Swift-1.5-4bit-MLX: direct link, hf CLI and curl.
- Browser
- Download file 2.86 kB
-
https://huggingface.co/ukisai/Swift-1.5-4bit-MLX/resolve/9fd3d5f738d71f50e0fe84574c44948c0457a01b/compatibility/run-conversion.py
- Command line
-
hf download hf://ukisai/Swift-1.5-4bit-MLX@9fd3d5f738d71f50e0fe84574c44948c0457a01b/compatibility/run-conversion.py
-
curl -L -o run-conversion.py https://huggingface.co/ukisai/Swift-1.5-4bit-MLX/resolve/9fd3d5f738d71f50e0fe84574c44948c0457a01b/compatibility/run-conversion.py
2.86 kB
| """Run the official fixed MLX conversion and record resource usage.""" | |
| import json | |
| import os | |
| import shutil | |
| import subprocess | |
| import time | |
| from datetime import datetime, timezone | |
| from pathlib import Path | |
| root = Path(__file__).resolve().parents[1] | |
| os.chdir(root) | |
| source = Path(os.environ['SWIFT_SOURCE_DIR']).resolve(strict=True) | |
| output = Path(os.environ.get('SWIFT_MLX_OUTPUT', root / 'Swift-1.5-4bit-MLX')).resolve() | |
| logs = Path(os.environ.get('SWIFT_VALIDATION_DIR', root / 'validation-output')).resolve() | |
| logs.mkdir(parents=True, exist_ok=True) | |
| assert not output.exists(), 'Never overwrite an existing artifact' | |
| command = [str(root / '.venv/bin/mlx_lm.convert'), '--hf-path', str(source), '--mlx-path', str(output), '--quantize', '--q-mode', 'affine', '--q-bits', '4', '--q-group-size', '64'] | |
| record = {'command': command, 'started_at': datetime.now(timezone.utc).isoformat(), 'source_repo': 'ukisai/Swift-1.5-Qwen3.8-27b', 'source_revision': '00ccd14e006897d28cb0ed5bf26390e60d274251', 'source_manifest_sha256': '0a00065b88ab003281853a7fb9bd5ce0086bc3781b36136d8c39da19933923ae', 'quantization': {'mode': 'affine', 'bits': 4, 'group_size': 64}} | |
| (logs / 'conversion-command.json').write_text(json.dumps(record, indent=2)+'\n') | |
| env = dict(os.environ, HF_HUB_OFFLINE='1', TRANSFORMERS_OFFLINE='1', PYTHONUNBUFFERED='1', OMP_NUM_THREADS='8', OPENBLAS_NUM_THREADS='8') | |
| start = time.monotonic() | |
| with (logs / 'conversion.log').open('x') as log, (logs / 'conversion-resources.jsonl').open('x') as monitor: | |
| process = subprocess.Popen(command, stdout=log, stderr=subprocess.STDOUT, env=env) | |
| record['pid'] = process.pid | |
| (logs / 'conversion-pid').write_text(str(process.pid)+'\n') | |
| while process.poll() is None: | |
| memory = dict(line.split(':', 1) for line in Path('/proc/meminfo').read_text().splitlines()) | |
| status = Path(f'/proc/{process.pid}/status') | |
| stats = dict(line.split(':', 1) for line in status.read_text().splitlines()) if status.exists() else {} | |
| disk = shutil.disk_usage(root) | |
| sample = {'elapsed_seconds': time.monotonic()-start, 'rss': stats.get('VmRSS', '').strip(), 'peak_rss': stats.get('VmHWM', '').strip(), 'process_swap': stats.get('VmSwap', '').strip(), 'memory_available': memory['MemAvailable'].strip(), 'swap_free': memory['SwapFree'].strip(), 'disk_free_bytes': disk.free} | |
| monitor.write(json.dumps(sample)+'\n'); monitor.flush() | |
| if disk.free < 1024**3: | |
| record['critical_stop_reason'] = 'Less than 1 GiB free disk space' | |
| process.terminate() | |
| time.sleep(5) | |
| record.update(returncode=process.returncode, elapsed_seconds=time.monotonic()-start, finished_at=datetime.now(timezone.utc).isoformat()) | |
| (logs / 'conversion-result.json').write_text(json.dumps(record,indent=2)+'\n') | |
| print(json.dumps(record,indent=2)) | |
| raise SystemExit(process.returncode) | |