Utilities
SwiftyAI includes small utilities for ids, context estimates, streams, and middleware. They are intentionally plain Swift so you can use them outside the high-level examples.
| Utility area | APIs |
|---|---|
| IDs | generateId, generateId(prefix:) |
| Context estimates | ContextWindow |
| Streams | simulateReadableStream, smoothStream |
| Middleware | wrapLanguageModel, built-in middleware helpers |
IDs
let id = generateId()
let requestID = generateId(prefix: "req")generateId(prefix:) returns values like req_<uuid>, which is useful for request headers and logs.
Context Window Estimates
ContextWindow gives a simple token estimate for text and chat messages.
let context = ContextWindow(maxTokens: 8_000, warningThreshold: 0.85)
let messages = [
ChatMessage(role: .system, content: "Be concise."),
ChatMessage(role: .user, content: "Explain streaming.")
]
let used = context.estimatedTokens(for: messages)
let remaining = context.remaining(for: messages)
let nearLimit = context.isNearLimit(for: messages)This is an approximation, not a provider tokenizer. Use it for UI warnings and rough pruning decisions.
Language Middleware
Middleware wraps models with reusable behavior.
let wrapped = wrapLanguageModel(
model,
middleware: [
defaultSettingsMiddleware(
system: "Answer in short paragraphs.",
temperature: 0.3
),
extractJsonMiddleware(onFailure: .leaveUnchanged)
]
)
let response = try await generateText(
model: wrapped,
prompt: "Return a JSON object with title and summary."
)For streaming models, use wrapStreamingLanguageModel.
Stream Helpers
for try await chunk in simulateReadableStream(
"This text appears in pieces.",
chunkSize: 6,
delay: .milliseconds(50)
) {
print(chunk)
}Use stream helpers for previews, tests, and smoothing UI updates.