<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: saba-ch</title>
    <description>The latest articles on DEV Community by saba-ch (@d3bugger).</description>
    <link>https://dev.to/d3bugger</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F605107%2F85da0d53-03d9-497c-bd57-5074a0dae37b.jpeg</url>
      <title>DEV Community: saba-ch</title>
      <link>https://dev.to/d3bugger</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/d3bugger"/>
    <language>en</language>
    <item>
      <title>If you have a MacBook, you already have a GPU with more memory than most graphics cards. This is because Apple silicon has unified RAM.

This article will explain how to find, choose, and run models locally on Apple devices with MLX.</title>
      <dc:creator>saba-ch</dc:creator>
      <pubDate>Wed, 15 Jul 2026 18:48:18 +0000</pubDate>
      <link>https://dev.to/d3bugger/if-you-have-a-macbook-you-already-have-a-gpu-with-more-memory-than-most-graphics-cards-this-is-4oo8</link>
      <guid>https://dev.to/d3bugger/if-you-have-a-macbook-you-already-have-a-gpu-with-more-memory-than-most-graphics-cards-this-is-4oo8</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/d3bugger/a-guide-on-running-models-locally-47go" class="crayons-story__hidden-navigation-link"&gt;A guide on running models locally&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/d3bugger" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F605107%2F85da0d53-03d9-497c-bd57-5074a0dae37b.jpeg" alt="d3bugger profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/d3bugger" class="crayons-story__secondary fw-medium m:hidden"&gt;
              saba-ch
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                saba-ch
                
              
              &lt;div id="story-author-preview-content-4152355" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/d3bugger" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F605107%2F85da0d53-03d9-497c-bd57-5074a0dae37b.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;saba-ch&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/d3bugger/a-guide-on-running-models-locally-47go" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 15&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/d3bugger/a-guide-on-running-models-locally-47go" id="article-link-4152355"&gt;
          A guide on running models locally
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/machinelearning"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;machinelearning&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mlx"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mlx&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/d3bugger/a-guide-on-running-models-locally-47go#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>hardware</category>
      <category>machinelearning</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>A guide on running models locally</title>
      <dc:creator>saba-ch</dc:creator>
      <pubDate>Wed, 15 Jul 2026 18:45:11 +0000</pubDate>
      <link>https://dev.to/d3bugger/a-guide-on-running-models-locally-47go</link>
      <guid>https://dev.to/d3bugger/a-guide-on-running-models-locally-47go</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fte02f3566sycohzahrzu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fte02f3566sycohzahrzu.png" alt="Banner" width="799" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have a Macbook, you already have a GPU with more memory than most graphics cards. This is because Apple silicon has unified RAM that is shared across the GPU and CPU. The latest MacBook Pro comes with 24 GB of unified memory, that is effectively 24 GB of GPU memory. This is modest in the AI world, but it can definitely run a few quantized models locally. This article will explain how to find, choose, and run models locally on Apple devices with MLX.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is MLX?
&lt;/h2&gt;

&lt;p&gt;MLX is a machine learning framework designed for Apple silicon. It takes full advantage of Apple's unified memory and runs operations across GPU and CPU. It's similar to PyTorch. You can use MLX to train and run neural networks on MacOS. We are specifically interested in mlx-lm, a package built on top of MLX to run and fine-tune large language models. You can just run &lt;code&gt;uv tool install mlx-lm&lt;/code&gt; to install it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do we choose the models?
&lt;/h2&gt;

&lt;p&gt;When it comes to running models locally, we don't have many options because we are heavily constrained by our working memory, to be able to generate tokens, you should be able to hold the entire model in RAM. The latest MacBook Pro comes with 24GB memory, and macOS constrains us to only use 75% of that in the GPU that means we have an 18GB budget. In this article, we will be looking for models that can fit in our budget rather than do quick generation or solve the hardest problems.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxx6pbfcbcry66z7duyw9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxx6pbfcbcry66z7duyw9.png" alt="Hugging Face MLX community models" width="800" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you head to &lt;a href="https://huggingface.co/mlx-community" rel="noopener noreferrer"&gt;Hugging Face,&lt;/a&gt; you will see a bunch of similar cryptic names of models. In those names, there is useful information about model size, which you will have to learn how to decipher. Let's try to decipher this one model: &lt;strong&gt;&lt;em&gt;mlx-community/Qwen3.6-27B-bf16&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;First, &lt;strong&gt;Qwen3.6&lt;/strong&gt;, which is the name of the model, is one of the favorites of the local community. Then we get &lt;strong&gt;27B&lt;/strong&gt;, this means we have 27 billion parameters in this model. You can think of parameters as a bunch of numbers, such as vectors and matrices. Next up, have &lt;strong&gt;bf16&lt;/strong&gt; this tells us how many bits each parameter is. Models usually come out with 16 bits per parameter, which is then quantized into 8 and 4 bits.&lt;/p&gt;

