Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Applications/ConvAssistTerminate/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ private static void SendMessage()
{
Console.WriteLine("Sending Request to close ConvAssist");
ConvAssistMessage message = new ConvAssistMessage(WordPredictorMessageTypes.ForceQuitApp, WordPredictionModes.None, "NA");
string jsonMessage = JsonSerializer.Serialize(message);
string jsonMessage = JsonSerializer.SerializeForInterop(message);
_pipeServer.Send(jsonMessage);
}
catch (Exception es)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,7 @@
<Compile Include="UI\UserControls\UserControlKeyboardConfigSelect.Designer.cs">
<DependentUpon>UserControlKeyboardConfigSelect.cs</DependentUpon>
</Compile>
<Compile Include="UI\UserControls\UserControlLanguageSelect.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UI\UserControls\UserControlLanguageSelect.cs" />
<Compile Include="UI\UserControls\UserControlLanguageSelect.Designer.cs">
<DependentUpon>UserControlLanguageSelect.cs</DependentUpon>
</Compile>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ public string SendMessageConvAssistSentencePrediction(string text, WordPredictio
public string SendMessageConvAssistWordPrediction(string text, WordPredictionModes mode)
{
ConvAssistMessage message = new(WordPredictorMessageTypes.NextWordPredictionRequest, mode, text);
string jsonMessage = JsonSerializer.Serialize(message);
string jsonMessage = JsonSerializer.SerializeForInterop(message);
//var answer = namedPipe.WriteSync(text, 150);
return namedPipe.WriteSync(jsonMessage, 10000);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,17 @@ namespace ACAT.Extensions.WordPredictors.ConvAssist.MessageTypes
[Serializable]
internal class ConvAssistMessage
{
public string Data { get; set; }
public WordPredictorMessageTypes MessageType { get; set; }
public WordPredictionModes PredictionType { get; set; }
public string Data { get; set; } = string.Empty;
public WordPredictorMessageTypes MessageType { get; set; } = WordPredictorMessageTypes.None;
public WordPredictionModes PredictionType { get; set; } = WordPredictionModes.None;

// Parameterless constructor for deserialization
// Parameterless constructor for deserialization - explicitly initialize all properties
public ConvAssistMessage()
{ }
{
Data = string.Empty;
MessageType = WordPredictorMessageTypes.None;
PredictionType = WordPredictionModes.None;
}

// this is the JSON representation of the data
/// <summary>
Expand All @@ -37,7 +41,7 @@ public ConvAssistMessage(WordPredictorMessageTypes msgType, WordPredictionModes
{
MessageType = msgType;
PredictionType = PredictionMode;
Data = message;
Data = message ?? string.Empty;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,20 @@ namespace ACAT.Extensions.WordPredictors.ConvAssist.MessageTypes
[Serializable]
internal class ConvAssistSetParam
{
public ConvAssistParameterType Parameter { get; set; }
public string Value { get; set; }
public ConvAssistParameterType Parameter { get; set; } = ConvAssistParameterType.None;
public string Value { get; set; } = string.Empty;

// Parameterless constructor for deserialization
// Parameterless constructor for deserialization - explicitly initialize all properties
public ConvAssistSetParam()
{ }
{
Parameter = ConvAssistParameterType.None;
Value = string.Empty;
}

public ConvAssistSetParam(ConvAssistParameterType param, string value)
{
Parameter = param;
Value = value;
Value = value ?? string.Empty;
}

public ConvAssistSetParam(ConvAssistParameterType param, int value)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,23 +223,25 @@ public async Task SendParams()

List<string> parameters = new()
{
JsonSerializer.Serialize(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.EnableLog, Common.AppPreferences.EnableLogs.ToString())),
JsonSerializer.Serialize(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.PathLog, FileUtils.GetLogsDir())),
JsonSerializer.Serialize(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.Suggestions, Common.AppPreferences.WordsSuggestions.ToString())),
JsonSerializer.Serialize(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.TestGeneralSentencePrediction, ConvAssistWordPredictor.settings.Test_GeneralSentencePrediction.ToString())),
JsonSerializer.Serialize(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.RetrieveACC, ConvAssistWordPredictor.settings.EnableSmallVocabularySentencePrediction.ToString())),
JsonSerializer.Serialize(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.PathStatic, staticPath)),
JsonSerializer.Serialize(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.PathPersonilized, personalizedPath)),
JsonSerializer.Serialize(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.Path, _pathToFiles))
JsonSerializer.SerializeForInterop(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.EnableLog, Common.AppPreferences.EnableLogs.ToString())),
JsonSerializer.SerializeForInterop(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.PathLog, FileUtils.GetLogsDir())),
JsonSerializer.SerializeForInterop(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.Suggestions, Common.AppPreferences.WordsSuggestions.ToString())),
JsonSerializer.SerializeForInterop(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.TestGeneralSentencePrediction, ConvAssistWordPredictor.settings.Test_GeneralSentencePrediction.ToString())),
JsonSerializer.SerializeForInterop(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.RetrieveACC, ConvAssistWordPredictor.settings.EnableSmallVocabularySentencePrediction.ToString())),
JsonSerializer.SerializeForInterop(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.PathStatic, staticPath)),
JsonSerializer.SerializeForInterop(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.PathPersonilized, personalizedPath)),
JsonSerializer.SerializeForInterop(new ConvAssistSetParam(ConvAssistSetParam.ConvAssistParameterType.Path, _pathToFiles))
};


