openai-kit

openai-kit

A community Swift package used to interact with the OpenAI API

Stars: 688

Visit
 screenshot

OpenAIKit is a Swift package designed to facilitate communication with the OpenAI API. It provides methods to interact with various OpenAI services such as chat, models, completions, edits, images, embeddings, files, moderations, and speech to text. The package encourages the use of environment variables to securely inject the OpenAI API key and organization details. It also offers error handling for API requests through the `OpenAIKit.APIErrorResponse`.

README:

OpenAIKit

Swift

OpenAIKit is a Swift package used to communicate with the OpenAI API.

Setup

Add the dependency to Package.swift:

dependencies: [
    ...
    .package(url: "https://github.com/dylanshine/openai-kit.git", from: "1.0.0")
],
targets: [
    .target(name: "App", dependencies: [
        .product(name: "OpenAIKit", package: "openai-kit"),
    ]),

It is encouraged to use environment variables to inject the OpenAI API key, instead of hardcoding it in the source code.

# .env

OPENAI_API_KEY="YOUR-API-KEY"
OPENAI_ORGANIZATION="YOUR-ORGANIZATION"

⚠️ OpenAI strongly recommends developers of client-side applications proxy requests through a separate backend service to keep their API key safe. API keys can access and manipulate customer billing, usage, and organizational data, so it's a significant risk to expose them.

Create a OpenAIKit.Client by passing a configuration.

var apiKey: String {
    ProcessInfo.processInfo.environment["OPENAI_API_KEY"]!
}

var organization: String {
    ProcessInfo.processInfo.environment["OPENAI_ORGANIZATION"]!
}

...

// Generally we would advise on creating a single HTTPClient for the lifecycle of your application and recommend shutting it down on application close.

let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)

let httpClient = HTTPClient(eventLoopGroupProvider: .shared(eventLoopGroup))

defer {
    // it's important to shutdown the httpClient after all requests are done, even if one failed. See: https://github.com/swift-server/async-http-client
    try? httpClient.syncShutdown()
}

let configuration = Configuration(apiKey: apiKey, organization: organization)

let openAIClient = OpenAIKit.Client(httpClient: httpClient, configuration: configuration)

If you don't want to use SwiftNIO you can use URLSession.

let urlSession = URLSession(configuration: .default)
let configuration = Configuration(apiKey: apiKey, organization: organization)
let openAIClient = OpenAIKit.Client(session: urlSession, configuration: configuration)

Using the API

The OpenAIKit.Client implements a handful of methods to interact with the OpenAI API:

import OpenAIKit

let completion = try await openAIClient.completions.create(
    model: Model.GPT3.davinci,
    prompts: ["Write a haiku"]
)

What's Implemented

Error handling

If the request to the API failed for any reason an OpenAIKit.APIErrorResponse is thrown. Simply ensure you catch errors thrown like any other throwing function

do {
   ...
} catch let error as APIErrorResponse {
    print(error)
}

For Tasks:

Click tags to check more tools for each tasks

For Jobs:

Alternative AI tools for openai-kit

Similar Open Source Tools

For similar tasks

For similar jobs