Browse Source

Matched with AvatarBase

master
Tillman Staffen 1 week ago
parent
commit
5918095b38
  1. 24
      Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Private/AIBaseManager.cpp
  2. 23
      Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Private/RealtimeAPI/AvatarCoreAIRealtime.cpp
  3. 13
      Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Public/AIBaseManager.h
  4. 6
      Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Public/RealtimeAPI/AvatarCoreAIRealtime.h
  5. BIN
      Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/BFL_ProjectHelper.uasset
  6. BIN
      Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/BP_StateManager.uasset
  7. BIN
      Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/Commands/AICommand_TestProceedToOutro.uasset
  8. BIN
      Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/CustomDialogues/BP_BaseCustomPromptDialogue.uasset
  9. BIN
      Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/CustomDialogues/BP_CustomDialogue_Demo.uasset
  10. BIN
      Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/CustomDialogues/BP_CustomDialogue_LoadFromSettings.uasset
  11. BIN
      Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/DataTable/PDA_Mode.uasset
  12. BIN
      Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/StructsAndEnums/S_ActionsToTake.uasset
  13. BIN
      Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/StructsAndEnums/S_AvatarInstructions.uasset
  14. BIN
      Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/StructsAndEnums/S_ProjectInstructions.uasset
  15. BIN
      Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/StructsAndEnums/S_PromptDialogueType.uasset
  16. BIN
      Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/StructsAndEnums/S_Prompt_Dialogue.uasset
  17. BIN
      Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/StructsAndEnums/S_Prompt_DialogueArray.uasset
  18. BIN
      Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/StructsAndEnums/S_StateProcedure.uasset
  19. BIN
      Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/Widgets/W_BaseStateWidget.uasset
  20. BIN
      Unreal/Plugins/AvatarCore_Manager/Content/Widgets/Debug/Pages/W_DebugProjectStates.uasset

24
Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Private/AIBaseManager.cpp