foreach (var param in parameters)
{
try
{
var message = JsonSerializer.Serialize(new ConvAssistMessage(WordPredictorMessageTypes.SetParam, WordPredictionModes.None, param));

var message = JsonSerializer.SerializeForInterop(new ConvAssistMessage(WordPredictorMessageTypes.SetParam, WordPredictionModes.None, param));

_logger.LogDebug("Sending ConvAssist message: {Message}", message);

//TODO: Check result and handle appropriately.
_ = WriteAsync(message, waitDelay).ConfigureAwait(false).GetAwaiter().GetResult();
}
Expand All @@ -251,7 +253,7 @@ public async Task SendParams()


// ConvAssist needs some time to get ready. Send a message to check if it is ready
string msg = JsonSerializer.Serialize(new ConvAssistMessage(WordPredictorMessageTypes.NextSentencePredictionRequest, WordPredictionModes.None, string.Empty));
string msg = JsonSerializer.SerializeForInterop(new ConvAssistMessage(WordPredictorMessageTypes.NextSentencePredictionRequest, WordPredictionModes.None, string.Empty));

bool clientReady = false;
var tcs = new TaskCompletionSource<bool>();
Expand All @@ -260,14 +262,35 @@ await Task.Run(async () =>
{
while (!clientReady)
{
var result = WriteAsync(msg, waitDelay).ConfigureAwait(false).GetAwaiter().GetResult();
var resultObject = JsonSerializer.Deserialize<WordAndCharacterPredictionResponse>(result);
if (resultObject != null && resultObject.MessageType != WordAndCharacterPredictionResponse.ConvAssistMessageTypes.NotReady)
try
{
clientReady = true;
tcs.SetResult(true);
break;
var result = WriteAsync(msg, waitDelay).ConfigureAwait(false).GetAwaiter().GetResult();

// Check if we got a valid response
if (string.IsNullOrWhiteSpace(result))
{
_logger.LogDebug("No response from ConvAssist, retrying...");
await Task.Delay(waitDelay);
continue;
}

var resultObject = JsonSerializer.Deserialize<WordAndCharacterPredictionResponse>(result);
if (resultObject != null && resultObject.MessageType != WordAndCharacterPredictionResponse.ConvAssistMessageTypes.NotReady)
{
clientReady = true;
tcs.SetResult(true);
break;
}
}
catch (System.Text.Json.JsonException jsonEx)
{
_logger.LogWarning(jsonEx, "Failed to deserialize ConvAssist response, retrying...");
}
catch (Exception ex)
{
_logger.LogError(ex, "Error checking ConvAssist ready state");
}

await Task.Delay(waitDelay);
}
});
Expand Down Expand Up @@ -456,7 +479,8 @@ public async Task<string> WriteAsync(string value, int msDelay)
var writeTcs = new TaskCompletionSource<object?>();

byte[] payload = Encoding.UTF8.GetBytes(value);


_logger.LogDebug("Sending ConvAssist message asynchronously: {Message}", value);
_logger.LogDebug("Payload hex: {Payload}", BitConverter.ToString(payload));

byte[] lengthPrefix = BitConverter.GetBytes(payload.Length);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,23 @@ private List<string> ProcessSentencesPredictions(string predictions, string curr
StringBuilder resultFullPredictionWords = new();
WordAndCharacterPredictionResponse answer = new();
var retVal = new List<string>();
answer = JsonSerializer.Deserialize<WordAndCharacterPredictionResponse>(predictions);

// Check for empty response before deserializing
if (string.IsNullOrWhiteSpace(predictions))
{
return retVal; // Return empty list
}

try
{
answer = JsonSerializer.Deserialize<WordAndCharacterPredictionResponse>(predictions);
}
catch (System.Text.Json.JsonException ex)
{
// Log and return empty list if deserialization fails
return retVal;
}

List<string> predictSenetnces = new();
List<string> predictLettersSentence = new();
int i = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,23 @@ private List<string> ProcessWordPredictions(ConvAssistWordPredictor wordPredicto
StringBuilder resultFullPredictionWords = new();
WordAndCharacterPredictionResponse answer = new();
var retVal = new List<string>();
answer = JsonSerializer.Deserialize<WordAndCharacterPredictionResponse>(predictions);

// Check for empty response before deserializing
if (string.IsNullOrWhiteSpace(predictions))
{
return retVal; // Return empty list
}

try
{
answer = JsonSerializer.Deserialize<WordAndCharacterPredictionResponse>(predictions);
}
catch (System.Text.Json.JsonException ex)
{
// Log and return empty list if deserialization fails
return retVal;
}

List<string> predictWords = new();
List<string> predictLetters = new();
int i = 0;
Expand Down
Loading