Skip to content

Repository files navigation

OpenAI

This community-maintained library, written in Swift, provides an easy way to use the OpenAI REST API.

SPM CompatibleCocoapods CompatibleCarthage CompatibleLicense: MIT

Installation

dependencies:[.package(url:"https://github.com/exyte/OpenAI")]

To install OpenAI, simply add the following line to your Podfile:

pod'ExyteOpenAI'

To integrate OpenAI into your Xcode project using Carthage, specify it in your Cartfile

github "exyte/OpenAI"

Requirements

  • iOS 16+, tvOS 16+, macOS 13+, watchOS 8+
  • Xcode 15+

Development Roadmap

  • Models
  • Files
  • Assistants
  • Run streaming
  • Chat
  • Swift Concurrency support
  • Audio
  • Images
  • Moderations
  • Fine-tuning
  • Vector Store Files

Assistants API usage

  1. Obtain your API key. Do not share this with others or expose it in any client-side code.

⚠️ 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.

  1. Create a client instance.
letclient=OpenAI(apiKey:"YOUR_API_KEY_HERE")
  1. Create an Assistant by defining its instructions and model.
letassistantPayload=CreateAssistantPayload(model:.gpt_4o, name:"My Assistant", instructions:"Be funny")
client.createAssistant(from: assistantPayload)<...>
  1. Create a Thread to start the conversation.
letthreadPayload=CreateThreadPayload(messages:[...], metadata:[...])
client.createThread(from: threadPayload)<...>
  1. Add Messages to the Thread from the user.
letmessagePayload=CreateMessagePayload(role:.user, content:"Hello!")
client.createMessage(in: threadId, payload: messagePayload)<...>
  1. Run the Assistant on the Thread to generate a response.
client.createRun(in: threadId, payload:CreateRunPayload(assistantId: assistantId))<...>
  1. Check the Run status until it is completed or failed.
client.retrieveRun(id: runId, from: threadId)
  1. Retrieve the Messages from the Assistant.
letlistPayload=ListPayload(after: lastMessageId)
client.listMessages(from: threadId, payload: listPayload)<...>

For more detailed information about OpenAI Assistants API usage, please refer to platform.openai.com and our Examples section.

Available endpoints

Chat

Creates a model response for the given chat conversation.

createChatCompletion(
from:CreateChatCompletionPayload(
model: model,
messages:[ChatCompletionMessage(role:.user, content:"Hello")]))

Returns ChatCompletion

Models

List and describe the various models available in the API. A list of models and their differences can be found on platform.openai.com.

listModels()

Returns ObjectList<Model>

retrieveModel(with: modelId)

Returns Model

deleteModel(with: modelId)

Returns DeletionStatus

Files

Files are used to upload documents that can be used with features like Assistants.

uploadFile(payload:FilePayload(purpose: filePurpose, fileURL: fileURL))

Returns File

listFiles()

Returns ObjectList<File>

retrieveFile(id: fileId)

Returns File

deleteFile(id: fileId)

Returns DeletionStatus

retrieveFileContent(id: fileId, destinationURL: destinationURL)

Returns URL

Assistants

Build assistants that can call models and use tools to perform tasks.

createAssistant(from:CreateAssistantPayload(model: model, name: name,...))

Returns Assistant

listAssistants(payload:ListPayload(limit: limit,...))

Returns ObjectList<Assistant>

retrieveAssistant(id: assistantId)

Returns Assistant

modifyAssistant(id: assistandId, payload:CreateAssistantPayload(model: updatedModel, name: updatedName,...))

Returns Assistant

deleteAssistant(id: assistantId)

Returns DeletionStatus

createThread(
from:CreateThreadPayload(
messages:[CreateMessagePayload(role:.user, content:"Hello"),...],
metadata:["key1":"value1",...]))

Returns Thread

retrieveThread(id: threadId)

Returns Thread

modifyThread(id: threadId, payload:ModifyPayload(metadata:["key1":"value1",...]))

Returns Thread

deleteThread(id: threadId)

Returns DeletionStatus

createMessage(in: threadId, payload:CreateMessagePayload(role:.user, content:"Hello"))

Returns Message

listMessages(from: threadId, payload:ListPayload(limit: limit))

Returns ObjectList<Message>

retrieveMessage(id: messageId, from: threadId)

Returns Message

modifyMessage(id: messageId, from: threadId, payload:ModifyPayload(metadata:["key1":"value1",...]))

Returns Message

createRun(in: threadId, payload:CreateRunPayload(assistantId: assistantId,...))

Returns Run

createStreamRun(in: threadId, payload:CreateStreamRunPayload(assistantId: assistantId))

Returns StreamEvent sequence

createThreadAndRun(
from:CreateThreadAndRunPayload(
assistantId: assistantId,
thread:CreateThreadPayload(
messages:[CreateMessagePayload(role:.user, content:"Hello"),...],
metadata:["key1":"value1",...])))

Returns Run

listRuns(from: threadId, payload:ListPayload(limit: limit,...))

Returns ObjectList<Run>

retrieveRun(id: runId, from: threadId)

Returns Run

modifyRun(id: runId, from: threadId, payload:ModifyPayload(metadata:["key1":"value1",...]))

Returns Run

cancelRun(id: runId, from: threadId)

Returns Run

listRunSteps(from: runId, in: threadId, payload:ListPayload(limit: limit,...))

Returns ObjectList<RunStep>

retrieveRunStep(id: runStepId, from: runId, in: threadId)

Returns RunStep

Examples

To try the OpenAIAssistants examples:

  • Clone the repo https://github.com/exyte/OpenAI
  • Open OpenAIAssistantsExample/OpenAIAssistantsExample.xcodeproj
  • Try it!

Our other open source SwiftUI libraries

PopupView - Toasts and popups library
Grid - The most powerful Grid container
ScalingHeaderScrollView - A scroll view with a sticky header which shrinks as you scroll
AnimatedTabBar - A tabbar with a number of preset animations
MediaPicker - Customizable media picker
Chat - Chat UI framework with fully customizable message cells, input view, and a built-in media picker
AnimatedGradient - Animated linear gradient
ConcentricOnboarding - Animated onboarding flow
FloatingButton - Floating button menu
ActivityIndicatorView - A number of animated loading indicators
ProgressIndicatorView - A number of animated progress indicators
FlagAndCountryCode - Phone codes and flags for every country
SVGView - SVG parser
LiquidSwipe - Liquid navigation animation

About

No description, website, or topics provided.

Resources

Stars

55 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages