SwiftyAISwiftyAI

Search documentation

Find a docs page by title or section

18

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 areaAPIs
IDsgenerateId, generateId(prefix:)
Context estimatesContextWindow
StreamssimulateReadableStream, smoothStream
MiddlewarewrapLanguageModel, 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.

Related docs

Read streaming utilities for more examples.