Browse Source

Matched with AvatarBase

master
Tillman Staffen 20 hours ago
parent
commit
4d3d381f48
  1. 7
      Unreal/Content/Schema/Spie_Config.schema.json
  2. 2
      Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Private/MCP/FastMCP/FastMCPManager.cpp
  3. 31
      Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Public/AIBaseManager.h
  4. 3
      Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Public/MCP/FastMCP/FastMCPConfig.h
  5. 5
      Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Public/RealtimeAPI/AvatarCoreAIRealtime.h
  6. BIN
      Unreal/Plugins/AvatarCore_AI/Source/ThirdParty/MCPServer/FastMCP/lancedb/documents.lance/_transactions/0-7032d51b-cf75-439d-b546-8a49bd9f7c9c.txn
  7. BIN
      Unreal/Plugins/AvatarCore_AI/Source/ThirdParty/MCPServer/FastMCP/lancedb/documents.lance/_transactions/1-e4aac62e-df93-4f1b-a546-43a8516937ae.txn
  8. BIN
      Unreal/Plugins/AvatarCore_AI/Source/ThirdParty/MCPServer/FastMCP/lancedb/documents.lance/_versions/1.manifest
  9. BIN
      Unreal/Plugins/AvatarCore_AI/Source/ThirdParty/MCPServer/FastMCP/lancedb/documents.lance/_versions/2.manifest
  10. BIN
      Unreal/Plugins/AvatarCore_AI/Source/ThirdParty/MCPServer/FastMCP/lancedb/documents.lance/data/3e53aab5-bc5c-4db7-9f2c-31cdd3423b52.lance
  11. BIN
      Unreal/Plugins/AvatarCore_Manager/Content/UnrealCommands/AICommandTestBigHead.uasset
  12. BIN
      Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimationConfigs/AnimationConfig_Base.uasset
  13. BIN
      Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/Interface/BI_AvatarAnimBP.uasset
  14. BIN
      Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/Interface/BI_RetargetedAvatarAnimBP.uasset
  15. BIN
      Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/MetaHuman/AvatarBase.uasset
  16. BIN
      Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/MetaHuman/AvatarCore_AnimInst_Body.uasset
  17. BIN
      Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/MetaHuman/AvatarCore_AnimInst_BodyRetarget.uasset
  18. BIN
      Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/MetaHuman/AvatarCore_AnimInst_Face.uasset
  19. BIN
      Unreal/Plugins/AvatarCore_MetaHuman/Content/Materials/MI_GrayTexture_Head.uasset
  20. BIN
      Unreal/Plugins/AvatarCore_MetaHuman/Content/Materials/M_GrayTexture_Head.uasset
  21. BIN
      Unreal/Plugins/AvatarCore_MetaHuman/Content/Materials/Textures/T_Gray_Head_D.uasset
  22. BIN
      Unreal/Plugins/AvatarCore_MetaHuman/Content/Meshes/m_med_nrw_withHead.uasset
  23. 2
      Unreal/Plugins/AvatarCore_STT/Source/AvatarCore_STT/Private/STTManagerBase.cpp
  24. 2
      Unreal/Plugins/AvatarCore_STT/Source/AvatarCore_STT/Public/STTStructs.h
  25. 2
      Unreal/Plugins/AvatarCore_TTS/Source/AvatarCore_TTS/Private/TTSManagerBase.cpp

7
Unreal/Content/Schema/Spie_Config.schema.json

@ -335,7 +335,8 @@
], ],
"STTSpecialWords": [ "STTSpecialWords": [
"SPIE" "SPIE"
] ],
"PTTPostRollTime": 0.40000000596046448
}, },
"category": "STT Settings", "category": "STT Settings",
"fields": "fields":
@ -450,6 +451,10 @@
{ {
"type": "array", "type": "array",
"itemsType": "string" "itemsType": "string"
},
"PTTPostRollTime":
{
"type": "float"
} }
} }
} }

2
Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Private/MCP/FastMCP/FastMCPManager.cpp

