diff --git a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Api/Program.cs b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Api/Program.cs index 8be0c51..a1f2b48 100644 --- a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Api/Program.cs +++ b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Api/Program.cs @@ -35,7 +35,7 @@ app.Use(async (context, next) => return; } - if ((kind is "neo-hub-listen" or "neo-hub-proactive") && string.IsNullOrWhiteSpace(token)) + if (kind is "neo-hub-listen" or "neo-hub-proactive" && string.IsNullOrWhiteSpace(token)) { context.Response.StatusCode = StatusCodes.Status401Unauthorized; return; diff --git a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/DefaultSttStrategySelector.cs b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/DefaultSttStrategySelector.cs index ca5f8d0..68253eb 100644 --- a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/DefaultSttStrategySelector.cs +++ b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/DefaultSttStrategySelector.cs @@ -9,11 +9,8 @@ public sealed class DefaultSttStrategySelector(IEnumerable strateg public Task SelectAsync(TurnContext turn, CancellationToken cancellationToken = default) { var strategy = _strategies.FirstOrDefault(candidate => candidate.CanHandle(turn)); - if (strategy is null) - { - throw new InvalidOperationException("No STT strategy can handle the current turn."); - } - - return Task.FromResult(strategy); + return strategy is null + ? throw new InvalidOperationException("No STT strategy can handle the current turn.") + : Task.FromResult(strategy); } } diff --git a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/IJiboRandomizer.cs b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/IJiboRandomizer.cs index 27af9d6..1ae794b 100644 --- a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/IJiboRandomizer.cs +++ b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/IJiboRandomizer.cs @@ -9,11 +9,8 @@ public sealed class DefaultJiboRandomizer : IJiboRandomizer { public T Choose(IReadOnlyList items) { - if (items.Count == 0) - { - throw new InvalidOperationException("Cannot choose from an empty list."); - } - - return items[Random.Shared.Next(items.Count)]; + return items.Count == 0 + ? throw new InvalidOperationException("Cannot choose from an empty list.") + : items[Random.Shared.Next(items.Count)]; } } diff --git a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboCloudProtocolService.cs b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboCloudProtocolService.cs index d74cd2a..e50e501 100644 --- a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboCloudProtocolService.cs +++ b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboCloudProtocolService.cs @@ -317,7 +317,7 @@ public sealed class JiboCloudProtocolService(ICloudStateStore stateStore) }).ToArray()); } - private ProtocolDispatchResult HandleLog(string operation, ProtocolEnvelope envelope) + private static ProtocolDispatchResult HandleLog(string operation, ProtocolEnvelope envelope) { return operation switch { @@ -393,22 +393,16 @@ public sealed class JiboCloudProtocolService(ICloudStateStore stateStore) private ProtocolDispatchResult HandlePerson(string operation) { - if (operation.Equals("ListHolidays", StringComparison.OrdinalIgnoreCase)) - { - return ProtocolDispatchResult.Ok(stateStore.GetHolidays()); - } - - return ProtocolDispatchResult.Ok(Array.Empty()); + return ProtocolDispatchResult.Ok(operation.Equals("ListHolidays", StringComparison.OrdinalIgnoreCase) + ? stateStore.GetHolidays() + : []); } private ProtocolDispatchResult HandleBackup(string operation) { - if (operation.Equals("List", StringComparison.OrdinalIgnoreCase)) - { - return ProtocolDispatchResult.Ok(stateStore.GetBackups()); - } - - return ProtocolDispatchResult.Ok(Array.Empty()); + return operation.Equals("List", StringComparison.OrdinalIgnoreCase) + ? ProtocolDispatchResult.Ok(stateStore.GetBackups()) + : ProtocolDispatchResult.Ok(Array.Empty()); } private ProtocolDispatchResult HandleKey(string operation, ProtocolEnvelope envelope) diff --git a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboInteractionService.cs b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboInteractionService.cs index f2e04bf..2bab65d 100644 --- a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboInteractionService.cs +++ b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboInteractionService.cs @@ -80,12 +80,10 @@ public sealed class JiboInteractionService( return "Good afternoon. I am happy to be here."; } - if (lowered.Contains("good night", StringComparison.Ordinal)) - { - return "Good night. Sleep tight."; - } - - return randomizer.Choose(catalog.GenericFallbackReplies).Replace("{transcript}", transcript, StringComparison.Ordinal); + return lowered.Contains("good night", StringComparison.Ordinal) + ? "Good night. Sleep tight." + : randomizer.Choose(catalog.GenericFallbackReplies) + .Replace("{transcript}", transcript, StringComparison.Ordinal); } private static string ResolveSemanticIntent(string loweredTranscript, string? clientIntent) diff --git a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboWebSocketService.cs b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboWebSocketService.cs index d20d0fb..d42679d 100644 --- a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboWebSocketService.cs +++ b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboWebSocketService.cs @@ -1,7 +1,6 @@ using System.Text.Json; using Jibo.Cloud.Application.Abstractions; using Jibo.Cloud.Domain.Models; -using Jibo.Runtime.Abstractions; namespace Jibo.Cloud.Application.Services; diff --git a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/ProtocolToTurnContextMapper.cs b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/ProtocolToTurnContextMapper.cs index e1abf15..26f4bcc 100644 --- a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/ProtocolToTurnContextMapper.cs +++ b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/ProtocolToTurnContextMapper.cs @@ -6,7 +6,7 @@ namespace Jibo.Cloud.Application.Services; public sealed class ProtocolToTurnContextMapper { - public TurnContext MapListenMessage(WebSocketMessageEnvelope envelope, CloudSession session, string messageType) + public static TurnContext MapListenMessage(WebSocketMessageEnvelope envelope, CloudSession session, string messageType) { var turnState = session.TurnState; var protocolOperation = messageType.ToLowerInvariant(); diff --git a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/ResponsePlanToSocketMessagesMapper.cs b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/ResponsePlanToSocketMessagesMapper.cs index 70cb9a9..20d2097 100644 --- a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/ResponsePlanToSocketMessagesMapper.cs +++ b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/ResponsePlanToSocketMessagesMapper.cs @@ -6,7 +6,7 @@ namespace Jibo.Cloud.Application.Services; public sealed class ResponsePlanToSocketMessagesMapper { - public IReadOnlyList Map(ResponsePlan plan, TurnContext turn, CloudSession session, bool emitSkillActions) + public static IReadOnlyList Map(ResponsePlan plan, TurnContext turn, CloudSession session, bool emitSkillActions) { var speak = plan.Actions.OfType().FirstOrDefault(); var skill = plan.Actions.OfType().FirstOrDefault(); @@ -18,50 +18,50 @@ public sealed class ResponsePlanToSocketMessagesMapper var clientIntent = ReadAttribute(turn, "clientIntent"); var rules = ReadRules(turn, messageType); var outboundIntent = string.Equals(messageType, "CLIENT_NLU", StringComparison.OrdinalIgnoreCase) && !string.IsNullOrWhiteSpace(clientIntent) - ? clientIntent! + ? clientIntent : plan.IntentName ?? "unknown"; var outboundAsrText = string.Equals(messageType, "CLIENT_NLU", StringComparison.OrdinalIgnoreCase) && !string.IsNullOrWhiteSpace(clientIntent) - ? clientIntent! + ? clientIntent : transcript; var entities = ReadEntities(turn, messageType); - var messages = new List(); - - messages.Add(new SocketReplyPlan(JsonSerializer.Serialize(new + var messages = new List { - type = "LISTEN", - transID = transId, - data = new + new(JsonSerializer.Serialize(new { - asr = new + type = "LISTEN", + transID = transId, + data = new { - confidence = 0.95, - final = true, - text = outboundAsrText - }, - nlu = new - { - confidence = 0.95, - intent = outboundIntent, - rules, - entities - }, - match = new - { - intent = outboundIntent, - rule = rules.FirstOrDefault() ?? string.Empty, - score = 0.95 + asr = new + { + confidence = 0.95, + final = true, + text = outboundAsrText + }, + nlu = new + { + confidence = 0.95, + intent = outboundIntent, + rules, + entities + }, + match = new + { + intent = outboundIntent, + rule = rules.FirstOrDefault() ?? string.Empty, + score = 0.95 + } } - } - }))); - - messages.Add(new SocketReplyPlan(JsonSerializer.Serialize(new - { - type = "EOS", - ts = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), - msgID = CreateHubMessageId(), - transID = transId, - data = new { } - }))); + })), + new(JsonSerializer.Serialize(new + { + type = "EOS", + ts = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), + msgID = CreateHubMessageId(), + transID = transId, + data = new { } + })) + }; if (emitSkillActions && speak is not null) { @@ -73,7 +73,7 @@ public sealed class ResponsePlanToSocketMessagesMapper return messages; } - public IReadOnlyList MapFallback(CloudSession session, string transId, IReadOnlyList rules) + public static IReadOnlyList MapFallback(CloudSession session, string transId, IReadOnlyList rules) { return [ @@ -149,7 +149,7 @@ public sealed class ResponsePlanToSocketMessagesMapper return value switch { - JsonElement jsonElement when jsonElement.ValueKind == JsonValueKind.Object => jsonElement, + JsonElement { ValueKind: JsonValueKind.Object } jsonElement => jsonElement, IDictionary dictionary => dictionary, _ => new Dictionary() }; diff --git a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/WebSocketTurnFinalizationService.cs b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/WebSocketTurnFinalizationService.cs index 166d651..21a16cd 100644 --- a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/WebSocketTurnFinalizationService.cs +++ b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/WebSocketTurnFinalizationService.cs @@ -260,7 +260,7 @@ public sealed class WebSocketTurnFinalizationService( bool allowFallbackOnMissingTranscript, CancellationToken cancellationToken) { - var turn = turnContextMapper.MapListenMessage(envelope, session, messageType); + var turn = ProtocolToTurnContextMapper.MapListenMessage(envelope, session, messageType); var finalizedTurn = await ResolveTranscriptAsync(turn, session, cancellationToken); var turnState = session.TurnState; if (string.IsNullOrWhiteSpace(finalizedTurn.NormalizedTranscript) && @@ -278,7 +278,7 @@ public sealed class WebSocketTurnFinalizationService( session.LastTranscript = string.Empty; session.LastIntent = "heyJibo"; session.LastListenType = "fallback"; - var fallbackReplies = replyMapper.MapFallback(session, turnState.TransId ?? session.LastTransId ?? string.Empty, turnState.ListenRules) + var fallbackReplies = ResponsePlanToSocketMessagesMapper.MapFallback(session, turnState.TransId ?? session.LastTransId ?? string.Empty, turnState.ListenRules) .Select(map => new WebSocketReply { Text = map.Text, DelayMs = map.DelayMs }) .ToArray(); ResetBufferedAudio(session); @@ -318,7 +318,7 @@ public sealed class WebSocketTurnFinalizationService( turnState.AwaitingTurnCompletion = false; var emitSkillActions = messageType != "CLIENT_NLU"; - var replies = replyMapper.Map(plan, finalizedTurn, session, emitSkillActions).Select(map => new WebSocketReply + var replies = ResponsePlanToSocketMessagesMapper.Map(plan, finalizedTurn, session, emitSkillActions).Select(map => new WebSocketReply { Text = map.Text, DelayMs = map.DelayMs @@ -332,10 +332,11 @@ public sealed class WebSocketTurnFinalizationService( { var turnState = session.TurnState; return turnState.AwaitingTurnCompletion && - turnState.SawListen && - turnState.SawContext && - turnState.BufferedAudioChunkCount >= AutoFinalizeMinBufferedAudioChunks && - turnState.BufferedAudioBytes >= AutoFinalizeMinBufferedAudioBytes; + turnState is + { + SawListen: true, SawContext: true, BufferedAudioChunkCount: >= AutoFinalizeMinBufferedAudioChunks, + BufferedAudioBytes: >= AutoFinalizeMinBufferedAudioBytes + }; } private static string? ExtractDataPayload(string? text) diff --git a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Audio/ExternalProcessRunner.cs b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Audio/ExternalProcessRunner.cs index edacf89..06db1d1 100644 --- a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Audio/ExternalProcessRunner.cs +++ b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Audio/ExternalProcessRunner.cs @@ -32,11 +32,9 @@ public sealed class ExternalProcessRunner : IExternalProcessRunner var stdOut = await stdOutTask; var stdErr = await stdErrTask; - if (process.ExitCode != 0) - { - throw new InvalidOperationException($"External process '{fileName}' failed with exit code {process.ExitCode}: {stdErr}"); - } - - return new ExternalProcessResult(process.ExitCode, stdOut, stdErr); + return process.ExitCode != 0 + ? throw new InvalidOperationException( + $"External process '{fileName}' failed with exit code {process.ExitCode}: {stdErr}") + : new ExternalProcessResult(process.ExitCode, stdOut, stdErr); } } diff --git a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Audio/LocalWhisperCppBufferedAudioSttStrategy.cs b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Audio/LocalWhisperCppBufferedAudioSttStrategy.cs index 94a9bb2..06d26bf 100644 --- a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Audio/LocalWhisperCppBufferedAudioSttStrategy.cs +++ b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Audio/LocalWhisperCppBufferedAudioSttStrategy.cs @@ -92,7 +92,7 @@ public sealed class LocalWhisperCppBufferedAudioSttStrategy( byte[][] jagged => jagged, IReadOnlyList typed => typed, IEnumerable enumerable => enumerable.ToArray(), - JsonElement jsonElement when jsonElement.ValueKind == JsonValueKind.Array => jsonElement.EnumerateArray() + JsonElement { ValueKind: JsonValueKind.Array } jsonElement => jsonElement.EnumerateArray() .Where(static item => item.ValueKind == JsonValueKind.Array) .Select(static item => item.EnumerateArray().Select(static b => (byte)b.GetInt32()).ToArray()) .ToArray(), @@ -128,12 +128,7 @@ public sealed class LocalWhisperCppBufferedAudioSttStrategy( .Where(static line => !string.IsNullOrWhiteSpace(line)) .ToArray(); - if (timecoded.Length > 0) - { - return string.Join(" ", timecoded).Trim(); - } - - return string.Join(" ", lines).Trim(); + return timecoded.Length > 0 ? string.Join(" ", timecoded).Trim() : string.Join(" ", lines).Trim(); } private static void TryDelete(string path) diff --git a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Audio/OggOpusAudioNormalizer.cs b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Audio/OggOpusAudioNormalizer.cs index 6603e73..a8f371e 100644 --- a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Audio/OggOpusAudioNormalizer.cs +++ b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Audio/OggOpusAudioNormalizer.cs @@ -72,12 +72,9 @@ internal static class OggOpusAudioNormalizer } var expectedLength = 27 + pageSegments + payloadLength; - if (buffer.Length < expectedLength) - { - throw new InvalidOperationException("Buffered Ogg page payload was truncated."); - } - - return new ParsedOggPage(BinaryPrimitives.ReadUInt64LittleEndian(buffer.AsSpan(6, 8))); + return buffer.Length < expectedLength + ? throw new InvalidOperationException("Buffered Ogg page payload was truncated.") + : new ParsedOggPage(BinaryPrimitives.ReadUInt64LittleEndian(buffer.AsSpan(6, 8))); } private static uint ComputeCrc(byte[] buffer) diff --git a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Telemetry/CapturePathResolver.cs b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Telemetry/CapturePathResolver.cs index 48c67d5..45b14c2 100644 --- a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Telemetry/CapturePathResolver.cs +++ b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Telemetry/CapturePathResolver.cs @@ -22,7 +22,7 @@ internal static class CapturePathResolver } var directory = new DirectoryInfo(Path.GetFullPath(startPath)); - if (!directory.Exists && directory.Parent is not null) + if (directory is { Exists: false, Parent: not null }) { directory = directory.Parent; } diff --git a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Telemetry/FileWebSocketTelemetrySink.cs b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Telemetry/FileWebSocketTelemetrySink.cs index e7bb10e..cee4010 100644 --- a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Telemetry/FileWebSocketTelemetrySink.cs +++ b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Telemetry/FileWebSocketTelemetrySink.cs @@ -42,22 +42,18 @@ public sealed class FileWebSocketTelemetrySink( public Task RecordInboundAsync(WebSocketMessageEnvelope envelope, CloudSession session, string? messageType, CancellationToken cancellationToken = default) { - if (!options.Value.Enabled) - { - return Task.CompletedTask; - } - - return WriteRecordAsync(BuildRecord("message_in", envelope, session, messageType, "in", null, null), cancellationToken); + return !options.Value.Enabled + ? Task.CompletedTask + : WriteRecordAsync(BuildRecord("message_in", envelope, session, messageType, "in", null, null), + cancellationToken); } public Task RecordTurnEventAsync(WebSocketMessageEnvelope envelope, CloudSession session, string eventType, IReadOnlyDictionary details, CancellationToken cancellationToken = default) { - if (!options.Value.Enabled) - { - return Task.CompletedTask; - } - - return WriteRecordAsync(BuildRecord(eventType, envelope, session, null, "internal", null, details), cancellationToken); + return !options.Value.Enabled + ? Task.CompletedTask + : WriteRecordAsync(BuildRecord(eventType, envelope, session, null, "internal", null, details), + cancellationToken); } public async Task RecordOutboundAsync(WebSocketMessageEnvelope envelope, CloudSession session, IReadOnlyList replies, CancellationToken cancellationToken = default) diff --git a/OpenJibo/src/Playground/Program.cs b/OpenJibo/src/Playground/Program.cs index 4294429..4c6cca0 100644 --- a/OpenJibo/src/Playground/Program.cs +++ b/OpenJibo/src/Playground/Program.cs @@ -177,6 +177,8 @@ while (!cts.IsCancellationRequested) } } +return; + static string PickBestUtterance(List? utterances) { if (utterances == null || utterances.Count == 0) @@ -201,7 +203,7 @@ static string NormalizeUtterance(string? text) // Very light cleanup for occasional weird leading duplication like "wWhat" if (s.Length >= 2 && char.ToLowerInvariant(s[0]) == char.ToLowerInvariant(s[1])) - s = s.Substring(1); + s = s[1..]; return s; } @@ -216,10 +218,7 @@ static string BuildReply(string heard) if (text.Contains("hello") || text.Contains("hi")) return "Hello! I heard you loud and clear."; - if (text.Contains("your name")) - return "I am Jibo, running with a local demo bridge."; - - return $"You said: {heard}"; + return text.Contains("your name") ? "I am Jibo, running with a local demo bridge." : $"You said: {heard}"; } public sealed class AsrEvent diff --git a/OpenJibo/tests/Jibo.Cloud.Tests/WebSockets/FileWebSocketTelemetrySinkTests.cs b/OpenJibo/tests/Jibo.Cloud.Tests/WebSockets/FileWebSocketTelemetrySinkTests.cs index 34ed462..46297d6 100644 --- a/OpenJibo/tests/Jibo.Cloud.Tests/WebSockets/FileWebSocketTelemetrySinkTests.cs +++ b/OpenJibo/tests/Jibo.Cloud.Tests/WebSockets/FileWebSocketTelemetrySinkTests.cs @@ -98,9 +98,12 @@ public sealed class FileWebSocketTelemetrySinkTests : IDisposable { Token = "token-relative", HostName = "neo-hub.jibo.com", - Path = "/listen" + Path = "/listen", + TurnState = + { + TransId = "trans-relative" + } }; - session.TurnState.TransId = "trans-relative"; await sink.RecordConnectionOpenedAsync(envelope, session); await sink.RecordOutboundAsync(envelope, session, [new WebSocketReply { Text = """{"type":"LISTEN"}""" }]); diff --git a/OpenJibo/tests/Jibo.Cloud.Tests/WebSockets/LocalWhisperCppBufferedAudioSttStrategyTests.cs b/OpenJibo/tests/Jibo.Cloud.Tests/WebSockets/LocalWhisperCppBufferedAudioSttStrategyTests.cs index 56141ba..c131bcf 100644 --- a/OpenJibo/tests/Jibo.Cloud.Tests/WebSockets/LocalWhisperCppBufferedAudioSttStrategyTests.cs +++ b/OpenJibo/tests/Jibo.Cloud.Tests/WebSockets/LocalWhisperCppBufferedAudioSttStrategyTests.cs @@ -105,8 +105,8 @@ public sealed class LocalWhisperCppBufferedAudioSttStrategyTests if (string.Equals(fileName, "ffmpeg", StringComparison.OrdinalIgnoreCase)) { - var outputPath = arguments.Last(); - File.WriteAllBytes(outputPath, [0x52, 0x49, 0x46, 0x46]); + var outputPath = arguments[^1]; + File.WriteAllBytes(outputPath, "RIFF"u8); return Task.FromResult(new ExternalProcessResult(0, string.Empty, string.Empty)); }