Home

Awesome

📣 Check out Neocortex for easy Smart NPC integration!

Twitter

OpenAI Unity Package

An unofficial Unity package that allows you to use the OpenAI API directly in the Unity game engine.

How To Use

Youtube Tutorials

You can find dedicated video tutorials for how to use this package in this YouTube playlist.

https://www.youtube.com/playlist?list=PLrE-FZIEEls1-c7QifZYzeq50Id08FcJo

<img width="655" alt="image" src="https://github.com/srcnalt/OpenAI-Unity/assets/3163281/cf0004cf-ff2d-4dad-955e-259bd5a77786">

Importing the Package

To import the package, follow these steps:

Setting Up Your OpenAI Account

To use the OpenAI API, you need to have an OpenAI account. Follow these steps to create an account and generate an API key:

Saving Your Credentials

To make requests to the OpenAI API, you need to use your API key and organization name (if applicable). To avoid exposing your API key in your Unity project, you can save it in your device's local storage.

To do this, follow these steps:

{
    "api_key": "sk-...W6yi",
    "organization": "org-...L7W"
}

You can also pass your API key into OpenAIApi ctor when creating an instance of it but again, this is not recommended!

var openai = new OpenAIApi("sk-Me8...6yi");

IMPORTANT: Your API key is a secret. Do not share it with others or expose it in any client-side code (e.g. browsers, apps). If you are using OpenAI for production, make sure to run it on the server side, where your API key can be securely loaded from an environment variable or key management service.

Making Requests to OpenAPI

You can use the OpenAIApi class to make async requests to the OpenAI API.

All methods are asynchronous and can be accessed directly from an instance of the OpenAIApi class.

Here is an example of how to make a request:

private async void SendRequest()
{
    var req = new CreateChatCompletionRequest
    {
        Model = "gpt-3.5-turbo",
        Messages = new List<ChatMessage>()
        {
            new ChatMessage()
            {
                Role = "user",
                Content = "Hello!"
            }
        }
    };
    var res = await openai.CreateChatCompletion(req);
}

To make a stream request, you can use the CreateCompletionAsync and CreateChatCompletionAsync methods. These methods are going to set Stream property of the request to true and return responses through an onResponse callback. In this case text responses are stored in Delta property of the Choices field in the Chat Completion.

var req = new CreateChatCompletionRequest{
    Model = "gpt-3.5-turbo",
    Messages = new List<ChatMessage>
    {
        new ChatMessage()
        {
            Role = "user",
            Content = "Write a 100 word long short story in La Fontaine style."
        }
    },
    Temperature = 0.7f,
};
    
openai.CreateChatCompletionAsync(req, 
    (responses) => {
        var result = string.Join("", responses.Select(response => response.Choices[0].Delta.Content));
        Debug.Log(result);
    }, 
    () => {
        Debug.Log("completed");
    }, 
    new CancellationTokenSource()
);

Sample Projects

This package includes two sample scenes that you can import via the Package Manager:

Known Issues

Supported Unity Versions for WebGL Builds

The following table shows the supported Unity versions for WebGL builds:

Unity VersionWindowsLinuxMacOSWebGLAndroidIOSOculus 2
2022.3.x⚠️⚠️⚠️
2021.3.x⚠️⚠️⚠️
2020.3.x⚠️⚠️⚠️
2019.4.x⚠️⚠️⚠️⚠️⚠️⚠️
✅ = Supported⚠️ = Not Tested⛔ = Not Supported

Please report any issues you encounter with builds.

Further Reading

For more information on how to use the various request parameters, please refer to the OpenAI documentation: https://platform.openai.com/docs/api-reference