@ -496,7 +496,7 @@ void UFastMCPManager::OnCommandExecuted(FHttpRequestPtr Request, FHttpResponsePt
const TSharedPtr<FJsonObject>* ResultObject; const TSharedPtr<FJsonObject>* ResultObject;
if (JsonObject->TryGetObjectField(TEXT("result"), ResultObject)) if (JsonObject->TryGetObjectField(TEXT("result"), ResultObject))
{ {
if ((*ResultObject)->HasField(TEXT("isError")) && (*ResultObject)->GetBoolField("isError")) if ((*ResultObject)->HasField(TEXT("isError")) && (*ResultObject)->GetBoolField(TEXT("isError")))
{ {
LogError(FString::Printf(TEXT("Command execution failed: %s - %s"), *CurrentExecutingCommand, *ResponseContent), EMCPManagerError::ToolError); LogError(FString::Printf(TEXT("Command execution failed: %s - %s"), *CurrentExecutingCommand, *ResponseContent), EMCPManagerError::ToolError);
OnMCPCommandFailed.Broadcast(CurrentExecutingCommand, ResponseContent); OnMCPCommandFailed.Broadcast(CurrentExecutingCommand, ResponseContent);

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

@ -26,19 +26,23 @@ class AVATARCORE_AI_API UAIBaseManager : public UObject
public: public:
// BlueprintAssignable Events // AI subtitle received (chunk-delta and complete answer)
UPROPERTY(BlueprintAssignable, Category = "AvatarCoreAI|Events") UPROPERTY(BlueprintAssignable, Category = "AvatarCoreAI|Events")
FOnAISubtitle OnAISubtitle; FOnAISubtitle OnAISubtitle;
//AI module has changed state
UPROPERTY(BlueprintAssignable, Category = "AvatarCoreAI|Events") UPROPERTY(BlueprintAssignable, Category = "AvatarCoreAI|Events")
FOnAIStateChanged OnAIStateChanged; FOnAIStateChanged OnAIStateChanged;
//AI module logging
UPROPERTY(BlueprintAssignable, Category = "AvatarCoreAI|Events") UPROPERTY(BlueprintAssignable, Category = "AvatarCoreAI|Events")
FOnAILog OnAILog; FOnAILog OnAILog;
//AI module error
UPROPERTY(BlueprintAssignable, Category = "AvatarCoreAI|Events") UPROPERTY(BlueprintAssignable, Category = "AvatarCoreAI|Events")
FOnAIError OnAIError; FOnAIError OnAIError;
//It took a very long time to start answering - we can use this to playback a filler speech
UPROPERTY(BlueprintAssignable, Category = "AvatarCoreAI|Events") UPROPERTY(BlueprintAssignable, Category = "AvatarCoreAI|Events")
FOnAIDelayedAnswer OnAIDelayedAnswer; FOnAIDelayedAnswer OnAIDelayedAnswer;
@ -70,6 +74,12 @@ public:
UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI") UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI")
virtual void ActivateAI() {}; virtual void ActivateAI() {};
/**
* Update Session in case something has changed with the prompt or the functions to call
*/
UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI")
virtual void UpdateSession() {};
/** /**
* Deinitalize AI - when going to Idle for example * Deinitalize AI - when going to Idle for example
*/ */
@ -118,15 +128,27 @@ public:
UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI|Events") UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI|Events")
virtual void OnAIResponse(const FString& Chunk, bool IsFinal); virtual void OnAIResponse(const FString& Chunk, bool IsFinal);
/**
* Add a new system instruction by name.
*/
UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI") UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI")
void AddSystemInstruction(const FName Name, const FString NewSystemInstruction); void AddSystemInstruction(const FName Name, const FString NewSystemInstruction);
/**
* Remove a system instruction by name.
*/
UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI") UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI")
void RemoveSystemInstruction(const FName Name); void RemoveSystemInstruction(const FName Name);
/**
* Clear all System Instruction.
*/
UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI") UFUNCTION(BlueprintCallable, Category = "AvatarCoreAI")
void ClearAllSystemInstructios(); void ClearAllSystemInstructios();
/**
* Timeout Handling
*/
void ResetRequestTimeout(); void ResetRequestTimeout();
void ClearRequestTimeout(); void ClearRequestTimeout();
UFUNCTION() UFUNCTION()
@ -166,22 +188,23 @@ protected:
UFUNCTION() UFUNCTION()
void CommandFailed(const FString& Command, const FString& Payload); void CommandFailed(const FString& Command, const FString& Payload);
// MCP Event Handlers //MCP Log Event
UFUNCTION() UFUNCTION()
void OnMCPLogReceived(const FString& LogMessage); void OnMCPLogReceived(const FString& LogMessage);
//MCP Error Event
UFUNCTION() UFUNCTION()
void OnMCPErrorReceived(const FString& ErrorMessage, EMCPManagerError ErrorType); void OnMCPErrorReceived(const FString& ErrorMessage, EMCPManagerError ErrorType);
//MCP state changed
UFUNCTION() UFUNCTION()
void OnMCPStateChanged(EMCPManagerState NewState); void OnMCPStateChanged(EMCPManagerState NewState);
//Tracking if it takes too long until answer chunks are coming in
UFUNCTION() UFUNCTION()
void StartDelayedAnswerTimer(); void StartDelayedAnswerTimer();
UFUNCTION() UFUNCTION()
void ClearDelayedAnswerTimer(); void ClearDelayedAnswerTimer();
UFUNCTION() UFUNCTION()
void OnDelayedAnswer(); void OnDelayedAnswer();

3
Unreal/Plugins/AvatarCore_AI/Source/AvatarCore_AI/Public/MCP/FastMCP/FastMCPConfig.h

@ -16,12 +16,15 @@ class AVATARCORE_AI_API UFastMCPConfig : public UMCPBaseConfig
public: public:
//Direction to the Script that start FastMCP
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|MCP", meta = (ExposeOnSpawn = "true")) UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|MCP", meta = (ExposeOnSpawn = "true"))
FString MCPExecutable = FPaths::ProjectPluginsDir() +"AvatarCore_AI/Source/ThirdParty/MCPServer/FastMCP/FastMCPServer.bat"; FString MCPExecutable = FPaths::ProjectPluginsDir() +"AvatarCore_AI/Source/ThirdParty/MCPServer/FastMCP/FastMCPServer.bat";
//Custom python environment - "python" will use the system default
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreTTS|CoquiTTS", meta = (ExposeOnSpawn = "true")) UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreTTS|CoquiTTS", meta = (ExposeOnSpawn = "true"))
FString PythonPath = "python"; FString PythonPath = "python";
//Additional arguments to pass
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|MCP", meta = (ExposeOnSpawn = "true")) UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AvatarCoreAI|MCP", meta = (ExposeOnSpawn = "true"))
FString Arguments = ""; FString Arguments = "";

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

