-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMerlinUnityClient.cs
More file actions
53 lines (49 loc) · 1.86 KB
/
MerlinUnityClient.cs
File metadata and controls
53 lines (49 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// MerlinUnityClient.cs
// Unity C# script to call Merlin REST API
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using TMPro; // For TextMeshPro UI
public class MerlinUnityClient : MonoBehaviour
{
public string apiUrl = "http://localhost:8000/merlin/chat";
public string apiKey = "merlin-secret-key";
public TMP_InputField userInputField;
public TMP_Text merlinReplyText;
public string userId = "default";
public string MerlinReply = "";
public void OnSendButton()
{
string userInput = userInputField.text;
StartCoroutine(SendChatCoroutine(userInput));
}
public IEnumerator SendChatCoroutine(string userInput)
{
var reqObj = new ChatRequest { user_input = userInput, user_id = userId };
var json = JsonUtility.ToJson(reqObj);
var request = new UnityWebRequest(apiUrl, "POST");
byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(json);
request.uploadHandler = new UploadHandlerRaw(bodyRaw);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
request.SetRequestHeader("X-Merlin-Key", apiKey);
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
ChatResponse resp = JsonUtility.FromJson<ChatResponse>(request.downloadHandler.text);
MerlinReply = resp.reply;
if (merlinReplyText != null)
{
merlinReplyText.text = MerlinReply;
}
}
else
{
MerlinReply = "[Merlin API Error]";
}
}
[System.Serializable]
public class ChatRequest { public string user_input; public string user_id; }
[System.Serializable]
public class ChatResponse { public string reply; }
}