Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mattt/OpenAI
A Swift client for the OpenAI API.
https://github.com/mattt/OpenAI
openai openai-api
Last synced: 3 months ago
JSON representation
A Swift client for the OpenAI API.
- Host: GitHub
- URL: https://github.com/mattt/OpenAI
- Owner: mattt
- License: mit
- Archived: true
- Created: 2021-04-27T12:18:39.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2022-12-03T13:10:40.000Z (almost 2 years ago)
- Last Synced: 2024-04-14T06:52:10.795Z (7 months ago)
- Topics: openai, openai-api
- Language: Swift
- Homepage:
- Size: 65.4 KB
- Stars: 184
- Watchers: 4
- Forks: 16
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: License.md
Awesome Lists containing this project
README
# OpenAI
![CI][ci badge]
> **Warning**
> This project is no longer being maintained.
>
> The project was originally developed for a version of the OpenAI API
> that was deprecated on June 3, 2022 and removed on December 3, 2022.
> See [the announcement][deprecation-announcement] for more information.
>
> The current code requires significant updates in order to
> work with the current OpenAI API,
> but there are no plans to make the necessary changes at this time.A Swift client for the [OpenAI API](https://beta.openai.com/).
## Requirements
- Swift 5.3+
- An OpenAI API Key## Example Usage
### Base Series
> Our [base GPT-3 models] can understand and generate natural language.
> We offer four base models called `davinci`, `curie`, `babbage`, and `ada`
> with different levels of power suitable for different tasks.#### Completions
```swift
import OpenAIlet apiKey: String // required
let client = Client(apiKey: apiKey)let prompt = "Once upon a time"
client.completions(engine: .davinci,
prompt: prompt,
numberOfTokens: ...5,
numberOfCompletions: 1) { result in
guard case .success(let completions) = result else { return }completions.first?.choices.first?.text // " there was a girl who"
}
```#### Searches
```swift
import OpenAIlet apiKey: String // required
let client = Client(apiKey: apiKey)let documents: [String] = [
"White House",
"hospital",
"school"
]let query = "president"
client.search(engine: .davinci,
documents: documents,
query: query) { result in
guard case .success(let searchResults) = result else { return }
searchResults.max()?.document // 0 (for "White House")
}
```#### Classifications
```swift
import OpenAIlet apiKey: String // required
let client = Client(apiKey: apiKey)let query = "It is a raining day :("
let examples: [(String, label: String)] = [
("A happy moment", label: "Positive"),
("I am sad.", label: "Negative"),
("I am feeling awesome", label: "Positive")
]let labels = ["Positive", "Negative", "Neutral"]
client.classify(engine: .curie,
query: query,
examples: examples,
labels: labels,
searchEngine: .ada) { result in
guard case .success(let classification) = result else { return }classification.label // "Negative"
}
```#### Answers
```swift
import OpenAIlet apiKey: String // required
let client = Client(apiKey: apiKey)let documents: [String] = [
"Puppy A is happy.",
"Puppy B is sad."
]let question = "which puppy is happy?"
let examples: (context: String, [(question: String, answer: String)]) = (
context: "In 2017, U.S. life expectancy was 78.6 years.",
[
(question: "What is human life expectancy in the United States?", answer: "78 years.")
]
)client.answer(engine: .curie,
question: question,
examples: examples,
documents: documents,
searchEngine: .ada,
stop: ["\n", "<|endoftext|>"]) { result in
guard case .success(let response) = result else { return }response.answers.first // "puppy A."
}
```### Codex
> The [Codex] models are descendants of our base GPT-3 models
> that can understand and generate code.
> Their training data contains both natural language and
> billions of lines of public code from GitHub.```swift
import OpenAI// `Engine.ID` provides cases for the
// `ada`, `babbage`, `curie`, and `davinci` engines.
// You can add convenience APIs for other engines
// by defining computed type properties in an extension.
extension Engine.ID {
static var davinciCodex: Self = "code-davinci-002"
}let apiKey: String // required
let client = Client(apiKey: apiKey)let prompt = #"""
// Translate this function from Swift into Objective-C
// Swiftlet numbers = [Int](1...10)
let evens = numbers.filter { $0 % 2 == 0 }
let sumOfEvens = evens.reduce(0, +)// Objective-C
"""#
client.completions(engine: .davinciCodex,
prompt: prompt,
sampling: .temperature(0.0),
numberOfTokens: ...256,
numberOfCompletions: 1,
echo: false,
stop: ["//"],
presencePenalty: 0.0,
frequencyPenalty: 0.0,
bestOf: 1) { result in
guard case .success(let completions) = result else { fatalError("\(result)") }for choice in completions.flatMap(\.choices) {
print("\(choice.text)")
}
}
// Prints the following code:
// ```
// NSArray *numbers = @[@1, @2, @3, @4, @5, @6, @7, @8, @9, @10];
// NSArray *evens = [numbers filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self % 2 == 0"]];
// NSInteger sumOfEvens = [[evens valueForKeyPath:@"@sum.self"] integerValue];
// ```
```### Instruct Series
> The [Instruct] models share our base GPT-3 models’ ability to
> understand and generate natural language,
> but they’re better at understanding and following your instructions.
> You simply tell the model what you want it to do,
> and it will do its best to fulfill your instructions.```swift
import OpenAIlet apiKey: String // required
let client = Client(apiKey: apiKey)let prompt = "Describe the Swift programming language in a few sentences."
client.completions(engine: "davinci-instruct-beta",
prompt: prompt,
sampling: .temperature(0.0),
numberOfTokens: ...100,
numberOfCompletions: 1,
stop: ["\n\n"],
presencePenalty: 0.0,
frequencyPenalty: 0.0,
bestOf: 1) { result in
guard case .success(let completions) = result else { fatalError("\(result)") }for choice in completions.flatMap(\.choices) {
print("\(choice.text)")
}
}
// Prints the following:
// "Swift is a general-purpose programming language that was developed by Apple Inc. for iOS and OS X development. Swift is designed to work with Apple's Cocoa and Cocoa Touch frameworks and the large body of existing Objective-C code written for Apple products. Swift is intended to be more resilient to erroneous code (such as buffer overflow errors) and better support concurrency (such as multi-threading) than Objective-C."
```### Content Filter
> The [content filter] aims to detect generated text that could be
> sensitive or unsafe coming from the API.
> It's currently in beta mode and has three ways of classifying text —
> as safe, sensitive, or unsafe.
> The filter will make mistakes and we have currently built it to
> err on the side of caution, thus, resulting in higher false positives.```swift
import OpenAIlet apiKey: String // required
let client = Client(apiKey: apiKey)let prompt = "I know it's an unpopular political opinion to hold, but I think that..."
client.completions(engine: "content-filter-alpha-c4",
prompt: "<|endoftext|>\(prompt)\n--\nLabel:",
sampling: .temperature(0.0),
numberOfTokens: ...1,
numberOfCompletions: 1,
echo: false,
stop: ["<|endoftext|>[prompt]\n--\nLabel:"],
presencePenalty: 0.0,
frequencyPenalty: 0.0,
bestOf: 1) { result in
guard case .success(let completions) = result else { fatalError("\(result)") }if let text = completions.flatMap(\.choices).first?.text.trimmingCharacters(in: .whitespacesAndNewlines) {
switch Int(text) {
case 0:
print("Safe")
case 1:
print("Sensitive")
// This means that the text could be talking about a sensitive topic, something political, religious, or talking about a protected class such as race or nationality.
case 2:
print("Unsafe")
// This means that the text contains profane language, prejudiced or hateful language, something that could be NSFW, or text that portrays certain groups/people in a harmful manner.
default:
print("unexpected token: \(text)")
}
}
}
// Prints "Sensitive"
```## Installation
### Swift Package Manager
Add the OpenAI package to your target dependencies in `Package.swift`:
```swift
// swift-tools-version:5.3
import PackageDescriptionlet package = Package(
name: "YourProject",
dependencies: [
.package(
url: "https://github.com/mattt/OpenAI",
from: "0.1.3"
),
]
)
```Then run the `swift build` command to build your project.
## License
MIT
## Contact
Mattt ([@mattt](https://twitter.com/mattt))
[ci badge]: https://github.com/mattt/OpenAI/workflows/CI/badge.svg
[documentation badge]: https://github.com/mattt/OpenAI/workflows/Documentation/badge.svg
[documentation]: https://github.com/mattt/OpenAI/wiki[base GPT-3 models]: https://beta.openai.com/docs/engines/base-series
[Codex]: https://beta.openai.com/docs/engines/codex-series-private-beta
[Instruct]: https://beta.openai.com/docs/engines/instruct-series-beta
[content filter]: https://beta.openai.com/docs/engines/content-filter[deprecation-announcement]: https://community.openai.com/t/answers-classification-search-endpoint-deprecation/18532