Installation
Add the SwiftlyAI SDK to your build.gradle.kts:
dependencies {
implementation("com.swiftlyai:client:1.0.0")
}
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
}
}