Communitygithub.com

fondations-modèles-sur-appareil

Framework FoundationModels d'Apple pour modèle de langage sur appareil — génération de texte, sortie guidée avec @Generable, appel d'outils et streaming instantané de snapshots sous iOS 26+. Utilisez lors de l'ajout de fonctionnalités LLM sur appareil avec FoundationModels sur iOS 26+.

Qu'est-ce que fondations-modèles-sur-appareil ?

Cette compétence fournit des modèles d'intégration du modèle de langage Apple sur appareil dans les applications iOS 26+, en utilisant le framework FoundationModels. Elle couvre la génération de texte, la sortie structurée avec la macro `@Generable`, l'appel d'outils personnalisés, et le streaming instantané de snapshots — le tout exécuté localement pour la confidentialité et le fonctionnement hors ligne. L'utilisateur peut créer des sessions de modèle de langage avec ou sans instructions, gérer la disponibilité du modèle via `model.availability`, et extraire des données typées via des types Swift `@Generable`. Des cas d'utilisation typiques incluent les assistants conversationnels, l'extraction de données structurées à partir d'entrées en langage naturel, les actions IA spécifiques à un domaine (comme la recherche de recettes), et des interfaces utilisateur mises à jour en temps réel avec des réponses partielles. La compétence met l'accent sur des décisions de conception clés comme la limite de 4 096 tokens, l'utilisation de snapshots (pas de deltas), et la vérification préalable de la disponibilité du modèle. Elle est destinée aux développeurs iOS souhaitant intégrer Apple Intelligence sur appareil de manière privée, sécurisée et performante, dans des applications qui ne doivent pas dépendre d'une connexion réseau.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/ECC/tree/main/skills/foundation-models-on-device

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

FoundationModels : LLM sur appareil (iOS 26)

Modèles d'intégration du modèle de langage Apple sur appareil dans les applications à l'aide du framework FoundationModels. Couvre la génération de texte, la sortie structurée avec @Generable, l'appel d'outils personnalisés, et le streaming instantané de snapshots — le tout exécuté localement pour la confidentialité et le fonctionnement hors ligne.

Quand activer

  • Construire des fonctionnalités pilotées par IA avec Apple Intelligence sur appareil
  • Générer ou résumer du texte sans dépendance au cloud
  • Extraire des données structurées à partir d'entrées en langage naturel
  • Mettre en œuvre un appel d'outils personnalisé pour des actions IA spécifiques à un domaine
  • Diffuser des réponses structurées pour des mises à jour d'interface en temps réel
  • Besoin de IA respectueuse de la vie privée (aucune donnée ne quitte l'appareil)

Modèle de base — Vérification de disponibilité

Vérifiez toujours la disponibilité du modèle avant de créer une session :

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

    var body: some View {
        switch model.availability {
        case .available:
            ContentView()
        case .unavailable(.deviceNotEligible):
            Text("Appareil non éligible pour Apple Intelligence")
        case .unavailable(.appleIntelligenceNotEnabled):
            Text("Veuillez activer Apple Intelligence dans Réglages")
        case .unavailable(.modelNotReady):
            Text("Le modèle est en cours de téléchargement ou non prêt")
        case .unavailable(let other):
            Text("Modèle indisponible : \(other)")
        }
    }
}

Modèle de base — Session simple

// Tour unique : créer une nouvelle session à chaque fois
let session = LanguageModelSession()
let response = try await session.respond(to: "Quel est un bon mois pour visiter Paris ?")
print(response.content)

// Tours multiples : réutiliser la session pour le contexte de conversation
let session = LanguageModelSession(instructions: """
    Vous êtes un assistant culinaire.
    Proposez des suggestions de recettes en fonction des ingrédients.
    Gardez les suggestions brèves et pratiques.
    """)

let first = try await session.respond(to: "J'ai du poulet et du riz")
let followUp = try await session.respond(to: "Et pour une option végétarienne ?")

