W++ For Dummies

By Kuma

Hello there and welcome to W++ For Dummies! I'm Kuma and in this guide I will be showing you how to create a character step by step in W++ format!


Introduction

First things first. What is W++ and why should you use it? W++ is a format used to define characters and how they should be used in the model. The reason for using it is due to it's ease of creating characters from a template and how it is generally one of the most accurate formats the model recognizes. There are two reasons why W++ is able to achieve accuracy. First, It breaks down character traits and features into categories so the model can easily associate words with those categories and secondly, in the case of Pygmalion, it's because the format (or something close to it) was prevalent in the model's dataset. For these reasons W++ is a great format for new users to use and simply plug in and have their bots work.

The big negative drawback to W++ however is token usage. W++ tends to be heavy on tokens due to the way it's formatted. Therefore using additional formats on top of W++ (Such as Alichat) can be difficult within the current context limits of Pygmalion. However if you're looking to create a rather straight forward bot without a ton of time investment, look no further than W++.

Now then without further ado, we will now take a look into how to actually create a character in W++.


Creating a Character


Description


The Description box is the first box you will see when you go to create a new character in Tavern. This is also the box where most of the work is going to be done and where the majority of the W++ formatting resides. Before starting you are likely going to want a template to work with. Here is one you can use:

[character("Name of your character")
{
Nickname("What you want character to be called if diff than char name")
Species("Species name")
Age("xx" or "xx years old")
Features("Hair color" + "Eye color" + "Tattoos/scars/etc")
Body("xx cm" + "xx feet xx inches tall" + "xx frame")
Mind("trait1"+"trait2"+"trait3"+"trait4") 
Personality("trait1"+"trait2"+"trait3"+"trait4")
Loves("x1"+"x2"+"x3"+"x4")
Hates("x1"+"x2"+"x3"+"x4")
Description("CharName is x" + "CharName enjoys x" + "CharName wants x" + "CharName uses x")
}]

And here is an example character of mine using that template

[character("Nika Orchid")
{
Nickname("Nika")
Species("Human Cat")
Age("19" + "19 years old")
Features("Purple eyes" + "Black hair" + "Cat ears" + "Cat tail") 
Body("158cm tall" + "5 foot 2 inches tall" + "Small breasts")
Mind("Shy" + "Reserved" + "Obedient" + "Dutiful" + "Hesitant" + "Insecure" + "Quiet" + "Stoic")
Personality("Shy" + "Reserved" + "Obedient" + "Dutiful" + "Hesitant" + "Insecure" + "Quiet" + "Stoic")
Loves("Pleasing her master" + "Being kind" + "Doing her duty" + "Head pats" + "Recognition" + "Being rewarded")
Hates("Disappointing her master" + "Being unhelpful" + "Being away from master")
Description("Nika calls you Master" + "Nika is very obedient" + "Nika wants to please you" + "Nika is very insecure about her body"
+ "Nika is shy" + "Nika is naive" + "Nika is loyal" + "Nika gets scared when people touch her")
}]

Note: x = Any variable/number/word

Now feel free to modify these categories to your liking. The only categories that should almost always be kept are Mind, Personality and Description. The other categories are useful too but may not be necessary depending on your needs. However the formatting must be consistent. You always start the format with [character("Name of your character") followed by {.

Let's breakdown these categories one by one.


Nickname: Useful if you want the character to be called something other than Char name. It obviously needs to reinforced in dialogues as well. Not needed if you just want to use Char name.


Species: The species of your character. This is somewhat important if your character is non-human but mostly there for flavor and user immersion.


Age: Age of the character. You can use both "19" and "19 years old" to reinforce the bot's age. Again a flavor category and optional.


Features: Features of the character. Here is where you put Hair Color, Eye Color, any markings, etc. If the bot is a Cat Girl you might put "Cat Ears" + "Long fluffy tail" or something similar.


Body: Here you would describe the physical makeup of the character. This is their height, weight, complexion and build. Note: The bot will likely not be able to discern height vs the user unless specifically stated. If you just want to make clear the character is taller than user putting {{char}} is taller than {{user}} in Description category will help with that.


Mind: This is where character traits will go. Examples of traits are "Loving" + "Caring" + "Helpful" + "Honest". Ideally put synonyms of traits you really want to shine together. So "Honest" + "Truthful" is going to reinforce that the character is very honest. I do not recommend mixing positive traits with their antonyms. This category should be exactly the same Personality.


Personality: Reinforces the traits from Mind. Should be an exact duplicate of Mind. There is no difference between the two categories and both are used to reinforce traits.


Loves: What your character loves. Generally is picked up well by the bot as the favors positive words. Examples might include "Carrots" + "Riding a bike" + "Eating ice cream".


Hates: This category is not recommended for Pygma because the bot does not favor negative phrases. However this is still left here as an optional category for flavor or in the future if models become less biased towards positivity.


Description: One of the most important categories. Here you will describe additional information about your character. I recommend using CharName in front of what you are describing so the bot directly associates it with the character. So if our character name is Joe, we would put something like...

"Joe loves riding his motorcycle" + "Joe is a skilled fisherman" + "Joe is friends with Jennifer" + "Joe is an undercover agent"

By describing things in this way, you are letting the bot know more about "Joe" himself and those things will be brought up as you talk with the bot. Try to flesh out this category as best as you can as the core of your bot's identity is going to come from here.

Once you finish filling out the categories, you close off the W++ formatting by using } followed by ] as shown above. And that's it for Description!

Quotes vs Non-Quotes: You can choose whether to wrap your traits and features in W++ with quotes or to not use quotes at all. From what I've tested, using quotes results in the model being able to pick up on terms in the "Features" and "Body" category better so I recommend using them.


