Installation
Add SwiftlyAIClient to your Swift Package Manager dependencies:
// Package.swift
dependencies: [
.package(
url: "https://github.com/Swiftly-Developed/SwiftlyAI-Workspace.git",
from: "1.0.0"
)
]
// Add to your target
targets: [
.target(
name: "YourApp",
dependencies: [
.product(name: "SwiftlyAIClient", package: "SwiftlyAI-Workspace")
]
)
]
Quick Start
import SwiftlyAIClient
// Initialize the client
let client = try SwiftlyClient(apiKey: "sa_your_api_key")
// Send a chat message
let response = try await client.chat(
model: "claude-sonnet-4-5-20250929",
messages: [ChatMessage(role: .user, content: "Hello!")]
)
print(response.message)
Chat
Send a chat completion request and receive a full response:
let response = try await client.chat(
model: "claude-sonnet-4-5-20250929",
messages: [
ChatMessage(role: .system, content: "You are a helpful assistant."),
ChatMessage(role: .user, content: "Explain quantum computing")
]
)
print(response.message) // The response text
print(response.model) // Model used
print(response.usage) // Token usage info
Streaming
Stream responses in real-time using AsyncSequence:
for try await chunk in client.streamChat(
model: "claude-sonnet-4-5-20250929",
messages: [ChatMessage(role: .user, content: "Tell me a story")]
) {
print(chunk.message, terminator: "")
}
Image Generation
Generate images from text prompts:
let image = try await client.generateImage(
prompt: "A sunset over the mountains",
model: "dall-e-3"
)
print(image.url) // Generated image URL
Token Counting
Count tokens before sending a request:
let count = try await client.countTokens(
model: "claude-sonnet-4-5-20250929",
messages: [ChatMessage(role: .user, content: "Hello!")]
)
print(count.totalTokens)
Available Models
List all available models from every provider:
let models = try await client.getModels()
for provider in models.providers {
print("\\(provider.name): \\(provider.models.count) models")
}
Error Handling
Handle errors with typed error responses:
do {
let response = try await client.chat(
model: "claude-sonnet-4-5-20250929",
messages: [ChatMessage(role: .user, content: "Hello")]
)
} catch let error as SwiftlyClientError {
print("Error: \\(error.message)")
print("Code: \\(error.code)")
if error.isRetryable {
// Retry after delay
}
if error.isBillingError {
// Show upgrade prompt
}
}
Quota Tracking
Monitor your usage quota from response headers:
// After any API call, quota info is available
if let quota = client.currentQuota {
print("Used: \\(quota.requestsUsed) / \\(quota.requestsLimit)")
print("Usage: \\(quota.usagePercent)%")
if quota.isApproachingLimit {
// Show warning to user
}
}