Docs Kotlin SDK
K

Kotlin SDK

com.swiftlyai:client — Android, JVM, Kotlin Multiplatform

Installation

Add the SwiftlyAI SDK to your build.gradle.kts:

dependencies {
    implementation("com.swiftlyai:client:1.0.0")
}

GitHub: Swiftly-Developed/SwiftlyAIKit-Kotlin-SDK

Quick Start

import com.swiftlyai.client.*

// Initialize the client
val client = SwiftlyClient.create(
    apiKey = "sa_your_api_key",
    bundleId = "com.yourapp"
)

// Send a chat message
val response = client.chat(
    model = "claude-sonnet-4-5-20250929",
    messages = listOf(userMessage("Hello!"))
)
println(response.message)

Chat

Send a chat completion request with conversation history:

val response = client.chat(
    model = "claude-sonnet-4-5-20250929",
    messages = listOf(
        systemMessage("You are a helpful assistant."),
        userMessage("Explain quantum computing")
    )
)

println(response.message)     // The response text
println(response.model)       // Model used
println(response.usage)       // Token usage info

Streaming

Stream responses in real-time using Kotlin Flow:

client.streamChat(
    model = "claude-sonnet-4-5-20250929",
    messages = listOf(userMessage("Tell me a story"))
).collect { chunk ->
    print(chunk.message)
}

Image Generation

Generate images from text prompts:

val image = client.generateImage(
    prompt = "A sunset over the mountains",
    model = "dall-e-3"
)

println(image.url)

Token Counting

Count tokens before sending a request:

val count = client.countTokens(
    model = "claude-sonnet-4-5-20250929",
    messages = listOf(userMessage("Hello!"))
)

println(count.totalTokens)

Available Models

List all available models:

val models = client.getModels()

models.providers.forEach { provider ->
    println("${provider.name}: ${provider.models.size} models")
}

Error Handling

Handle errors with typed exceptions:

try {
    val response = client.chat(
        model = "claude-sonnet-4-5-20250929",
        messages = listOf(userMessage("Hello"))
    )
} catch (e: SwiftlyClientException) {
    println("Error: ${e.message}")
    println("Code: ${e.errorCode}")

    if (e.isRetryable) {
        // Retry after delay
    }
    if (e.isBillingError) {
        // Show upgrade prompt
    }
}

Quota Tracking

Monitor your usage quota:

val quota = client.currentQuota

quota?.let {
    println("Used: ${it.requestsUsed} / ${it.requestsLimit}")
    println("Usage: ${it.usagePercent}%")

    if (it.isApproachingLimit) {
        // Show warning to user
    }
}