Communitygithub.com

modelos-fundacionais-no-dispositivo

Framework Apple FoundationModels para LLM no dispositivo — geração de texto, geração guiada com @Generable, chamada de ferramentas e streaming de snapshot no iOS 26+. Use ao adicionar recursos de LLM no dispositivo com Apple FoundationModels no iOS 26+.

O que é modelos-fundacionais-no-dispositivo?

Este perfil (skill) descreve padrões para integrar o modelo de linguagem local da Apple em aplicativos usando o framework FoundationModels, disponível a partir do iOS 26. Ele cobre geração de texto, saída estruturada com `@Generable`, chamada de ferramentas personalizadas e streaming de snapshot — tudo executado no dispositivo para garantir privacidade e suporte offline. O perfil é ativado ao construir funcionalidades baseadas em IA que exigem processamento local, como extração de dados estruturados de entrada de linguagem natural, sumarização de texto, ou implementação de ações de IA específicas de domínio. Inclui guias práticos com código Swift, padrões como verificação de disponibilidade do modelo, criação de sessões de conversa única ou múltipla, definição de tipos geráveis, e integração com SwiftUI para atualizações de interface em tempo real via streaming. Também aborda decisões de design importantes, como o limite de 4.096 tokens, streaming baseado em snapshot, e a macro `@Generable` para segurança em tempo de compilação. Oferece orientações sobre boas práticas (como sempre verificar `model.availability` e usar `@Generable` para saída estruturada) e antipadrões a evitar (como criar sessões sem verificar disponibilidade ou usar `.output` em vez de `.content`).

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/everything-claude-code/tree/main/skills/foundation-models-on-device

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

FoundationModels: LLM no Dispositivo (iOS 26)

Padrões para integrar o modelo de linguagem local da Apple em aplicativos usando o framework FoundationModels. Abrange geração de texto, saída estruturada com @Generable, chamada de ferramentas personalizadas e streaming de snapshot — tudo executado no dispositivo para privacidade e suporte offline.

Quando Ativar

  • Construindo funcionalidades baseadas em IA usando Apple Intelligence no dispositivo
  • Gerando ou resumindo texto sem dependência de nuvem
  • Extraindo dados estruturados de entrada de linguagem natural
  • Implementando chamada de ferramentas personalizadas para ações de IA específicas de domínio
  • Transmitindo respostas estruturadas para atualizações de interface em tempo real
  • Necessidade de IA que preserve a privacidade (nenhum dado sai do dispositivo)

Padrão Principal — Verificação de Disponibilidade

Sempre verifique a disponibilidade do modelo antes de criar uma sessão:

struct GenerativeView: View {
    private var model = SystemLanguageModel.default

    var body: some View {
        switch model.availability {
        case .available:
            ContentView()
        case .unavailable(.deviceNotEligible):
            Text("Dispositivo não elegível para Apple Intelligence")
        case .unavailable(.appleIntelligenceNotEnabled):
            Text("Ative o Apple Intelligence nas Configurações")
        case .unavailable(.modelNotReady):
            Text("O modelo está baixando ou não está pronto")
        case .unavailable(let other):
            Text("Modelo indisponível: \(other)")
        }
    }
}

Padrão Principal — Sessão Básica

// Conversa única: crie uma nova sessão a cada vez
let session = LanguageModelSession()
let response = try await session.respond(to: "Qual é um bom mês para visitar Paris?")
print(response.content)

// Múltiplas conversas: reuse a sessão para contexto de conversa
let session = LanguageModelSession(instructions: """
    Você é um assistente de culinária.
    Forneça sugestões de receitas com base nos ingredientes.
    Mantenha as sugestões breves e práticas.
    """)

let first = try await session.respond(to: "Tenho frango e arroz")
let followUp = try await session.respond(to: "E uma opção vegetariana?")

Pontos-chave para instruções:

  • Defina o papel do modelo ("Você é um mentor")
  • Especifique o que fazer ("Ajude a extrair eventos de calendário")
  • Defina preferências de estilo ("Responda da forma mais breve possível")
  • Adicione medidas de segurança ("Para solicitações perigosas, responda 'Não posso ajudar com isso'")

Padrão Principal — Geração Guiada com @Generable

Gere tipos Swift estruturados em vez de strings brutas:

1. Defina um Tipo Generable

@Generable(description: "Informações básicas de perfil sobre um gato")
struct CatProfile {
    var name: String

    @Guide(description: "A idade do gato", .range(0...20))
    var age: Int

    @Guide(description: "Um perfil de uma frase sobre a personalidade do gato")
    var profile: String
}

2. Solicite Saída Estruturada

let response = try await session.respond(
    to: "Gere um gato de abrigo fofo",
    generating: CatProfile.self
)

// Acesse campos estruturados diretamente
print("Nome: \(response.content.name)")
print("Idade: \(response.content.age)")
print("Perfil: \(response.content.profile)")

Restrições @Guide Suportadas

  • .range(0...20) — intervalo numérico
  • .count(3) — número de elementos do array
  • description: — orientação semântica para geração

Padrão Principal — Chamada de Ferramentas

Permite que o modelo invoque código personalizado para tarefas específicas de domínio:

1. Defina uma Ferramenta

struct RecipeSearchTool: Tool {
    let name = "recipe_search"
    let description = "Pesquise receitas que correspondam a um termo e retorne uma lista de resultados."

    @Generable
    struct Arguments {
        var searchTerm: String
        var numberOfResults: Int
    }