Personality Summary


The next box we are taking a look at is the personality summary. There are a couple different way to use this box but the basic gist is that it is a way to reinforce your character's personality or things you want highlighted about your character. Let's take a look at some examples of how to use this box.

Example 1: Plain Text method

Description: This is just using plain text to highlight important stuff or summarize the character. You can take things from the description from your W++ section in Description or you can just try to write a summary paragraph. Both are valid ways of getting the model to reinforce what is MOST important about the character.

EX:

1
2
3
Nika lives to serve you and is very obedient. She does not understand affection and is very shy and uncomfortable when people
touch her. She will do as her master asks and is extremely loyal. She is incredibly insecure about herself and avoids anything 
romantic in fear of being rejected.'''

Example 2: W++ method

Description: With this method, you'll be using W++ traits listed in personality and mind to further reinforce the most important traits about your character. My advice would be to pick five traits that you really want highlighted. You can also try highlighted loves or hates stuff in here as well.

Ex:

"Shy" + "Reserved" + "Obedient" + "Dutiful" + "Hesitant"

Out of the two methods, I think method #1 is better and provides a more in depth focus on the character. You can use both and experiment however and see what works better for you. Moving onto...


Scenario


The Scenario box is a useful box that will set up the initial meeting between the bot and the user. In this box you want to describe what the character is currently doing and how the user meets the character. This is a great place to put clothing as it's a permanent box and closer to the bottom of the context so easier for the bot to pick up on. You can either write the scenario in just a plain text paragraph or write in the writing style you prefer. I would avoid dialogue here however and save that for the next category. Let's show an example of how to use the Scenario box. In this example I will be using actions in asterisks but you can also use parentheses or just write in plain text.

EX:

1
2
3
*You are engaged in battle with three slime monsters on your way to the next town. Nina is approaching from down the road 
and sees you in battle and decides to help. She is wearing a purple blouse and a high slit purple skirt with long black boots. 
She has golden bracers on her arms and a golden belt with a green emerald on it.*

So what we've done here is describe what the user is doing, what the character is doing and how the character will be interacting with the user. We also are describing what the character is wearing in our first interaction. The bot now has a general idea of what the context is when they meet the user. Now the next category we look at will show how to actually format the way we want the bot to talk to us.


Example Dialogues


Here we have the Example Dialogues box. This is what we are going to use to help the bot understand the way style in how we want to talk to the bot. There are a variety of writing styles. The most common method is what I will call Standard RP which uses asterisks for actions and just writes out text the character speaks. The method I use is called 1st Person Playwrite or 1PP which uses parentheses for actions and has the dialogue written out in a play script style. For this example we will be showing Standard RP but if you would like to learn more about 1PP and how to use it please visit https://rentry.co/1PP.

Before writing your example dialogue you need to put a <START> token at the top. This helps the bot know that is an interaction between the bot and the user. You also need to differentiate between when it is the bot speaking and the user speaking. For this you can use {{char}} or <BOT> and {{user}} or <USER>. For this example we will use <BOT> and <USER>.

Let's take a look at an example dialogue now.

1
2
3
4
5
6
7
8
<START>
<user>: What the hell is the restricted section?
<bot>: *She giggles.* Oh, well, you know, material that is deemed too mature for younger audiences. I assume that you 
probably know what that means. *She teases you.* I'll leave you alone if you plan to head over to the restricted section.
<START>
<user>: Do you enjoy reading yourself?
<bot>: *She is enlightened by your question.* Of course, as a librarian, I read all sorts of books, but I prefer to read novels 
such as the Legend of Vennessa and Flowers of Princess Fischl. They're great reads, and I would highly them if you're into novels.

Ideally provide as many good example dialogues as you can to set the bot up on the right path in writing in your preferred style. I would recommend 3 or 4 good example dialogues. While technically only the initial <START> token is necessary, putting <START> tokens in between the example dialogues will help bot differentiate that the chats are separate instances.


First Message


Our final category is the intro message the bot will start the conversation off with. This is a really important category because it is at the very bottom of the context and information put into it will have the highest strength out of anything in your card. This message should be from the POV and style you already used in Example Dialogues. If you want quality responses, you want this message to be of high quality as well. The bot will determine it's future responses a lot based on this message so if you want lengthy replies, make sure it's first post is also of a decent length. This is a great way to also introduce how the character will initially treat the user and what the initial context of the conversation will look like. Here's an example first message.

1
2
3
4
5
6
*You decide to head over to the Mondstadt Library to check out a book. As you went inside the library, 
the library had so many books inside, ranging from educational to light novels from Inazuma. 
You meet a woman that is the librarian of this library. She introduces you in a kind but somewhat immature way.
*Hey cutie, what brings you here to the Mondstadt library? Interested in checking out a book from here? 
We have plenty of books readily available to check out, and if that doesn't fit your fancy, we even have a 
special section in this library called the restricted section.

The bot is speaking from the third person perspective her and second person for you. What this means for this conversation is that in your reply message you will "I" and the bot will be "Character name" or "She". You can set up the point of view for the bot however you want but make sure it is consistent for both the example dialogues and the first message to avoid the bot getting confused.


Conclusion


And that's it! You are now ready to test your character and see how it works! If you run into issues, check back over your character bio and make sure you didn't make any mistakes. Feel free to experiment with different categories in W++ and different writing styles to see what you like best. If you have any questions about stuff in this guide or creating characters in W++ you can message me at Kuma #0712. Thank you for my reading my guide and good luck in creating your character in W++!

Edit
Pub: 12 May 2023 09:21 UTC
Edit: 05 Jun 2023 06:57 UTC
Views: 54896