@ -155,13 +155,10 @@ public:
void DeinitAIManager() override; void DeinitAIManager() override;
void ActivateAI() override; void ActivateAI() override;
void DeactivateAI() override; void DeactivateAI() override;
void UpdateSession() override;
void SendResponse(const FString& Response, bool NotifyDelay = false, FString OverrideInstruction = "") override; void SendResponse(const FString& Response, bool NotifyDelay = false, FString OverrideInstruction = "") override;
void ClearAI() override; void ClearAI() override;
//RealtimeAPI only functions
UFUNCTION(BlueprintCallable, Category = "AvatarCore AI|RealtimeAPI")
void UpdateSession();
void ConnectToWebSocket(); void ConnectToWebSocket();
void DisconnectFromWebSocket(); void DisconnectFromWebSocket();

BIN
Unreal/Plugins/AvatarCore_AI/Source/ThirdParty/MCPServer/FastMCP/lancedb/documents.lance/_transactions/0-7032d51b-cf75-439d-b546-8a49bd9f7c9c.txn

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_AI/Source/ThirdParty/MCPServer/FastMCP/lancedb/documents.lance/_transactions/1-e4aac62e-df93-4f1b-a546-43a8516937ae.txn

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_AI/Source/ThirdParty/MCPServer/FastMCP/lancedb/documents.lance/_versions/1.manifest

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_AI/Source/ThirdParty/MCPServer/FastMCP/lancedb/documents.lance/_versions/2.manifest

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_AI/Source/ThirdParty/MCPServer/FastMCP/lancedb/documents.lance/data/3e53aab5-bc5c-4db7-9f2c-31cdd3423b52.lance

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_Manager/Content/UnrealCommands/AICommandTestBigHead.uasset

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_MetaHuman/Content/Animation/AnimationConfigs/AnimationConfig_Base.uasset

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/Interface/BI_AvatarAnimBP.uasset

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/Interface/BI_RetargetedAvatarAnimBP.uasset

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/MetaHuman/AvatarBase.uasset

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/MetaHuman/AvatarCore_AnimInst_Body.uasset

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/MetaHuman/AvatarCore_AnimInst_BodyRetarget.uasset

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_MetaHuman/Content/BP/MetaHuman/AvatarCore_AnimInst_Face.uasset

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_MetaHuman/Content/Materials/MI_GrayTexture_Head.uasset

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_MetaHuman/Content/Materials/M_GrayTexture_Head.uasset

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_MetaHuman/Content/Materials/Textures/T_Gray_Head_D.uasset

