/**
 * Copyright 2022-2025 Theai, Inc. dba Inworld AI
 */

#pragma once

#include "CoreMinimal.h"
#include "InworldRuntimeLibrary/inworld.h"
#include "InworldRuntimeTypes.h"
#include "Misc/Paths.h"
#include "Misc/TVariant.h"
#include "Primitives/LLM/InworldLLMTypes.h"
#include "Tasks/Task.h"

namespace inworld
{
class LLMInterface;
class InputStream_string;
}	 // namespace inworld

namespace inworld
{
namespace Tasks
{
namespace LLM
{

/**
 * @brief Creates an asynchronous task for initializing an LLM (Large Language Model) interface.
 *
 * This function creates a task that initializes the LLM system with the provided
 * configuration. The task returns either a valid LLM interface or an error message string.
 *
 * @param LLMConfig Configuration parameters for LLM creation (local or remote)
 * @return Task that resolves to either a shared pointer to LLMInterface or an error string
 */
UE::Tasks::TTask<TVariant<TSharedPtr<inworld::LLMInterface>, FString>> CreateLLMTask(const FInworldLLMCreationConfig& LLMConfig);

}	 // namespace LLM
}	 // namespace Tasks
}	 // namespace inworld
