Apple Foundation Models no macOS 27

O que existe por trás de fm chat, como conectar clientes OpenAI-compatible e qual SDK usar num aplicativo.

O comando que você usou, fm chat, é a interface de terminal da Apple para os Foundation Models — os modelos que alimentam recursos do Apple Intelligence. No macOS 27 Golden Gate, dá para conversar pelo terminal, chamar o modelo em código Swift ou Python e, segundo testes de terceiros, expor uma API local compatível com Chat Completions. São caminhos diferentes; a parte do servidor tem menos documentação oficial e merece cuidado extra.

TL;DR Sim, um cliente OpenAI-compatible pode falar com o endpoint local reportado para fm serve. Isso não significa usar uma chave real da OpenAI: para o modelo local não há cobrança nem credencial de provedor; relatos de teste dizem que basta um valor fictício se o cliente exigir um campo de chave. O SDK recomendado para um app Apple é o framework Swift FoundationModels; a Apple também oferece um SDK Python.

O que é o fm

fm é um utilitário de linha de comando incluído no macOS 27. Ele permite testar prompts no Terminal, conversar em uma sessão interativa e usar o modelo em automações sem primeiro criar um projeto no Xcode. A Apple também lançou o Foundation Models SDK para Python. [2]

“Golden Gate 27” é de fato a nomenclatura usada pela Apple para essa versão do macOS. [10] O modelo padrão, identificado como system em integrações, roda no próprio Mac. O modo pcc é outra coisa: usa o modelo da Apple em Private Cloud Compute, portanto não é inferência somente local. No fm chat, a Apple demonstra trocar de modelo com o comando /model. [2]

SuperfíciePara que serveCredencial
fm chatExplorar prompts e conversar no TerminalNão precisa de API key para o modelo local
fm serveEndpoint local para clientes de Chat CompletionsRelatos indicam chave fictícia; não trate isso como autenticação
Framework SwiftAdicionar geração de texto a um app AppleSem chave para o modelo local
SDK PythonScripts, protótipos e experimentos em Python no MacSem chave para o modelo local

Usando o CLI: conversa, resposta única e automação

Para conferir os comandos disponíveis na sua instalação e começar:

fm --help
fm available
fm chat

fm chat abre a conversa interativa. A Apple demonstra comandos internos como /model, para alternar o modelo, e /save, para salvar a conversa. Para uma resposta única ou um script, use fm respond; o CLI também inclui comandos para esquemas estruturados e automação. [2]

Exemplo de resposta única

fm respond "Resuma em uma frase: [cole aqui o texto]"

Se o macOS bloquear o uso por causa do aviso de licença do utilitário, leia o aviso e siga o procedimento mostrado pelo próprio comando. Um guia independente documenta a aceitação com sudo fm license; confirme o texto e o comportamento na sua versão antes de executar. [9]

API compatível com OpenAI: o que funciona e o que a chave significa

Há relatos independentes de que fm serve inicia um servidor local que aceita requisições no formato Chat Completions, em http://127.0.0.1:1976/v1. Um cliente configurável para OpenAI pode, portanto, apontar seu base_url para esse endereço e escolher system como modelo. [12][14]

A distinção importante: compatibilidade de protocolo não é uma chave OpenAI. A Apple diz que não é necessária API key para usar o Foundation Model local. Em teste publicado por um desenvolvedor, fm não validou o valor de chave e o cliente só exigia que o campo estivesse preenchido. Isso é observação de terceiros, não uma especificação oficial de autenticação da Apple. [2][13]

Exemplo com o SDK Python oficial da OpenAI apontado para o serviço local

from openai import OpenAI

client = OpenAI(
    base_url="http://127.0.0.1:1976/v1",
    api_key="dummy",  # só um valor local fictício, se o cliente exigir
)

answer = client.chat.completions.create(
    model="system",
    messages=[
        {"role": "user", "content": "Resuma este texto em duas frases: ..."}
    ],
)
print(answer.choices[0].message.content)