Binary file not shown.

BIN
Unreal/Plugins/AvatarCore_MetaHuman/Content/Meshes/m_med_nrw_withHead.uasset

Binary file not shown.

2
Unreal/Plugins/AvatarCore_STT/Source/AvatarCore_STT/Private/STTManagerBase.cpp

@ -257,7 +257,7 @@ void USTTManagerBase::PTTStateChanged(bool BtnPressed)
PTTPostRollTimer, // handle to cancel timer at a later time PTTPostRollTimer, // handle to cancel timer at a later time
this, // the owning object this, // the owning object
&USTTManagerBase::PTTRelease, // function to call on elapsed &USTTManagerBase::PTTRelease, // function to call on elapsed
PTTPostRollTime, // float delay until elapsed ProcessorConfig->BaseSettings.PTTPostRollTime, // float delay until elapsed
false); // looping? false); // looping?
} }
else else

2
Unreal/Plugins/AvatarCore_STT/Source/AvatarCore_STT/Public/STTStructs.h

@ -125,5 +125,7 @@ struct FSTTBaseSettings
TArray<FSTTWordReplacement> STTReplacements; TArray<FSTTWordReplacement> STTReplacements;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "Special words that the transcription service needs to know (e.g. b.ReX or Bruce-B).", Category = "STT|Base")) UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "Special words that the transcription service needs to know (e.g. b.ReX or Bruce-B).", Category = "STT|Base"))
TArray<FString> STTSpecialWords; TArray<FString> STTSpecialWords;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "How long to keep transcribing when user released button. Users like to finish early ;)", Category = "STT|Base"))
float PTTPostRollTime = 0.4;
}; };

2
Unreal/Plugins/AvatarCore_TTS/Source/AvatarCore_TTS/Private/TTSManagerBase.cpp

@ -117,7 +117,7 @@ void UTTSManagerBase::PlaybackSoundWave(USoundWave* InSoundWave)
int32 NumSamplesToRemove = SampleRate * NumChannels * 0.1f; int32 NumSamplesToRemove = SampleRate * NumChannels * 0.1f;
if (PCMData.Num() >= NumSamplesToRemove) if (PCMData.Num() >= NumSamplesToRemove)
{ {
PCMData.RemoveAt(0, NumSamplesToRemove, /* bAllowShrinking = */ false); PCMData.RemoveAt(0, NumSamplesToRemove, EAllowShrinking::No);
} }
AddAudioChunk(PCMData, true); AddAudioChunk(PCMData, true);
} }

Loading…
Cancel
Save