@ -115,6 +115,17 @@ void UAIBaseManager::DeinitAIManager()
BroadcastAILog(FString::Printf(TEXT("AI Manager deinitialized!")), false);
}
void UAIBaseManager::OnAIReady()
{
UAIBaseManager::SetNewState(EAvatarCoreAIState::Ready);
if (!ResponseQueue.IsEmpty())
{
FString QueuedPrompt;
ResponseQueue.Dequeue(QueuedPrompt);
UAIBaseManager::SendResponse(QueuedPrompt, false, true);
}
}
void UAIBaseManager::SetNewState(EAvatarCoreAIState NewState, bool ForceState)
{
@ -126,6 +137,13 @@ void UAIBaseManager::SetNewState(EAvatarCoreAIState NewState, bool ForceState)
void UAIBaseManager::SendResponse(const FString& Response, bool NotifyDelay = false, bool TriggerResponse = true)
{
if (CurrentAIState != EAvatarCoreAIState::Ready) {
ResponseQueue.Enqueue(Response);
if(CurrentAIState == EAvatarCoreAIState::Disconnected)
ActivateAI();
return;
}
AnswerCache.Empty();
ResponseID++;
LastRequest = Response;
@ -134,10 +152,11 @@ void UAIBaseManager::SendResponse(const FString& Response, bool NotifyDelay = fa
ActivateAI();
return;
}
UAIBaseManager::SetNewState(EAvatarCoreAIState::Processing);
BroadcastAILog(FString::Printf(TEXT("AI Manager sent question/response: %s"), *Response));
if (NotifyDelay)
UAIBaseManager::StartDelayedAnswerTimer();
//Override in Child
SendResponseChild(Response, NotifyDelay, TriggerResponse);
}
void UAIBaseManager::RepeatText(FString TextToRepeat, bool DoRephrase)
@ -154,6 +173,8 @@ void UAIBaseManager::RepeatText(FString TextToRepeat, bool DoRephrase)
void UAIBaseManager::ClearAI()
{
ResponseQueue.Empty();
if (CurrentAIState <= EAvatarCoreAIState::Ready)
return;
UAIBaseManager::SetNewState(EAvatarCoreAIState::Ready, true);
@ -309,6 +330,7 @@ void UAIBaseManager::ClearMCPCommand()
void UAIBaseManager::CommandFinished(const FString& Command, const FString& Payload)
{
UE_LOG(LogTemp, Warning, TEXT("Processing"));
SetNewState(EAvatarCoreAIState::Processing);
functionCallRunning = false;
if (bDebugMode)

23
Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Private/RealtimeAPI/AvatarCoreAIRealtime.cpp

@ -28,6 +28,7 @@ void UAvatarCoreAIRealtime::DeinitAIManager()
void UAvatarCoreAIRealtime::ActivateAI()
{
UAIBaseManager::SetNewState(EAvatarCoreAIState::Initializing);
UAvatarCoreAIRealtime::ConnectToWebSocket();
}
@ -37,9 +38,8 @@ void UAvatarCoreAIRealtime::DeactivateAI()
UAIBaseManager::DeactivateAI();
}
void UAvatarCoreAIRealtime::SendResponse(const FString& Response, bool NotifyDelay = false, bool TriggerResponse = true)
void UAvatarCoreAIRealtime::SendResponseChild(const FString& Response, bool NotifyDelay = false, bool TriggerResponse = true)
{
UAIBaseManager::SendResponse(Response, NotifyDelay, TriggerResponse);
UAvatarCoreAIRealtime::CreateConversationItem(Response, EOpenAIRoleType::User, TriggerResponse);
}
@ -219,7 +219,7 @@ void UAvatarCoreAIRealtime::ConnectToWebSocket()
void UAvatarCoreAIRealtime::DisconnectFromWebSocket()
{
bIsWebsocketConnected = false;
bIsSessionInitialized = false;
UAvatarCoreAIRealtime::SetNewState(EAvatarCoreAIState::Disconnected);
// Clean up all accumulated audio data
RequestAudioData.Empty();
@ -295,7 +295,6 @@ void UAvatarCoreAIRealtime::CreateConversationItem(const FString& message, EOpen
if (triggerResponse) {
UAvatarCoreAIRealtime::CreateReseponse();
UAvatarCoreAIRealtime::SetNewState(EAvatarCoreAIState::Processing);
}
}
@ -360,10 +359,12 @@ void UAvatarCoreAIRealtime::OnWebSocketConnectionError(const FString& Error)
}
void UAvatarCoreAIRealtime::OnWebSocketConnectionConnected()
{
if(!bIsWebsocketConnected)
{
BroadcastAILog("OpenAI Websocket connected");
bIsWebsocketConnected = true;
UAvatarCoreAIRealtime::UpdateSession();
}
}
void UAvatarCoreAIRealtime::OnWebSocketConnectionStringReceived(const FString& Message)
@ -423,10 +424,16 @@ void UAvatarCoreAIRealtime::OnWebSocketConnectionStringReceived(const FString& M
}
}
}
else if (TypeString == "session.updated") {
UAvatarCoreAIRealtime::SetNewState(EAvatarCoreAIState::Ready);
else if (TypeString == "session.created")
{
UAvatarCoreAIRealtime::UpdateSession();
return;
}
else if (TypeString == "session.updated")
{
UAIBaseManager::OnAIReady();
return;
}
// Match the request type
if (TypeParts[0] == "session")
RequestType = EOpenAIRequestType::session;

13
Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Public/AIBaseManager.h

@ -81,6 +81,10 @@ public:
UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI")
virtual void UpdateSession() {};
// They AI is ready to answer
UFUNCTION()
void OnAIReady();
/**
* Deinitalize AI - when going to Idle for example
*/
@ -97,7 +101,10 @@ public:
* Send Response/Question to the AI Model. If NotifyDelay is true call the DelayedAnswer Event when time defined in AIConfig has passed.
*/
UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI")
virtual void SendResponse(const FString& Response, bool NotifyDelay, bool TriggerResponse);
void SendResponse(const FString& Response, bool NotifyDelay, bool TriggerResponse);
UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI")
virtual void SendResponseChild(const FString& Response, bool NotifyDelay, bool TriggerResponse) {};
/**
* Make the AI Model repeat the Text.
@ -264,6 +271,8 @@ protected:
//Handle Delayed Answer
FTimerHandle DelayedAnswerTimer;
protected:
private:
TQueue<FString, EQueueMode::Spsc> ResponseQueue;
};

6
Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Public/RealtimeAPI/AvatarCoreAIRealtime.h

@ -156,7 +156,7 @@ public:
void ActivateAI() override;
void DeactivateAI() override;
void UpdateSession() override;
void SendResponse(const FString& Response, bool NotifyDelay, bool TriggerResponse) override;
void SendResponseChild(const FString& Response, bool NotifyDelay, bool TriggerResponse) override;
void ClearAI() override;
void ConnectToWebSocket();
@ -203,6 +203,10 @@ private:
bool ResponseAudioDone = false;
bool ResponseTextDone = false;
bool bIsSessionInitialized = false;
bool bWaitingForSessionUpdatedAck = false;
FString PendingSessionUpdateEventId;
// Map to store accumulated audio data for each request
TMap<FString, TArray<uint8>> RequestAudioData;

BIN
Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/BFL_ProjectHelper.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/BP_StateManager.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/Commands/AICommand_TestProceedToOutro.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/CustomDialogues/BP_BaseCustomPromptDialogue.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/CustomDialogues/BP_CustomDialogue_Demo.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/CustomDialogues/BP_CustomDialogue_LoadFromSettings.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/DataTable/PDA_Mode.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/StructsAndEnums/S_ActionsToTake.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/StructsAndEnums/S_AvatarInstructions.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/StructsAndEnums/S_ProjectInstructions.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/StructsAndEnums/S_PromptDialogueType.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/StructsAndEnums/S_Prompt_Dialogue.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/StructsAndEnums/S_Prompt_DialogueArray.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/StructsAndEnums/S_StateProcedure.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_Manager/Content/StateManagement/Widgets/W_BaseStateWidget.uasset (Stored with Git LFS)

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_Manager/Content/Widgets/Debug/Pages/W_DebugProjectStates.uasset (Stored with Git LFS)

Binary file not shown.
Loading…
Cancel
Save