Add Santa Tracker and penguin favorites
This commit is contained in:
@@ -858,6 +858,9 @@ Current release theme:
|
|||||||
- source-backed holiday, New Year's, Halloween, spring, and gift prompts are now part of Build B
|
- source-backed holiday, New Year's, Halloween, spring, and gift prompts are now part of Build B
|
||||||
- `RN_` holiday greeting files are now bucketed as greetings so seasonal replies stay visible in the catalog
|
- `RN_` holiday greeting files are now bucketed as greetings so seasonal replies stay visible in the catalog
|
||||||
- birthday celebration lines are now bucketed separately, and birthday memory writes a loop-scoped holiday record so personal dates can join the holiday list later
|
- birthday celebration lines are now bucketed separately, and birthday memory writes a loop-scoped holiday record so personal dates can join the holiday list later
|
||||||
|
- holiday extras now include `show santa tracker` so the Christmas-time launcher keeps its source-backed animation line
|
||||||
|
- Favorite-animal work in flight:
|
||||||
|
- the favorites family now includes `what is your favorite animal`, `what is your favorite bird`, `do you like penguins`, and `do you like animals` so the penguin-centric replies stay easy to find
|
||||||
- Presence and thought follow-ups in flight:
|
- Presence and thought follow-ups in flight:
|
||||||
- `welcome back`, `what are you thinking`, `what have you been doing`, and `what did you do` are now part of Build B
|
- `welcome back`, `what are you thinking`, `what have you been doing`, and `what did you do` are now part of Build B
|
||||||
- these keep the social surface lively while the memory and multitenant tracks keep advancing in parallel
|
- these keep the social surface lively while the memory and multitenant tracks keep advancing in parallel
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ Current batch note:
|
|||||||
- the personality follow-up batch now includes `what are you up to` and `what are you doing` so small talk stays warm and local instead of falling into generic chat
|
- the personality follow-up batch now includes `what are you up to` and `what are you doing` so small talk stays warm and local instead of falling into generic chat
|
||||||
- the descriptor batch now includes `are you kind`, `are you funny`, `are you helpful`, `are you curious`, `are you loyal`, `are you mischievous`, and `are you likable`
|
- the descriptor batch now includes `are you kind`, `are you funny`, `are you helpful`, `are you curious`, `are you loyal`, `are you mischievous`, and `are you likable`
|
||||||
- the seasonal batch now includes `what holidays do you celebrate`, New Year's resolution questions, `happy holidays`, `what halloween costume`, spring suggestions, and holiday gift prompts
|
- the seasonal batch now includes `what holidays do you celebrate`, New Year's resolution questions, `happy holidays`, `what halloween costume`, spring suggestions, and holiday gift prompts
|
||||||
|
- the holiday extras batch now includes `show santa tracker` so the seasonal holiday launcher stays source-backed too
|
||||||
|
- the favorites batch now includes `what is your favorite animal`, `what is your favorite bird`, `do you like penguins`, and `do you like animals` so the penguin-centered replies stay close to Pegasus
|
||||||
- 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 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
|
||||||
- this pass keeps Build B moving while still favoring source-backed phrasing and preserving the command-vs-question boundary
|
- 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
|
- the next passes should keep the same pattern and prefer source-backed phrasing whenever the legacy MIM text is available
|
||||||
|
|||||||
@@ -11,22 +11,24 @@ public sealed class JiboConditionedReply
|
|||||||
public string Reply { get; init; } = string.Empty;
|
public string Reply { get; init; } = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class JiboExperienceCatalog
|
public sealed class JiboExperienceCatalog
|
||||||
{
|
{
|
||||||
public IReadOnlyList<string> Jokes { get; init; } = [];
|
public IReadOnlyList<string> Jokes { get; init; } = [];
|
||||||
public IReadOnlyList<string> RobotFacts { get; init; } = [];
|
public IReadOnlyList<string> RobotFacts { get; init; } = [];
|
||||||
public IReadOnlyList<string> HumanFacts { get; init; } = [];
|
public IReadOnlyList<string> HumanFacts { get; init; } = [];
|
||||||
public IReadOnlyList<string> FunFacts { get; init; } = [];
|
public IReadOnlyList<string> FunFacts { get; init; } = [];
|
||||||
public IReadOnlyList<string> DanceAnimations { get; init; } = [];
|
public IReadOnlyList<string> FavoriteAnimalReplies { get; init; } = [];
|
||||||
public IReadOnlyList<string> GreetingReplies { get; init; } = [];
|
public IReadOnlyList<string> DanceAnimations { get; init; } = [];
|
||||||
public IReadOnlyList<string> HolidayReplies { get; init; } = [];
|
public IReadOnlyList<string> GreetingReplies { get; init; } = [];
|
||||||
public IReadOnlyList<string> HolidaySeasonReplies { get; init; } = [];
|
public IReadOnlyList<string> HolidayReplies { get; init; } = [];
|
||||||
public IReadOnlyList<string> HolidayGreetingReplies { get; init; } = [];
|
public IReadOnlyList<string> HolidaySeasonReplies { get; init; } = [];
|
||||||
public IReadOnlyList<string> HolidayGiftReplies { get; init; } = [];
|
public IReadOnlyList<string> HolidayGreetingReplies { get; init; } = [];
|
||||||
public IReadOnlyList<string> BirthdayCelebrationReplies { get; init; } = [];
|
public IReadOnlyList<string> HolidayGiftReplies { get; init; } = [];
|
||||||
public IReadOnlyList<string> HowAreYouReplies { get; init; } = [];
|
public IReadOnlyList<string> HolidayTrackerReplies { get; init; } = [];
|
||||||
public IReadOnlyList<JiboConditionedReply> EmotionReplies { get; init; } = [];
|
public IReadOnlyList<string> BirthdayCelebrationReplies { get; init; } = [];
|
||||||
public IReadOnlyList<string> PersonalityReplies { get; init; } = [];
|
public IReadOnlyList<string> HowAreYouReplies { get; init; } = [];
|
||||||
|
public IReadOnlyList<JiboConditionedReply> EmotionReplies { get; init; } = [];
|
||||||
|
public IReadOnlyList<string> PersonalityReplies { get; init; } = [];
|
||||||
public IReadOnlyList<string> PizzaReplies { get; init; } = [];
|
public IReadOnlyList<string> PizzaReplies { get; init; } = [];
|
||||||
public IReadOnlyList<string> SurpriseReplies { get; init; } = [];
|
public IReadOnlyList<string> SurpriseReplies { get; init; } = [];
|
||||||
public IReadOnlyList<string> PersonalReportReplies { get; init; } = [];
|
public IReadOnlyList<string> PersonalReportReplies { get; init; } = [];
|
||||||
|
|||||||
@@ -685,6 +685,13 @@ public sealed class JiboInteractionService(
|
|||||||
"ask for a pet elephant",
|
"ask for a pet elephant",
|
||||||
"experience as a present",
|
"experience as a present",
|
||||||
"donate to charities in other people's names"),
|
"donate to charities in other people's names"),
|
||||||
|
"seasonal_santa_tracker" => BuildScriptedHolidayTrackerDecision(
|
||||||
|
catalog,
|
||||||
|
"seasonal_santa_tracker",
|
||||||
|
"santa tracker",
|
||||||
|
"let's see if i can spot him",
|
||||||
|
"deliveries",
|
||||||
|
"north pole"),
|
||||||
"birthday_celebration" => BuildScriptedHolidayDecision(
|
"birthday_celebration" => BuildScriptedHolidayDecision(
|
||||||
catalog.BirthdayCelebrationReplies,
|
catalog.BirthdayCelebrationReplies,
|
||||||
"birthday_celebration",
|
"birthday_celebration",
|
||||||
@@ -714,6 +721,32 @@ public sealed class JiboInteractionService(
|
|||||||
"all things in space",
|
"all things in space",
|
||||||
"amazing stuff up there",
|
"amazing stuff up there",
|
||||||
"astronomy is one of my favorite onomies"),
|
"astronomy is one of my favorite onomies"),
|
||||||
|
"robot_favorite_animal" => BuildScriptedFavoriteAnimalDecision(
|
||||||
|
catalog,
|
||||||
|
"robot_favorite_animal",
|
||||||
|
"penguin",
|
||||||
|
"favorite animal overall",
|
||||||
|
"best of the best",
|
||||||
|
"can't go wrong with penguins"),
|
||||||
|
"robot_favorite_bird" => BuildScriptedFavoriteAnimalDecision(
|
||||||
|
catalog,
|
||||||
|
"robot_favorite_bird",
|
||||||
|
"penguin",
|
||||||
|
"favorite animal overall",
|
||||||
|
"best of the best",
|
||||||
|
"can't go wrong with penguins"),
|
||||||
|
"robot_likes_penguins" => BuildScriptedFavoriteAnimalDecision(
|
||||||
|
catalog,
|
||||||
|
"robot_likes_penguins",
|
||||||
|
"penguins",
|
||||||
|
"I really like penguins",
|
||||||
|
"my penguin impression"),
|
||||||
|
"robot_likes_animals" => BuildScriptedFavoriteAnimalDecision(
|
||||||
|
catalog,
|
||||||
|
"robot_likes_animals",
|
||||||
|
"penguins",
|
||||||
|
"favorite animal overall",
|
||||||
|
"best of the best"),
|
||||||
"robot_likes_kids" => BuildScriptedPersonalityDecision(
|
"robot_likes_kids" => BuildScriptedPersonalityDecision(
|
||||||
catalog,
|
catalog,
|
||||||
"robot_likes_kids",
|
"robot_likes_kids",
|
||||||
@@ -2457,6 +2490,17 @@ public sealed class JiboInteractionService(
|
|||||||
ContextUpdates: BuildScriptedResponseContextUpdates());
|
ContextUpdates: BuildScriptedResponseContextUpdates());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private JiboInteractionDecision BuildScriptedFavoriteAnimalDecision(
|
||||||
|
JiboExperienceCatalog catalog,
|
||||||
|
string intentName,
|
||||||
|
params string[] preferredSnippets)
|
||||||
|
{
|
||||||
|
return new JiboInteractionDecision(
|
||||||
|
intentName,
|
||||||
|
SelectLegacyReply(catalog.FavoriteAnimalReplies, preferredSnippets),
|
||||||
|
ContextUpdates: BuildScriptedResponseContextUpdates());
|
||||||
|
}
|
||||||
|
|
||||||
private JiboInteractionDecision BuildScriptedGreetingDecision(
|
private JiboInteractionDecision BuildScriptedGreetingDecision(
|
||||||
JiboExperienceCatalog catalog,
|
JiboExperienceCatalog catalog,
|
||||||
string intentName,
|
string intentName,
|
||||||
@@ -2479,6 +2523,17 @@ public sealed class JiboInteractionService(
|
|||||||
ContextUpdates: BuildScriptedResponseContextUpdates());
|
ContextUpdates: BuildScriptedResponseContextUpdates());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private JiboInteractionDecision BuildScriptedHolidayTrackerDecision(
|
||||||
|
JiboExperienceCatalog catalog,
|
||||||
|
string intentName,
|
||||||
|
params string[] preferredSnippets)
|
||||||
|
{
|
||||||
|
return new JiboInteractionDecision(
|
||||||
|
intentName,
|
||||||
|
SelectLegacyReply(catalog.HolidayTrackerReplies, preferredSnippets),
|
||||||
|
ContextUpdates: BuildScriptedResponseContextUpdates());
|
||||||
|
}
|
||||||
|
|
||||||
private JiboInteractionDecision BuildScriptedHolidayGreetingDecision(
|
private JiboInteractionDecision BuildScriptedHolidayGreetingDecision(
|
||||||
JiboExperienceCatalog catalog,
|
JiboExperienceCatalog catalog,
|
||||||
string intentName,
|
string intentName,
|
||||||
@@ -3152,6 +3207,16 @@ public sealed class JiboInteractionService(
|
|||||||
"what should i get someone for the holidays"))
|
"what should i get someone for the holidays"))
|
||||||
return "seasonal_holiday_gift";
|
return "seasonal_holiday_gift";
|
||||||
|
|
||||||
|
if (MatchesAny(
|
||||||
|
loweredTranscript,
|
||||||
|
"show santa tracker",
|
||||||
|
"can you show santa tracker",
|
||||||
|
"santa tracker",
|
||||||
|
"where is santa",
|
||||||
|
"where is santa right now",
|
||||||
|
"can you show me santa tracker"))
|
||||||
|
return "seasonal_santa_tracker";
|
||||||
|
|
||||||
if (MatchesAny(
|
if (MatchesAny(
|
||||||
loweredTranscript,
|
loweredTranscript,
|
||||||
"happy birthday",
|
"happy birthday",
|
||||||
@@ -3195,6 +3260,24 @@ public sealed class JiboInteractionService(
|
|||||||
"what kind of music do you like"))
|
"what kind of music do you like"))
|
||||||
return "robot_favorite_music";
|
return "robot_favorite_music";
|
||||||
|
|
||||||
|
if (MatchesAny(
|
||||||
|
loweredTranscript,
|
||||||
|
"what is your favorite animal",
|
||||||
|
"what's your favorite animal",
|
||||||
|
"what s your favorite animal",
|
||||||
|
"what is your favourite animal",
|
||||||
|
"what's your favourite animal",
|
||||||
|
"what s your favourite animal",
|
||||||
|
"what animal do you like",
|
||||||
|
"what kind of animal do you like",
|
||||||
|
"what is your favorite bird",
|
||||||
|
"what's your favorite bird",
|
||||||
|
"what s your favorite bird",
|
||||||
|
"do you like penguins",
|
||||||
|
"do you like animals",
|
||||||
|
"do you like birds"))
|
||||||
|
return "robot_favorite_animal";
|
||||||
|
|
||||||
if (MatchesAny(
|
if (MatchesAny(
|
||||||
loweredTranscript,
|
loweredTranscript,
|
||||||
"are there others like you",
|
"are there others like you",
|
||||||
|
|||||||
@@ -55,6 +55,14 @@ public sealed class InMemoryJiboExperienceContentRepository : IJiboExperienceCon
|
|||||||
"An amazing but true fact for you. Dogs and elephants are the only animals that understand pointing.",
|
"An amazing but true fact for you. Dogs and elephants are the only animals that understand pointing.",
|
||||||
"A crazy fact for you. Polar bear fur isn't white. It's transparent."
|
"A crazy fact for you. Polar bear fur isn't white. It's transparent."
|
||||||
],
|
],
|
||||||
|
FavoriteAnimalReplies =
|
||||||
|
[
|
||||||
|
"I really really like penguins. I kind of look like one.",
|
||||||
|
"Penguin without a doubt. In fact, penguin is my favorite animal overall. We look alike.",
|
||||||
|
"Can't go wrong with penguins.",
|
||||||
|
"I like lots of animals, but the penguin is the best of the best! Great color scheme.",
|
||||||
|
"I love penguins, because we're so alike. We have the same coloring, and neither of us can fly."
|
||||||
|
],
|
||||||
DanceAnimations =
|
DanceAnimations =
|
||||||
[
|
[
|
||||||
"rom-upbeat",
|
"rom-upbeat",
|
||||||
@@ -88,6 +96,12 @@ public sealed class InMemoryJiboExperienceContentRepository : IJiboExperienceCon
|
|||||||
"I do like festive times.",
|
"I do like festive times.",
|
||||||
"I like anything that makes people want to celebrate."
|
"I like anything that makes people want to celebrate."
|
||||||
],
|
],
|
||||||
|
HolidayTrackerReplies =
|
||||||
|
[
|
||||||
|
"Let's see if I can spot him. There he is.",
|
||||||
|
"I'm not sure if he's started his deliveries yet, but let's see if I can spot him. He must be on his way.",
|
||||||
|
"Let's see. I think he's probably back in the north Pole by now."
|
||||||
|
],
|
||||||
HowAreYouReplies =
|
HowAreYouReplies =
|
||||||
[
|
[
|
||||||
"I am feeling cheerful and robotic.",
|
"I am feeling cheerful and robotic.",
|
||||||
|
|||||||
@@ -109,6 +109,9 @@ public static class LegacyMimCatalogImporter
|
|||||||
fileName.StartsWith("RA_JBO_TellSomething", StringComparison.OrdinalIgnoreCase))
|
fileName.StartsWith("RA_JBO_TellSomething", StringComparison.OrdinalIgnoreCase))
|
||||||
return LegacyMimBucket.FunFactSource;
|
return LegacyMimBucket.FunFactSource;
|
||||||
|
|
||||||
|
if (fileName.StartsWith("RA_JBO_ShowSantaTracker", StringComparison.OrdinalIgnoreCase))
|
||||||
|
return LegacyMimBucket.HolidayTracker;
|
||||||
|
|
||||||
if (normalizedPath.Contains("/emotion-responses/", StringComparison.OrdinalIgnoreCase) ||
|
if (normalizedPath.Contains("/emotion-responses/", StringComparison.OrdinalIgnoreCase) ||
|
||||||
normalizedPath.Contains("/gqa-responses/", StringComparison.OrdinalIgnoreCase))
|
normalizedPath.Contains("/gqa-responses/", StringComparison.OrdinalIgnoreCase))
|
||||||
return LegacyMimBucket.Emotion;
|
return LegacyMimBucket.Emotion;
|
||||||
@@ -119,6 +122,12 @@ public static class LegacyMimCatalogImporter
|
|||||||
if (fileName.StartsWith("RI_JBO_HasFavoriteHoliday", StringComparison.OrdinalIgnoreCase))
|
if (fileName.StartsWith("RI_JBO_HasFavoriteHoliday", StringComparison.OrdinalIgnoreCase))
|
||||||
return LegacyMimBucket.HolidaySeason;
|
return LegacyMimBucket.HolidaySeason;
|
||||||
|
|
||||||
|
if (fileName.StartsWith("RI_JBO_HasFavoriteAnimal", StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
fileName.StartsWith("RI_JBO_HasFavoriteBird", StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
fileName.StartsWith("RI_JBO_LikesPenguins", StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
fileName.StartsWith("RI_JBO_LikesAnimals", StringComparison.OrdinalIgnoreCase))
|
||||||
|
return LegacyMimBucket.FavoriteAnimal;
|
||||||
|
|
||||||
if (fileName.StartsWith("RN_HappyHolidays", StringComparison.OrdinalIgnoreCase))
|
if (fileName.StartsWith("RN_HappyHolidays", StringComparison.OrdinalIgnoreCase))
|
||||||
return LegacyMimBucket.HolidayGreeting;
|
return LegacyMimBucket.HolidayGreeting;
|
||||||
|
|
||||||
@@ -249,12 +258,14 @@ public static class LegacyMimCatalogImporter
|
|||||||
RobotFacts = Merge(baseCatalog.RobotFacts, importedCatalog.RobotFacts),
|
RobotFacts = Merge(baseCatalog.RobotFacts, importedCatalog.RobotFacts),
|
||||||
HumanFacts = Merge(baseCatalog.HumanFacts, importedCatalog.HumanFacts),
|
HumanFacts = Merge(baseCatalog.HumanFacts, importedCatalog.HumanFacts),
|
||||||
FunFacts = Merge(baseCatalog.FunFacts, importedCatalog.FunFacts),
|
FunFacts = Merge(baseCatalog.FunFacts, importedCatalog.FunFacts),
|
||||||
|
FavoriteAnimalReplies = Merge(baseCatalog.FavoriteAnimalReplies, importedCatalog.FavoriteAnimalReplies),
|
||||||
DanceAnimations = Merge(baseCatalog.DanceAnimations, importedCatalog.DanceAnimations),
|
DanceAnimations = Merge(baseCatalog.DanceAnimations, importedCatalog.DanceAnimations),
|
||||||
GreetingReplies = Merge(baseCatalog.GreetingReplies, importedCatalog.GreetingReplies),
|
GreetingReplies = Merge(baseCatalog.GreetingReplies, importedCatalog.GreetingReplies),
|
||||||
HolidayReplies = Merge(baseCatalog.HolidayReplies, importedCatalog.HolidayReplies),
|
HolidayReplies = Merge(baseCatalog.HolidayReplies, importedCatalog.HolidayReplies),
|
||||||
HolidaySeasonReplies = Merge(baseCatalog.HolidaySeasonReplies, importedCatalog.HolidaySeasonReplies),
|
HolidaySeasonReplies = Merge(baseCatalog.HolidaySeasonReplies, importedCatalog.HolidaySeasonReplies),
|
||||||
HolidayGreetingReplies = Merge(baseCatalog.HolidayGreetingReplies, importedCatalog.HolidayGreetingReplies),
|
HolidayGreetingReplies = Merge(baseCatalog.HolidayGreetingReplies, importedCatalog.HolidayGreetingReplies),
|
||||||
HolidayGiftReplies = Merge(baseCatalog.HolidayGiftReplies, importedCatalog.HolidayGiftReplies),
|
HolidayGiftReplies = Merge(baseCatalog.HolidayGiftReplies, importedCatalog.HolidayGiftReplies),
|
||||||
|
HolidayTrackerReplies = Merge(baseCatalog.HolidayTrackerReplies, importedCatalog.HolidayTrackerReplies),
|
||||||
BirthdayCelebrationReplies = Merge(baseCatalog.BirthdayCelebrationReplies,
|
BirthdayCelebrationReplies = Merge(baseCatalog.BirthdayCelebrationReplies,
|
||||||
importedCatalog.BirthdayCelebrationReplies),
|
importedCatalog.BirthdayCelebrationReplies),
|
||||||
HowAreYouReplies = Merge(baseCatalog.HowAreYouReplies, importedCatalog.HowAreYouReplies),
|
HowAreYouReplies = Merge(baseCatalog.HowAreYouReplies, importedCatalog.HowAreYouReplies),
|
||||||
@@ -360,7 +371,8 @@ public static class LegacyMimCatalogImporter
|
|||||||
or LegacyMimBucket.WeatherTomorrowHighLow
|
or LegacyMimBucket.WeatherTomorrowHighLow
|
||||||
or LegacyMimBucket.WeatherServiceDown
|
or LegacyMimBucket.WeatherServiceDown
|
||||||
or LegacyMimBucket.ReportSkillTemplate
|
or LegacyMimBucket.ReportSkillTemplate
|
||||||
or LegacyMimBucket.Holiday;
|
or LegacyMimBucket.Holiday
|
||||||
|
or LegacyMimBucket.HolidayTracker;
|
||||||
}
|
}
|
||||||
|
|
||||||
private enum LegacyMimBucket
|
private enum LegacyMimBucket
|
||||||
@@ -371,6 +383,7 @@ public static class LegacyMimCatalogImporter
|
|||||||
HolidaySeason,
|
HolidaySeason,
|
||||||
HolidayGreeting,
|
HolidayGreeting,
|
||||||
HolidayGift,
|
HolidayGift,
|
||||||
|
HolidayTracker,
|
||||||
BirthdayCelebration,
|
BirthdayCelebration,
|
||||||
Jokes,
|
Jokes,
|
||||||
RobotFacts,
|
RobotFacts,
|
||||||
@@ -378,6 +391,7 @@ public static class LegacyMimCatalogImporter
|
|||||||
HowAreYou,
|
HowAreYou,
|
||||||
Emotion,
|
Emotion,
|
||||||
FunFacts,
|
FunFacts,
|
||||||
|
FavoriteAnimal,
|
||||||
FunFactSource,
|
FunFactSource,
|
||||||
Personality,
|
Personality,
|
||||||
PersonalReportKickOff,
|
PersonalReportKickOff,
|
||||||
@@ -411,10 +425,12 @@ public static class LegacyMimCatalogImporter
|
|||||||
private readonly List<JiboConditionedReply> _emotionReplies = [];
|
private readonly List<JiboConditionedReply> _emotionReplies = [];
|
||||||
private readonly List<string> _fallbacks = [];
|
private readonly List<string> _fallbacks = [];
|
||||||
private readonly List<string> _funFacts = [];
|
private readonly List<string> _funFacts = [];
|
||||||
|
private readonly List<string> _favoriteAnimalReplies = [];
|
||||||
private readonly List<string> _holidayGiftReplies = [];
|
private readonly List<string> _holidayGiftReplies = [];
|
||||||
private readonly List<string> _holidayGreetingReplies = [];
|
private readonly List<string> _holidayGreetingReplies = [];
|
||||||
private readonly List<string> _holidayReplies = [];
|
private readonly List<string> _holidayReplies = [];
|
||||||
private readonly List<string> _holidaySeasonReplies = [];
|
private readonly List<string> _holidaySeasonReplies = [];
|
||||||
|
private readonly List<string> _holidayTrackerReplies = [];
|
||||||
private readonly List<string> _greetings = [];
|
private readonly List<string> _greetings = [];
|
||||||
private readonly List<string> _howAreYous = [];
|
private readonly List<string> _howAreYous = [];
|
||||||
private readonly List<string> _humanFacts = [];
|
private readonly List<string> _humanFacts = [];
|
||||||
@@ -490,6 +506,9 @@ public static class LegacyMimCatalogImporter
|
|||||||
case LegacyMimBucket.HolidayGift:
|
case LegacyMimBucket.HolidayGift:
|
||||||
AddDistinct(_holidayGiftReplies, text);
|
AddDistinct(_holidayGiftReplies, text);
|
||||||
return;
|
return;
|
||||||
|
case LegacyMimBucket.HolidayTracker:
|
||||||
|
AddDistinct(_holidayTrackerReplies, text);
|
||||||
|
return;
|
||||||
case LegacyMimBucket.BirthdayCelebration:
|
case LegacyMimBucket.BirthdayCelebration:
|
||||||
AddDistinct(_birthdayCelebrationReplies, text);
|
AddDistinct(_birthdayCelebrationReplies, text);
|
||||||
return;
|
return;
|
||||||
@@ -517,6 +536,9 @@ public static class LegacyMimCatalogImporter
|
|||||||
|
|
||||||
_funFacts.Add(text);
|
_funFacts.Add(text);
|
||||||
return;
|
return;
|
||||||
|
case LegacyMimBucket.FavoriteAnimal:
|
||||||
|
AddDistinct(_favoriteAnimalReplies, text);
|
||||||
|
return;
|
||||||
case LegacyMimBucket.PersonalReportKickOff:
|
case LegacyMimBucket.PersonalReportKickOff:
|
||||||
AddDistinct(_personalReportKickOffReplies, text);
|
AddDistinct(_personalReportKickOffReplies, text);
|
||||||
return;
|
return;
|
||||||
@@ -581,11 +603,13 @@ public static class LegacyMimCatalogImporter
|
|||||||
RobotFacts = [.. _robotFacts],
|
RobotFacts = [.. _robotFacts],
|
||||||
HumanFacts = [.. _humanFacts],
|
HumanFacts = [.. _humanFacts],
|
||||||
FunFacts = [.. _funFacts],
|
FunFacts = [.. _funFacts],
|
||||||
|
FavoriteAnimalReplies = [.. _favoriteAnimalReplies],
|
||||||
GreetingReplies = [.. _greetings],
|
GreetingReplies = [.. _greetings],
|
||||||
HolidayReplies = [.. _holidayReplies],
|
HolidayReplies = [.. _holidayReplies],
|
||||||
HolidaySeasonReplies = [.. _holidaySeasonReplies],
|
HolidaySeasonReplies = [.. _holidaySeasonReplies],
|
||||||
HolidayGreetingReplies = [.. _holidayGreetingReplies],
|
HolidayGreetingReplies = [.. _holidayGreetingReplies],
|
||||||
HolidayGiftReplies = [.. _holidayGiftReplies],
|
HolidayGiftReplies = [.. _holidayGiftReplies],
|
||||||
|
HolidayTrackerReplies = [.. _holidayTrackerReplies],
|
||||||
BirthdayCelebrationReplies = [.. _birthdayCelebrationReplies],
|
BirthdayCelebrationReplies = [.. _birthdayCelebrationReplies],
|
||||||
HowAreYouReplies = [.. _howAreYous],
|
HowAreYouReplies = [.. _howAreYous],
|
||||||
EmotionReplies = [.. _emotionReplies],
|
EmotionReplies = [.. _emotionReplies],
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ The batch is intentionally narrow so we can keep expanding personality without w
|
|||||||
It now includes a small emotion-response pack for `happy`, `sad`, and `angry` follow-up questions so the mood path can stay source-backed too.
|
It now includes a small emotion-response pack for `happy`, `sad`, and `angry` follow-up questions so the mood path can stay source-backed too.
|
||||||
It also includes a descriptor pack for questions like `are you kind`, `are you funny`, `are you helpful`, `are you curious`, `are you loyal`, and `are you mischievous`.
|
It also includes a descriptor pack for questions like `are you kind`, `are you funny`, `are you helpful`, `are you curious`, `are you loyal`, and `are you mischievous`.
|
||||||
The newest seasonal pack adds holiday and seasonal prompts for `what holidays do you celebrate`, New Year's resolution questions, `happy holidays`, Halloween costume questions, spring suggestions, holiday gift ideas, and birthday celebration lines.
|
The newest seasonal pack adds holiday and seasonal prompts for `what holidays do you celebrate`, New Year's resolution questions, `happy holidays`, Halloween costume questions, spring suggestions, holiday gift ideas, and birthday celebration lines.
|
||||||
|
The holiday extras batch adds `RA_JBO_ShowSantaTracker` so Santa Tracker stays source-backed too.
|
||||||
|
|
||||||
Holiday-specific note:
|
Holiday-specific note:
|
||||||
- `JBO_WhatHolidaysDoYouCelebrate` now lands in the holiday bucket
|
- `JBO_WhatHolidaysDoYouCelebrate` now lands in the holiday bucket
|
||||||
@@ -18,4 +19,5 @@ The newest social batch adds `welcome back`, `what are you thinking`, `what have
|
|||||||
The fun-fact and joke batch adds Pegasus-style `TellAJoke`, `TellRobotFact`, and `Shuffle` excerpts so proactive fun can randomize across more than one category.
|
The fun-fact and joke batch adds Pegasus-style `TellAJoke`, `TellRobotFact`, and `Shuffle` excerpts so proactive fun can randomize across more than one category.
|
||||||
Those facts are now split into generic, robot, and human buckets so the randomizer can sound more like Pegasus while staying lightweight.
|
Those facts are now split into generic, robot, and human buckets so the randomizer can sound more like Pegasus while staying lightweight.
|
||||||
The new favorites batch adds longer authored `favorite color`, `favorite food`, and `favorite music` variants so the familiar personality responses keep more of the original cadence instead of collapsing to short placeholders.
|
The new favorites batch adds longer authored `favorite color`, `favorite food`, and `favorite music` variants so the familiar personality responses keep more of the original cadence instead of collapsing to short placeholders.
|
||||||
|
The favorites follow-up batch adds `favorite animal`, `favorite bird`, and penguin-focused `do you like penguins` replies so the penguin-centric personality stays closer to Pegasus.
|
||||||
The new motion/sleep batch adds `RA_JBO_SpinAround` plus `RI_JBO_CanSleep` so turn-around and go-to-sleep behaviors can stay source-backed and familiar.
|
The new motion/sleep batch adds `RA_JBO_SpinAround` plus `RI_JBO_CanSleep` so turn-around and go-to-sleep behaviors can stay source-backed and familiar.
|
||||||
|
|||||||
@@ -117,6 +117,27 @@ public sealed class LegacyMimCatalogImporterTests
|
|||||||
reply.Contains("Is that a trick question", StringComparison.OrdinalIgnoreCase));
|
reply.Contains("Is that a trick question", StringComparison.OrdinalIgnoreCase));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ImportCatalog_ImportsBuildBFavoriteAnimalAndSantaTrackerResponsesIntoDedicatedBuckets()
|
||||||
|
{
|
||||||
|
var rootDirectory = Path.Combine(
|
||||||
|
AppContext.BaseDirectory,
|
||||||
|
"Content",
|
||||||
|
"LegacyMims",
|
||||||
|
"BuildB");
|
||||||
|
|
||||||
|
var catalog = LegacyMimCatalogImporter.ImportCatalog(rootDirectory);
|
||||||
|
|
||||||
|
Assert.Contains(catalog.FavoriteAnimalReplies, reply =>
|
||||||
|
reply.Contains("penguins", StringComparison.OrdinalIgnoreCase));
|
||||||
|
Assert.Contains(catalog.FavoriteAnimalReplies, reply =>
|
||||||
|
reply.Contains("favorite animal overall", StringComparison.OrdinalIgnoreCase));
|
||||||
|
Assert.Contains(catalog.HolidayTrackerReplies, reply =>
|
||||||
|
reply.Contains("let's see if i can spot him", StringComparison.OrdinalIgnoreCase));
|
||||||
|
Assert.Contains(catalog.HolidayTrackerReplies, reply =>
|
||||||
|
reply.Contains("north Pole", StringComparison.OrdinalIgnoreCase));
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ImportCatalog_ImportsBuildBEmotionResponsesIntoEmotionBucket()
|
public void ImportCatalog_ImportsBuildBEmotionResponsesIntoEmotionBucket()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -441,6 +441,28 @@ public sealed class JiboInteractionServiceTests
|
|||||||
Assert.Equal("ScriptedResponse", decision.ContextUpdates![ChitchatRouteKey]);
|
Assert.Equal("ScriptedResponse", decision.ContextUpdates![ChitchatRouteKey]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData("what is your favorite animal")]
|
||||||
|
[InlineData("what's your favorite animal")]
|
||||||
|
[InlineData("what animal do you like")]
|
||||||
|
[InlineData("what is your favorite bird")]
|
||||||
|
[InlineData("do you like penguins")]
|
||||||
|
[InlineData("do you like animals")]
|
||||||
|
public async Task BuildDecisionAsync_FavoriteAnimal_UsesPenguinReply(string transcript)
|
||||||
|
{
|
||||||
|
var service = CreateService();
|
||||||
|
|
||||||
|
var decision = await service.BuildDecisionAsync(new TurnContext
|
||||||
|
{
|
||||||
|
RawTranscript = transcript,
|
||||||
|
NormalizedTranscript = transcript
|
||||||
|
});
|
||||||
|
|
||||||
|
Assert.Equal("robot_favorite_animal", decision.IntentName);
|
||||||
|
Assert.Contains("penguin", decision.ReplyText, StringComparison.OrdinalIgnoreCase);
|
||||||
|
Assert.Equal("ScriptedResponse", decision.ContextUpdates![ChitchatRouteKey]);
|
||||||
|
}
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData("what is your favorite flower", "robot_favorite_flower", "sunflowers")]
|
[InlineData("what is your favorite flower", "robot_favorite_flower", "sunflowers")]
|
||||||
[InlineData("what's your favorite flower", "robot_favorite_flower", "sunflowers")]
|
[InlineData("what's your favorite flower", "robot_favorite_flower", "sunflowers")]
|
||||||
@@ -652,6 +674,7 @@ public sealed class JiboInteractionServiceTests
|
|||||||
[InlineData("what should I do for first day of spring", "seasonal_first_day_spring",
|
[InlineData("what should I do for first day of spring", "seasonal_first_day_spring",
|
||||||
"flowers and all things spring")]
|
"flowers and all things spring")]
|
||||||
[InlineData("what should I get for holiday", "seasonal_holiday_gift", "pet elephant")]
|
[InlineData("what should I get for holiday", "seasonal_holiday_gift", "pet elephant")]
|
||||||
|
[InlineData("show santa tracker", "seasonal_santa_tracker", "spot him")]
|
||||||
[InlineData("happy birthday", "birthday_celebration", "another year older")]
|
[InlineData("happy birthday", "birthday_celebration", "another year older")]
|
||||||
public async Task BuildDecisionAsync_SeasonalCharm_UsesImportedReplies(
|
public async Task BuildDecisionAsync_SeasonalCharm_UsesImportedReplies(
|
||||||
string transcript,
|
string transcript,
|
||||||
|
|||||||
Reference in New Issue
Block a user