&lt;p&gt;Using deciphered params, we can use the formula to calculate how big the model actually is in bytes: &lt;em&gt;parameters * bits_per_parameter / 8 = size in bytes.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;27B * 16 / 8 = 54GB&lt;/strong&gt; :(&lt;/p&gt;

&lt;p&gt;Sadly there is no way we can fit this our budget (18GB). This is where quantization comes into play.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quantization
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F80f5j6xcow85r1mmxac7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F80f5j6xcow85r1mmxac7.png" alt="A Visual Guide to Quantization - by Maarten Grootendorst" width="680" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can think of quantization as scaling something down. Imagine a number between 1 and 1000. Let's say you chose 427, quantizing this number means storing it in a smaller space like 1 to 100. In this space, it translates to 43. When you need the original number back, you multiply it back by the scale, and you get 430.&lt;/p&gt;

&lt;p&gt;During quantization, you lose accuracy, but you end up with smaller numbers, which means a smaller memory footprint.&lt;/p&gt;

&lt;p&gt;Here is the quantized model &lt;strong&gt;&lt;em&gt;mlx-community/Qwen3.6-27B-4bit&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In our equation, this translates to: &lt;strong&gt;27B * 4 / 8 = 13.5 GB&lt;/strong&gt; but we have to add 20-25% overhead to quantized models because there is overhead to scaling and smart quantization sometimes spares few layers for accuracy, we won't get into these details. After overhead, it would be around &lt;strong&gt;16GB&lt;/strong&gt;. This is borderline within our limit, but still within the budget. So we can run this on our machine, right?&lt;/p&gt;

&lt;h3&gt;
  
  
  Context window and KV Cache
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi2tgr1zatu9ilen24gx0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi2tgr1zatu9ilen24gx0.png" alt="Context window and KV cache" width="799" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I can see why you would think that, yes you can fit the model on the machine and greet it, but you won't be able to use it much because we haven't accounted for the context window yet.&lt;/p&gt;

&lt;p&gt;LLMs predict the next token from all the tokens before it. To do this effectively, they store the computed vectors of each token in memory, called the KV cache. Without this, generating the next token would mean recomputing the whole sequence from scratch, which would be very compute-intensive. Luckily, each token's cache has a fixed size that scales linearly. To calculate how many bytes each token needs, you can use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kv_per_token (bytes) = 2 × n_attn_layers × n_kv_heads × head_dim × cache_bytes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can check out the config.json of the model to get these values. &lt;strong&gt;&lt;em&gt;n_attn_layers=16, n_kv_heads=4, head_dim=256, cache_bytes=2&lt;/em&gt;&lt;/strong&gt;. This means:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kv_per_token = 2 × 16 × 4 × 256 × 2 = 65,536 bytes = 64 KB per token
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At a &lt;strong&gt;32k&lt;/strong&gt; context length, it would allocate &lt;strong&gt;2GB&lt;/strong&gt; of memory, which is already too much, and this model has a &lt;strong&gt;262k&lt;/strong&gt; context window; at full length, it would need 16GB of working memory! So we can throw this option out of the window.&lt;/p&gt;

&lt;h3&gt;
  
  
  Running the model
&lt;/h3&gt;

&lt;p&gt;Let's check out the smaller model &lt;strong&gt;&lt;em&gt;mlx-community/Qwen3.5-9B-4bit&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let's plug this into our memory equation to calculate memory: &lt;strong&gt;9B * 4 / 8 = 4.5GB&lt;/strong&gt; if you add 20% overhead, you get &lt;strong&gt;5.5 GB&lt;/strong&gt;. So far so good. Now let's plug in context window numbers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2 × 8 layers × 4 kv_heads × 256 head_dim × 2 bytes = 32,768 bytes = 32KB per token
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means at full &lt;strong&gt;262k&lt;/strong&gt; we would only use &lt;strong&gt;8.4GB&lt;/strong&gt;. Only is ironic here, full context seems to be larger than the model itself, but the good news is in total it needs &lt;strong&gt;14GB&lt;/strong&gt; memory, which is well below our limit, so we can safely use it.&lt;/p&gt;

&lt;p&gt;Let's try it! To test it, you can run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mlx_lm.chat &lt;span class="nt"&gt;--model&lt;/span&gt; mlx-community/Qwen3.5-9B-4bit &lt;span class="nt"&gt;--max-tokens&lt;/span&gt; 8192
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will download and give you an ugly interactive chat interface to test it at first.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fubp830gvlh7a4moi5qrk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fubp830gvlh7a4moi5qrk.png" alt="mlx_lm.chat interactive interface" width="800" height="632"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can see you can message it and get the response back. Now you understand what I meant by an ugly interface. LLMs' outputs are not really formatted the way they're supposed to. You can play around with it and see how smart it is. Next up, we are gonna use it for coding!&lt;/p&gt;

&lt;h3&gt;
  
  
  Coding with the model
&lt;/h3&gt;

&lt;p&gt;We were able to chat with the model from the built-in interactive interface. How can we use it in other harnesses? Most of the models today are exposed behind standard OpenAI-compatible API servers; it's the closest thing to standard we have today, and almost all harnesses support plugging in custom models that run behind one.&lt;/p&gt;

&lt;p&gt;To run your model behind a server locally, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mlx_lm.server &lt;span class="nt"&gt;--model&lt;/span&gt; mlx-community/Qwen3.5-9B-4bit &lt;span class="nt"&gt;--max-tokens&lt;/span&gt; 8192
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flb8b99hobcj3r4ltyh2l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flb8b99hobcj3r4ltyh2l.png" alt="mlx_lm.server running" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I will be plugging in my local model in &lt;a href="https://pi.dev/" rel="noopener noreferrer"&gt;PI Coding Agent&lt;/a&gt;. It's minimal and customizable by design, and that's just what we need now. if use pi as well and you want to add your own local provider, you can create the &lt;strong&gt;&lt;em&gt;~/.pi/agent/extensions/local-mlx.ts&lt;/em&gt;&lt;/strong&gt; file and paste the following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ExtensionAPI&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@earendil-works/pi-coding-agent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pi&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ExtensionAPI&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;pi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;registerProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;local-mlx&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Local MLX&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;baseUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://127.0.0.1:8080/v1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;api&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;openai-completions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mlx-local&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;compat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;supportsDeveloperRole&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;supportsReasoningEffort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;supportsUsageInStreaming&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;maxTokensField&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;max_tokens&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;models&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mlx-community/Qwen3.5-9B-4bit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Qwen3.5 9B 4-bit (MLX local)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;reasoning&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="na"&gt;contextWindow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;131072&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;maxTokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8192&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;cacheRead&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;cacheWrite&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After this run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pi &lt;span class="nt"&gt;--model&lt;/span&gt; local-mlx/mlx-community/Qwen3.5-9B-4bit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp39klmz2y6ub829l8i1m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp39klmz2y6ub829l8i1m.png" alt="pi running with local model" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy prompting! Here is how mine did:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbp4jauztc2kh77apycma.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbp4jauztc2kh77apycma.png" alt="Example output" width="799" height="594"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating your own Agent Workspaces
&lt;/h2&gt;

&lt;p&gt;If you liked self-hosting models, you are gonna love this one. I am working on a project called &lt;a href="https://github.com/opsyhq/wolli" rel="noopener noreferrer"&gt;Wolli&lt;/a&gt;. It lets you create local Agent Workspaces that plug into your tools and help automate routine tasks. For example, you could integrate GitHub and make your own Code Reviewer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsf9wcntd9ieyvnr60gla.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsf9wcntd9ieyvnr60gla.png" alt="Wolli Agent Workspaces" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can give it a shot and let me know what you think!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>machinelearning</category>
      <category>mlx</category>
    </item>
  </channel>
</rss>
