Files
2025-04-07 18:31:41 -07:00

86 lines
2.2 KiB
C++

// OpenAI, Copyright LifeEXE. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "Provider/RequestTypes.h"
#include "Dom/JsonObject.h"
#include "BaseService.generated.h"
DECLARE_MULTICAST_DELEGATE_OneParam(FOnServiceDataRecieved, const FMessage&);
DECLARE_MULTICAST_DELEGATE_OneParam(FOnServiceDataError, const FString&);
UCLASS()
class OPENAI_API UBaseService : public UObject
{
GENERATED_BODY()
public:
/*
You can check some necessary conditions to enable the service, if there is no such condition just always return true.
*/
virtual bool Init(const OpenAI::ServiceSecrets& Secrets);
/*
In most cases you won't need to override this function.
*/
virtual FFunctionRequest Function() const;
/*
Description of your function for the ChatGPT.
*/
virtual FString Description() const;
/*
Name of your function that ChatGPT will call.
*/
virtual FString FunctionName() const;
/*
Actual call of your function.
*/
virtual void Call(const TSharedPtr<FJsonObject>& Args, const FString& ToolID);
/*
Don't create long names. They will be truncated to [NameMaxLength = 8] in the UI. Use Description for more words.
*/
virtual FString Name() const;
/*
Comes to UI tooltip, may be empty.
*/
virtual FString TooltipDescription() const;
FOnServiceDataRecieved& OnServiceDataRecieved();
FOnServiceDataError& OnServiceDataError();
protected:
/*
Call this delegate with a data that returns your function.
*/
FOnServiceDataRecieved ServiceDataRecieved;
/*
Call this delegate when an error occurs during your function calculations.
*/
FOnServiceDataError ServiceDataError;
FString ToolID{};
/*
Return a JSON with parameters that your function has.
Please use MakeFunctionsString to wrap your JSON object at the end:
TSharedPtr<FJsonObject> ParamsObj = MakeShareable(new FJsonObject());
...
return UOpenAIFuncLib::MakeFunctionsString(ParamsObj);
*/
virtual FString MakeFunction() const;
/*
Helper function that can be used in the child classes.
*/
virtual FMessage MakeMessage(const FString& Content) const;
};