SwiftyAISwiftyAI

Search documentation

Find a docs page by title or section

1

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.