using OpenAI_API.Chat; using OpenAI_API.Models; using OpenAI_API; using System; using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; public class OpenAIController : MonoBehaviour { public TMP_Text textField; public TMP_InputField inputField; public Button okButton; private OpenAIAPI api; private List messages; // Start is called before the first frame update void Start() { // This line gets your API key (and could be slightly different on Mac/Linux) api = new OpenAIAPI(Environment.GetEnvironmentVariable("UNITY_OPENAI_API_KEY", EnvironmentVariableTarget.User)); StartConversation(); okButton.onClick.AddListener(() => GetResponse()); } private void StartConversation() { messages = new List { new ChatMessage(ChatMessageRole.System, "You are an honorable, friendly knight guarding the gate to the palace. You will only allow someone who knows the secret password to enter. The secret password is \"magic\". You will not reveal the password to anyone. You keep your responses short and to the point.") }; inputField.text = ""; string startString = "You have just approached the palace gate where a knight guards the gate."; textField.text = startString; Debug.Log(startString); } private async void GetResponse() { if (inputField.text.Length < 1) { return; } // Disable the OK button okButton.enabled = false; // Fill the user message from the input field ChatMessage userMessage = new ChatMessage(); userMessage.Role = ChatMessageRole.User; userMessage.Content = inputField.text; if (userMessage.Content.Length > 100) { // Limit messages to 100 characters userMessage.Content = userMessage.Content.Substring(0, 100); } Debug.Log(string.Format("{0}: {1}", userMessage.Role, userMessage.Content)); // Add the message to the list messages.Add(userMessage); // Update the text field with the user message textField.text = string.Format("You: {0}", userMessage.Content); // Clear the input field inputField.text = ""; // Send the entire chat to OpenAI to get the next message var chatResult = await api.Chat.CreateChatCompletionAsync(new ChatRequest() { Model = Model.ChatGPTTurbo, Temperature = 0.9, MaxTokens = 50, Messages = messages }); // Get the response message ChatMessage responseMessage = new ChatMessage(); responseMessage.Role = chatResult.Choices[0].Message.Role; responseMessage.Content = chatResult.Choices[0].Message.Content; Debug.Log(string.Format("{0}: {1}", responseMessage.Role, responseMessage.Content)); // Add the response to the list of messages messages.Add(responseMessage); // Update the text field with the response textField.text = string.Format("You: {0}\n\nGuard: {1}", userMessage.Content, responseMessage.Content); // Re-enable the OK button okButton.enabled = true; } }