Releases: neph1/LlamaTale
v0.20.0 - Action dropdown, location images, load character button
What's Changed
-
Action dropdown. It doesn't contain all commands, because Tale has many.
-
Load characters from file (if you're a wizard). Shortcut for the
!load_character
wizard command. Currently only supports .json files. -
Possibility for locations to have images. Can also be generated.
Full Changelog: v0.19.0...v0.20.0
v0.19.0 Beginnings of autonomous npcs
What's Changed
The main feature for this release is something that may not be ready for prime time, just yet. But it's still functional and possible to test.
One of my goals has always been 'life-like' NPC's that can decide their own goals and actions. This release allows them to select an action from a list, provide a goal and motivation, and of course some result from it. With a 7b, it works to some extent. But they seem unable to move very far from their origin standpoint. I have some ideas on how to take it further.
It also led to some unexpected events during testing, where an autonomous 'Shanda' attacked the player and others on sight.
I decided to, for now, to keep it disabled. If you want to, you can enable it for any npc with the 'autonomous' flag. It works for characters loaded, or by setting it in the json or py file.
Some other quality of life changes include a dropdown system for selecting character. It was suggested by 'The Yellow Snake' in the discord channel. Join us if you want to discuss LlamaTale!
I added a 'set visibility' command for wizards. It's common in MUDs for wizards to be invisible themselves, and as a Game Master it is valuable since you can affect things while being unseen. It's not limited to the own self, though. Any object can be toggled. Use with: !set_visibility object true/false
Full Changelog: v0.18.0...v0.19.0
v0.18.0 Avatars for npcs, image generation, backend changes
Highlights:
- NPC's can now have preconfigured avatars (instructions to come). The Prancing Llama has this as a proof of concept.
- Avatars can be generated using Automatic1111's web ui (for now) (instructions to come)
- Backend changes. Config are now broken down into separate files for different backends, to declutter llm_config.yaml a bit.
- Updates to dialogue prompt and parsing. Npc's will now stick to topic more and repeat themselves less.
Avatars and image generation is for --web only (for now).
Full Changelog: v0.17.1...v0.18.0
v0.17.1 More quests
What's Changed
-
Notes with quests (and lore) on them can now be generated. These are so far simple quests to encourage the player to explore the surroundings.
-
Added new wizard commands (to use them you need to launch with the '--wizard' flag, and remember to precede them with a '!'):
- 'Enrich'. By typing
!enrich items
in the prompt, the same generation sequence that is run at the start of an 'Anything' story will be triggered. This allows you to add more 'story' items to the world, without having to wait an eternity at the start of the game. Similarly,!enrich creatures
will generate even more mob-like things for the LLM to choose from. - 'Add event'. This is like a powerful emote, where you can specify something happening in the location, that NPC's can react to. It will be added to their memories. Example in the 'teaparty' story:
!add_event A Bloated Murklin slams into the window
A Bloated Murklin slams into the window. Mad Hatter looks startled and confused as the Bloated Murklin slams into the window. “Oh dear! What in the world…?” he exclaims, his voice muffled by his oversized hat. The Duchess’s eyes narrow as she watches the Murklin through the window. “Well, well, well,” she says in a low, menacing tone. “Look what we have here.” With a flick of her wrist, she conjures up a small puff of smoke that darts towards the Murklin, obscuring its vision and temporarily blinding it. Ace of Spades glares at the Bloated Murklin, his thin lips curling into a snarl as he mutters darkly under his breath.
Note that each of the three characters has their own reaction in this paragraph.
I will focus on some more 'GM-like' commands next, since I think this was pretty fun and I have some more ideas.
Full Changelog: v0.17.0...v0.17.1
v0.17.0 "Quests"
What's Changed
Full Changelog: v0.16.2...v0.17.0
This is the beginnings of a way to drive story, procedurally, although they're not yet implemented in that manner. I needed to try them out first.
What "quests" mean is that a character may have a quest "attached" to them. If they do, they are meant to want to talk about it. If they do, and how much, is up to the LLM, but at least it's prompted during dialogue generation to have it in mind.
There are two types, currently, either 'fetch' type quests, where the player must find an item and bring it to the NPC, and 'talk', where the player is supposed to go to someone and talk to them. Once the format is proven, there will be more types.
So far Elid and Shanda in The Prancing Llama have quests. Both are 'fetch' type quests. Elid seems more inclined to talk about it, but then again, he's more inclined to talk in general.
This is not the best example, but it's the one still in the logs (gpt-3.5-turbo):
Elid Gald looks up from his conversation with Arto, his one eye
glinting in the firelight. “Hail, friend,” he says with a sly smile,
“What brings you to this desolate place?” He leans in, his voice low
and conspiratorial, “I trust you haven’t forgotten about our little
arrangement regarding the map? Norhardt may be a tough nut to crack,
but I’m counting on you to secure it for me,” he says, his tone a mix
of urgency and anticipation. Elid Gald nods at Arto and gives a
slight smile, acknowledging the greeting. He takes a sip of the
hearty stew and looks around the hall, eyes sharp despite the patch
over one of them. ’Always good to see a familiar face around here,’
he murmurs, his voice low and thoughtful.
More stuff:
I finally fixed 'generic items'. There are a bunch (not that many yet) items for different types of settings that will always be available for an Anything story. A sword, a club, that type of things.
I changed so that 'openai' calls also use json grammar, since I realized many that use the open ai style api use other backend than acutal openai.com and will want to be certain to get proper json responses.
I also updated the default openai model to 'gpt-3.5-turbo-1106' to be able to also make sure it uses json responses.
v0.16.2
What's Changed
This was supposed to be a small follow up release to 0.16.1 with just a few minor fixes, but doing some extensive testing, I found a slew of bugs. Some stemming from a recent refactor, some probably older. In any case, this should improve quality of life.
An excerpt:
- Save whether location has been 'built' or not. Previously, loaded dynamic stories would no generate new locations
- The llm_cache was broken and would not use the stored values.
- Food and Drinks didn't work and would throw an exception if anything was interacted with in a location.
- Exit descriptions were sometimes broken, just saying 'description'
- There was an issue with the combat prompt, leading to an exception
And one new feature:
- Saving and loading of npc 'memories', meaning they will retain anything they have learned when loading a story.
Full Changelog: v0.16.1...v0.16.2
v0.16.1 - Save/load Anything stories
What's Changed
Anything stories can now be saved and loaded. It's still not user friendly:
The story_config.json, world.json and llm_cache.json will be saved in the 'stories/anything' folder. For them not to be overwritten you will need to move them out of there.
You could then create a new folder with a suitable name and put them there (along with the default story.py)
Unintentionally, I realized I had been testing with a feature from the next release; storing and loading NPC's memories and the llm_cache.
Rather than going through the test phase again, I decided to include them. The feature is not fully tested, but at least it doesn't seem to break anything. If it works, this means that NPC's will remember everything from the last session.
A reminder: Save/load is decoupled from Tale's save/load. I should hide that feature, but for now, ignore any prompts about loading or saving your progress. To save, you type 'save_story' in the prompt. Loading will be automatic if the files are present in the story's folder.
Full Changelog: v0.16.0...v0.16.1
v0.16.0 Save stories
A first instance of saving stories has been implemented. It's completely different than the existing Tale serialization and instead uses json. This makes it easy to edit files, if you want to.
Currently it saves:
- Locations,
- Zones,
- NPCs,
- Items,
- Story background info.
There are still several states that aren't saved, like memories and ongoing story info, dialogues, etc.
So, for now, use this if you find a particular world you would like to visit again.
To save, type 'save_story' in the command prompt.
There's no way to load from inside the game currently (sorry). My suggestion is that when you have saved it:
- Copy the 'world_story' folder from tests/files into 'stories'
- Copy the 'world.json' and 'story_config.json' that were saved in the current (anything?) story folder
- Update story.py to use the new config.
A bit cumbersome. I'll work out some better system in a future release.
Edit: This currently doesn't work with 'anything' stories. I'll fix that in v0.16.1 later this week.
v0.15.2
What's Changed
- I had messed up idle action responses which are now fixed.
- Combat prompt now includes 'health status' as input to give LLM more to go on.
- Some preparations for the next new feature.
Full Changelog: v0.15.1...v0.15.2
v0.15.1 Knowledge and memory cache and qol fixes
What's Changed
- Added new caches, similar to how the look caches work. Each action is stored in text, and characters keep a list of hash values which are used to recall actions and conversations they have heard (without storing the explicit string for each). This should help them stay on track better.
- Tweaked some prompts
- Fixed some parsing of unwanted chars.
- A bit of refactoring.
Known bugs: I've noticed that, due to the long response times from gpt3.5-turbo, idle actions and reactions can end up being cut off, with the odd character showing up in the output. I'll investigate this further.
Full Changelog: v0.15.0...v0.15.1