exyte/openai
## Installation
Installation
Swift Package Manager
dependencies: [
.package(url: "https://github.com/exyte/OpenAI")
]CocoaPods
To install OpenAI, simply add the following line to your Podfile:
pod 'ExyteOpenAI'Carthage
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
- [x] Models
- [x] Files
- [x] Assistants
- [x] Run streaming
- [x] Chat
- [x] Swift Concurrency support
- [ ] Audio
- [ ] Images
- [ ] Moderations
- [ ] Fine-tuning
- [ ] Vector Store Files
- 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.
- Create a client instance.
let client = OpenAI(apiKey: "YOUR_API_KEY_HERE")- Create an Assistant by defining its instructions and model.
let assistantPayload = CreateAssistantPayload(model: .gpt_4o, name: "My Assistant", instructions: "Be funny")
client.createAssistant(from: assistantPayload) <...>- Create a Thread to start the conversation.
let threadPayload = CreateThreadPayload(messages: [...], metadata: [...])
client.createThread(from: threadPayload) <...>- Add Messages to the Thread from the user.
let messagePayload = CreateMessagePayload(role: .user, content: "Hello!")
client.createMessage(in: threadId, payload: messagePayload) <...>- Run the Assistant on the Thread to generate a response.
client.createRun(in: threadId, payload: CreateRunPayload(assistantId: assistantId)) <...>- Check the Run status until it is completed or failed.
client.retrieveRun(id: runId, from: threadId)- Retrieve the Messages from the Assistant.
let listPayload = 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.
Create chat completion
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.
List models
listModels()Returns ObjectList<Model>
Retreive model
retrieveModel(with: modelId)Returns Model
Delete a fine-tuned model
deleteModel(with: modelId)Returns DeletionStatus
Files
Files are used to upload documents that can be used with features like Assistants.
Upload file
uploadFile(payload: FilePayload(purpose: filePurpose, fileURL: fileURL))Returns File
List files
listFiles()Returns ObjectList<File>
Retreive file
retrieveFile(id: fileId)Returns File
Delete file
deleteFile(id: fileId)Returns DeletionStatus
Retrieve file content
retrieveFileContent(id: fileId, destinationURL: destinationURL)Returns URL
Assistants
Build assistants that can call models and use tools to perform tasks.
Create assistant
createAssistant(from: CreateAssistantPayload(model: model, name: name, ...))Returns Assistant
List assistants
listAssistants(payload: ListPayload(limit: limit, ...))Returns ObjectList<Assistant>
Retrieve assistant
retrieveAssistant(id: assistantId)Returns Assistant
Modify assistant
modifyAssistant(id: assistandId, payload: CreateAssistantPayload(model: updatedModel, name: updatedName, ...))Returns Assistant
Delete assistant
deleteAssistant(id: assistantId)Returns DeletionStatus
Create thread
createThread(
from: CreateThreadPayload(
messages: [CreateMessagePayload(role: .user, content: "Hello"), ...],
metadata: ["key1": "value1", ...]
)
)Returns Thread
Retrieve thread
retrieveThread(id: threadId)Returns Thread
Modify thread
modifyThread(id: threadId, payload: ModifyPayload(metadata: ["key1": "value1", ...]))Returns Thread
Delete thread
deleteThread(id: threadId)Returns DeletionStatus
Create message
createMessage(in: threadId, payload: CreateMessagePayload(role: .user, content: "Hello"))Returns Message
List messages
listMessages(from: threadId, payload: ListPayload(limit: limit))Returns ObjectList<Message>
Retrieve message
retrieveMessage(id: messageId, from: threadId)Returns Message
Modify message
modifyMessage(id: messageId, from: threadId, payload: ModifyPayload(metadata: ["key1": "value1", ...]))Returns Message
Create run
createRun(in: threadId, payload: CreateRunPayload(assistantId: assistantId, ...))Returns Run
Create run with streaming
createStreamRun(in: threadId, payload: CreateStreamRunPayload(assistantId: assistantId))Returns StreamEvent sequence
Create thread and run
createThreadAndRun(
from: CreateThreadAndRunPayload(
assistantId: assistantId,
thread: CreateThreadPayload(
messages: [CreateMessagePayload(role: .user, content: "Hello"), ...],
metadata: ["key1": "value1", ...]
)
)
)Returns Run
List runs
listRuns(from: threadId, payload: ListPayload(limit: limit, ...))Returns ObjectList<Run>
Retrieve run
retrieveRun(id: runId, from: threadId)Returns Run
Modify run
modifyRun(id: runId, from: threadId, payload: ModifyPayload(metadata: ["key1": "value1", ...]))Returns Run
Cancel run
cancelRun(id: runId, from: threadId)Returns Run
List run steps
listRunSteps(from: runId, in: threadId, payload: ListPayload(limit: limit, ...))Returns ObjectList<RunStep>
Retrieve run step
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
Package Metadata
Repository: exyte/openai
Default branch: main
README: README.md