Rode fm serve em outro Terminal antes de testar o cliente. Não coloque uma chave real da OpenAI nesse exemplo: ela não habilita o modelo Apple nem deve ser usada como proteção do serviço. O que as fontes independentes confirmam é a rota de Chat Completions; não assuma compatibilidade total com toda a API OpenAI, com a API /v1/responses ou com todos os recursos avançados de qualquer SDK.

Há pelo menos um relato de teste em beta no qual definições de ferramentas enviadas por um cliente OpenAI-compatible foram rejeitadas por diferenças no formato JSON. Isso pode ter mudado desde então, mas serve como alerta: valide tool calling, saída estruturada, streaming e parâmetros que seu cliente realmente usa. [14]

Resposta direta sobre API key Dá para usar um cliente compatível com OpenAI; não é necessário ter uma chave OpenAI para o modelo local. Se a biblioteca exigir uma chave no construtor, os relatos usam um placeholder como dummy. Como não há autenticação oficial documentada para fm serve, esse placeholder não é um segredo e não protege a porta.

Criar um app: framework nativo Swift

Para um aplicativo Apple, o caminho direto é o framework FoundationModels. Ele oferece sessões, instruções de sistema, resposta em texto, geração guiada de estruturas e ferramentas que o modelo pode chamar. O modelo local só fica disponível quando o dispositivo, a região e o estado do Apple Intelligence permitem; o app precisa oferecer uma alternativa quando o modelo não estiver pronto ou não for elegível. [5][6]

Swift · exemplo mínimo assíncrono

import FoundationModels

func responder(_ prompt: String) async throws -> String? {
    guard case .available = SystemLanguageModel.default.availability else {
        return nil // apresente uma alternativa na interface real
    }

    let session = LanguageModelSession(
        instructions: "Responda em português do Brasil, com clareza e concisão."
    )
    let response = try await session.respond(to: prompt)
    return response.content
}

Reutilize a mesma LanguageModelSession quando quiser uma conversa com contexto entre turnos. A Apple recomenda verificar disponibilidade antes e desenhar um fallback; não faça a interface presumir que o modelo sempre está ativo. [6][16]

No macOS 27, a abstração do framework também pode acomodar modelos de outros provedores por implementações conformes ao protocolo público LanguageModelExecutor. Isso é integração de provedor dentro do app Swift — não uma propriedade automática do fm serve. Credenciais de um provedor externo devem seguir o fluxo seguro daquele provedor; a Apple recomenda evitar strings de API key embutidas e usar armazenamento seguro, como Keychain. [1][7]

SDK Python: ótimo para prototipar e automatizar

A Apple publica o pacote apple-fm-sdk, importado como apple_fm_sdk. Os requisitos publicados incluem macOS 26 ou posterior, Python 3.10+, Xcode 26 ou posterior, Mac compatível com Apple Intelligence e Apple Intelligence ativado. Em outras palavras: é um SDK para chamar o framework a partir de Python no Mac, não um serviço cloud nem uma API key. [3][4]

Python · instalação e primeira resposta

python3 -m venv .venv
source .venv/bin/activate
python -m pip install apple-fm-sdk
import asyncio
import apple_fm_sdk as fm

async def main():
    model = fm.SystemLanguageModel()
    available, reason = model.is_available()
    if not available:
        print(f"Modelo indisponível: {reason}")
        return

    session = fm.LanguageModelSession(model=model)
    answer = await session.respond(prompt="Resuma este texto em três tópicos: ...")
    print(answer)

asyncio.run(main())

O SDK cobre prompting, streaming, tool calling e geração guiada. É uma boa rota para testar instruções, rodar uma automação local ou avaliar prompts antes de portar a lógica para Swift. [2][3]

Onde o modelo ajuda — e onde não confiar nele

A Apple posiciona o modelo local para tarefas de texto focadas: resumir, classificar, extrair entidades, revisar, gerar tags e produzir conteúdo curto. Ela alerta que o modelo pode não ser adequado para matemática básica, geração de código e raciocínio lógico sem estrutura adicional. [6]