Points clés pour les instructions :

  • Définir le rôle du modèle (« Vous êtes un mentor »)
  • Spécifier ce qu'il doit faire (« Aider à extraire des événements de calendrier »)
  • Définir des préférences de style (« Répondre aussi brièvement que possible »)
  • Ajouter des mesures de sécurité (« Répondre par « Je ne peux pas t'aider avec ça » pour les demandes dangereuses »)

Modèle de base — Génération guidée avec @Generable

Générer des types Swift structurés au lieu de chaînes brutes :

1. Définir un type Generable

@Generable(description: "Informations de profil de base sur un chat")
struct CatProfile {
    var name: String

    @Guide(description: "L'âge du chat", .range(0...20))
    var age: Int

    @Guide(description: "Un profil d'une phrase sur la personnalité du chat")
    var profile: String
}

2. Demander une sortie structurée

let response = try await session.respond(
    to: "Génère un chat de refuge mignon",
    generating: CatProfile.self
)

// Accéder directement aux champs structurés
print("Nom : \(response.content.name)")
print("Âge : \(response.content.age)")
print("Profil : \(response.content.profile)")

Contraintes @Guide prises en charge

  • .range(0...20) — plage numérique
  • .count(3) — nombre d'éléments dans un tableau
  • description: — guidance sémantique pour la génération

Modèle de base — Appel d'outils

Permettre au modèle d'invoquer du code personnalisé pour des tâches spécifiques à un domaine :

1. Définir un outil

struct RecipeSearchTool: Tool {
    let name = "recipe_search"
    let description = "Rechercher des recettes correspondant à un terme donné et renvoyer une liste de résultats."

    @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. Créer une session avec outils

let session = LanguageModelSession(tools: [RecipeSearchTool()])
let response = try await session.respond(to: "Trouve-moi des recettes de pâtes")

3. Gérer les erreurs d'outils

do {
    let answer = try await session.respond(to: "Trouve une recette de soupe à la tomate.")
} catch let error as LanguageModelSession.ToolCallError {
    print(error.tool.name)
    if case .databaseIsEmpty = error.underlyingError as? RecipeSearchToolError {
        // Gérer une erreur d'outil spécifique
    }
}

Modèle de base — Streaming instantané de snapshots

Diffuser des réponses structurées pour une interface en temps réel avec les types PartiallyGenerated :

@Generable
struct TripIdeas {
    @Guide(description: "Idées pour les prochains voyages")
    var ideas: [String]
}

let stream = session.streamResponse(
    to: "Quelles sont des idées de voyages excitantes ?",
    generating: TripIdeas.self
)

for try await partial in stream {
    // partial: TripIdeas.PartiallyGenerated (toutes les propriétés sont Optionnelles)
    print(partial)
}

Intégration 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
        }
    }
}

Décisions de conception clés

DécisionJustification
Exécution sur appareilConfidentialité — aucune donnée ne quitte l'appareil ; fonctionnement hors ligne
Limite de 4 096 jetonsContrainte du modèle sur appareil ; découper les grandes données sur plusieurs sessions
Streaming instantané de snapshots (pas de deltas)Adapté à la sortie structurée ; chaque snapshot est un état partiel complet
Macro @GenerableSécurité à la compilation pour la génération structurée ; génère automatiquement le type PartiallyGenerated
Une seule requête par sessionisResponding empêche les requêtes simultanées ; créer plusieurs sessions si nécessaire
response.content (pas .output)API correcte — toujours accéder aux résultats via la propriété .content

Meilleures pratiques

  • Vérifiez toujours model.availability avant de créer une session — gérez tous les cas d'indisponibilité
  • Utilisez instructions pour guider le comportement du modèle — elles ont priorité sur les prompts
  • Vérifiez isResponding avant d'envoyer une nouvelle requête — les sessions gèrent une requête à la fois
  • Accédez à response.content pour les résultats — pas .output
  • Découpez les entrées volumineuses en morceaux — la limite de 4 096 jetons s'applique aux instructions + prompt + sortie combinés
  • Utilisez @Generable pour une sortie structurée — garanties plus fortes que l'analyse de chaînes brutes
  • Utilisez GenerationOptions(temperature:) pour ajuster la créativité (plus élevé = plus créatif)
  • Surveillez avec Instruments — utilisez Xcode Instruments pour profiler les performances des requêtes