    func call(arguments: Arguments) async throws -> ToolOutput {
        let recipes = await searchRecipes(
            term: arguments.searchTerm,
            limit: arguments.numberOfResults
        )
        return .string(recipes.map { "- \($0.name): \($0.description)" }.joined(separator: "\n"))
    }
}

2. Crie uma Sessão com Ferramentas

let session = LanguageModelSession(tools: [RecipeSearchTool()])
let response = try await session.respond(to: "Encontre algumas receitas de massa")

3. Trate Erros de Ferramentas

do {
    let answer = try await session.respond(to: "Encontre uma receita de sopa de tomate.")
} catch let error as LanguageModelSession.ToolCallError {
    print(error.tool.name)
    if case .databaseIsEmpty = error.underlyingError as? RecipeSearchToolError {
        // Trate erro específico da ferramenta
    }
}

Padrão Principal — Streaming de Snapshot

Transmita respostas estruturadas para interface em tempo real com tipos PartiallyGenerated:

@Generable
struct TripIdeas {
    @Guide(description: "Ideias para próximas viagens")
    var ideas: [String]
}

let stream = session.streamResponse(
    to: "Quais são algumas ideias emocionantes de viagem?",
    generating: TripIdeas.self
)

for try await partial in stream {
    // partial: TripIdeas.PartiallyGenerated (todas as propriedades Opcionais)
    print(partial)
}

Integração com SwiftUI

@State private var partialResult: TripIdeas.PartiallyGenerated?
@State private var errorMessage: String?

var body: some View {
    List {
        ForEach(partialResult?.ideas ?? [], id: \.self) { idea in
            Text(idea)
        }
    }
    .overlay {
        if let errorMessage { Text(errorMessage).foregroundStyle(.red) }
    }
    .task {
        do {
            let stream = session.streamResponse(to: prompt, generating: TripIdeas.self)
            for try await partial in stream {
                partialResult = partial
            }
        } catch {
            errorMessage = error.localizedDescription
        }
    }
}

Principais Decisões de Design

DecisãoJustificativa
Execução no dispositivoPrivacidade — nenhum dado sai do dispositivo; funciona offline
Limite de 4.096 tokensRestrição do modelo no dispositivo; divida dados grandes entre sessões
Streaming de snapshot (não deltas)Amigável para saída estruturada; cada snapshot é um estado parcial completo
Macro @GenerableSegurança em tempo de compilação para geração estruturada; gera automaticamente o tipo PartiallyGenerated
Solicitação única por sessãoisResponding impede solicitações concorrentes; crie várias sessões se necessário
response.content (não .output)API correta — sempre acesse resultados via propriedade .content

Boas Práticas

  • Sempre verifique model.availability antes de criar uma sessão — trate todos os casos de indisponibilidade
  • Use instructions para guiar o comportamento do modelo — elas têm prioridade sobre prompts
  • Verifique isResponding antes de enviar uma nova solicitação — as sessões tratam uma solicitação por vez
  • Acesse response.content para resultados — não .output
  • Divida entradas grandes em partes — o limite de 4.096 tokens se aplica a instruções + prompt + saída combinados
  • Use @Generable para saída estruturada — garantias mais fortes do que analisar strings brutas
  • Use GenerationOptions(temperature:) para ajustar criatividade (maior = mais criativo)
  • Monitore com Instruments — use Xcode Instruments para analisar o desempenho das solicitações

Antipadrões a Evitar

  • Criar sessões sem verificar model.availability primeiro
  • Enviar entradas que excedem a janela de contexto de 4.096 tokens
  • Tentar solicitações concorrentes em uma única sessão
  • Usar .output em vez de .content para acessar dados de resposta
  • Analisar respostas de string bruta quando a saída estruturada @Generable funcionaria
  • Construir lógica complexa de várias etapas em um único prompt — divida em prompts focados
  • Supor que o modelo está sempre disponível — elegibilidade do dispositivo e configurações variam

Quando Usar

  • Geração de texto no dispositivo para aplicativos sensíveis à privacidade
  • Extração de dados estruturados de entrada do usuário (formulários, comandos em linguagem natural)
  • Recursos assistidos por IA que devem funcionar offline
  • Interface de streaming que mostra progressivamente conteúdo gerado
  • Ações de IA específicas de domínio via chamada de ferramentas (pesquisa, computação, consulta)

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/claude-api

Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.

affaan-m/everything-claude-code

End-to-end marketing campaign planning and execution. Covers audience research, positioning, campaign angle definition, landing page copy, email sequences, social posts, ad copy, short-form video scripts, and content calendars. Use as the orchestration layer for multi-channel product launches. Use when planning or executing a multi-channel product launch, or producing landing page, email, social, or ad copy.

affaan-m/everything-claude-code

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/everything-claude-code-conventions

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.

affaan-m/gget

gget CLI and Python workflow for quick genomic database queries, sequence lookup, BLAST-style searches, enrichment checks, and reproducible bioinformatics evidence logs.

affaan-m/literature-review

Systematic literature-review workflow for academic, biomedical, technical, and scientific topics, including search planning, source screening, synthesis, citation checks, and evidence logging.

affaan-m/motion-ui

Production-ready UI motion system for React/Next.js. Use when implementing animations, transitions, or motion patterns.

affaan-m/project-guidelines-example

Example project-specific skill template based on a real production application.

affaan-m/pubmed-database

Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.

affaan-m/scholar-evaluation

Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.

affaan-m/uspto-database

USPTO patent and trademark data workflow for official record lookup, PatentSearch queries, TSDR checks, assignment data, and reproducible IP research logs.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

Habilidades Relacionadas