// OpenAI, Copyright LifeEXE. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "EditorUtilityWidget.h" #include "UI/ChatMessageWidget.h" #include "Provider/ResponseTypes.h" #include "Provider/RequestTypes.h" #include "Provider/CommonTypes.h" #include "FuncLib/ModelTypes.h" #include "ChatGPT/BaseService.h" #include "ChatGPTWidget.generated.h" class UVerticalBox; class UScrollBox; class UEditableText; class UButton; class UChatMessageWidget; class UComboBoxString; class UChatGPT; class UServiceWidget; class UGridPanel; class USaveSettings; class UTextBlock; class UAttachedFilesContainerWidget; UCLASS(BlueprintType) class OPENAIEDITOR_API UChatGPTWidget : public UEditorUtilityWidget { GENERATED_BODY() protected: UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "OpenAI") int32 MaxTokens{2000}; protected: UPROPERTY(meta = (BindWidget)) TObjectPtr StartVerticalBox; UPROPERTY(meta = (BindWidget)) TObjectPtr ChatGPTModelComboBox; UPROPERTY(meta = (BindWidget)) TObjectPtr MessagesVerticalBox; UPROPERTY(meta = (BindWidget)) TObjectPtr ChatScrollBox; UPROPERTY(meta = (BindWidget), BlueprintReadWrite, Category = "OpenAI") TObjectPtr UserInputTextBox; UPROPERTY(meta = (BindWidget)) TObjectPtr SendMessageButton; UPROPERTY(meta = (BindWidget)) TObjectPtr DumpChatButton; UPROPERTY(meta = (BindWidget)) TObjectPtr ClearChatButton; UPROPERTY(meta = (BindWidget)) TObjectPtr AttachImageButton; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "UI") TSubclassOf ChatMessageWidgetClass; UPROPERTY(meta = (BindWidget)) TObjectPtr ServiceContainer; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "UI") TSubclassOf ServiceWidgetClass; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "OpenAI") TArray> Services; UPROPERTY(meta = (BindWidget)) TObjectPtr ServicesWarningTextBlock; UPROPERTY(meta = (BindWidget)) TObjectPtr AttachedFilesContainer; virtual void NativeConstruct() override; private: UPROPERTY() TObjectPtr ChatGPT; UPROPERTY() TArray> ChatWidgets; UPROPERTY() TObjectPtr SaveSettings; UPROPERTY() TArray> ServiceWidgets; private: UFUNCTION() void OnSendMessage(); UFUNCTION() void OnDumpChat(); UFUNCTION() void OnClearChat(); UFUNCTION() void OnTextCommitted(const FText& Text, ETextCommit::Type CommitMethod); UFUNCTION() void OnTextChanged(const FText& Text); UFUNCTION() void OnModelSelectionChanged(FString SelectedItem, ESelectInfo::Type SelectionType); UFUNCTION() void OnImageSelected(); void InitChatGPT(); void InitModelsComboBox(); void OnRequestCompleted(); void OnRequestUpdated(const FMessage& Message, bool WasError); void CreateMessageWidget(const FMessage& Message); void EnableControls(bool Enabled); FString GenerateFilePath() const; void UpdateVisionElements(); void UpdateSendMessageButton(); void OnFileRemoved(); private: OpenAI::ServiceSecrets ServiceSecrets; void CreateServiceWidgets(); void OnServiceEnabled(bool IsEnabled, const TSubclassOf& ServiceClass, const TObjectPtr& ServiceWidget); };