Skip to content

steipete/Tachikoma

Repository files navigation

Tachikoma Logo

Tachikoma — Swift AI SDK

Swift 6.0+ Platforms MIT License CI Status

Modern, Swift-native APIs for text, vision, tools, and realtime voice.

Install

Swift Package Manager:

.package(url: "https://github.com/steipete/Tachikoma.git", branch: "main"),
.product(name: "Tachikoma", package: "Tachikoma"),

Quick Start

import Tachikoma

let text = try await generate("Write a haiku about Swift.", using: .anthropic(.opus45))
print(text)

Streaming

import Tachikoma

let stream = try await stream("Explain actors in Swift.", using: .openai(.gpt52))
for try await delta in stream {
    print(delta.content ?? "", terminator: "")
}

Conversation

import Tachikoma

let conversation = Conversation()
conversation.addUserMessage("You are a concise assistant.")
conversation.addUserMessage("Summarize Swift concurrency in 3 bullets.")
let reply = try await conversation.continue(using: .anthropic(.opus45))
print(reply)

Vision

import Tachikoma

let pngData: Data = /* ... */
let image = ImageInput(data: pngData, mimeType: "image/png")
let answer = try await analyze(image: image, prompt: "What’s in this image?", using: .openai(.gpt4o))
print(answer)

Tools (function calling)

import Tachikoma

let tool = createTool(
    name: "add",
    description: "Add two integers",
    parameters: [
        .init(name: "a", type: .integer, description: "First"),
        .init(name: "b", type: .integer, description: "Second"),
    ]
) { args in
    let a = try args.intValue("a")
    let b = try args.intValue("b")
    return ["sum": a + b]
}

let result = try await generateText(
    model: .openai(.gpt52),
    messages: [.user("Compute 123 + 456 using the add tool.")],
    tools: [tool],
    maxSteps: 3
)
print(result.text)

Models

Common picks:

  • Anthropic: claude-opus-4-5 (LanguageModel.default)
  • OpenAI: gpt-5.2 (flagship), gpt-5 (coding/agents), o4-mini (reasoning), gpt-4o (vision)
  • Google: gemini-3-flash
  • Grok: grok-4-fast-reasoning
  • Local: ollama/llama3.3

Full catalog (including enum case names + provider notes): docs/models.md.

Credentials

Set API keys via env vars (or use TKAuthManager):

  • OpenAI: OPENAI_API_KEY
  • Anthropic: ANTHROPIC_API_KEY
  • Gemini: GEMINI_API_KEY (alias: GOOGLE_API_KEY)
  • Grok: X_AI_API_KEY (aliases: XAI_API_KEY, GROK_API_KEY)

Hosts can change the credential storage root:

  • TachikomaConfiguration.profileDirectoryName (Peekaboo uses .peekaboo)

Documentation

License

MIT. See LICENSE.

About

One interface, every AI model. A Swift SDK to interface with AI providers.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Contributors 5

Languages