2026 MAC IDE
OPENAI_
LOCAL_
API.
Подключить Cursor, Continue или Zed к локальному OpenAI-совместимому /v1/chat/completions на Apple Silicon в 2026 году обычно означает выбор между LM Studio Server, macMLX (:8000/v1) и слой совместимости Ollama. Типичный сбой — не HTTP 404, а скрытая сериализация, устное знание портов и конкуренция за unified memory с Xcode и браузером. Четыре заблуждения, таблица, пять шагов приёмки (фиксация URL, зонд 1/4 потоков, холод/тепло, площадь swap, откат) и числовые ворота для удалённого Mac. Перекрёстные материалы: Ollama vs LM Studio vs MLX, OpenAI API и launchd, macMLX vs batch, SSH/VNC.
1. Разбор боли
(1) HTTP 200 ещё не значит честную параллельность: IDE посылает несколько streaming-запросов на один Base URL; фактически однополосный бэкенд даёт паузы 30–90 с, похожие на сеть. (2) Порты «из уст» и двойные инстансы: у LM Studio Server, macMLX и Ollama разные привычки к портам; плюс Docker/черновые шлюзы — и EADDRINUSE съедает ночь. (3) TTFT и decode — две строки счёта: помощник по коду — это UX диалога; средние tok/s без первых токенов/SSE вводят в заблуждение. (4) Лестница swap на unified memory: индексация Xcode, десятки вкладок, резидентные 7B–13B — столкновение RSS. Смена модели редко лечит; нужны разделение процессов или машин.
2. Сравнительная таблица
Угол «повесить /v1 на IDE»; цифры — якоря сообщества, не юридический SLA.
| Ось | LM Studio Server | macMLX (Swift) | Ollama |
|---|---|---|---|
| Порты | класс 1234 (настраивается) | обычно 8000 | 11434 |
| Рантайм | Electron GUI + сервер | нативный Swift | Go + Metal |
| Веса | GGUF (зависит от движка) | MLX / safetensors | реестр GGUF |
| Кому | сначала GUI, потом headless | меню-бар, мало deps | широкий каталог, CLI |
| Риск | путаница GUI/сервер | пулы моделей и капы RAM | очереди и раздувание контекста |
| mlx-batch | параллельно для чата | совмещается с mlx-стеком | часто перед LiteLLM |
3. Пять шагов приёмки
Шаг 1 Заморозить эталонный URL
Схема, хост, порт, путь, строка модели в wiki — никаких устных localhost:11xxx.
Шаг 2 Зонд 1 и 4 потоков
Один короткий промпт, ≥24 выборок; p95 четырёх к одному >2,5× — сначала очередь, не канал.
Шаг 3 Холодный старт отдельно
Первую загрузку весов не смешивать с дневным SLA.
Шаг 4 Площадь swap
Метки перехода 512 МБ и жёлтая память дольше минуты; наложить RSS, Xcode, эмулятор.
Шаг 5 Откат
Таблица понижения квантования, управляемый рестарт, IDE JSON в git.
4. Матрица решений
| Сигнал | В первую очередь | Запасной | Избегать |
|---|---|---|---|
| мультиклиент TTFT | развести IDE Mac и инференс Mac | меньше параллелизма / меньше квант | рулетка облачных ключей |
| RSS>80 % + swap | тяжёлую модель на удалёнку | урезать контекст и вывод инструментов | только перезагрузка |
| мульти-провайдер | LiteLLM с явными fallback | единый внутренний Base URL | личные устные порты |
Ворота: p95 четырёх потоков >2,8× к одному — разбор за 14 дней; средний swap 90 с >768 МБ — стоп новым клиентам; 2+ OOM/нед — удалённый PoC.
5. Кейс: пять инженеров
«8B диалог на macMLX в ноутбуках, 13B батч в стойке Mac mini — конец войны за DRAM с Colima и эмулятором.»
Исходно: общий Ollama OpenAI-порт на каждом ноуте без сериализации pull — один ollama pull блокирует четыре окна на две минуты. Добавили Docker+Android-эмулятор, unified memory исчезла в шуме TTFT, IDE обвиняли ошибочно. Исправление: хост инференса в DNS/hosts, запрет устных портов; тяжёлое — на прохладный удалённый Apple Silicon; лёгкое остаётся локально. Через месяц дисперсия p95 упала на порядок, дежурства «кто рестартует модель» исчезли благодаря launchd и health-check удалённо. Урок: совместимость OpenAI — это провод, а не справедливый планировщик.
6. Управление и экономика 2026
Маркетинг сходится к «/v1 работает»; инженерия расходится по глубине очередей Metal, GGUF против MLX, нужна ли постоянно открытая десктопная оболочка. Управление важнее бренда: экспортируйте клиентские JSON, прикладывайте гистограммы к еженедельным SRE-заметкам. Длительность swap — бюджетная статья, а не «магия».
Команды в разных часовых поясах: привязка инференса к «чьему-то» MacBook крепит SLA ко сну и аэропортовому Wi-Fi. Стабильный уровень на круглосуточном удалённом Mac с TLS reverse-proxy бьёт вечные SSH-туннели. Почасовые узлы MACGPU дают рычаг без CapEx.
Экстремальные temperature/max_tokens часто ломают хвост раньше Metal. Версионируйте сниппеты, сравнивайте диффами. Не стройте лестницы reverse-proxy без измерений — у каждого звена свой DNS, буфер, таймаут.
Чистое облако снижает локальный песок dtype, но раздувает счёт и маршрутизацию комплаенса. Один ноутбук привязывает SLA к кофейне. Удалённый Mac с предсказуемым охлаждением отделяет эргономику ассистента от термодросселирования — цель MACGPU.
7. Длинный контекст, циклы инструментов, скрытая «token-пошлина»
Агенты редко падают из‑за текста пользователя — они ломаются на неограниченных ответах tools (огромный grep, целый файл, хвост лога). LM Studio, macMLX и Ollama не делят одинаковую KV/батч-физику. Введите потолки строк для выхода инструментов, свяжите max_tokens со stop-последовательностями, разделяйте холодные замеры и горячий SLA. Повторяемые system-префиксы у подзадач тихо удваивают нагрузку токенизатора — храните JSON клиентов в git и смотрите diff еженедельно. Алиас, указывающий на более тяжёлый пакет MLX, меняет RSS без видимой «ошибки» в IDE; зафиксируйте порты и квантование в SERVICES.md.
8. Числовые ворота для ревью (таблица)
Это тормоза слияния, не маркетинговые SLA: минимум N≥24 выборок TTFT; задокументированное отношение четырёх потоков к одному (2,8× или жёстче); swap как среднее за 90 секунд и время «жёлтого» давления, а не одиночный пик.
| Метрика | Ориентир | Блокирует |
|---|---|---|
| Холодный TTFT | отдельная вкладка | путаница с первым pull |
| Горячий p95 | с человеком+агентом | наращивать только клиентов на один демон |
| Соотн. 4/1 | >2,8× арх. обзор | перегруз одной очереди |
| Средний swap 90 с | >768 МБ — стоп новых клиентов | функции без бюджета DRAM |
9. FAQ
В: Меняем стек каждый день? О: Без двух таблиц Base URL/моделей кеш IDE держит старые имена. В: LiteLLM спасает память? О: Нет без явной цели на удалённом Mac. В: Тормозит только localhost? О: Закрепите 127.0.0.1, уберите mDNS/IPv6 ветку.