Run MLX compatible HuggingFace models on Apple silicon locally with Pydantic AI.
Two options are provided as backends;
- LM Studio backend (OpenAI compatible server that can also utilize mlx-lm, model runs on a separate background process)
- mlx-lm backend (direct integration with Apple's library, model runs within your applicaiton, experimental support)
STILL IN DEVELOPMENT, NOT RECOMMENDED FOR PRODUCTION USE YET.
Contributions are welcome!
Features
- LM Studio backend, should be fully supported
- Streaming text support for mlx-lm backend
- Tool calling support for mlx-lm backend
Apple's MLX seems more performant on Apple silicon than llama.cpp (Ollama), as of January 2025.
Installation
uv add pydantic-ai-mlx
Usage
LM Studio backend
from pydantic_ai import Agent
from pydantic_ai.messages import ModelMessage
from pydantic_ai_lm_studio import LMStudioModel
model = LMStudioModel(model_name="mlx-community/Qwen2.5-7B-Instruct-4bit") # supports tool calling
agent = Agent(model, system_prompt="You are a chatbot.")
async def stream_response(user_prompt: str, message_history: list[ModelMessage]):
async with agent.run_stream(user_prompt, message_history) as result:
async for message in result.stream():
yield message
mlx-lm backend
from pydantic_ai import Agent
from pydantic_ai.messages import ModelMessage
from pydantic_ai_mlx_lm import MLXModel
model = MLXModel(model_name="mlx-community/Llama-3.2-3B-Instruct-4bit")
# See https://github.com/ml-explore/mlx-examples/blob/main/llms/README.md#supported-models
# also https://huggingface.co/mlx-community
agent = Agent(model, system_prompt="You are a chatbot.")
async def stream_response(user_prompt: str, message_history: list[ModelMessage]):
async with agent.run_stream(user_prompt, message_history) as result:
async for message in result.stream():
yield message
Metadata
Release files for pydantic-ai-mlx 0.2.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pydantic_ai_mlx-0.2.5.tar.gz | 47.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pydantic_ai_mlx-0.2.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 56.8 kB
Release files / pydantic_ai_mlx-0.2.5.tar.gz
| Download URL | pydantic_ai_mlx-0.2.5.tar.gz |
|---|---|
| Size | 47.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a8c401da5b8ef3a9878799ddfe86de949480f3e26eb71cb076b75bf727251fb4
|
|
BLAKE2b-256 checksum How to use checksums |
d6e7ffbfbcee447bbf6ec33e180280703fe8246b2667a074060614c222473f6a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.6.5
|
Release files / pydantic_ai_mlx-0.2.5-py3-none-any.whl
| Download URL | pydantic_ai_mlx-0.2.5-py3-none-any.whl |
|---|---|
| Size | 9.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
06a810722c4f6bfa12ecf80575147be8e2596b1695bc9ebdcf4693a6099e5e2e
|
|
BLAKE2b-256 checksum How to use checksums |
b14410e499d9a5ef599d8248a316591997ab55414dfd79971492cb984d00e688
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.6.5
|