About OpenAI Integration
For developers to integrate OpenAI endpoints into their plugins.
Features
- API Key Verification: Automatically verifies the provided OpenAI API key.
- Chat Commands: Provides in-game commands for administrators to interact with the OpenAI API.
- Model Listing: Fetches and lists available models from OpenAI.
- Chat Completions: Handles chat-based interactions with OpenAI's language models.
Configuration
{ "DefaultAssistantModel": { "max_completion_tokens": 150, "max_prompt_tokens": 150, "Model": "gpt-4o" }, "DefaultCompletionsModel": { "MaxTokens": 150, "Model": "gpt-4o" }, "OpenAI_Api_Key": { "OpenAI API Key": "your-api-key-here" } }
Commands
/openaitest
Tests the connection to the OpenAI API using a predefined message. Only available to administrators.
/listmodels
Fetches and lists all available models from the OpenAI API. Only available to administrators.
Public Methods
There are two main API interactions through the completions and the assistant API.
Completions_SimpleChat
Example of Completions_SimpleChat - Creates a simple chat interaction with OpenAI.
private void AskGptCommand(BasePlayer player, string command, string[] args) { if (!permission.UserHasPermission(player.UserIDString, "RustGPT.chat")) { player.ChatMessage("<color=#ff0000>You do not have permission to use this command.</color>"); return; } if (args.Length == 0) { player.ChatMessage("Usage: /askgpt <your question>"); return; } if (!HasCooldownElapsed(player)) { return; } var userMessage = string.Join(" ", args); var messages = new List<object> { new { role = "system", content = _config.DefaultContent }, new { role = "user", content = userMessage } }; player.ChatMessage("Sending your message to OpenAI..."); OpenAI?.Call("Completions_SimpleChat", messages, (System.Action<JObject>)((response) => { if (response != null && response["choices"] != null && response["choices"].HasValues) { string GPT_Chat_Reply = response["choices"][0]["message"]["content"].ToString().Trim(); if (GPT_Chat_Reply.Length > 1200) { CreateNotesForResponse(player, GPT_Chat_Reply); } else { SendChatMessageInChunks(player, $"<color={_config.ReplyPrefixColor}>{_config.ReplyPrefix}</color> {GPT_Chat_Reply}", 250); } } else { player.ChatMessage("<color=#ff0000>Failed to get a valid response from OpenAI. Please try again later.</color>"); } })); }
Assistant_CreateAssistant
[HookMethod("Assistant_CreateAssistant")] public void Assistant_CreateAssistant(string name = null, string description = null, string instructions = null, List<object> tools = null, object toolResources = null, Dictionary<string, string> metadata = null, double? temperature = null, double? topP = null, object responseFormat = null, Action<JObject> callback = null)
Example:
var openAIPlugin = (OpenAI)plugins.Find("OpenAI"); openAIPlugin.Assistant_CreateAssistant("MyAssistant", "An assistant for my game", "You are a helpful assistant.", null, null, null, null, null, null, response => { if (response != null) { Puts("Assistant created successfully: " + response.ToString()); } else { Puts("Failed to create assistant."); } });
Assistant_CreateVectorStore
Example use of Assistant_CreateVectorStore to save chat interactions in the OpenAI platform using the Assistants API.
var openAIPlugin = (OpenAI)plugins.Find("OpenAI"); List<string> fileIds = new List<string>(); // Initially, no file IDs string name = "OpenAIChatHistory"; object expiresAfter = DateTime.UtcNow.AddDays(30); // Expires after 30 days object chunkingStrategy = null; // Define your chunking strategy if any Dictionary<string, string> metadata = new Dictionary<string, string> { { "game", "Rust" }, { "description", "Vector store for storing chat interactions with OpenAI" } }; openAIPlugin.Assistant_CreateVectorStore(fileIds, name, expiresAfter, chunkingStrategy, metadata, response => { if (response != null) { Puts("Vector store created successfully: " + response.ToString()); } else { Puts("Failed to create vector store."); } });
Pubic Methods
- FetchModels
- Completions_CreateChat
- Completions_SimpleChat
- Assistant_CreateAssistant
- CreateThread
- RetrieveThread
- ModifyThread
- DeleteThread
- Assistant_CreateMessage
- Assistant_ListMessages
- Assistant_RetrieveMessage
- Assistant_ModifyMessage
- Assistant_DeleteMessage
- Assistant_CreateRun
- Assistant_CreateThreadAndRun
- Assistant_ListRuns
- Assistant_RetrieveRun
- Assistant_ModifyRun
- Assistant_CancelRun
- Assistant_ListRunSteps
- Assistant_RetrieveRunStep
- Assistant_CreateVectorStore
- Assistant_ListVectorStores
- Assistant_RetrieveVectorStore
- Assistant_ModifyVectorStore
- Assistant_DeleteVectorStore
- Assistant_SubmitToolOutput
All of these interactions are built using the OpenAI platform as a scaffold. Using the OpenAI documentation you can see response examples for all of the available methods.
https://platform.openai.com/docs/api-reference/introduction