Skip to content

Swift SDK for the fast Groq API - Build AI-powered applications with Groq's LLMs on Apple platforms and Linux

License

Notifications You must be signed in to change notification settings

engali94/groq_swift

Repository files navigation

GroqSwift

CI Documentation

⚠️ This is a community-maintained library and is not officially supported by Groq.

A Swift SDK for the Groq API, providing a convenient way to interact with Groq's language models in Swift applications. The SDK is designed to work on both Apple platforms and Linux.

Demo App

Here's a demo chat application built using GroqSwift:

Demo Image 1 Demo Image 2 Demo Image 3

Features

  • ✨ Modern async/await API design
  • 🔄 Support for both regular and streaming completions
  • 🛡️ Type-safe request and response models
  • 🐧 Linux compatibility
  • ⚡️ Proper error handling with detailed messages
  • 📱 Support for all Apple platforms

Installation

Swift Package Manager

Add the following to your Package.swift file:

dependencies: [
    .package(url: "https://github.com/engali94/groq-swift.git", from: "0.1.0")
]

Quick Start

Please ensure you have set the GROQ_API_KEY environment variable, before running the following code, please DON'T store API key in code.

import GroqSwift

let apiKey = ProcessInfo.processInfo.environment["GROQ_API_KEY"] ?? ""
let client = GroqClient(apiKey: apiKey)

let request = ChatCompletionRequest(
    model: .mixtral8x7bChat,
    messages: [Message(role: .user, content: "What is the capital of France?")],
    temperature: 0.7
)

let response = try await client.createChatCompletion(request)
print(response.choices.first?.message.content ?? "")
} catch {
    print("Error: \(error)")
}

// Streaming completion
for try await response in await client.createStreamingChatCompletion(request) {
    if let content = response.choices.first?.delta.content {
        print(content, terminator: "")
    }
}

Advanced Usage

Message Roles

The SDK supports all message roles:

// System message to set behavior
let systemMessage = Message(role: .system, content: "You are a helpful assistant")

// User message
let userMessage = Message(role: .user, content: "Hello!")

// Assistant message
let assistantMessage = Message(role: .assistant, content: "Hi there!")

Available Models

Use dot syntax to specify models:

// LLaMA models
let llamaRequest = ChatCompletionRequest(model: .llama70bChat)
let llamaVersatileRequest = ChatCompletionRequest(model: .llama70bVersatile)

// Mixtral models
let mixtralRequest = ChatCompletionRequest(model: .mixtral8x7bChat)
let mixtralVersatileRequest = ChatCompletionRequest(model: .mixtral8x7bVersatile)

// Gemma models
let gemmaRequest = ChatCompletionRequest(model: .gemma7bChat)
let gemmaVersatileRequest = ChatCompletionRequest(model: .gemma7bVersatile)

// DeepSeek models
let deepseekLlamaRequest = ChatCompletionRequest(model: .deepseekR1DistillLlama70b)
let deepseekQwenRequest = ChatCompletionRequest(model: .deepseekR1DistillQwen32b)

Request Parameters

Customize your requests with various parameters:

let request = ChatCompletionRequest(
    model: .mixtral8x7bChat,
    messages: messages,
    stream: true,                    // Enable streaming
    maxCompletionTokens: 100,        // Limit response length
    temperature: 0.7,                // Control randomness
    topP: 0.9,                      // Nucleus sampling
    presencePenalty: 0.5,           // Penalize token presence
    frequencyPenalty: 0.5,          // Penalize token frequency
    stop: ["END"],                  // Stop sequences
    user: "user-123"                // User identifier
)

Error Handling

The SDK provides detailed error information:

do {
    let response = try await client.createChatCompletion(request)
} catch let error as GroqError {
    switch error {
    case .invalidRequest(let message):
        print("Invalid request: \(message)")
    case .authenticationError(let message):
        print("Auth error: \(message)")
    case .apiError(let statusCode, let message):
        print("API error \(statusCode): \(message)")
    case .invalidResponse(let message):
        print("Invalid response: \(message)")
    case .invalidURL:
        print("Invalid URL")
    }
} catch {
    print("Unexpected error: \(error)")
}

Demo Application

Check out the GroqChatDemo directory for a complete SwiftUI chat application that demonstrates the SDK's capabilities.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Requirements

  • macOS 13.0+
  • iOS 16.0+
  • watchOS 9.0+
  • tvOS 16.0+
  • visionOS 1.0+
  • Swift 5.9+

About

Swift SDK for the fast Groq API - Build AI-powered applications with Groq's LLMs on Apple platforms and Linux

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages