/openai-kotlin

OpenAI API client for Kotlin with multiplatform and coroutines capabilities.

Primary LanguageKotlinMIT LicenseMIT

OpenAI API client for Kotlin

Maven Central License Kotlin Documentation

Kotlin client for OpenAI's API with multiplatform and coroutines capabilities.

📦 Setup

  1. Install OpenAI API Kotlin client by adding the following dependency to your gradle.build file:
repositories {
    mavenCentral()
}

dependencies {
    implementation "com.aallam.openai:openai-client:<version>"
}
  1. Choose and add to your dependencies one of Ktor's engines.

BOM

Alternatively, you can use openai-client-bom by adding the following dependency to your gradle.build file

dependencies {
    // import Kotlin API client BOM
    implementation platform('com.aallam.openai:openai-client-bom:<version>')

    // define dependencies without versions
    implementation 'com.aallam.openai:openai-client'
    implementation 'io.ktor:ktor-client-okhttp'
}

Multiplaform

In multiplatform projects, add openai client dependency to commonMain, and choose an engine for each target.

⚡️ Getting Started

Create an instance of OpenAI client:

val openAI = OpenAI(apiKey)

ℹ️ OpenAI encourages using environment variables for the API key. Read more.

Use your OpenAI instance to make API requests:

🧠 Models

List models
val models: List<Model> = openAI.models()
Retrieve a model
val id = ModelId("text-ada-001")
val model: Model = openAI.model(id)

📝 Completions

Create completion
val completionRequest = CompletionRequest(
    model = ModelId("text-ada-001"),
    prompt = "Somebody once told me the world is gonna roll me",
    echo = true
)
val completion: TextCompletion = openAI.completion(Ada, completionRequest)
Create completion stream
val request = CompletionRequest(
    model = ModelId("text-davinci-002"),
    prompt = "Once upon a time",
    maxTokens = 5,
    temperature = 1.0,
    topP = 1.0,
    n = 1,
    stop = listOf("\n"),
)
val completions: Flow<TextCompletion> = openAI.completions(request)

✏️ Edits

Create edits
val edit = openAI.edit(
    request = EditsRequest(
        model = ModelId("text-davinci-edit-001"),
        input = "What day of the wek is it?",
        instruction = "Fix the spelling mistakes"
    )
)

🎨 Images

Create images
val images = openAI.imageURL( // or openAI.imageJSON
    creation = ImageCreation(
        prompt = "A cute baby sea otter",
        n = 2,
        size = ImageSize.is1024x1024
    )
)
Edit images
val images = openAI.imageURL( // or openAI.imageJSON
    edit = ImageEdit(
        image = FileSource(name = "<filename>", source = imageSource),
        mask = FileSource(name = "<filename>", source = maskSource),
        prompt = "a sunlit indoor lounge area with a pool containing a flamingo",
        n = 1,
        size = ImageSize.is1024x1024
    )
)
Create image variants
val images = openAI.imageURL( // or openAI.imageJSON
    variation = ImageVariation(
        image = FileSource(name = "<filename>", source = imageSource),
        n = 1,
        size = ImageSize.is1024x1024
    )
)

↗️ Embeddings

Create embeddings
val embeddings = openAI.embeddings(
    request = EmbeddingRequest(
        model = ModelId("text-similarity-babbage-001"),
        input = listOf("The food was delicious and the waiter...")
    )
)

📄 Files

List files
val files = openAI.files()
Upload file
val file = openAI.file(
    request = FileUpload(
        file = source,
        purpose = Purpose("fine-tune")
    )
)
Delete file
openAI.delete(fileId)
Retrieve file
val file = openAI.file(fileId)
Retrieve file content
val bytes = openAI.download(fileId)

🔧 Fine-tunes

Create fine-tunes
val fineTune = openAI.fineTune(
    request = FineTuneRequest(
        trainingFile = trainingFile,
        model = ModelId("ada")
    )
)

🛡 Moderations

Create moderation
val moderation = openAI.moderations(
    request = ModerationRequest(
        input = "I want to kill them."
    )
)

ℹ️ Sample apps

Sample apps are available under sample, please check the README for running instructions.

📄 License

OpenAI Kotlin API Client is an open-sourced software licensed under the MIT license. This is an unofficial library, it is not affiliated with nor endorsed by OpenAI. Contributions are welcome.