Section 9/141 menit

9. Performance dan Context Compaction

9. Performance dan Context Compaction

Mengukur Latensi

swift
import os

class PerformanceMonitor {
    private let signposter = OSSignposter()

    func measureResponse(session: LanguageModelSession, prompt: String) async throws -> String {
        let state = signposter.beginInterval("AI Response", id: signposter.makeSignpostID())
        defer { signposter.endInterval("AI Response", state) }

        let start = ContinuousClock.now
        let response = try await session.respond(to: prompt).content
        let elapsed = ContinuousClock.now - start

        // Log ke analytics jika latensi terlalu tinggi
        if elapsed > .seconds(5) {
            Analytics.log("foundation_models_slow_response", parameters: [
                "elapsed_seconds": elapsed.components.seconds,
                "prompt_length": prompt.count
            ])
        }

        return response
    }
}

Strategi untuk Prompt Panjang

swift
// Truncate konteks panjang sebelum dikirim ke model
extension String {
    func truncatedForAI(maxCharacters: Int = 2000) -> String {
        guard count > maxCharacters else { return self }
        let truncated = prefix(maxCharacters)
        return String(truncated) + "\n[... konten dipotong karena terlalu panjang ...]"
    }
}

// Gunakan saat memproses dokumen besar
func summarizeLargeDocument(_ text: String) async throws -> String {
    let truncated = text.truncatedForAI(maxCharacters: 3000)
    let session = LanguageModelSession()
    return try await session.respond(to: "Rangkum:\n\(truncated)").content
}

Context Compaction Otomatis

Foundation Models mengelola context window secara otomatis — saat context terlalu panjang, model secara internal merangkum bagian awal. Anda bisa mempengaruhi ini dengan struktur session:

swift
// Rancang conversations agar informasi penting ada di awal (instructions) bukan di tengah
let session = LanguageModelSession(
    instructions: Instructions("""
    Konteks penting yang harus selalu diingat:
    - Pengguna: Budi Santoso, subscriber premium
    - Preferensi bahasa: Indonesia
    - Domain: iOS development
    
    Jawab semua pertanyaan dengan mengacu pada konteks ini.
    """)
)
// Instructions selalu ada di context window — tidak kena compaction