Anti-modèles à éviter

  • Créer des sessions sans vérifier model.availability d'abord
  • Envoyer des entrées dépassant la fenêtre de contexte de 4 096 jetons
  • Tenter des requêtes simultanées sur une seule session
  • Utiliser .output au lieu de .content pour accéder aux données de réponse
  • Analyser des réponses sous forme de chaînes brutes alors qu'une sortie structurée @Generable fonctionnerait
  • Construire une logique complexe en plusieurs étapes dans un seul prompt — diviser en plusieurs prompts ciblés
  • Supposer que le modèle est toujours disponible — l'éligibilité de l'appareil et les réglages varient

Quand utiliser

  • Génération de texte sur appareil pour les applications sensibles à la vie privée
  • Extraction de données structurées à partir d'entrées utilisateur (formulaires, commandes en langage naturel)
  • Fonctionnalités assistées par IA qui doivent fonctionner hors ligne
  • Interface utilisateur en streaming qui affiche progressivement le contenu généré
  • Actions IA spécifiques à un domaine via appel d'outils (recherche, calcul, consultation)

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/content-engine

Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.

affaan-m/ECC

Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.

affaan-m/fal-ai-media

Unified media generation via fal.ai MCP — image, video, and audio. Covers text-to-image (Nano Banana), text/image-to-video (Seedance, Kling, Veo 3), text-to-speech (CSM-1B), and video-to-audio (ThinkSound). Use when the user wants to generate images, videos, or audio with AI.

affaan-m/manim-video

日本語翻訳:このファイルは manim-video 用の日本語翻訳が必要です

affaan-m/remotion-video-creation

Remotion のベストプラクティス - React で動画を作成する。3D、アニメーション、音声、字幕、チャート、トランジションなどをカバーするドメイン固有の29のルール。

affaan-m/video-editing

AI-assisted video editing workflows for cutting, structuring, and augmenting real footage. Covers the full pipeline from raw capture through FFmpeg, Remotion, ElevenLabs, fal.ai, and final polish in Descript or CapCut. Use when the user wants to edit video, cut footage, create vlogs, or build video content.

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.

agent-self-evaluation

Use after completing any non-trivial task. The agent self-rates its output on 5 axes — accuracy, completeness, clarity, actionability, conciseness — with concrete evidence per criterion. Produces a structured 1-5 scorecard with specific improvement suggestions.

agent-sort

Build an evidence-backed ECC install plan for a specific repo by sorting skills, commands, rules, hooks, and extras into DAILY vs LIBRARY buckets using parallel repo-aware review passes. Use when ECC should be trimmed to what a project actually needs instead of loading the full bundle.

ai-first-engineering

Engineering operating model for teams where AI agents generate a large share of implementation output. Use when setting team process, review gates, or ownership rules for a codebase largely written by agents.

ai-regression-testing

Regression testing strategies for AI-assisted development. Sandbox-mode API testing without database dependencies, automated bug-check workflows, and patterns to catch AI blind spots where the same model writes and reviews code. Use when adding regression coverage to AI-assisted code, or when the same model both wrote and reviewed a change.

android-clean-architecture

Clean Architecture patterns for Android and Kotlin Multiplatform projects — module structure, dependency rules, UseCases, Repositories, and data layer patterns. Use when structuring modules, layers, or data flow in an Android or KMP project.

angular-developer

Generates Angular code and provides architectural guidance. Trigger when creating projects, components, or services, or for best practices on reactivity (signals, linkedSignal, resource), forms, dependency injection, routing, SSR, accessibility (ARIA), animations, styling (component styles, Tailwind CSS), testing, or CLI tooling.

Skills associés