Skip to content

Commit

Permalink
v1.5.2
Browse files Browse the repository at this point in the history
  • Loading branch information
lucoiso committed Apr 14, 2023
2 parents 69cf1ad + 4d50e50 commit a8257be
Show file tree
Hide file tree
Showing 8 changed files with 53 additions and 18 deletions.
4 changes: 2 additions & 2 deletions HttpGPT.uplugin
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"FileVersion": 3,
"Version": 14,
"VersionName": "1.5.1",
"Version": 15,
"VersionName": "1.5.2",
"FriendlyName": "HttpGPT - GPT Integration",
"Description": "HttpGPT is an Unreal Engine plugin that facilitates integration with OpenAI's GPT based services (ChatGPT and DALL-E) through asynchronous REST requests, making it easy for developers to communicate with these services. HttpGPT also includes new Editor Tools to integrate Chat GPT and DALL-E image generation directly in the Engine.",
"Category": "Game Features",
Expand Down
26 changes: 20 additions & 6 deletions Source/HttpGPTChatModule/Private/Tasks/HttpGPTChatRequest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,18 @@ UHttpGPTChatRequest* UHttpGPTChatRequest::SendMessages_CustomOptions(UObject* Wo

bool UHttpGPTChatRequest::CanActivateTask() const
{
return Super::CanActivateTask() && !HttpGPT::Internal::HasEmptyParam(Messages);
if (!Super::CanActivateTask())
{
return false;
}

if (HttpGPT::Internal::HasEmptyParam(Messages))
{
UE_LOG(LogHttpGPT, Error, TEXT("%s (%d): Can't activate task: Invalid Messages."), *FString(__func__), GetUniqueID());
return false;
}

return true;
}

bool UHttpGPTChatRequest::CanBindProgress() const
Expand All @@ -83,13 +94,13 @@ const FHttpGPTChatOptions UHttpGPTChatRequest::GetChatOptions() const
return ChatOptions;
}

