Section 10/151 menit

10. Error Handling dan Safety Guardrails

10. Error Handling dan Safety Guardrails

Jenis Error

swift
import FoundationModels

func safeRespond(to prompt: String) async throws -> String {
    let session = LanguageModelSession()
    do {
        let response = try await session.respond(to: prompt)
        return response.content
    } catch let error as LanguageModelError {
        switch error {
        case .guardrailViolation:
            // Model menolak karena konten melanggar kebijakan Apple
            return "Permintaan ini tidak dapat diproses karena melanggar kebijakan penggunaan."
        case .contextLengthExceeded:
            // Percakapan terlalu panjang
            return "Percakapan terlalu panjang. Mulai sesi baru."
        case .modelUnavailable:
            // Model sedang tidak tersedia (sedang update, dll)
            return "Model AI sedang tidak tersedia, coba lagi nanti."
        @unknown default:
            throw error
        }
    }
}

Cek Availability Sebelum Setiap Operasi

swift
@Observable
class AIViewModel {
    var modelAvailability: SystemLanguageModel.Availability = .unavailable(.deviceNotSupported)

    init() {
        checkAvailability()
    }

    private func checkAvailability() {
        modelAvailability = SystemLanguageModel.default.availability
    }

    var isAvailable: Bool {
        if case .available = modelAvailability { return true }
        return false
    }

    var unavailabilityMessage: String {
        guard case .unavailable(let reason) = modelAvailability else { return "" }
        switch reason {
        case .appleIntelligenceNotEnabled:
            return "Aktifkan Apple Intelligence di Settings > Apple Intelligence & Siri"
        case .deviceNotSupported:
            return "Perangkat Anda tidak mendukung Apple Intelligence"
        case .modelNotReady:
            return "Model sedang dipersiapkan, coba beberapa saat lagi"
        @unknown default:
            return "Fitur AI tidak tersedia saat ini"
        }
    }
}

Guardrails Bawaan

Foundation Models memiliki guardrails bawaan dari Apple yang tidak bisa dinonaktifkan. Model secara otomatis menolak:

  • Konten berbahaya (kekerasan grafis, konten seksual eksplisit)
  • Instruksi untuk aktivitas ilegal
  • Upaya jailbreak

Ini adalah jaminan keamanan yang Apple sematkan di level model, bukan hanya di API.