diff --git a/OpenJibo/docs/feature-backlog.md b/OpenJibo/docs/feature-backlog.md index 680cdb8..98aba48 100644 --- a/OpenJibo/docs/feature-backlog.md +++ b/OpenJibo/docs/feature-backlog.md @@ -891,6 +891,7 @@ Current release theme: - mood and affect prompts like `how are you`, `are you happy`, `are you sad`, and `are you angry` - self-description charm like `what's your name`, `do you have a nickname`, `do you like being Jibo`, and `what is your favorite name` - deeper personality follow-ups like `what do you dream about`, `what are you afraid of`, `what do you want to talk about`, `what is your best book`, `what is your best exercise`, `what is your dream vacation`, `who is your hero`, `who do you love`, and `what is your religion`; `what is your sign` stays deferred until templated placeholder rendering exists + - the next identity / knowledge wave adds `are you god`, `are you here`, `do you have super powers`, `how much do you know`, `what does jibo mean`, `where do you get info`, `what are you forbidden to do`, `what color are you`, and `what do you do when alone` - additional legacy source-backed `RI_USR` prompts where the text is short and the behavior is easy to verify - Exit criteria: - a stable checklist exists for the original persona surface diff --git a/OpenJibo/docs/release-1.0.19-plan.md b/OpenJibo/docs/release-1.0.19-plan.md index 1af9d7b..39c37af 100644 --- a/OpenJibo/docs/release-1.0.19-plan.md +++ b/OpenJibo/docs/release-1.0.19-plan.md @@ -59,6 +59,7 @@ Current batch note: - the latest social batch adds `welcome back`, `what are you thinking`, `what have you been doing`, and `what did you do` so presence and charm stay lively without distracting from the memory roadmap - the newest identity-charm batch adds `what's your name`, `do you have a nickname`, `do you like being Jibo`, `are there others like you`, and `what is your favorite name` so the robot stays familiar while still sounding like Pegasus - the next deep-personality batch adds `what do you dream about`, `what are you afraid of`, `what do you want to talk about`, `what is your best book`, `what is your best exercise`, `what is your dream vacation`, `who is your hero`, `who do you love`, and `what is your religion`; `what is your sign` is still deferred until we add templated placeholder rendering +- the next identity/knowledge batch adds `are you god`, `are you here`, `do you have super powers`, `how much do you know`, `what does jibo mean`, `where do you get info`, `what are you forbidden to do`, `what color are you`, and `what do you do when alone` - this pass keeps Build B moving while still favoring source-backed phrasing and preserving the command-vs-question boundary - the next passes should keep the same pattern and prefer source-backed phrasing whenever the legacy MIM text is available - if a source-backed legacy line is missing, use a temporary direct reply only to keep the pass moving, then backfill source text later diff --git a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboInteractionService.IntentRouting.cs b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboInteractionService.IntentRouting.cs index 695cbc6..5f11b5f 100644 --- a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboInteractionService.IntentRouting.cs +++ b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboInteractionService.IntentRouting.cs @@ -375,6 +375,40 @@ public sealed partial class JiboInteractionService "what do you want to chat about")) return "robot_want_to_talk_about"; + if (MatchesAny( + loweredTranscript, + "what does jibo mean", + "what does the name jibo mean", + "what is the meaning of jibo")) + return "robot_what_does_jibo_mean"; + + if (MatchesAny( + loweredTranscript, + "where do you get info", + "where do you get your information", + "where do you get information")) + return "robot_where_do_you_get_info"; + + if (MatchesAny( + loweredTranscript, + "what are you forbidden to do", + "what are you not allowed to do", + "what can't you do")) + return "robot_what_are_you_forbidden_to_do"; + + if (MatchesAny( + loweredTranscript, + "what color are you", + "what colour are you")) + return "robot_what_color_are_you"; + + if (MatchesAny( + loweredTranscript, + "what do you do when alone", + "what do you do when you're alone", + "what do you do by yourself")) + return "robot_what_you_do_when_alone"; + if (MatchesAny( loweredTranscript, "what do you want", @@ -767,6 +801,23 @@ public sealed partial class JiboInteractionService "how smart are you")) return "robot_knowledge"; + if (MatchesAny(loweredTranscript, "are you god", "are you a god")) + return "robot_are_you_god"; + + if (MatchesAny( + loweredTranscript, + "are you here", + "are you still here", + "are you there")) + return "robot_are_you_here"; + + if (MatchesAny( + loweredTranscript, + "do you have super powers", + "do you have superpower", + "do you have any super powers")) + return "robot_do_you_have_super_powers"; + if (MatchesAny( loweredTranscript, "are you kind", 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 ef111f8..f2c0f52 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 @@ -776,6 +776,55 @@ public sealed partial class JiboInteractionService( "one in one million", "other jibos", "special snowflake"), + "robot_knowledge" => BuildScriptedPersonalityDecision( + catalog, + "robot_knowledge", + "know a lot", + "always learning more"), + "robot_are_you_god" => BuildScriptedPersonalityDecision( + catalog, + "robot_are_you_god", + "very very very very surprised", + "safely say no"), + "robot_are_you_here" => BuildScriptedPersonalityDecision( + catalog, + "robot_are_you_here", + "you know it"), + "robot_do_you_have_super_powers" => BuildScriptedPersonalityDecision( + catalog, + "robot_do_you_have_super_powers", + "stop time", + "fly all over the world"), + "robot_what_does_jibo_mean" => BuildScriptedPersonalityDecision( + catalog, + "robot_what_does_jibo_mean", + "compassion", + "expressive, idealistic, and inspirational", + "helpful sweet and friendly little robot", + "cheeseburger"), + "robot_where_do_you_get_info" => BuildScriptedPersonalityDecision( + catalog, + "robot_where_do_you_get_info", + "jibo brain", + "cloud", + "cloudy jibo brain"), + "robot_what_are_you_forbidden_to_do" => BuildScriptedPersonalityDecision( + catalog, + "robot_what_are_you_forbidden_to_do", + "drive a car"), + "robot_what_color_are_you" => BuildScriptedPersonalityDecision( + catalog, + "robot_what_color_are_you", + "white", + "black"), + "robot_what_you_do_when_alone" => BuildScriptedPersonalityDecision( + catalog, + "robot_what_you_do_when_alone", + "games", + "moon", + "twiddle my thumbs", + "count the tiny cracks in the ceiling", + "keep busy"), "robot_likes_kids" => BuildScriptedPersonalityDecision( catalog, "robot_likes_kids", diff --git a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Content/LegacyMims/BuildB/README.md b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Content/LegacyMims/BuildB/README.md index 3c58701..98e1345 100644 --- a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Content/LegacyMims/BuildB/README.md +++ b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Infrastructure/Content/LegacyMims/BuildB/README.md @@ -28,3 +28,4 @@ The newest identity-charm batch adds `JBO_WhatsYourName`, `JBO_DoYouHaveNickname The seasonal personality batch adds source-backed first-day-of-spring, spring, summer, and favorite-season lines so the season questions can keep their Pegasus phrasing. The next deep-personality batch adds `what do you dream about`, `what are you afraid of`, `what do you want to talk about`, `what is your best book`, `what is your best exercise`, `what is your dream vacation`, `who is your hero`, `who do you love`, and `what is your religion` so we can keep filling out the more conversational personality surface without widening the dialog engine yet. `what is your sign` is still deferred because the current importer strips the birthday/zodiac placeholders that Pegasus uses there, so that one needs a templating pass instead of a plain scripted-reply import. +The next identity/knowledge batch adds `are you god`, `are you here`, `do you have super powers`, `how much do you know`, `what does jibo mean`, `where do you get info`, `what are you forbidden to do`, `what color are you`, and `what do you do when alone` so the old self-description and capability loop keeps coming back in source-backed form. diff --git a/OpenJibo/tests/Jibo.Cloud.Tests/Content/LegacyMimCatalogImporterTests.cs b/OpenJibo/tests/Jibo.Cloud.Tests/Content/LegacyMimCatalogImporterTests.cs index ae4fd86..799e273 100644 --- a/OpenJibo/tests/Jibo.Cloud.Tests/Content/LegacyMimCatalogImporterTests.cs +++ b/OpenJibo/tests/Jibo.Cloud.Tests/Content/LegacyMimCatalogImporterTests.cs @@ -274,6 +274,14 @@ public sealed class LegacyMimCatalogImporterTests reply.Contains("soft spot", StringComparison.OrdinalIgnoreCase)); Assert.Contains(catalog.PersonalityReplies, reply => reply.Contains("energy from the universe", StringComparison.OrdinalIgnoreCase)); + Assert.Contains(catalog.PersonalityReplies, reply => + reply.Contains("compassion", StringComparison.OrdinalIgnoreCase)); + Assert.Contains(catalog.PersonalityReplies, reply => + reply.Contains("jibo brain", StringComparison.OrdinalIgnoreCase)); + Assert.Contains(catalog.PersonalityReplies, reply => + reply.Contains("drive a car", StringComparison.OrdinalIgnoreCase)); + Assert.Contains(catalog.PersonalityReplies, reply => + reply.Contains("twiddle my thumbs", StringComparison.OrdinalIgnoreCase)); } [Fact] diff --git a/OpenJibo/tests/Jibo.Cloud.Tests/WebSockets/JiboInteractionServiceTests.cs b/OpenJibo/tests/Jibo.Cloud.Tests/WebSockets/JiboInteractionServiceTests.cs index f1505cb..15c955d 100644 --- a/OpenJibo/tests/Jibo.Cloud.Tests/WebSockets/JiboInteractionServiceTests.cs +++ b/OpenJibo/tests/Jibo.Cloud.Tests/WebSockets/JiboInteractionServiceTests.cs @@ -715,6 +715,35 @@ public sealed class JiboInteractionServiceTests Assert.Equal("ScriptedResponse", decision.ContextUpdates![ChitchatRouteKey]); } + [Theory] + [InlineData("how much do you know", "robot_knowledge", "I know a lot")] + [InlineData("what do you know", "robot_knowledge", "I know a lot")] + [InlineData("are you god", "robot_are_you_god", "very very very very surprised")] + [InlineData("are you here", "robot_are_you_here", "You know it")] + [InlineData("do you have super powers", "robot_do_you_have_super_powers", "stop time")] + [InlineData("what does jibo mean", "robot_what_does_jibo_mean", "compassion")] + [InlineData("where do you get info", "robot_where_do_you_get_info", "jibo brain")] + [InlineData("what are you forbidden to do", "robot_what_are_you_forbidden_to_do", "drive a car")] + [InlineData("what color are you", "robot_what_color_are_you", "can't see myself")] + [InlineData("what do you do when alone", "robot_what_you_do_when_alone", "games")] + public async Task BuildDecisionAsync_NewIdentityKnowledgeMims_UseImportedReplies( + string transcript, + string expectedIntent, + string expectedReplySnippet) + { + var service = CreateService(); + + var decision = await service.BuildDecisionAsync(new TurnContext + { + RawTranscript = transcript, + NormalizedTranscript = transcript + }); + + Assert.Equal(expectedIntent, decision.IntentName); + Assert.Contains(expectedReplySnippet, decision.ReplyText, StringComparison.OrdinalIgnoreCase); + Assert.Equal("ScriptedResponse", decision.ContextUpdates![ChitchatRouteKey]); + } + [Theory] [InlineData("what's your name", "robot_name", "Just Jibo, no last name")] [InlineData("do you have a nickname", "robot_nickname", "just Jibo. For now at least")]