void UHttpGPTChatRequest::SetRequestContent()
FString UHttpGPTChatRequest::SetRequestContent()
{
FScopeLock Lock(&Mutex);

if (!HttpRequest.IsValid())
{
return;
return FString();
}

UE_LOG(LogHttpGPT_Internal, Display, TEXT("%s (%d): Mounting content"), *FString(__func__), GetUniqueID());
Expand All @@ -100,9 +111,9 @@ void UHttpGPTChatRequest::SetRequestContent()
JsonRequest->SetNumberField("temperature", GetChatOptions().Temperature);
JsonRequest->SetNumberField("top_p", GetChatOptions().TopP);
JsonRequest->SetNumberField("n", GetChatOptions().Choices);
JsonRequest->SetBoolField("stream", GetChatOptions().bStream);
JsonRequest->SetNumberField("presence_penalty", GetChatOptions().PresencePenalty);
JsonRequest->SetNumberField("frequency_penalty", GetChatOptions().FrequencyPenalty);
JsonRequest->SetBoolField("stream", GetChatOptions().bStream);

if (!HttpGPT::Internal::HasEmptyParam(GetCommonOptions().User))
{
Expand All @@ -123,9 +134,9 @@ void UHttpGPTChatRequest::SetRequestContent()
if (!HttpGPT::Internal::HasEmptyParam(GetChatOptions().LogitBias))
{
TSharedPtr<FJsonObject> LogitBiasJson = MakeShareable(new FJsonObject());
for (auto Iterator = GetChatOptions().LogitBias.CreateConstIterator(); Iterator; ++Iterator)
for (const TPair<int32, float>& Iterator : GetChatOptions().LogitBias)
{
LogitBiasJson->SetNumberField(FString::FromInt(Iterator.Key()), Iterator.Value());
LogitBiasJson->SetNumberField(FString::FromInt(Iterator.Key), Iterator.Value);
}

JsonRequest->SetObjectField("logit_bias", LogitBiasJson);
Expand All @@ -134,6 +145,7 @@ void UHttpGPTChatRequest::SetRequestContent()
if (UHttpGPTHelper::ModelSupportsChat(GetChatOptions().Model))
{
UE_LOG(LogHttpGPT_Internal, Display, TEXT("%s (%d): Selected model supports Chat API. Mounting section history."), *FString(__func__), GetUniqueID());

TArray<TSharedPtr<FJsonValue>> MessagesJson;
for (const FHttpGPTChatMessage& Iterator : Messages)
{
Expand All @@ -153,6 +165,8 @@ void UHttpGPTChatRequest::SetRequestContent()
FJsonSerializer::Serialize(JsonRequest.ToSharedRef(), Writer);

HttpRequest->SetContentAsString(RequestContentString);

return RequestContentString;
}

void UHttpGPTChatRequest::OnProgressUpdated(const FString& Content, int32 BytesSent, int32 BytesReceived)
Expand Down
2 changes: 1 addition & 1 deletion Source/HttpGPTChatModule/Public/Tasks/HttpGPTChatRequest.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ class HTTPGPTCHATMODULE_API UHttpGPTChatRequest : public UHttpGPTBaseTask
virtual bool CanBindProgress() const override;
virtual FString GetEndpointURL() const override;

virtual void SetRequestContent() override;
virtual FString SetRequestContent() override;
virtual void OnProgressUpdated(const FString& Content, int32 BytesSent, int32 BytesReceived) override;
virtual void OnProgressCompleted(const FString& Content, const bool bWasSuccessful) override;

Expand Down
11 changes: 9 additions & 2 deletions Source/HttpGPTCommonModule/Private/Tasks/HttpGPTBaseTask.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,13 @@ void UHttpGPTBaseTask::PrePIEEnded(bool bIsSimulating)

bool UHttpGPTBaseTask::CanActivateTask() const
{
return !HttpGPT::Internal::HasEmptyParam(GetCommonOptions().APIKey);
if (HttpGPT::Internal::HasEmptyParam(GetCommonOptions().APIKey))
{
UE_LOG(LogHttpGPT, Error, TEXT("%s (%d): Can't activate task: Invalid API Key."), *FString(__func__), GetUniqueID());
return false;
}

return true;
}

bool UHttpGPTBaseTask::CanBindProgress() const
Expand Down Expand Up @@ -214,7 +220,7 @@ void UHttpGPTBaseTask::SendRequest()
FScopeLock Lock(&Mutex);

InitializeRequest();
SetRequestContent();
const FString ContentString = SetRequestContent();
BindRequestCallbacks();

if (!HttpRequest.IsValid())
Expand All @@ -237,6 +243,7 @@ void UHttpGPTBaseTask::SendRequest()
if (HttpRequest->ProcessRequest())
{
UE_LOG(LogHttpGPT, Display, TEXT("%s (%d): Request sent"), *FString(__func__), GetUniqueID());
UE_LOG(LogHttpGPT_Internal, Display, TEXT("%s (%d): Request content body:\n%s"), *FString(__func__), GetUniqueID(), *ContentString);

AsyncTask(ENamedThreads::GameThread,
[this]
Expand Down
2 changes: 1 addition & 1 deletion Source/HttpGPTCommonModule/Public/Tasks/HttpGPTBaseTask.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ class HTTPGPTCOMMONMODULE_API UHttpGPTBaseTask : public UBlueprintAsyncActionBas
void InitializeRequest();
void BindRequestCallbacks();

virtual void SetRequestContent() {};
virtual FString SetRequestContent() { return FString(); };
virtual void OnProgressUpdated(const FString& Content, int32 BytesSent, int32 BytesReceived) {};
virtual void OnProgressCompleted(const FString& Content, const bool bWasSuccessful) {};

Expand Down
5 changes: 3 additions & 2 deletions Source/HttpGPTEditorModule/Private/SHttpGPTChatView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -339,10 +339,11 @@ FString SHttpGPTChatView::GetSystemContext() const
EngineVersion,
PluginShortName,
PluginInterface->GetDescriptor().VersionName,
PluginInterface->GetDescriptor().CreatedBy
PluginInterface->GetDescriptor().CreatedBy,
PluginInterface->GetDescriptor().Description
};

const FString PluginInformation = FString::Format(TEXT("You are in the Unreal Engine {0} plugin {1} version {2}, which was developed by {3}."), Arguments_PluginInfo);
const FString PluginInformation = FString::Format(TEXT("You are in the Unreal Engine {0} plugin {1} version {2}, which was developed by {3}. The description of HttpGPT is: \"{4}\""), Arguments_PluginInfo);

const FStringFormatOrderedArguments Arguments_SupportInfo{
PluginInterface->GetDescriptor().DocsURL,
Expand Down
19 changes: 16 additions & 3 deletions Source/HttpGPTImageModule/Private/Tasks/HttpGPTImageRequest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,18 @@ const FString UHttpGPTImageRequest::GetPrompt() const

bool UHttpGPTImageRequest::CanActivateTask() const
{
return Super::CanActivateTask() && !HttpGPT::Internal::HasEmptyParam(Prompt);
if (!Super::CanActivateTask())
{
return false;
}

if (HttpGPT::Internal::HasEmptyParam(Prompt))
{
UE_LOG(LogHttpGPT, Error, TEXT("%s (%d): Can't activate task: Invalid Prompt."), *FString(__func__), GetUniqueID());
return false;
}

return true;
}

bool UHttpGPTImageRequest::CanBindProgress() const
Expand All @@ -81,13 +92,13 @@ FString UHttpGPTImageRequest::GetEndpointURL() const
return "https://api.openai.com/v1/images/generations";
}

void UHttpGPTImageRequest::SetRequestContent()
FString UHttpGPTImageRequest::SetRequestContent()
{
FScopeLock Lock(&Mutex);

if (!HttpRequest.IsValid())
{
return;
return FString();
}

UE_LOG(LogHttpGPT_Internal, Display, TEXT("%s (%d): Mounting content"), *FString(__func__), GetUniqueID());
Expand All @@ -108,6 +119,8 @@ void UHttpGPTImageRequest::SetRequestContent()
FJsonSerializer::Serialize(JsonRequest.ToSharedRef(), Writer);

HttpRequest->SetContentAsString(RequestContentString);

return RequestContentString;
}

void UHttpGPTImageRequest::OnProgressCompleted(const FString& Content, const bool bWasSuccessful)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ class HTTPGPTIMAGEMODULE_API UHttpGPTImageRequest : public UHttpGPTBaseTask
virtual bool CanBindProgress() const override;
virtual FString GetEndpointURL() const override;

virtual void SetRequestContent() override;
virtual FString SetRequestContent() override;
virtual void OnProgressCompleted(const FString& Content, const bool bWasSuccessful) override;

void DeserializeResponse(const FString& Content);
Expand Down

0 comments on commit a8257be

Please sign in to comment.