LiteRT-LM Swift API'si

LiteRT-LM'nin Swift API'si, büyük dil modellerini iOS ve macOS uygulamalarına yerel olarak entegre etmenize olanak tanır. Çoklu format, araç kullanımı ve GPU hızlandırma (Metal aracılığıyla) gibi özellikler tam olarak desteklenir.

Giriş

Bir modeli başlatmak ve mesaj göndermek için Swift API'yi kullanma örneğini aşağıda bulabilirsiniz:

import LiteRTLM

// 1. Initialize the Engine with your model
let config = try EngineConfig(
  modelPath: "path/to/model.litertlm",
  backend: .gpu, // Use .cpu() for CPU execution
  cacheDir: NSTemporaryDirectory()
)
let engine = Engine(engineConfig: config)
try await engine.initialize()

// 2. Start a new Conversation
let conversation = try await engine.createConversation()

// 3. Send a message and print the response
let response = try await conversation.sendMessage(Message("What is the capital of France?"))
print(response.toString)

Başlarken

Bu bölümde, LiteRT-LM Swift API'nin uygulamanıza nasıl entegre edileceğiyle ilgili talimatlar verilmektedir.

Swift Package Manager (SPM)

LiteRT-LM'yi Swift Package Manager'ı kullanarak Xcode projenize entegre edebilirsiniz.

  1. Projenizi Xcode'da açın ve File > Add Package Dependencies... (Dosya > Paket Bağımlılıkları Ekle...) seçeneğine gidin.
  2. Paket deposu URL'sini girin: https://github.com/google-ai-edge/LiteRT-LM
  3. Uygulama hedefinize eklemek için LiteRTLM kitaplığını seçin.

Package.swift kullanarak bir paket geliştiriyorsanız bunu bağımlılıklarınıza ekleyin:

dependencies: [
  .package(url: "https://github.com/google-ai-edge/LiteRT-LM", from: "0.12.0")
]

Core API Kılavuzu

Bu bölümde, motor başlatma, görüşme yönetimi ve mesaj gönderme dahil olmak üzere LiteRT-LM Swift API'yi kullanmayla ilgili temel bileşenler ve iş akışları ayrıntılı olarak açıklanmaktadır.

Engine'i başlatma

Engine, model yükleme, kaynak ayırma ve yaşam döngüsü yönetimini gerçekleştirir.

import LiteRTLM

let engineConfig = try EngineConfig(
  modelPath: "path/to/your/model.litertlm",
  backend: .gpu, // Use .gpu for Metal hardware acceleration
  maxNumTokens: 512, // Size of the KV-cache
  cacheDir: NSTemporaryDirectory() // Writable directory for compilation cache
)

let engine = Engine(engineConfig: engineConfig)
try await engine.initialize()

Görüşme oluşturma

Conversation, sohbet geçmişini, sistem talimatlarını ve örnekleyici yapılandırmalarını yönetir.

// Configure custom sampling parameters
let samplerConfig = try SamplerConfig(
  topK: 40,
  topP: 0.95,
  temperature: 0.7
)

// Create the conversation config with system instructions
let config = ConversationConfig(
  systemMessage: Message("You are a helpful assistant."),
  samplerConfig: samplerConfig
)

let conversation = try await engine.createConversation(with: config)

Mesajlar Gönderme

Modelle eşzamanlı veya eşzamansız (akış) olarak etkileşimde bulunabilirsiniz.

Senkronize Örnek

let response = try await conversation.sendMessage(Message("Hello!"))
print(response.toString)

Zaman uyumsuz (Akış) Örneği

let message = Message("Tell me a long story.")

for try await chunk in conversation.sendMessageStream(message) {
  // Output response chunks in real-time
  print(chunk.toString, terminator: "")
}
print()

Çok Formatlılık

Görsel veya ses özelliklerini kullanmak için motor başlatma sırasında özel arka uçları yapılandırdığınızdan emin olun.

let engineConfig = try EngineConfig(
  modelPath: "path/to/multimodal_model.litertlm",
  backend: .gpu,
  visionBackend: .cpu(), // Enable CPU vision executor
  audioBackend: .cpu(), // Enable CPU audio executor
  cacheDir: NSTemporaryDirectory()
)
let engine = Engine(engineConfig: engineConfig)
try await engine.initialize()

Görüntü Girişi (Vision)

Resmi yol veya ham bayt olarak sağlama:

let imagePath = Bundle.main.path(forResource: "scenery", ofType: "jpg")!

let message = Message(contents: [
  Content.imageFile(imagePath),
  Content.text("Describe this image.")
])

let response = try await conversation.sendMessage(message)
print(response.toString)

Ses Girişi

Ses yolu sağlama:

let audioPath = Bundle.main.path(forResource: "recording", ofType: "wav")!

let message = Message(contents: [
  Content.audioFile(audioPath),
  Content.text("Transcribe this recording.")
])

let response = try await conversation.sendMessage(message)
print(response.toString)

🔴 Yeni: Çoklu Jeton Tahmini (MTP)

Çoklu jeton tahmini (MTP), kod çözme hızlarını önemli ölçüde hızlandıran bir performans optimizasyonudur. GPU/Metal arka uçlarını kullanan tüm görevler için evrensel olarak önerilir.

MTP'yi kullanmak için motoru başlatmadan önce deneysel işaretlerde spekülatif kod çözmeyi etkinleştirin.

import LiteRTLM

// Opt into experimental APIs to configure MTP
ExperimentalFlags.optIntoExperimentalAPIs()
ExperimentalFlags.enableSpeculativeDecoding = true

let engineConfig = try EngineConfig(
  modelPath: "path/to/model.litertlm",
  backend: .gpu,
  cacheDir: NSTemporaryDirectory()
)
let engine = Engine(engineConfig: engineConfig)
try await engine.initialize()

Araçları tanımlama ve kullanma

Swift yapılarını, modelin mantık yürütmek için otomatik olarak çağırabileceği araçlar olarak tanımlayabilirsiniz.

  1. Tool protokolüne uyun.
  2. @ToolParam özellik sarmalayıcısını kullanarak parametreleri bildirin.
  3. run() yöntemini uygulayın.
import LiteRTLM

// 1. Define your custom tool
struct GetCurrentWeatherTool: Tool {
  static let name = "get_current_weather"
  static let description = "Get the current weather for a location."

  @ToolParam(description: "The city and state, e.g. San Francisco, CA")
  var location: String

  @ToolParam(description: "The temperature unit to use (celsius or fahrenheit)")
  var unit: String = "celsius"

  func run() async throws -> Any {
    // Call your weather API here
    return [
      "location": location,
      "temperature": "22",
      "unit": unit,
      "condition": "sunny"
    ]
  }
}

// 2. Register the tool in your conversation configuration
let config = ConversationConfig(
  tools: [GetCurrentWeatherTool()]
)

let conversation = try await engine.createConversation(with: config)

// 3. The model will invoke the tool automatically if needed
let response = try await conversation.sendMessage(Message("What is the weather in Paris right now?"))
print(response.toString)