Para dados atuais ou verdade operacional, forneça a fonte ao modelo ou conecte ferramentas do app; para um formato estável, use geração guiada e valide o resultado. O framework oferece tool calling e geração estruturada, mas isso não transforma uma resposta probabilística em uma fonte de verdade. [5][2]

Uma política sensata é usar system para transformação de texto privada, rápida e delimitada; escolher uma ferramenta ou outro provedor para buscas atuais, código ou raciocínio pesado; e recorrer a pcc somente quando fizer sentido aceitar processamento no serviço de nuvem privada da Apple. [2][5]

Segurança: local não quer dizer autenticado

As fontes técnicas independentes consultadas descrevem o servidor de fm serve como loopback em 127.0.0.1:1976. Isso o torna útil para aplicativos no mesmo Mac, mas não uma API a ser publicada diretamente na LAN ou na internet. A porta não deve ser tratada como protegida por API key. [11][12][13]

  • Confira o que a sua versão anuncia com fm --help e valide o listener no macOS com lsof -nP -iTCP:1976 -sTCP:LISTEN.
  • Prefira 127.0.0.1; não faça port forwarding nem abra a porta no roteador.
  • Se precisar de acesso remoto, use um túnel SSH ou um gateway autenticado e restrito — não exponha o listener cru.
  • Se um cliente Electron/WebView falhar com erro de origem ou CSRF, isso pode ser uma restrição de origem do servidor, não uma chave inválida. Há um relato concreto desse comportamento em um cliente desktop. [13]
Limite da evidência fm serve e seus detalhes de autenticação não aparecem na referência oficial da Apple consultada para o CLI. Endpoint, porta e comportamento da chave vêm de testes e documentação de terceiros; confirme tudo com fm serve --help na build instalada antes de depender disso em produção.

Qual caminho eu usaria

  1. Só experimentar: continue com fm chat e use fm respond para uma pergunta ou automação curta.
  2. Fazer um app Apple: comece pelo framework Swift FoundationModels, implemente a checagem de disponibilidade e um fallback.
  3. Prototipar em Python: instale apple-fm-sdk num ambiente virtual no Mac e teste prompts com dados controlados.
  4. Conectar uma ferramenta OpenAI-compatible: teste fm serve apenas em loopback, com um placeholder em vez de chave real, e valide cada recurso necessário — sobretudo ferramentas e streaming.

Resumo sem fumaça de marketing: fm é um jeito conveniente de acessar o modelo da Apple; fm serve pode funcionar como ponte local para clientes OpenAI-style; e o SDK é a escolha mais limpa para construir a aplicação. O modelo é pequeno e especializado. Use-o onde ele se sai bem, não como substituto universal para um modelo maior.

Fontes

Fontes oficiais da Apple sustentam as capacidades do framework, o CLI documentado e os SDKs. As referências sobre fm serve, porta e chave são observações de terceiros e foram separadas dessa documentação oficial.

  1. Apple Developer — What’s New in macOS 27
  2. Apple Developer — WWDC26: Build AI-powered scripts with the fm CLI and Python SDK
  3. Apple — Foundation Models SDK for Python (GitHub)
  4. Apple — Foundation Models SDK for Python documentation
  5. Apple Developer — Foundation Models
  6. Apple Developer — Generating content and performing tasks with Foundation Models
  7. Apple Developer — WWDC26: Bring an LLM provider to the Foundation Models framework
  8. Mac Install Guide — The fm Command for Apple AI (fonte independente)
  9. Apple Support — What’s new for enterprise in macOS Golden Gate 27
  10. AnyRouter — Apple’s on-device Foundation Model, now on the AnyRouter API (fonte independente)
  11. AnyRouter Docs — Local Relay (fonte independente)
  12. Shubham Kushagra — WWDC 2026: Apple Foundation Models (& Anarlog) (relato independente de teste)
  13. Future Tech Blog — macOS 27 fm e integração OpenAI-compatible (relato independente de teste)
  14. Apple Developer — LanguageModelSession

Pesquisa consultada em 22 de setembro de 2026. Interfaces e disponibilidade podem mudar entre builds do macOS 27.