Thistle Gulch Simulation - v0.6
Thistle Gulch Simulation is an open-source Muti-Agent Gym Environment (MAGE). Designed for creators, researchers, and AI enthusiasts alike, our simulation platform offers unprecedented control over the narrative and character interactions through a powerful Python API. This allows for deep customization of AI decision-making processes and conversation generation. Whether you're looking to simulate social interactions, or explore the boundaries of AI-driven storytelling, our goal is to offer the tools and flexibility to bring your visions, and these AI characters, to life.
Here’s the latest release notes for v0.6. Check them out and join the discord community!
Thistle Gulch Simulation v0.6 includes the following dependencies:
Beta Now Open to All!
The Thistle Gulch Runtime is now open to everyone to download for free via itch.io, including builds for Windows, Mac, and Linux. Included in this release is a simpler way to get started on Windows. The Bridge has been packaged as an exe file and bundled with the Runtime, so there is basically no set up beyond setting your OpenAI API key, downloading Thistle Gulch via itch. Pressing "Launch" in the itch.io app now launches the bridge in a command line window, which in turn automatically starts the runtime as well.
Advanced users looking to customize demos or create their own content will still want to install the bridge the traditional way via github clone, but this way folks can get started quickly.
Fixes
Cost Counter Fixed
When streaming by default in SAGA, it caused OpenAI to not send token usage information. The DefaultSagaCallback was rewritten to calculate token usage which is used to show the cost counter. Only OpenAI cost calculation is supported at this time, but PRs are welcome.
LLM Prompt Fixes
Conversations are now formatted as a list of ConversationTurn objects {<persona_guid>, <dialogue>}
. With the previous schema, OpenAI still generated using this format about 10% of the time, causing the parsing to fail. The new format also saves tokens in the prompts and when generating conversation turns. The default prompt from the Runtime was also malformed in some places, like conversations, memories, and character metadata, leading to more prompt tokens than were necessary, so that’s been improved as well.
Conversation parsing can still run into errors (generative AI isn’t perfect yet), but now Runtime parse errors will be returned to the bridge to either be handled, or logged.
Features
Place/Move Characters via API
Characters can now be moved via API instead of having them having to walk to a destination. This works during on_ready
(before the sim starts), but also any time you want to use it. It’s available as api.place-character()
The new “Move Characters” Demo shows off that API by giving location options in a modal, and them moving blackjack to the chosen option.
Detailed Location Data
Locations include more metadata, including specific Vector3
details for their world locations. The bounding box for each location, including the center point, extents, and and the center floor position were added and use the new Vector3
format. Vector3
is also used for camera placement and memory metadata.
Toggle Action Generation in UI
Having to Enable/Disable Action generation via the API is inconvenient when experimenting or just exploring via the Runtime. A checkbox is now available when hovering over a character that allows changing the state in the UI as well. Active Agents still have a purple border around their icon, so you know their state at a glance.
Enable/Disable Agent Conversation Generation
By default, characters no longer use SAGA to generate conversations, saving costs by default. However, just like Character’s Action, Conversations can be enabled/disabled as needed, Character’s Conversation Agent is also configurable using the updated api.enable_agent()
.
Clearer Dialogue Bubbles
Tweaks were added to make the dialogue easier to read, especially when viewing demo videos on small screens like a phone or in 720p resolution. The bubble width, and fonts were increased and the font changed to Verdana. The size of the bubbles are more consistent across zoom levels as well.
Modal Windows Improvements
Sometimes the content of a modal, like the Action Options may be larger than the screen space allowed for a modal window. When that happens, the window becomes scrollable, so lots more information or button options can be presented as options. While the modal is open, the ESC/Right-Click to escape the current context is disabled now as well to prevent characters losing focus while in a modal.
Focus API Adds ‘open_tab’ Option
When using api.focus_character()
to show a character’s detail panel, there is now an open_tab option that takes the ID of one of the tabs of the focus panel:
HISTORY
: Log of character decisions, actions, and convosCALANDAR
: Character’s daily schedule (jobs or appointments)CHARACTER_DETAILS
: Character’s Backstory and Description
All SimObjects added to World Context Data
“SimObjects” is the terminology for the simulation’s “smart” objects, the things that provide affordances for characters to interact with, including the characters themselves. It’s a concept borrowed from the Sims franchise. Previously, only a small subset of the SimObjects were in the world context data. The new version includes things like character’s beds, ore deposits, and lots more.
Character and SimObject Selection Events
When a character Focused on (their details panel is displayed in the upper left) or that focus is lost, those events are now sent back to the bridge via on_event()
, allowing for more interactive experiences and demos to be created. These events were used in the new “Meet the Characters” demo below.
SimObjects, including characters and the objects they interact with in the world also transmit the on-sim-object-selected
event. There is a new “Select Sim Object” demo that demonstrates its use as well.
Meet Characters Demo
In the Default Demos section, a Meet Characters option is now available. It makes it easy to step through each Character in thistle gulch and will automatically open their Focus (details) panel showing their backstory and description as well.
Cancel Character Action
A Character’s current Action can be interrupted by passing None to the api.override_character_action()
method. This is useful when enabling generative actions for a character, not wanting to wait for the current action to complete before triggering new action options to be generated.