Anthropic выпустила Claude for Foundation Models — Swift-пакет, который подключает Claude к фреймворку Foundation Models от Apple. Пакет реализует протокол LanguageModel, поэтому моделью можно управлять через стандартный LanguageModelSession API: respond(to:), стриминг, guided generation и вызов инструментов работают как с обычной встроенной моделью Apple.
Запросы идут напрямую из приложения в Claude API — Apple не участвует в передаче данных и не видит ни запросов, ни ответов. Оплата списывается со счёта Anthropic по стандартным тарифам. Разработчик сам решает, когда звать Claude, а когда — встроенную модель Apple: достаточно подменить аргумент model: в сессии.
Сейчас пакет в статусе беты и рассчитан на OS 27 beta. Поддерживаются iOS 27, macOS 27, visionOS 27 и watchOS 27. Для работы нужен Xcode 27 beta и API-ключ из Claude Console.
Установка — через Package.swift или Xcode. Точка входа — ClaudeLanguageModel. Ему передаётся идентификатор модели (например, .sonnet4_6 или .opus4_8), способ аутентификации и опционально baseURL, timeout и serverTools. ClaudeModel содержит константы с зашитыми возможностями модели: какие параметры сэмплирования, уровни усилий (effort), адаптивное мышление, структурированный вывод и поддержку изображений. Если отправлять поле, которое модель не принимает, — ошибка. Для новых моделей можно задать capabilities вручную.
Уровень усилий фиксируется через fixedEffort:. Это единственный способ передать .xhigh или .max, так как встроенные reasoning hints Apple доходят только до high.
Для разработки ключ передаётся в .apiKey, но в билде он извлекается — для продакшена нужно .proxied: запросы идут через ваш бэкенд, который подставляет x-api-key. Ваш прокси получает стандартные Messages API-запросы.
Стриминг работает через streamResponse(to:), возвращая на каждом шаге полный снэпшот ответа, а не дельту. Структурированный вывод — через аннотацию @Generable и параметр generating: в respond(to:generating:). Если модель не умеет структурированный вывод — пакет выбрасывает ошибку LanguageModelError.unsupportedGenerationGuide.
Серверные инструменты (веб-поиск, веб-фетч, выполнение кода) настраиваются на уровне модели через serverTools: — они выполняются на стороне Anthropic за один round-trip. Клиентские инструменты (Tool) передаются в LanguageModelSession как обычно.
Ошибки Claude API маппятся на LanguageModelError Apple там, где есть соответствие: contextSizeExceeded, rateLimited, timeout. Если маппинга нет — приходит ClaudeError, можно ловить и обрабатывать. Типичный сценарий: поймать .rateLimited и переключиться на SystemLanguageModel для этого запроса.
Некоторые возможности Messages API в пакете недоступны: настройки prompt caching (применяется автоматически), stop sequences, батчинг, Files API, подсчёт токенов, beta-заголовки.
Пакет распространяется под лицензией Apache 2.0. Баги принимают через GitHub Issues, пул-реквесты на время беты не рассматриваются.