commit
ab742e04f7
9 changed files with 1022 additions and 0 deletions
@ -0,0 +1,51 @@ |
|||||
|
{ |
||||
|
"FileVersion": 3, |
||||
|
"Version": 1, |
||||
|
"VersionName": "1.0", |
||||
|
"FriendlyName": "OpenAIManager", |
||||
|
"Description": "TBD", |
||||
|
"Category": "Other", |
||||
|
"CreatedBy": "Konstantin Meixner", |
||||
|
"CreatedByURL": "", |
||||
|
"DocsURL": "", |
||||
|
"MarketplaceURL": "", |
||||
|
"SupportURL": "", |
||||
|
"CanContainContent": true, |
||||
|
"IsBetaVersion": false, |
||||
|
"IsExperimentalVersion": false, |
||||
|
"Installed": false, |
||||
|
"Modules": [ |
||||
|
{ |
||||
|
"Name": "OpenAIManager", |
||||
|
"Type": "Runtime", |
||||
|
"LoadingPhase": "Default" |
||||
|
} |
||||
|
], |
||||
|
"Plugins": [ |
||||
|
{ |
||||
|
"Name": "LowEntryHttpRequest", |
||||
|
"Enabled": true, |
||||
|
"MarketplaceURL": "com.epicgames.launcher://ue/marketplace/content/29d22bc9b02148d6bf6f57e1a0f660cc" |
||||
|
}, |
||||
|
{ |
||||
|
"Name": "LowEntryJson", |
||||
|
"Enabled": true, |
||||
|
"MarketplaceURL": "com.epicgames.launcher://ue/marketplace/content/c108b5a8917c4c86873edf835237beab" |
||||
|
}, |
||||
|
{ |
||||
|
"Name": "LowEntryFileManager", |
||||
|
"Enabled": true, |
||||
|
"MarketplaceURL": "com.epicgames.launcher://ue/marketplace/content/58edabbac7514311a4670c5d47a6fae6" |
||||
|
}, |
||||
|
{ |
||||
|
"Name": "LowEntryExtStdLib", |
||||
|
"Enabled": true, |
||||
|
"MarketplaceURL": "com.epicgames.launcher://ue/marketplace/content/846c2ad08f164f45b0335ecebf85361e" |
||||
|
}, |
||||
|
{ |
||||
|
"Name": "LowEntryEncryption", |
||||
|
"Enabled": true, |
||||
|
"MarketplaceURL": "com.epicgames.launcher://ue/marketplace/content/93647fb26bd14898b7ea63d4eefbf33a" |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
After Width: | Height: | Size: 12 KiB |
@ -0,0 +1,57 @@ |
|||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
|
||||
|
using UnrealBuildTool; |
||||
|
|
||||
|
public class OpenAIManager : ModuleRules |
||||
|
{ |
||||
|
public OpenAIManager(ReadOnlyTargetRules Target) : base(Target) |
||||
|
{ |
||||
|
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; |
||||
|
|
||||
|
PublicIncludePaths.AddRange( |
||||
|
new string[] { |
||||
|
// ... add public include paths required here ...
|
||||
|
} |
||||
|
); |
||||
|
|
||||
|
|
||||
|
PrivateIncludePaths.AddRange( |
||||
|
new string[] { |
||||
|
// ... add other private include paths required here ...
|
||||
|
} |
||||
|
); |
||||
|
|
||||
|
|
||||
|
PublicDependencyModuleNames.AddRange( |
||||
|
new string[] |
||||
|
{ |
||||
|
"Core", |
||||
|
// ... add other public dependencies that you statically link with here ...
|
||||
|
} |
||||
|
); |
||||
|
|
||||
|
|
||||
|
PrivateDependencyModuleNames.AddRange( |
||||
|
new string[] |
||||
|
{ |
||||
|
"CoreUObject", |
||||
|
"Engine", |
||||
|
"Slate", |
||||
|
"SlateCore", |
||||
|
"LowEntryHttpRequest", |
||||
|
"LowEntryJson", |
||||
|
"LowEntryFileManager", |
||||
|
"LowEntryExtendedStandardLibrary" |
||||
|
// ... add private dependencies that you statically link with here ...
|
||||
|
} |
||||
|
); |
||||
|
|
||||
|
|
||||
|
DynamicallyLoadedModuleNames.AddRange( |
||||
|
new string[] |
||||
|
{ |
||||
|
// ... add any modules that your module loads dynamically here ...
|
||||
|
} |
||||
|
); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,324 @@ |
|||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
|
||||
|
|
||||
|
#include "OpenAIAPI.h" |
||||
|
|
||||
|
|
||||
|
void UOpenAIAPI::SetAPIKey(FString Key) |
||||
|
{ |
||||
|
APIKey = Key; |
||||
|
} |
||||
|
|
||||
|
bool UOpenAIAPI::IsAPIKeySet() |
||||
|
{ |
||||
|
return !APIKey.IsEmpty(); |
||||
|
} |
||||
|
void UOpenAIAPI::CreateNewThread(FDelegateULowEntryHttpRequestOnComplete OnComplete) |
||||
|
{ |
||||
|
ULowEntryHttpRequest* Request = ULowEntryHttpRequest::Create(); |
||||
|
|
||||
|
// URL
|
||||
|
Request->SetUrl(ELowEntryHttpRequestType::POST, "https://api.openai.com/v1/threads"); |
||||
|
|
||||
|
// Headers
|
||||
|
Request->SetHeader("Authorization", "Bearer " + APIKey); |
||||
|
Request->SetHeader("Content-Type", "application/json"); |
||||
|
Request->SetHeader("OpenAI-Beta", "assistants=v1"); |
||||
|
|
||||
|
// Body
|
||||
|
|
||||
|
// Execute
|
||||
|
Request->ExecuteRequestEvent(OnComplete); |
||||
|
} |
||||
|
|
||||
|
void UOpenAIAPI::DeleteThread(FString ThreadId, FDelegateULowEntryHttpRequestOnComplete OnComplete) |
||||
|
{ |
||||
|
ULowEntryHttpRequest* Request = ULowEntryHttpRequest::Create(); |
||||
|
|
||||
|
// URL
|
||||
|
Request->SetUrl(ELowEntryHttpRequestType::_DELETE, "https://api.openai.com/v1/threads/" + ThreadId); |
||||
|
|
||||
|
// Headers
|
||||
|
Request->SetHeader("Authorization", "Bearer " + APIKey); |
||||
|
Request->SetHeader("Content-Type", "application/json"); |
||||
|
Request->SetHeader("OpenAI-Beta", "assistants=v1"); |
||||
|
|
||||
|
// Body
|
||||
|
|
||||
|
// Execute
|
||||
|
Request->ExecuteRequestEvent(OnComplete); |
||||
|
} |
||||
|
|
||||
|
void UOpenAIAPI::CreateMessage(FString Message, FString ThreadId, FDelegateULowEntryHttpRequestOnComplete OnComplete) |
||||
|
{ |
||||
|
ULowEntryHttpRequest* Request = ULowEntryHttpRequest::Create(); |
||||
|
|
||||
|
// URL
|
||||
|
Request->SetUrl(ELowEntryHttpRequestType::POST, "https://api.openai.com/v1/threads/" + ThreadId + "/messages"); |
||||
|
|
||||
|
// Headers
|
||||
|
Request->SetHeader("Authorization", "Bearer " + APIKey); |
||||
|
Request->SetHeader("Content-Type", "application/json"); |
||||
|
Request->SetHeader("OpenAI-Beta", "assistants=v1"); |
||||
|
|
||||
|
// Body
|
||||
|
ULowEntryJsonObjectEntry *RoleEntry = ULowEntryJsonObjectEntry::CreateFromString("role", "user"); |
||||
|
ULowEntryJsonObjectEntry *ContentEntry = ULowEntryJsonObjectEntry::CreateFromString("content", Message); |
||||
|
ULowEntryJsonObject* ContentJsonObject = ULowEntryJsonObject::Create( { RoleEntry, ContentEntry } ); |
||||
|
FString ContentJsonString = ULowEntryJsonObject::ToJsonString(ContentJsonObject); |
||||
|
Request->SetContentAsJsonString(ContentJsonString); |
||||
|
|
||||
|
// Execute
|
||||
|
Request->ExecuteRequestEvent(OnComplete); |
||||
|
} |
||||
|
|
||||
|
void UOpenAIAPI::CreateRun(FString ThreadId, FString AssistantId, FString ModelId, FDelegateULowEntryHttpRequestOnComplete OnComplete) |
||||
|
{ |
||||
|
ULowEntryHttpRequest* Request = ULowEntryHttpRequest::Create(); |
||||
|
|
||||
|
// URL
|
||||
|
Request->SetUrl(ELowEntryHttpRequestType::POST, "https://api.openai.com/v1/threads/" + ThreadId + "/runs"); |
||||
|
|
||||
|
// Headers
|
||||
|
Request->SetHeader("Authorization", "Bearer " + APIKey); |
||||
|
Request->SetHeader("Content-Type", "application/json"); |
||||
|
Request->SetHeader("OpenAI-Beta", "assistants=v1"); |
||||
|
|
||||
|
// Body
|
||||
|
ULowEntryJsonObjectEntry *AssistantIdEntry = ULowEntryJsonObjectEntry::CreateFromString("assistant_id", AssistantId); |
||||
|
//ULowEntryJsonObjectEntry *ModelEntry = ULowEntryJsonObjectEntry::CreateFromString("model", ModelId);
|
||||
|
ULowEntryJsonObject* ContentJsonObject = ULowEntryJsonObject::Create( { AssistantIdEntry } ); |
||||
|
FString ContentJsonString = ULowEntryJsonObject::ToJsonString(ContentJsonObject); |
||||
|
Request->SetContentAsJsonString(ContentJsonString); |
||||
|
|
||||
|
// Execute
|
||||
|
Request->ExecuteRequestEvent(OnComplete); |
||||
|
} |
||||
|
|
||||
|
void UOpenAIAPI::GetRun(FString ThreadId, FString RunId, FDelegateULowEntryHttpRequestOnComplete OnComplete) |
||||
|
{ |
||||
|
ULowEntryHttpRequest* Request = ULowEntryHttpRequest::Create(); |
||||
|
|
||||
|
// URL
|
||||
|
Request->SetUrl(ELowEntryHttpRequestType::GET, "https://api.openai.com/v1/threads/" + ThreadId + "/runs/" + RunId); |
||||
|
|
||||
|
// Headers
|
||||
|
Request->SetHeader("Authorization", "Bearer " + APIKey); |
||||
|
Request->SetHeader("Content-Type", "application/json"); |
||||
|
Request->SetHeader("OpenAI-Beta", "assistants=v1"); |
||||
|
|
||||
|
// Body
|
||||
|
|
||||
|
// Execute
|
||||
|
Request->ExecuteRequestEvent(OnComplete); |
||||
|
} |
||||
|
|
||||
|
void UOpenAIAPI::GetAllMessages(FString ThreadId, FDelegateULowEntryHttpRequestOnComplete OnComplete) |
||||
|
{ |
||||
|
ULowEntryHttpRequest* Request = ULowEntryHttpRequest::Create(); |
||||
|
|
||||
|
// URL
|
||||
|
Request->SetUrl(ELowEntryHttpRequestType::GET, "https://api.openai.com/v1/threads/" + ThreadId + "/messages"); |
||||
|
|
||||
|
// Headers
|
||||
|
Request->SetHeader("Authorization", "Bearer " + APIKey); |
||||
|
Request->SetHeader("Content-Type", "application/json"); |
||||
|
Request->SetHeader("OpenAI-Beta", "assistants=v1"); |
||||
|
|
||||
|
// Body
|
||||
|
|
||||
|
// Execute
|
||||
|
Request->ExecuteRequestEvent(OnComplete); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//void UOpenAIAPI::ListAllDocuments()
|
||||
|
//{
|
||||
|
// ULowEntryHttpRequest* Request = ULowEntryHttpRequest::Create();
|
||||
|
//
|
||||
|
// // URL
|
||||
|
// Request->SetUrl(ELowEntryHttpRequestType::GET, "https://api.openai.com/v1/files");
|
||||
|
//
|
||||
|
// // Headers
|
||||
|
// Request->SetHeader("Authorization", "Bearer " + APIKey);
|
||||
|
//
|
||||
|
// // Body
|
||||
|
//
|
||||
|
// // Execute
|
||||
|
// FDelegateULowEntryHttpRequestOnComplete OnComplete;
|
||||
|
// OnComplete.BindUFunction(this, "OnListAllDocumentsComplete");
|
||||
|
// Request->ExecuteRequestEvent(OnComplete);
|
||||
|
//}
|
||||
|
//
|
||||
|
//void UOpenAIAPI::OnListAllDocumentsComplete(ULowEntryHttpRequestResponse* Response)
|
||||
|
//{
|
||||
|
// OnListAllDocumentsCompleteDelegate.Broadcast(Response);
|
||||
|
//}
|
||||
|
//
|
||||
|
//void UOpenAIAPI::ShowFile(FString DefaultFile)
|
||||
|
//{
|
||||
|
// ULowEntryHttpRequest* Request = ULowEntryHttpRequest::Create();
|
||||
|
//
|
||||
|
// // URL
|
||||
|
// Request->SetUrl(ELowEntryHttpRequestType::GET, "https://api.openai.com/v1/files/" + DefaultFile);
|
||||
|
//
|
||||
|
// // Headers
|
||||
|
// Request->SetHeader("Authorization", "Bearer " + APIKey);
|
||||
|
//
|
||||
|
// // Body
|
||||
|
//
|
||||
|
// // Execute
|
||||
|
// FDelegateULowEntryHttpRequestOnComplete OnComplete;
|
||||
|
// OnComplete.BindUFunction(this, "OnShowFileComplete");
|
||||
|
// Request->ExecuteRequestEvent(OnComplete);
|
||||
|
//}
|
||||
|
//
|
||||
|
//void UOpenAIAPI::OnShowFileComplete(ULowEntryHttpRequestResponse* Response)
|
||||
|
//{
|
||||
|
// OnShowFileCompleteDelegate.Broadcast(Response);
|
||||
|
//}
|
||||
|
//
|
||||
|
//void UOpenAIAPI::DeleteFile(FString Id)
|
||||
|
//{
|
||||
|
// ULowEntryHttpRequest* Request = ULowEntryHttpRequest::Create();
|
||||
|
//
|
||||
|
// // URL
|
||||
|
// Request->SetUrl(ELowEntryHttpRequestType::_DELETE, "https://api.openai.com/v1/files/" + Id);
|
||||
|
//
|
||||
|
// // Headers
|
||||
|
// Request->SetHeader("Authorization", "Bearer " + APIKey);
|
||||
|
//
|
||||
|
// // Body
|
||||
|
//
|
||||
|
// // Execute
|
||||
|
// FDelegateULowEntryHttpRequestOnComplete OnComplete;
|
||||
|
// OnComplete.BindUFunction(this, "OnDeleteFileComplete");
|
||||
|
// Request->ExecuteRequestEvent(OnComplete);
|
||||
|
//}
|
||||
|
//
|
||||
|
//void UOpenAIAPI::OnDeleteFileComplete(ULowEntryHttpRequestResponse* Response)
|
||||
|
//{
|
||||
|
// OnDeleteFileCompleteDelegate.Broadcast(Response);
|
||||
|
//}
|
||||
|
//
|
||||
|
//void UOpenAIAPI::UploadFile(TArray<uint8> Content)
|
||||
|
//{
|
||||
|
// ULowEntryHttpRequest* Request = ULowEntryHttpRequest::Create();
|
||||
|
//
|
||||
|
// // URL
|
||||
|
// Request->SetUrl(ELowEntryHttpRequestType::POST, "https://api.openai.com/v1/files");
|
||||
|
//
|
||||
|
// // Headers
|
||||
|
// Request->SetHeader("Authorization", "Bearer " + APIKey);
|
||||
|
//
|
||||
|
// // Body
|
||||
|
// Request->SetContentAsMultipartParameters("purpose", "answers", "", "");
|
||||
|
// Request->SetContentAsMultipartParametersBytes("file", Content, "", "dynamicUpload.json");
|
||||
|
//
|
||||
|
// // Execute
|
||||
|
// FDelegateULowEntryHttpRequestOnComplete OnComplete;
|
||||
|
// OnComplete.BindUFunction(this, "OnUploadFileComplete");
|
||||
|
// Request->ExecuteRequestEvent(OnComplete);
|
||||
|
//}
|
||||
|
//
|
||||
|
//void UOpenAIAPI::OnUploadFileComplete(ULowEntryHttpRequestResponse* Response)
|
||||
|
//{
|
||||
|
// OnUploadFileCompleteDelegate.Broadcast(Response);
|
||||
|
//}
|
||||
|
//
|
||||
|
//
|
||||
|
//// This should call deletefile in a loop after
|
||||
|
//void UOpenAIAPI::RemoveAllDocuments()
|
||||
|
//{
|
||||
|
// ULowEntryHttpRequest* Request = ULowEntryHttpRequest::Create();
|
||||
|
//
|
||||
|
// // URL
|
||||
|
// Request->SetUrl(ELowEntryHttpRequestType::GET, "https://api.openai.com/v1/files");
|
||||
|
//
|
||||
|
// // Headers
|
||||
|
// Request->SetHeader("Authorization", "Bearer " + APIKey);
|
||||
|
//
|
||||
|
// // Body
|
||||
|
//
|
||||
|
// // Execute
|
||||
|
// FDelegateULowEntryHttpRequestOnComplete OnComplete;
|
||||
|
// OnComplete.BindUFunction(this, "OnRemoveAllDocumentsComplete");
|
||||
|
// Request->ExecuteRequestEvent(OnComplete);
|
||||
|
//}
|
||||
|
//
|
||||
|
//void UOpenAIAPI::OnRemoveAllDocumentsComplete(ULowEntryHttpRequestResponse* Response)
|
||||
|
//{
|
||||
|
// // Parse the response and call deletefile for each file
|
||||
|
//}
|
||||
|
//
|
||||
|
|
||||
|
//
|
||||
|
//void UOpenAIAPI::OnCreateNewThreadComplete(ULowEntryHttpRequestResponse* Response)
|
||||
|
//{
|
||||
|
// OnCreateNewThreadCompleteDelegate.Broadcast(Response);
|
||||
|
//}
|
||||
|
//
|
||||
|
|
||||
|
//
|
||||
|
//void UOpenAIAPI::OnDeleteThreadComplete(ULowEntryHttpRequestResponse* Response)
|
||||
|
//{
|
||||
|
// OnDeleteThreadCompleteDelegate.Broadcast(Response);
|
||||
|
//}
|
||||
|
//
|
||||
|
//
|
||||
|
//
|
||||
|
//void UOpenAIAPI::OnCreateMessageComplete(ULowEntryHttpRequestResponse* Response)
|
||||
|
//{
|
||||
|
// OnCreateMessageCompleteDelegate.Broadcast(Response);
|
||||
|
//}
|
||||
|
//
|
||||
|
//
|
||||
|
//
|
||||
|
//void UOpenAIAPI::OnCreateRunComplete(ULowEntryHttpRequestResponse* Response)
|
||||
|
//{
|
||||
|
// OnCreateRunCompleteDelegate.Broadcast(Response);
|
||||
|
//}
|
||||
|
//
|
||||
|
|
||||
|
//
|
||||
|
//void UOpenAIAPI::OnGetRunComplete(ULowEntryHttpRequestResponse* Response)
|
||||
|
//{
|
||||
|
// OnGetRunCompleteDelegate.Broadcast(Response);
|
||||
|
//}
|
||||
|
//
|
||||
|
|
||||
|
//
|
||||
|
//void UOpenAIAPI::OnGetAllMessagesComplete(ULowEntryHttpRequestResponse* Response)
|
||||
|
//{
|
||||
|
// OnGetAllMessagesCompleteDelegate.Broadcast(Response);
|
||||
|
//}
|
||||
|
//
|
||||
|
//void UOpenAIAPI::ListAssistants()
|
||||
|
//{
|
||||
|
// FColor BaseColor;
|
||||
|
// FColor HighlightColor;
|
||||
|
// int GraphHeight = 0;
|
||||
|
// int i = 0;
|
||||
|
// ULowEntryHttpRequest* Request = ULowEntryHttpRequest::Create();
|
||||
|
//
|
||||
|
// // URL
|
||||
|
// Request->SetUrl(ELowEntryHttpRequestType::GET, "https://api.openai.com/v1/assistants");
|
||||
|
//
|
||||
|
// // Headers
|
||||
|
// Request->SetHeader("Authorization", "Bearer " + APIKey);
|
||||
|
// Request->SetHeader("Content-Type", "application/json");
|
||||
|
// Request->SetHeader("OpenAI-Beta", "assistants=v1");
|
||||
|
//
|
||||
|
// // Body
|
||||
|
//
|
||||
|
// // Execute
|
||||
|
// FDelegateULowEntryHttpRequestOnComplete OnComplete;
|
||||
|
// OnComplete.BindUFunction(this, "OnListAssistantsComplete");
|
||||
|
//
|
||||
|
// Request->ExecuteRequestEvent(OnComplete);
|
||||
|
//}
|
||||
|
//
|
||||
|
//void UOpenAIAPI::OnListAssistantsComplete(ULowEntryHttpRequestResponse* Response)
|
||||
|
//{
|
||||
|
// OnListAssistantsCompleteDelegate.Broadcast(Response);
|
||||
|
//}
|
||||
@ -0,0 +1,20 @@ |
|||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
|
||||
|
#include "OpenAIManager.h" |
||||
|
|
||||
|
#define LOCTEXT_NAMESPACE "FOpenAIManagerModule" |
||||
|
|
||||
|
void FOpenAIManagerModule::StartupModule() |
||||
|
{ |
||||
|
// This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module
|
||||
|
} |
||||
|
|
||||
|
void FOpenAIManagerModule::ShutdownModule() |
||||
|
{ |
||||
|
// This function may be called during shutdown to clean up your module. For modules that support dynamic reloading,
|
||||
|
// we call this function before unloading the module.
|
||||
|
} |
||||
|
|
||||
|
#undef LOCTEXT_NAMESPACE |
||||
|
|
||||
|
IMPLEMENT_MODULE(FOpenAIManagerModule, OpenAIManager) |
||||
@ -0,0 +1,347 @@ |
|||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
|
||||
|
|
||||
|
#include "OpenAIManagerSystem.h" |
||||
|
|
||||
|
UOpenAIAPI* UOpenAIManagerSystem::OpenAI; |
||||
|
bool UOpenAIManagerSystem::IsBusy = false; |
||||
|
FString UOpenAIManagerSystem::ActiveThread = ""; |
||||
|
UOpenAIManagerSystem* UOpenAIManagerSystem::Self; |
||||
|
FString UOpenAIManagerSystem::CurrentAssistant = ""; |
||||
|
FString UOpenAIManagerSystem::CurrentRun = ""; |
||||
|
|
||||
|
|
||||
|
FOnOpenAIErrorMulticastDelegate UOpenAIManagerSystem::OnError; |
||||
|
FOpenAIDelegate UOpenAIManagerSystem::OnAIReadyDelegate; |
||||
|
FOpenAIDelegate UOpenAIManagerSystem::OnThreadDeletedDelegate; |
||||
|
FOnOpenAIResponseReceivedDelegate UOpenAIManagerSystem::OnResponseReceived; |
||||
|
|
||||
|
|
||||
|
void UOpenAIManagerSystem::Initialize(FSubsystemCollectionBase& Collection) |
||||
|
{ |
||||
|
OpenAI = NewObject<UOpenAIAPI>(); |
||||
|
OpenAI->AddToRoot(); |
||||
|
Self = this; |
||||
|
} |
||||
|
|
||||
|
void UOpenAIManagerSystem::Deinitialize() |
||||
|
{ |
||||
|
OpenAI->RemoveFromRoot(); |
||||
|
OpenAI = nullptr; |
||||
|
} |
||||
|
|
||||
|
void UOpenAIManagerSystem::SetAPIKey(FString Key) |
||||
|
{ |
||||
|
OpenAI->SetAPIKey(Key); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void UOpenAIManagerSystem::SetAssistant(FString Assistant) |
||||
|
{ |
||||
|
CurrentAssistant = Assistant; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
void UOpenAIManagerSystem::BindOnError(FOnOpenAIErrorDelegate Delegate) |
||||
|
{ |
||||
|
OnError.Add(Delegate); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void UOpenAIManagerSystem::RemoveAllFromOnError() |
||||
|
{ |
||||
|
OnError.Clear(); |
||||
|
} |
||||
|
|
||||
|
void UOpenAIManagerSystem::ListAssistants(FOnOpenAIErrorDelegate test) |
||||
|
{ |
||||
|
if (!OpenAI->IsAPIKeySet()) |
||||
|
{ |
||||
|
OnError.Broadcast("API Key is not set"); |
||||
|
return; |
||||
|
} |
||||
|
//OpenAI->OnListAssistantsCompleteDelegate.Add(test);
|
||||
|
//OpenAI->ListAssistants();
|
||||
|
//OpenAI->OnListAssistantsCompleteDelegate.Remove(test);
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
void UOpenAIManagerSystem::RemoveFromOnError(FOnOpenAIErrorDelegate Delegate) |
||||
|
{ |
||||
|
OnError.Remove(Delegate); |
||||
|
} |
||||
|
|
||||
|
UOpenAIAPI* UOpenAIManagerSystem::GetOpenAI_API() |
||||
|
{ |
||||
|
return OpenAI; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void UOpenAIManagerSystem::InitializeThread(FOpenAIDelegate Delegate) |
||||
|
{ |
||||
|
if (IsBusy) |
||||
|
{ |
||||
|
OnError.Broadcast("Unable to initialize thread: System is busy"); |
||||
|
return; |
||||
|
} |
||||
|
if (!OpenAI->IsAPIKeySet()) |
||||
|
{ |
||||
|
OnError.Broadcast("Unable to initialize thread: API Key is not set"); |
||||
|
return; |
||||
|
} |
||||
|
if (CurrentAssistant.IsEmpty()) |
||||
|
{ |
||||
|
OnError.Broadcast("Unable to initialize thread: Assistant is not set"); |
||||
|
return; |
||||
|
} |
||||
|
OnAIReadyDelegate = Delegate; |
||||
|
IsBusy = true; |
||||
|
FDelegateULowEntryHttpRequestOnComplete OnComplete; |
||||
|
OnComplete.BindUFunction(Self, "OnThreadCreated"); |
||||
|
OpenAI->CreateNewThread(OnComplete); |
||||
|
} |
||||
|
|
||||
|
void UOpenAIManagerSystem::OnThreadCreated(ULowEntryHttpRequestResponse* Response) |
||||
|
{ |
||||
|
if (!(Response->GetResponseCode() == 200)) |
||||
|
{ |
||||
|
OnError.Broadcast("Unable to create thread: " + Response->GetContentAsString()); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
FString JsonString = Response->GetContentAsString(); |
||||
|
ULowEntryJsonObject* JsonObject = ULowEntryJsonObject::Create(); |
||||
|
ULowEntryJsonArray* JsonArray = ULowEntryJsonArray::Create(); |
||||
|
ELowEntryJsonParseResult ParseStatus; |
||||
|
|
||||
|
// get the response as json object
|
||||
|
ULowEntryJsonLibrary::Json_ParseJsonString(JsonString, JsonObject, JsonArray, ParseStatus); |
||||
|
|
||||
|
if (ParseStatus == ELowEntryJsonParseResult::StringIsEmpty) |
||||
|
{ |
||||
|
OnError.Broadcast("Unable to create thread: Response string is empty"); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
if (ParseStatus == ELowEntryJsonParseResult::UnableToParse) |
||||
|
{ |
||||
|
OnError.Broadcast("Unable to create thread: Unable to parse"); |
||||
|
return; |
||||
|
} |
||||
|
ELowEntryJsonValueAndTypeFound SearchStatus; |
||||
|
ActiveThread = ULowEntryJsonObject::GetString(JsonObject, "id", SearchStatus); |
||||
|
if (SearchStatus != ELowEntryJsonValueAndTypeFound::Success) |
||||
|
{ |
||||
|
OnError.Broadcast("Unable to create thread: Unable to find id"); |
||||
|
return; |
||||
|
} |
||||
|
IsBusy = false; |
||||
|
OnAIReadyDelegate.ExecuteIfBound(); |
||||
|
OnAIReadyDelegate.Clear(); |
||||
|
} |
||||
|
|
||||
|
void UOpenAIManagerSystem::DeleteActiveThread(FOpenAIDelegate Delegate) |
||||
|
{ |
||||
|
if (IsBusy) |
||||
|
{ |
||||
|
OnError.Broadcast("Unable to delete thread: System is busy"); |
||||
|
return; |
||||
|
} |
||||
|
if (!OpenAI->IsAPIKeySet()) |
||||
|
{ |
||||
|
OnError.Broadcast("Unable to delete thread: API Key is not set"); |
||||
|
return; |
||||
|
} |
||||
|
if (ActiveThread.IsEmpty()) |
||||
|
{ |
||||
|
OnError.Broadcast("Unable to delete thread: No active Thread"); |
||||
|
return; |
||||
|
} |
||||
|
OnThreadDeletedDelegate = Delegate; |
||||
|
IsBusy = true; |
||||
|
FDelegateULowEntryHttpRequestOnComplete OnComplete; |
||||
|
OnComplete.BindUFunction(Self, "OnThreadDeleted"); |
||||
|
OpenAI->DeleteThread(ActiveThread, OnComplete); |
||||
|
} |
||||
|
|
||||
|
void UOpenAIManagerSystem::OnThreadDeleted(ULowEntryHttpRequestResponse* Response) |
||||
|
{ |
||||
|
if (!(Response->GetResponseCode() == 200)) |
||||
|
{ |
||||
|
OnError.Broadcast("Unable to delete thread: " + Response->GetContentAsString()); |
||||
|
return; |
||||
|
} |
||||
|
ActiveThread = ""; |
||||
|
IsBusy = false; |
||||
|
OnThreadDeletedDelegate.ExecuteIfBound(); |
||||
|
OnThreadDeletedDelegate.Clear(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void UOpenAIManagerSystem::AskQuestion(FString Message, FOnOpenAIResponseReceivedDelegate Delegate) |
||||
|
{ |
||||
|
if (IsBusy) |
||||
|
{ |
||||
|
OnError.Broadcast("Unable to create message: System is busy"); |
||||
|
return; |
||||
|
} |
||||
|
if (!OpenAI->IsAPIKeySet()) |
||||
|
{ |
||||
|
OnError.Broadcast("Unable to create message: API Key is not set!"); |
||||
|
return; |
||||
|
} |
||||
|
if (CurrentAssistant.IsEmpty()) |
||||
|
{ |
||||
|
OnError.Broadcast("Unable to create message: Assistant is not set!"); |
||||
|
return; |
||||
|
} |
||||
|
if (ActiveThread.IsEmpty()) |
||||
|
{ |
||||
|
OnError.Broadcast("Unable to create message: Thread is not set!"); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
OnResponseReceived = Delegate; |
||||
|
IsBusy = true; |
||||
|
FDelegateULowEntryHttpRequestOnComplete OnComplete; |
||||
|
OnComplete.BindUFunction(Self, "OnMessageCreated"); |
||||
|
OpenAI->CreateMessage(Message, ActiveThread, OnComplete); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
void UOpenAIManagerSystem::OnMessageCreated(ULowEntryHttpRequestResponse* Response) |
||||
|
{ |
||||
|
if (!(Response->GetResponseCode() == 200)) |
||||
|
{ |
||||
|
OnError.Broadcast("Creating message failed: " + Response->GetContentAsString()); |
||||
|
return; |
||||
|
} |
||||
|
FDelegateULowEntryHttpRequestOnComplete OnComplete; |
||||
|
OnComplete.BindUFunction(Self, "OnRunCreated"); |
||||
|
OpenAI->CreateRun(ActiveThread, CurrentAssistant, "davinci", OnComplete); |
||||
|
} |
||||
|
|
||||
|
void UOpenAIManagerSystem::OnRunCreated(ULowEntryHttpRequestResponse* Response) |
||||
|
{ |
||||
|
if (!(Response->GetResponseCode() == 200)) |
||||
|
{ |
||||
|
OnError.Broadcast("Creating run failed: " + Response->GetContentAsString()); |
||||
|
return; |
||||
|
} |
||||
|
FString JsonString = Response->GetContentAsString(); |
||||
|
ULowEntryJsonObject* JsonObject = ULowEntryJsonObject::Create(); |
||||
|
ULowEntryJsonArray* JsonArray = ULowEntryJsonArray::Create(); |
||||
|
ELowEntryJsonParseResult ParseStatus; |
||||
|
|
||||
|
ULowEntryJsonLibrary::Json_ParseJsonString(JsonString, JsonObject, JsonArray, ParseStatus); |
||||
|
|
||||
|
if (ParseStatus == ELowEntryJsonParseResult::StringIsEmpty) |
||||
|
{ |
||||
|
OnError.Broadcast("Checking run failed: Response string is empty"); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
if (ParseStatus == ELowEntryJsonParseResult::UnableToParse) |
||||
|
{ |
||||
|
OnError.Broadcast("Checking run failed: Unable to parse"); |
||||
|
return; |
||||
|
} |
||||
|
ELowEntryJsonValueAndTypeFound SearchStatus; |
||||
|
CurrentRun = ULowEntryJsonObject::GetString(JsonObject, "id", SearchStatus); |
||||
|
if (SearchStatus != ELowEntryJsonValueAndTypeFound::Success) |
||||
|
{ |
||||
|
OnError.Broadcast("Checking run failed: Unable to find id"); |
||||
|
return; |
||||
|
} |
||||
|
FDelegateULowEntryHttpRequestOnComplete OnComplete; |
||||
|
OnComplete.BindUFunction(Self, "OnRunChecked"); |
||||
|
OpenAI->GetRun(ActiveThread, CurrentRun, OnComplete); |
||||
|
} |
||||
|
|
||||
|
void UOpenAIManagerSystem::OnRunChecked(ULowEntryHttpRequestResponse* Response) |
||||
|
{ |
||||
|
if (!(Response->GetResponseCode() == 200)) |
||||
|
{ |
||||
|
OnError.Broadcast("Checking run failed: " + Response->GetContentAsString()); |
||||
|
return; |
||||
|
} |
||||
|
FString JsonString = Response->GetContentAsString(); |
||||
|
ULowEntryJsonObject* JsonObject = ULowEntryJsonObject::Create(); |
||||
|
ULowEntryJsonArray* JsonArray = ULowEntryJsonArray::Create(); |
||||
|
ELowEntryJsonParseResult ParseStatus; |
||||
|
|
||||
|
// get the response as json object
|
||||
|
ULowEntryJsonLibrary::Json_ParseJsonString(JsonString, JsonObject, JsonArray, ParseStatus); |
||||
|
|
||||
|
if (ParseStatus == ELowEntryJsonParseResult::StringIsEmpty) |
||||
|
{ |
||||
|
OnError.Broadcast("Checking run failed: Response string is empty"); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
if (ParseStatus == ELowEntryJsonParseResult::UnableToParse) |
||||
|
{ |
||||
|
OnError.Broadcast("Checking run failed: Unable to parse"); |
||||
|
return; |
||||
|
} |
||||
|
ELowEntryJsonValueAndTypeFound SearchStatus; |
||||
|
FString Status = ULowEntryJsonObject::GetString(JsonObject, "status", SearchStatus); |
||||
|
if (SearchStatus != ELowEntryJsonValueAndTypeFound::Success) |
||||
|
{ |
||||
|
OnError.Broadcast("Checking run failed: Unable to find status"); |
||||
|
return; |
||||
|
} |
||||
|
if (Status == "completed") |
||||
|
{ |
||||
|
//OnError.Broadcast("Run completed!");
|
||||
|
FDelegateULowEntryHttpRequestOnComplete OnComplete; |
||||
|
OnComplete.BindUFunction(Self, "OnAllMessagesReceived"); |
||||
|
OpenAI->GetAllMessages(ActiveThread, OnComplete); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
OnError.Broadcast("Run not yet completed, checking again.."); |
||||
|
FPlatformProcess::Sleep(1); |
||||
|
FDelegateULowEntryHttpRequestOnComplete OnComplete; |
||||
|
OnComplete.BindUFunction(Self, "OnRunChecked"); |
||||
|
OpenAI->GetRun(ActiveThread, CurrentRun, OnComplete); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void UOpenAIManagerSystem::OnAllMessagesReceived(ULowEntryHttpRequestResponse* Response) |
||||
|
{ |
||||
|
if (!(Response->GetResponseCode() == 200)) |
||||
|
{ |
||||
|
OnError.Broadcast("Getting all messages failed: " + Response->GetContentAsString()); |
||||
|
return; |
||||
|
} |
||||
|
FString JsonString = Response->GetContentAsString(); |
||||
|
ULowEntryJsonObject* JsonObject = ULowEntryJsonObject::Create(); |
||||
|
ULowEntryJsonArray* JsonArray = ULowEntryJsonArray::Create(); |
||||
|
ELowEntryJsonParseResult ParseStatus; |
||||
|
|
||||
|
// get the response as json object
|
||||
|
ULowEntryJsonLibrary::Json_ParseJsonString(JsonString, JsonObject, JsonArray, ParseStatus); |
||||
|
|
||||
|
if (ParseStatus == ELowEntryJsonParseResult::StringIsEmpty) |
||||
|
{ |
||||
|
OnError.Broadcast("Getting all messages failed: Response string is empty"); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
if (ParseStatus == ELowEntryJsonParseResult::UnableToParse) |
||||
|
{ |
||||
|
OnError.Broadcast("Getting all messages failed: Unable to parse"); |
||||
|
return; |
||||
|
} |
||||
|
ELowEntryJsonValueAndTypeFound SearchStatus; |
||||
|
ULowEntryJsonArray* DataArray = ULowEntryJsonObject::GetJsonArray(JsonObject, "data", SearchStatus); |
||||
|
ULowEntryJsonObject* FirstElement = ULowEntryJsonArray::GetJsonObject(DataArray, 0, SearchStatus); |
||||
|
ULowEntryJsonArray* ContentArray = ULowEntryJsonObject::GetJsonArray(FirstElement, "content", SearchStatus); |
||||
|
ULowEntryJsonObject* FirstElementAgain = ULowEntryJsonArray::GetJsonObject(ContentArray, 0, SearchStatus); |
||||
|
ULowEntryJsonObject* ResponseJsonText = ULowEntryJsonObject::GetJsonObject(FirstElementAgain, "text", SearchStatus); |
||||
|
FString ResponseString = ULowEntryJsonObject::GetString(ResponseJsonText, "value", SearchStatus); |
||||
|
IsBusy = false; |
||||
|
OnResponseReceived.ExecuteIfBound(ResponseString); |
||||
|
OnResponseReceived.Clear(); |
||||
|
} |
||||
@ -0,0 +1,111 @@ |
|||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include "CoreMinimal.h" |
||||
|
#include "UObject/NoExportTypes.h" |
||||
|
|
||||
|
#include "LowEntryHttpRequest.h" |
||||
|
#include "LowEntryHttpRequestLibrary.h" |
||||
|
#include "LowEntryHttpRequestResponse.h" |
||||
|
#include "LowEntryJsonLibrary.h" |
||||
|
#include "LowEntryJsonObject.h" |
||||
|
#include "LowEntryJsonObjectEntry.h" |
||||
|
#include "LowEntryFileManagerLibrary.h" |
||||
|
#include "LowEntryExtendedStandardLibrary.h" |
||||
|
|
||||
|
#include "OpenAIAPI.generated.h" |
||||
|
|
||||
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnRequestCompleteMulticastDelegate, ULowEntryHttpRequestResponse*, Response); |
||||
|
|
||||
|
//DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnListAssistantsComplete);
|
||||
|
|
||||
|
/**
|
||||
|
* |
||||
|
*/ |
||||
|
UCLASS() |
||||
|
class OPENAIMANAGER_API UOpenAIAPI : public UObject |
||||
|
{ |
||||
|
GENERATED_BODY() |
||||
|
|
||||
|
protected: |
||||
|
FString APIKey; |
||||
|
|
||||
|
public: |
||||
|
|
||||
|
void SetAPIKey(FString Key); |
||||
|
bool IsAPIKeySet(); |
||||
|
|
||||
|
void CreateNewThread(FDelegateULowEntryHttpRequestOnComplete OnComplete); |
||||
|
void DeleteThread(FString ThreadId, FDelegateULowEntryHttpRequestOnComplete OnComplete); |
||||
|
void CreateMessage(FString Message, FString ThreadId, FDelegateULowEntryHttpRequestOnComplete OnComplete); |
||||
|
void CreateRun(FString ThreadId, FString AssistantId, FString ModelId, FDelegateULowEntryHttpRequestOnComplete OnComplete); |
||||
|
void GetRun(FString ThreadId, FString RunId, FDelegateULowEntryHttpRequestOnComplete OnComplete); |
||||
|
void GetAllMessages(FString ThreadId, FDelegateULowEntryHttpRequestOnComplete OnComplete); |
||||
|
|
||||
|
/*UFUNCTION()
|
||||
|
void OnCreateNewThreadComplete(ULowEntryHttpRequestResponse* Response); |
||||
|
UPROPERTY(BlueprintAssignable, Category = "OpenAIAPI") |
||||
|
FOnRequestCompleteMulticastDelegate OnCreateNewThreadCompleteDelegate;*/ |
||||
|
/*void ListAllDocuments();
|
||||
|
UFUNCTION() |
||||
|
void OnListAllDocumentsComplete(ULowEntryHttpRequestResponse* Response); |
||||
|
UPROPERTY(BlueprintAssignable, Category = "OpenAIAPI") |
||||
|
FOnRequestCompleteMulticastDelegate OnListAllDocumentsCompleteDelegate; |
||||
|
|
||||
|
void ShowFile(FString DefaultFile); |
||||
|
UFUNCTION() |
||||
|
void OnShowFileComplete(ULowEntryHttpRequestResponse* Response); |
||||
|
UPROPERTY(BlueprintAssignable, Category = "OpenAIAPI") |
||||
|
FOnRequestCompleteMulticastDelegate OnShowFileCompleteDelegate; |
||||
|
|
||||
|
void DeleteFile(FString Id); |
||||
|
UFUNCTION() |
||||
|
void OnDeleteFileComplete(ULowEntryHttpRequestResponse* Response); |
||||
|
UPROPERTY(BlueprintAssignable, Category = "OpenAIAPI") |
||||
|
FOnRequestCompleteMulticastDelegate OnDeleteFileCompleteDelegate; |
||||
|
|
||||
|
void UploadFile(TArray<uint8> Content); |
||||
|
UFUNCTION() |
||||
|
void OnUploadFileComplete(ULowEntryHttpRequestResponse* Response); |
||||
|
UPROPERTY(BlueprintAssignable, Category = "OpenAIAPI") |
||||
|
FOnRequestCompleteMulticastDelegate OnUploadFileCompleteDelegate; |
||||
|
|
||||
|
void RemoveAllDocuments(); |
||||
|
UFUNCTION() |
||||
|
void OnRemoveAllDocumentsComplete(ULowEntryHttpRequestResponse* Response); |
||||
|
UPROPERTY(BlueprintAssignable, Category = "OpenAIAPI") |
||||
|
FOnRequestCompleteMulticastDelegate OnRemoveAllDocumentsCompleteDelegate; |
||||
|
|
||||
|
UFUNCTION() |
||||
|
void OnDeleteThreadComplete(ULowEntryHttpRequestResponse* Response); |
||||
|
UPROPERTY(BlueprintAssignable, Category = "OpenAIAPI") |
||||
|
FOnRequestCompleteMulticastDelegate OnDeleteThreadCompleteDelegate; |
||||
|
|
||||
|
void CreateMessage(FString Message, FString ThreadId); |
||||
|
UFUNCTION() |
||||
|
void OnCreateMessageComplete(ULowEntryHttpRequestResponse* Response); |
||||
|
UPROPERTY(BlueprintAssignable, Category = "OpenAIAPI") |
||||
|
FOnRequestCompleteMulticastDelegate OnCreateMessageCompleteDelegate; |
||||
|
|
||||
|
UFUNCTION() |
||||
|
void OnCreateRunComplete(ULowEntryHttpRequestResponse* Response); |
||||
|
UPROPERTY(BlueprintAssignable, Category = "OpenAIAPI") |
||||
|
FOnRequestCompleteMulticastDelegate OnCreateRunCompleteDelegate; |
||||
|
|
||||
|
UFUNCTION() |
||||
|
void OnGetRunComplete(ULowEntryHttpRequestResponse* Response); |
||||
|
UPROPERTY(BlueprintAssignable, Category = "OpenAIAPI") |
||||
|
FOnRequestCompleteMulticastDelegate OnGetRunCompleteDelegate; |
||||
|
|
||||
|
UFUNCTION() |
||||
|
void OnGetAllMessagesComplete(ULowEntryHttpRequestResponse* Response); |
||||
|
UPROPERTY(BlueprintAssignable, Category = "OpenAIAPI") |
||||
|
FOnRequestCompleteMulticastDelegate OnGetAllMessagesCompleteDelegate; |
||||
|
|
||||
|
void ListAssistants(); |
||||
|
UFUNCTION() |
||||
|
void OnListAssistantsComplete(ULowEntryHttpRequestResponse* Response); |
||||
|
UPROPERTY(BlueprintAssignable, Category = "OpenAIAPI") |
||||
|
FOnRequestCompleteMulticastDelegate OnListAssistantsCompleteDelegate;*/ |
||||
|
}; |
||||
@ -0,0 +1,15 @@ |
|||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include "CoreMinimal.h" |
||||
|
#include "Modules/ModuleManager.h" |
||||
|
|
||||
|
class FOpenAIManagerModule : public IModuleInterface |
||||
|
{ |
||||
|
public: |
||||
|
|
||||
|
/** IModuleInterface implementation */ |
||||
|
virtual void StartupModule() override; |
||||
|
virtual void ShutdownModule() override; |
||||
|
}; |
||||
@ -0,0 +1,97 @@ |
|||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include "CoreMinimal.h" |
||||
|
#include "Subsystems/GameInstanceSubsystem.h" |
||||
|
#include "OpenAIAPI.h" |
||||
|
|
||||
|
#include "LowEntryHttpRequest.h" |
||||
|
#include "LowEntryHttpRequestLibrary.h" |
||||
|
#include "LowEntryHttpRequestResponse.h" |
||||
|
#include "LowEntryJsonLibrary.h" |
||||
|
#include "LowEntryJsonObject.h" |
||||
|
#include "LowEntryJsonObjectEntry.h" |
||||
|
#include "LowEntryFileManagerLibrary.h" |
||||
|
#include "LowEntryExtendedStandardLibrary.h" |
||||
|
#include "LowEntryJsonArray.h" |
||||
|
|
||||
|
#include "OpenAIManagerSystem.generated.h" |
||||
|
|
||||
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnOpenAIErrorMulticastDelegate, FString, ErrorMessage); |
||||
|
DECLARE_DYNAMIC_DELEGATE_OneParam(FOnOpenAIErrorDelegate, FString, ErrorMessage); |
||||
|
DECLARE_DYNAMIC_DELEGATE_OneParam(FOnOpenAIResponseReceivedDelegate, FString, Response); |
||||
|
DECLARE_DYNAMIC_DELEGATE(FOpenAIDelegate); |
||||
|
/**
|
||||
|
* |
||||
|
*/ |
||||
|
UCLASS() |
||||
|
class OPENAIMANAGER_API UOpenAIManagerSystem : public UGameInstanceSubsystem |
||||
|
{ |
||||
|
GENERATED_BODY() |
||||
|
|
||||
|
static UOpenAIManagerSystem* Self; |
||||
|
static FOnOpenAIErrorMulticastDelegate OnError; |
||||
|
static UOpenAIAPI* OpenAI; |
||||
|
static FString CurrentAssistant; |
||||
|
static FString ActiveThread; |
||||
|
static FString CurrentRun; |
||||
|
|
||||
|
public: |
||||
|
static bool IsBusy; |
||||
|
virtual void Initialize(FSubsystemCollectionBase& Collection) override; |
||||
|
virtual void Deinitialize() override; |
||||
|
|
||||
|
UFUNCTION(BlueprintCallable, Category = "OpenAI") |
||||
|
static void SetAPIKey(FString Key); |
||||
|
|
||||
|
UFUNCTION(BlueprintCallable, Category = "OpenAI") |
||||
|
static void SetAssistant(FString Assistant); |
||||
|
|
||||
|
UFUNCTION(BlueprintCallable, Category = "OpenAI") |
||||
|
static void BindOnError(FOnOpenAIErrorDelegate Delegate); |
||||
|
|
||||
|
UFUNCTION(BlueprintCallable, Category = "OpenAI") |
||||
|
static void RemoveFromOnError(FOnOpenAIErrorDelegate Delegate); |
||||
|
|
||||
|
UFUNCTION(BlueprintCallable, Category = "OpenAI") |
||||
|
static void RemoveAllFromOnError(); |
||||
|
|
||||
|
UFUNCTION(BlueprintCallable, Category = "OpenAI") |
||||
|
static void ListAssistants(FOnOpenAIErrorDelegate test); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
UFUNCTION(BlueprintPure, Category = "OpenAI") |
||||
|
static UOpenAIAPI *GetOpenAI_API(); |
||||
|
|
||||
|
UFUNCTION(BlueprintPure, Category = "OpenAI") |
||||
|
static FString getActiveThread() { return ActiveThread; } |
||||
|
|
||||
|
|
||||
|
|
||||
|
UFUNCTION(BlueprintCallable, Category = "OpenAI") |
||||
|
static void InitializeThread(FOpenAIDelegate Delegate); |
||||
|
UFUNCTION() |
||||
|
void OnThreadCreated(ULowEntryHttpRequestResponse *Response); |
||||
|
static FOpenAIDelegate OnAIReadyDelegate; |
||||
|
|
||||
|
UFUNCTION(BlueprintCallable, Category = "OpenAI") |
||||
|
static void DeleteActiveThread(FOpenAIDelegate Delegate); |
||||
|
UFUNCTION() |
||||
|
void OnThreadDeleted(ULowEntryHttpRequestResponse* Response); |
||||
|
static FOpenAIDelegate OnThreadDeletedDelegate; |
||||
|
|
||||
|
UFUNCTION(BlueprintCallable, Category = "OpenAI") |
||||
|
static void AskQuestion(FString Message, FOnOpenAIResponseReceivedDelegate OnResponse); |
||||
|
UFUNCTION() |
||||
|
void OnMessageCreated(ULowEntryHttpRequestResponse* Response); |
||||
|
UFUNCTION() |
||||
|
void OnRunCreated(ULowEntryHttpRequestResponse* Response); |
||||
|
UFUNCTION() |
||||
|
void OnRunChecked(ULowEntryHttpRequestResponse* Response); |
||||
|
UFUNCTION() |
||||
|
void OnAllMessagesReceived(ULowEntryHttpRequestResponse* Response); |
||||
|
static FOnOpenAIResponseReceivedDelegate OnResponseReceived; |
||||
|
}; |
||||
Loading…
Reference in new issue