Add commit message generation prompt

This commit is contained in:
Jacob Dubin
2026-05-10 00:30:31 -05:00
parent 8ae6d86a8c
commit 80c4ae38fb
13 changed files with 884 additions and 25 deletions

View File

@@ -1970,6 +1970,57 @@ public sealed class JiboWebSocketServiceTests
Assert.Equal("announcement", meta.GetProperty("mim_type").GetString());
}
[Fact]
public async Task ClientAsr_TellMeTheNews_WithProvider_UsesProviderHeadlinesInSpeech()
{
var service = CreateService(
new InMemoryCloudStateStore(),
newsBriefingProvider: new StubNewsBriefingProvider(
new NewsBriefingSnapshot(
[
new NewsHeadline("Robotics club opens a new community lab"),
new NewsHeadline("Local students win a regional coding challenge")
],
"NewsAPI")));
await service.HandleMessageAsync(new WebSocketMessageEnvelope
{
HostName = "neo-hub.jibo.com",
Path = "/listen",
Kind = "neo-hub-listen",
Token = "hub-news-provider-token",
Text = """{"type":"LISTEN","transID":"trans-news-provider","data":{"hotphrase":true,"rules":["launch","globals/global_commands_launch"]}}"""
});
var replies = await service.HandleMessageAsync(new WebSocketMessageEnvelope
{
HostName = "neo-hub.jibo.com",
Path = "/listen",
Kind = "neo-hub-listen",
Token = "hub-news-provider-token",
Text = """{"type":"CLIENT_ASR","transID":"trans-news-provider","data":{"text":"tell me the news"}}"""
});
Assert.Equal(3, replies.Count);
Assert.Equal("LISTEN", ReadReplyType(replies[0]));
Assert.Equal("EOS", ReadReplyType(replies[1]));
Assert.Equal("SKILL_ACTION", ReadReplyType(replies[2]));
using var speakPayload = JsonDocument.Parse(replies[2].Text!);
var esml = speakPayload.RootElement
.GetProperty("data")
.GetProperty("action")
.GetProperty("config")
.GetProperty("jcp")
.GetProperty("config")
.GetProperty("play")
.GetProperty("esml")
.GetString();
Assert.Contains("Robotics club opens a new community lab", esml, StringComparison.OrdinalIgnoreCase);
Assert.Contains("Source: NewsAPI.", esml, StringComparison.OrdinalIgnoreCase);
}
[Fact]
public async Task ClientAsr_HowIsTheWeather_EmitsSpokenWeatherFallbackWithoutRedirect()
{
@@ -3998,7 +4049,8 @@ public sealed class JiboWebSocketServiceTests
private static JiboWebSocketService CreateService(
InMemoryCloudStateStore stateStore,
IWeatherReportProvider? weatherReportProvider = null)
IWeatherReportProvider? weatherReportProvider = null,
INewsBriefingProvider? newsBriefingProvider = null)
{
var contentRepository = new InMemoryJiboExperienceContentRepository();
var contentCache = new JiboExperienceContentCache(contentRepository);
@@ -4006,7 +4058,8 @@ public sealed class JiboWebSocketServiceTests
contentCache,
new DefaultJiboRandomizer(),
new InMemoryPersonalMemoryStore(),
weatherReportProvider);
weatherReportProvider,
newsBriefingProvider);
var conversationBroker = new DemoConversationBroker(interactionService);
var sttSelector = new DefaultSttStrategySelector(
[
@@ -4035,4 +4088,14 @@ public sealed class JiboWebSocketServiceTests
return Task.FromResult<WeatherReportSnapshot?>(snapshot);
}
}
private sealed class StubNewsBriefingProvider(NewsBriefingSnapshot snapshot) : INewsBriefingProvider
{
public Task<NewsBriefingSnapshot?> GetBriefingAsync(
NewsBriefingRequest request,
CancellationToken cancellationToken = default)
{
return Task.FromResult<NewsBriefingSnapshot?>(snapshot);
}
}
}