skills/foundation-models/references/getting-started.md

2.3 KiB

Getting Started with Foundation Models

Availability Check

Always check before creating a session:

import FoundationModels

switch SystemLanguageModel.default.availability {
case .available:
    print("Foundation Models available")
case .unavailable(let reason):
    print("Unavailable: \(reason)")
}

Requirements: iPhone 15 Pro+, M1+ iPad/Mac, supported region, user opted in.

Creating a Session

// Basic
let session = LanguageModelSession()

// With instructions (define model's role)
let session = LanguageModelSession(instructions: """
    You are a helpful travel assistant.
    Respond concisely.
    """
)

Important: Never interpolate user input into instructions (security risk).

Basic Text Generation

let session = LanguageModelSession()
let response = try await session.respond(to: "Summarize this article...")
print(response.content)

Multi-Turn Conversations

Sessions retain transcript automatically:

let session = LanguageModelSession()

let first = try await session.respond(to: "Write a haiku about fishing")
// "Silent waters gleam..."

let second = try await session.respond(to: "Now one about golf")
// Model remembers context from first turn

Preventing Concurrent Requests

Button("Generate") {
    Task {
        result = try await session.respond(to: "Write a haiku").content
    }
}
.disabled(session.isResponding)

Prewarming for Performance

First generation takes 1-2s to load. Prewarm before user interaction:

class ViewModel: ObservableObject {
    private var session: LanguageModelSession?

    init() {
        Task { self.session = LanguageModelSession() }
    }

    func generate(prompt: String) async throws -> String {
        try await session!.respond(to: prompt).content
    }
}

SwiftUI Availability Pattern

struct AIFeatureView: View {
    var body: some View {
        switch SystemLanguageModel.default.availability {
        case .available:
            AIContentView()
        case .unavailable:
            Text("AI features require Apple Intelligence")
        }
    }
}

Model Specifications

  • Context Window: 4096 tokens (~12,000 chars)
  • Good for: Summarization, extraction, classification
  • Not for: World knowledge, complex reasoning