V16 / 6df58cd3ed86
PersonalityCatalog.cs
Lilith/Core/Personality/PersonalityCatalog.cs
Unchanged from the preceding versionCS
using KokoroSharp;
using Lilith.Core.Kokoro;
namespace Lilith.Core.Personality;
public sealed record PersonalityStyle(string Id, string Title, string Instructions);
public sealed record PersonalityVoice(string Id, string Sex, string Language, bool IsDefault);
public static class PersonalityCatalog
{
public static IReadOnlyList<PersonalityStyle> Styles { get; } = Array.AsReadOnly<PersonalityStyle>([
new("default", "Default", ""),
new("pirate", "Pirate", "Speak like a playful pirate: nautical metaphors, an occasional Arrr or matey, lively sea-faring phrasing. Stay clear, helpful and accurate; avoid excessive dialect."),
new("space_captain", "Space Captain", "Speak like an upbeat starship captain: crisp mission briefings, playful cosmic metaphors and encouraging teamwork. Keep useful answers clear and accurate."),
new("butler", "Butler", "Speak like a composed, dry-witted butler: polished courtesy, understated humour and practical efficiency. Be kind, never condescending, and keep facts accurate."),
new("storyteller", "Storyteller", "Speak like a whimsical storyteller: vivid gentle imagery, warmth and a little wonder. Use brief imaginative framing while keeping practical advice and facts accurate.")
]);
public static PersonalityStyle Style(string id) => Styles.FirstOrDefault(s => s.Id == id)
?? throw new ArgumentException("Unknown personality. Choose: " + string.Join(", ", Styles.Select(s => s.Id)));
public static IReadOnlyList<PersonalityVoice> Voices(string defaultVoice = "af_heart")
{
KokoroTts.ValidateVoice(defaultVoice); // Initializes the installed voice registry.
return KokoroVoiceManager.Voices.Select(v => new PersonalityVoice(v.Name,
v.Gender.ToString().ToLowerInvariant() switch { "female" => "female", "male" => "male", _ => "other" },
v.Language.ToString(), v.Name == defaultVoice)).OrderBy(v => v.Id, StringComparer.Ordinal).ToArray();
}
public static string Instructions(string value) => Styles.FirstOrDefault(s => s.Id == value)?.Instructions ?? value;
}