0.39.0 (#274)
- **Help Agent** — A new agent that answers questions about Talemate itself — settings, agents, clients, the world editor — grounded in the bundled documentation, and able to change agent and application settings on request. - **Timeline Rollback** — Scrub a slider across a scene's automatic version history, preview the message history at any revision, then roll the scene back in place or fork the revision into a new save. - **Pi Bridge Client** — A new client type that drives generations through the pi coding agent's headless RPC mode, making any model pi can reach usable in Talemate. - **Application Settings** — Settings move out of their modal into an always-available Settings tab, with a single topic-grouped sidebar, a settings search, all API keys on one page, and unsaved-change tracking. - **Scene Library** — The home screen is rebuilt as a full-page landing view with a file-tree scene library, cover thumbnails and per-save metadata, scene and save deletion, and a drag-and-drop import dropzone. - **Fast Character Creation** — Generate a character in a single request instead of one prompt per aspect, with a Consolidate multi-select, a token budget, and a Fill in misses pass. Off by default. - **Scene Backdrop** — Set any scene illustration as a backdrop filling the scene view behind the messages, saved with the scene, with configurable text legibility and an Immersive quick-toggle. - **Scene Visual Manager** — World Editor → Scene gains a Visuals tab to browse, upload, generate and delete the scene's backgrounds and illustrations, and set the cover image and backdrop. - **Visual Prompt Finalization** — Post-processing actions — match and replace, or a free-form AI instruction — rewrite image prompts right before they reach the image backend, with per-scene and per-character overrides and reusable template sets. - fixes #271 - fixes #275 Plus 25 improvements and 39 bug fixes — see [CHANGELOG.md](https://github.com/vegu-ai/talemate/blob/prep-0.39.0/CHANGELOG.md#0390) for the full list.
36
.dockerignore
Normal file
@@ -0,0 +1,36 @@
|
||||
# Build context excludes. Every path the Dockerfile COPYs from the context must
|
||||
# stay out of this list: talemate_frontend/, src/, docs/, scenes/, templates/,
|
||||
# tts/, chroma*, pyproject.toml, uv.lock, frontend_wsgi.py, config.example.yaml
|
||||
# and docker-entrypoint.sh.
|
||||
|
||||
.git
|
||||
.github
|
||||
tests
|
||||
|
||||
# docs/ is NOT excluded. The help agent reads TALEMATE_ROOT/docs at runtime, so
|
||||
# the backend-build stage copies it and keeps the markdown.
|
||||
|
||||
# A host node_modules lands on top of the one the image installed. pnpm then
|
||||
# reads the host's own paths out of it, decides the dependencies are stale, and
|
||||
# reinstalls mid-build - which aborts when no TTY can confirm the purge.
|
||||
**/node_modules
|
||||
talemate_frontend/dist
|
||||
|
||||
.venv
|
||||
talemate_env
|
||||
embedded_python
|
||||
embedded_node
|
||||
**/__pycache__
|
||||
**/*.pyc
|
||||
*.egg-info
|
||||
.pytest_cache
|
||||
.ruff_cache
|
||||
.coverage
|
||||
|
||||
# Runtime state and credentials. docker-compose mounts these as volumes, so an
|
||||
# image layer never needs them.
|
||||
config.yaml
|
||||
secrets
|
||||
pi
|
||||
logs
|
||||
chats
|
||||
2
.gitignore
vendored
@@ -8,9 +8,11 @@
|
||||
talemate_env
|
||||
embedded_python/
|
||||
embedded_node/
|
||||
chats/
|
||||
chroma
|
||||
config.yaml
|
||||
secrets/
|
||||
pi/
|
||||
logs/
|
||||
.cursor
|
||||
.claude
|
||||
|
||||
164
CHANGELOG.md
@@ -2,6 +2,170 @@
|
||||
|
||||
_Auto-generated. Do not edit by hand._
|
||||
|
||||
## 0.39.0
|
||||
|
||||
### Help Agent
|
||||
|
||||
A new Help agent answers questions about Talemate itself — settings, agents, clients, the world editor and more — grounded in the bundled documentation, which it can search and read before answering. Opened via the help icon in the app bar, it works with or without a loaded scene, keeps multiple persistent chats, and runs in the background so it never blocks the main Talemate loop.
|
||||
|
||||
Chats can be made scene-aware, and each question carries a small snapshot of what you are looking at in the interface. When asked, the help agent can also read your configuration and change agent and application settings, recording exactly what changed — it never exposes API keys and cannot change scene content.
|
||||
|
||||
### Timeline
|
||||
|
||||
A new timeline dialog gives scene history a single home, replacing the old Restore from Backup dialog. Drag a slider across the scene's automatic version history to preview the message history at any revision, then fork that revision into a new save — the scene you are playing is never modified, and browsing the history changes nothing on disk.
|
||||
|
||||
Forking is the only action the timeline applies. Rolling a scene back in place and opening a revision directly are disabled in this version.
|
||||
|
||||
### Pi Bridge Client
|
||||
|
||||
A new Pi Bridge client type drives generations through the pi coding agent's headless RPC mode instead of a direct LLM API. pi owns provider authentication and model resolution — including custom providers and models defined in pi's own configuration — so any model pi can reach becomes usable in Talemate.
|
||||
|
||||
Provider and model are free-form fields with suggestions pulled from pi's model catalog, reasoning maps to pi's thinking levels with the thinking output captured for the reasoning display, and concurrent inference runs an isolated pi instance per request. Sampling parameters stay on the pi side by design.
|
||||
|
||||
### Application Settings
|
||||
|
||||
The application settings move out of their modal into an always-available Settings tab alongside the World Editor and Templates. The nested tabs-within-tabs layout is replaced by a single sidebar grouped by topic — Game, Appearance, Connections, Presets and Storytelling — and a settings search finds any setting by name, including individual API-key providers, and jumps straight to it. All API keys now live on one scrollable page instead of ten per-provider pages.
|
||||
|
||||
Edits are tracked against the stored configuration: an unsaved-changes indicator with Save and Discard appears in the toolbar and on the Settings tab, unsaved edits survive switching to other tabs, and configuration changed elsewhere while you are editing is flagged instead of silently overwritten. Existing deep links, such as the Set API key action on a misconfigured client, land on the correct page as before.
|
||||
|
||||
### Scene Library
|
||||
|
||||
The home screen is rebuilt as a full-page landing view, replacing the sidebar load panel. A file-tree Scene Library lists scene projects with cover thumbnails, save counts and per-save metadata, along with an asset and node-module summary for each expanded project. Long save lists collapse behind a Show all row, the list is filterable, and a click loads the save.
|
||||
|
||||
Individual scene files and character cards can be deleted from the tree, and an entire scene project — saves, assets, nodes and history — can be deleted behind a type-the-name confirmation. Scene and character card import now happens in a prominent drag-and-drop dropzone next to a Create new scene card, with the quick-load recent scene cards kept on top.
|
||||
|
||||
### Fast Character Creation
|
||||
|
||||
The Creator agent gains a Character Creation section with a Fast mode that generates a character in one request instead of one prompt per aspect. A Consolidate multi-select picks which aspects — name, description, attributes, dialogue instructions, example dialogue — the single prompt covers; unselected aspects keep their individual prompts, and selected attribute templates fold in as per-attribute instructions instead of a prompt each. A token budget slider sizes the shared response, and a Fill in misses toggle re-runs the individual request for anything the consolidated response missed.
|
||||
|
||||
Every AI-assisted character creation path routes through this flow, and the consolidated prompt applies the scene's writing style template when one is configured. The split per-aspect flow remains the default for older or smaller models, and Fast mode is off by default.
|
||||
|
||||
### Scene Backdrop
|
||||
|
||||
Any scene illustration can now be set as the scene backdrop — an image that fills the whole scene view behind the messages instead of rendering inline. The backdrop belongs to the scene and is saved with it, so it survives reloads and history edits. Message text sits on translucent panels with a drop shadow for legibility — panel opacity and the text shadow are configurable.
|
||||
|
||||
An optional Auto Backdrop setting promotes newly generated scene backgrounds and illustrations automatically, and an Immersive quick-toggle chip in the scene tools turns the backdrop on and off without forgetting the chosen image.
|
||||
|
||||
### Scene Visual Manager
|
||||
|
||||
World Editor → Scene gains a Visuals tab mirroring the character visual manager: browse, upload, generate (single or batch, new or as variations of a reference image), and delete the scene's background illustrations, scene illustrations and scene cards, set the scene cover image, and set or fully unset the scene backdrop (the Scene Card sub-tab is portrait and offers no set-backdrop action). A Prompt Finalization sub-tab edits the Visualizer agent's per-scene prompt finalization overrides.
|
||||
|
||||
### Visual Prompt Finalization
|
||||
|
||||
The Visualizer agent gains a Prompt Finalization settings tab defining post-processing actions — exact, fuzzy, or regex match and replace, or a free-form AI instruction — that rewrite image prompts right before they are sent to the image generation backend. Actions can target positive and/or negative prompts, be restricted to specific visual types, and be overridden per scene; characters can define their own actions that run after the agent's.
|
||||
|
||||
Reusable action sets are managed as a new Visual prompt finalizer template type, including a shipped Ideogram JSON preset, and a new FinalizePrompt node exposes the step to custom node graphs.
|
||||
|
||||
### Improvements
|
||||
|
||||
**Clients & Generation**
|
||||
|
||||
- Client settings now offer the same widget set as agent settings — sliders, autocompletes, rich selects with notes, and conditional visibility.
|
||||
- MistralAI: added a Concurrent Inference toggle so batch operations can dispatch multiple requests in parallel. Off by default.
|
||||
- Text-Generation-WebUI: a new API handles prompt template toggle lets the server apply the model's own chat template; response pre-filling and reasoning capture keep working. Off by default.
|
||||
- llama.cpp: the same API handles prompt template toggle renders prompts through the model's built-in chat template, with reasoning respecting the client's setting. Off by default.
|
||||
- Clients can automatically retry empty responses, rate limiting, and skipped reasoning — separate 0–5 retry sliders per issue, with a progress notification and abort. Off by default.
|
||||
- OpenRouter: a new Parameters tab toggles individual sampler parameters — disabled ones are omitted from the request entirely, for providers that reject parameters they don't support.
|
||||
- Pi Bridge: the Docker image ships with pi preinstalled and mounts pi's configuration directory, so the client works in Docker out of the box.
|
||||
- A new Environment Variables settings page stores named values encrypted at rest and passes them to Talemate's pi instances, so pi's configuration can reference secrets by name.
|
||||
|
||||
**Scene & UI**
|
||||
|
||||
- AI-assisted character creation gains a Generate example dialogue option, with a guidance field to steer tone, speech patterns, and quirks. Off by default.
|
||||
- The two Add tracked state actions in the scene tools are now a single Track state action — pick the world or a character in the modal.
|
||||
- Character card import gains per-step AI generation toggles with Full and Minimal presets — disabled steps use the card's original data, so a minimal import needs no text generation.
|
||||
- Per-scene agent overrides now cover the enable toggle of every agent action, not just the settings underneath it.
|
||||
- Agent quick-toggle chips show and toggle the value the loaded scene is running on — its override when one is active, the global setting otherwise.
|
||||
- The Quick Load recent-scene cards are smaller and scale with the viewport, so a full row no longer pushes the Scene Library down.
|
||||
- Quick Load cards and Scene Library saves share one context menu — Timeline, Remove from Quick Load, and Delete.
|
||||
|
||||
**Node Editor**
|
||||
|
||||
- New `agent.visual.prompt_finalize.before` / `.after` events fire around visual prompt finalization — prompts are editable, and `.before` can modify the finalizer list — even when the agent setting is off.
|
||||
- New `agent.creator.dialogue_examples.before` / `.after` events wrap example-dialogue generation — inject instructions or rewrite the generated examples.
|
||||
- New `agent.help.chat.before` / `.after` events fire around help chat responses.
|
||||
- Scene assets gain `asset_deleted`, `scene.backdrop_changed`, `scene.cover_image_changed`, and `character.cover_image_changed` events alongside the existing `asset_saved`.
|
||||
- All new events are documented in the node editor's Events reference.
|
||||
- A new Generate Character node generates character data following the creator agent's Character Creation settings; wire its outputs into Persist Character to add the character to the scene.
|
||||
- The Create Character module now builds through that node, gaining `generate_dialogue_instructions` (on) and `generate_example_dialogue` (off) inputs; the simulation suite enables both.
|
||||
|
||||
**Documentation & Help**
|
||||
|
||||
- The documentation gained a complete node reference covering 400+ nodes, listing each node's registry path, sockets and properties.
|
||||
- The help agent searches and reads the node reference, so questions about what a node does return grounded answers.
|
||||
- The help chat looks documentation pages up on demand instead of carrying the whole index in every message, so it works with small context windows.
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
**Agents & Settings**
|
||||
|
||||
- Closing an agent's settings dialog without changing anything no longer re-saves its settings, which could silently revert changes made elsewhere while the dialog was open.
|
||||
- The help agent refuses to change settings for an agent whose dialog is open, asking to close it first.
|
||||
- Agent settings in Scene mode now honor each setting's visibility conditions, so gated settings and empty sections no longer show up as scene overrides.
|
||||
- Pocket TTS: pasting a Hugging Face token now enables the gated voice-cloning download without a restart, and the agent warns while cloning is unavailable.
|
||||
- Director chat: images generated from the chat are now inserted into the conversation that requested them.
|
||||
- Agent sections that are always on by design — Summarization, Conversation and Narrator Generation, Character Portraits — are no longer switched off in the background by a stale configuration value.
|
||||
- Agent settings added in a new release now arrive in the state they ship with instead of switched off; settings you switched off yourself stay off.
|
||||
|
||||
**Backends**
|
||||
|
||||
- OpenRouter: a failed model and provider list fetch at startup no longer sticks until restart — later config saves and status refreshes retry it.
|
||||
- OpenRouter: setting the API key for the first time during initial setup now triggers the provider fetch.
|
||||
|
||||
**Character Creation & Import**
|
||||
|
||||
- Character card import: a failed or cancelled description or example dialogue generation now keeps the card's own text.
|
||||
- Character card import: cancelling an import now aborts it instead of letting it run to completion.
|
||||
- Character card import: attribute extraction now sees the character's description, so imported attributes reflect it.
|
||||
- A description typed into the world editor's character creator is no longer discarded when AI generation is enabled.
|
||||
- The director's Limit character attributes setting now applies to character card import, in both the split and Fast flows.
|
||||
- The director's attribute limit now delivers the number it promises — the character's own name no longer costs one of the allowed slots.
|
||||
- Fast character creation no longer asks for the name as an attribute, so it is neither duplicated nor counted against the limit.
|
||||
- Example dialogue no longer keeps typographic quotes — they are converted to straight quotes on import, manual entry, and generation, so lines render as speech.
|
||||
|
||||
**Clients**
|
||||
|
||||
- A single failed status check no longer briefly flaps a connected client to 'Could not connect' — disconnection now requires consecutive failures.
|
||||
- The Context Length input now appears in the edit dialog for every client type, including OpenRouter and the remote API clients.
|
||||
- The context and reasoning sliders in the client list no longer jitter back to previous values after dragging.
|
||||
- Quickly editing two clients back to back no longer drops the first client's pending change.
|
||||
|
||||
**Generation Errors**
|
||||
|
||||
- Simultaneous generation failures are now queued and answered one after another, so earlier generations resume and their results are no longer lost.
|
||||
- Pending error dialogs are cancelled cleanly when the scene is unloaded or the frontend disconnects.
|
||||
|
||||
**Help & Documentation**
|
||||
|
||||
- Documentation lookups now rank the page a question is about above pages that only mention the topic in passing.
|
||||
- Help and director chat answers render headings, lists, quotes and paragraphs with proper spacing and indentation instead of one solid block.
|
||||
|
||||
**Node Editor**
|
||||
|
||||
- The Apply Style node now resolves real style template ids and applies the full template — use Apply Styles for configuration-driven styles.
|
||||
- The Build Prompt node's `memory_prompt` and the Generate Response node's `action_type` input sockets take effect again, with wired values winning over the property.
|
||||
- The Clean Up Narration node and the Stop node's StageExit choice no longer error when they run.
|
||||
- The Compress Context ID Part node emits the original part on `uncompressed`, and As Bool reports an uncastable value properly.
|
||||
- Registry typos fixed for `CleanUpCharacterMessage` and the shipped `instructGamestateUpdates` module; saved graphs keep loading via legacy aliases.
|
||||
- Socket fixes across Generate Response, State Counter, Generate Scene Types, Apply Style(s), State Reinforcement, Focal and Spices.
|
||||
- Property fixes — declared defaults match the effective ones on Context History and As Number, Set Scene Phase defaults to `roleplay`, and Update Message Assets drops an unused property.
|
||||
|
||||
**Scenes**
|
||||
|
||||
- Exporting a scene with Reset Progress checked no longer wipes the loaded scene's message history and world state — the reset applies only to the exported file.
|
||||
- Deleting the save file of the currently loaded scene is refused with an error instead of being recreated by the next save.
|
||||
- Applying a scene type template now actually registers the scene type on the scene, so the picked type is no longer lost.
|
||||
|
||||
**Timeline**
|
||||
|
||||
- Previewing a revision no longer fails on scenes whose stored version history diverged from its starting snapshot — affected entries are repaired during reconstruction.
|
||||
|
||||
**Windows**
|
||||
|
||||
- The `system_time` template function no longer errors on Windows.
|
||||
- Pi Bridge: generations no longer hang at the very end, and cancelling one no longer leaks a background process.
|
||||
- Pi Bridge: the client now launches pi correctly, and a failed launch names the executable that could not be run.
|
||||
|
||||
## 0.38.0
|
||||
|
||||
### Per-Scene Agent Overrides
|
||||
|
||||
@@ -1,4 +1,92 @@
|
||||
0.38.0.dev:
|
||||
0.39.0.dev:
|
||||
features:
|
||||
- "Node Reference: The documentation gained a complete node glossary covering every node available in the node editor - 400+ nodes across the engine, agent integrations and shipped node modules - organized into categorized reference pages listing each node's registry path, input/output sockets and properties. The Help Agent can search and read these pages, so asking it what a node does or how to use it now returns grounded answers. The pages are rendered from the live node registry by a new `glossary` subcommand on the node tools CLI (`python -m talemate.game.engine.nodes.tools glossary --write`), with a `--check` mode that detects when the committed reference has drifted from the code."
|
||||
- "Pi Bridge Client: New client type that drives generations through the pi coding agent's headless RPC mode instead of a direct LLM API. pi owns provider authentication (environment API keys, pi's auth file including subscription auth) and model resolution — including custom providers and models defined in pi's models.json — so any model pi can reach becomes usable in Talemate. Provider and model are free-form fields with suggestions pulled from pi's model catalog, reasoning maps to pi's thinking levels with thinking output captured for the reasoning display, and concurrent inference runs one isolated pi instance per request. Sampling parameters stay on the pi side by design."
|
||||
- "Environment Variable Store: Application settings gained an Environment Variables page for named values that are encrypted at rest and passed as environment variables to processes Talemate spawns — currently the Pi Bridge client's pi instances, so pi's models.json can reference secrets as $NAME instead of keeping plaintext keys in environment files."
|
||||
- "Timeline: A new timeline dialog provides a single home for a scene's version history. Drag a slider across the scene's automatic version history to preview the message history at any revision, then fork that revision to a new save — the scene you are playing is never modified, and browsing the history changes nothing on disk. Opened from the scene tools Save menu, from the Fork button on any changelog-backed message (which positions the timeline at that message's revision), or from the Quick Load card menu on the main screen, where it replaces the old Restore from Backup dialog. Forking is the only action the timeline applies in this release, see below."
|
||||
- "Character Creation Example Dialogue: AI-assisted character creation (World Editor → Characters → Create and the scene tools creative menu) gained a 'Generate example dialogue' option that generates a few example dialogue lines for the new character, with an optional guidance field to steer how the examples are written (tone, speech patterns, quirks). Off by default."
|
||||
- "Scene Visual Manager: World Editor → Scene gained a Visuals tab mirroring the character visual manager, with Background Illustration, Scene Illustration and Scene Card sub-tabs to browse, upload, generate (new or as a variation of a reference image, single or batch), view, and delete scene images — plus per-image actions to set the scene cover image and set or unset the scene backdrop (the Scene Card sub-tab is portrait and offers no Set as Scene Backdrop action). A Prompt Finalization sub-tab edits the Visualizer agent's per-scene Prompt Finalization overrides directly from the world editor, creating the scene's agent-settings file with the default name when none is linked yet. The scene backdrop can now also be fully unset (not just toggled off), keeping the image in the scene assets."
|
||||
- "Help Agent: A new Help agent provides an interactive help chat that answers questions about Talemate itself — settings, agents, clients, the world editor and more — grounded in the bundled documentation, which it can search and read before answering. Opened via the help icon in the app bar, it works with or without a loaded scene, supports multiple persistent multi-turn chats, and runs in the background so it never blocks the main Talemate loop. A per-chat Scene Aware toggle lets a conversation see (or stay unaware of) the currently loaded scene, and each question carries a small snapshot of what you are looking at in the interface so contextual questions like 'what does this setting do?' can be answered. The most recent answer can be regenerated via a button right on the message, matching the director chat. Beyond answering questions, the help agent can read your actual configuration — any agent's settings, application settings, and a read-only view of your clients (API keys are never exposed) — and, when asked, change agent settings (globally or as a per-scene override) and application settings directly from the chat, recording exactly what changed. It cannot change scene content — scene changes remain the director chat's job."
|
||||
- "Scene Backdrop: Any scene illustration can now be set as the scene backdrop — an image that fills the whole scene view behind the messages instead of rendering inline. The backdrop belongs to the scene and is saved with it, so it survives reloads and history edits. Set it via 'Set as scene backdrop' on any illustration's image menu, the 'Set backdrop' button in the Visual Library, or enable 'Auto Backdrop' per visual type (Settings → Appearance → Message Visuals) to have newly generated Scene Backgrounds ('Visualize Scene (Background)') and/or Scene Illustrations ('Visualize Moment') promoted automatically. An 'Immersive' quick-toggle chip in the scene tools turns the backdrop on and off without forgetting the chosen image. Message text sits on translucent panels with a drop shadow for legibility — panel opacity and the text shadow are configurable — and a small marker icon shows which message's image is the current backdrop (click it for the image menu, which stays reachable via an Illustration chip on the message hover toolbar)."
|
||||
- "Visual Prompt Finalization: The Visualizer agent gained a Prompt Finalization settings tab defining post-processing actions (exact, fuzzy or regex match and replace, or an AI instruction) that rewrite image prompts right before they are sent to the image generation backend. Actions can target positive and/or negative prompts, be restricted to specific visual types, and be overridden per scene. Characters can define their own actions under World Editor → Characters → Visuals → Prompt Finalization, which run after the agent's. Reusable action sets are managed as a new 'Visual prompt finalizer' template type, including a shipped Ideogram JSON preset that converts the positive prompt into an Ideogram 4.0 structured JSON prompt. Prompt-only generation output is finalized as well, and a new FinalizePrompt node exposes the step to custom node graphs."
|
||||
- "Client Auto Retry: Clients can now automatically retry on response issues before you are notified — separate 0–5 retry sliders for empty responses, API rate limiting (HTTP 429, with progressively longer waits between attempts), and reasoning models that skip their reasoning tokens. A notification shows the retry progress with an abort option, and when retries run out (or a slider is at 0, the default) the usual generation error dialog appears."
|
||||
- "New Node Graph Events: Node graphs can now hook into more of this release's features. `agent.visual.prompt_finalize.before` / `.after` fire around visual prompt finalization (mutable prompts, and the `.before` finalizer list can be modified — they fire even with the agent setting disabled, so a graph can act as its own finalizer). `agent.creator.dialogue_examples.before` / `.after` fire around character example dialogue generation (inject instructions, or rewrite the generated examples - not emitted when a Fast-mode consolidated one-shot produces the examples itself). `agent.help.chat.before` / `.after` fire around help chat responses. Scene asset mutations gained `asset_deleted`, `scene.backdrop_changed`, `scene.cover_image_changed` and `character.cover_image_changed` alongside the existing `asset_saved`. All are documented in the node editor's Events reference."
|
||||
- "Simplified Character Card Import: The character card import dialog gained an AI Generation section with individual toggles for each generation step — content context, description rewrite, attribute extraction, dialogue instructions, example dialogue, and story intent — plus Full/Minimal preset buttons to flip them all at once. Disabled steps fall back to the card's original data (the description imports verbatim, example dialogue as-is with typographic quotes converted), so a minimal import needs no text generation at all and completes in a fraction of the time."
|
||||
- "Scene Browser Landing Page: The home screen was rebuilt into a full-page landing view, replacing the sidebar load panel. A file-tree Scene Library lists scene projects with cover thumbnails, save counts and per-save metadata, plus an asset and node-module summary row per expanded project; long save lists collapse behind a 'Show all' row and the list is filterable with click-to-load. Individual scene files and character cards can be deleted from the tree, and an entire scene project (saves, assets, nodes, history) can be deleted behind a type-the-project-name confirmation. Character cards display their card image and only actual card files are listed. Scene and character card import moved to a prominent drag-and-drop dropzone next to a Create-new-scene card, with the quick-load recent scene cards kept on top."
|
||||
- "Fast Character Creation: The Creator agent's settings gained a Character Creation section with a Fast mode that consolidates AI character generation into a single prompt instead of one prompt per aspect, covering the selected aspects in a single request. A Consolidate multi-select picks which aspects (name, description, attributes, dialogue instructions, example dialogue) the one-shot covers - unselected aspects keep their individual prompts - an 'Attribute templates' entry in the same list folds selected attribute world-state templates into the one-shot as per-attribute instructions instead of one prompt per template, a One-shot token budget slider (1024-8192, default 4096) controls the shared response budget, and a Fill in misses toggle re-runs an aspect's individual request when the consolidated response missed it, while a completely unparseable response is always a hard error. The consolidated prompt also applies the scene's writing style template when one is configured. All AI-assisted character creation paths (world editor, scene tools character introduction, character card import and node graphs) route through this single flow, with the split per-aspect flow remaining the default for older or smaller models. Off by default."
|
||||
- "Generate Character Node: Node graphs gained a Generate Character node (`agents/creator/GenerateCharacter`) that generates character data (name, description, attributes, dialogue instructions and/or example dialogue) following the creator agent's Character Creation settings. Which aspects to generate can be wired in, alongside the character name, guiding instructions, an existing description and generation options. The node only generates data - wire its outputs into the director Persist Character node, which now accepts pre-generated dialogue instructions and example dialogue, to add the character to the scene without generating twice. The `Create Character` module, which now builds its character through this node, gained matching `generate_dialogue_instructions` (default on - existing graphs calling the module now generate dialogue instructions, an extra prompt when Fast mode is off) and `generate_example_dialogue` (default off) inputs; the simulation suite enables both, so its add-character action now also generates example dialogue."
|
||||
improvements:
|
||||
- "Per-Scene Agent Overrides: Every agent action that can be switched off globally can now also be switched off for a single scene. Previously only the Visualizer's Prompt Finalization could — a scene could retune how Auto Narration, Revision, Scene Analysis or Long Term Memory behave, but not turn any of them off. The quick-toggle chips in the agent panel follow the same rule: a chip shows the value the loaded scene is actually running on and toggles exactly that value — the scene's override when one is active (marked with a small scene icon, the global value shown in the chip's tooltip), the global setting otherwise."
|
||||
- "Application Settings Redesign: The application settings moved out of their cramped modal into the main view as an always-available Settings tab, matching the World Editor and Templates. The nested tabs-within-tabs layout is replaced by a single sidebar navigation grouped by topic (Game, Appearance, Connections, Presets, Storytelling), with a settings search that finds any setting by name — including individual API-key providers — and jumps straight to it, highlighting the target. All API keys now live on one scrollable page instead of ten separate per-provider pages. Edits are tracked against the stored configuration: an Unsaved-changes indicator with Save and Discard appears in the toolbar, unsaved edits survive switching to other tabs, and configuration changed elsewhere (another window, the help agent) while you are editing is flagged instead of silently overwriting or being overwritten. Existing deep links — for example the 'Set API key' action on a misconfigured client — land on the correct page as before."
|
||||
- "Application Settings: The Settings tab in the top navigation now shows a warning badge with a tooltip while there are unsaved changes, so the state stays visible after switching away. The settings toolbar is also capped to the content width and groups Save / Discard next to the page title on the left instead of the far viewport edge."
|
||||
- "Application Settings: Switching away from the Settings tab while there are unsaved changes now asks what to do with them — Ignore keeps them pending, Save writes them, Discard Changes reverts them — since the warning badge alone was too easy to miss."
|
||||
- "Help Agent: The documentation index is no longer embedded in the chat prompt - the prompt now carries only a compact section overview (~15k fewer tokens per message), and a new find_docs lookup locates the right documentation pages on demand, so the help chat works with small context windows typical of local models."
|
||||
- "Uniform Settings Framework: Agent settings and client settings now share one field-definition schema on the backend and one field renderer on the frontend. Client-specific settings gain the full widget set previously exclusive to agents (sliders, autocompletes, selects with rich choices, per-value notes) plus conditional visibility, and choice lists are delivered to the frontend in a single normalized shape."
|
||||
- "MistralAI Client: Added a Concurrent Inference toggle so batch operations can dispatch multiple requests in parallel. Off by default."
|
||||
- "Text-Generation-WebUI Client: Added an 'API handles prompt template' toggle. When enabled, requests go to the chat/completions API and text-generation-webui applies the model's prompt template; response pre-filling (coercion) keeps working via the API's continue_ mechanism, and reasoning-model thinking is captured automatically without needing a reasoning pattern. Off by default."
|
||||
- "llama.cpp Client: Added an 'API handles prompt template' toggle. When enabled, prompts are rendered through the server's /apply-template endpoint using the model's built-in chat template; response pre-filling (coercion) and reasoning keep working, and thinking-capable templates are asked not to think when reasoning is disabled. Off by default."
|
||||
- "Track State: The World State scene tool menu's two separate 'Add tracked world state' and 'Add tracked character state' actions are now a single 'Track state' action. The modal itself lets you choose the target — the world or a specific character — before describing what to track, and the context attachment default and 'Require character active' option adapt to the choice."
|
||||
- "OpenRouter Client: Added a Parameters config tab with individual toggles for `temperature`, `top_p`, `top_k`, `min_p`, `frequency_penalty`, `presence_penalty`, and `repetition_penalty`. Toggling a parameter off omits it from the request entirely, for model providers that hard-error on parameters they don't support for the selected model — some, for example, only accept a `frequency_penalty` of exactly 0 for certain models. All default to on."
|
||||
- "Pi Bridge Client: The Docker image now ships with pi preinstalled, and pi's configuration directory (models.json, auth.json) is mounted from ./pi next to the compose file, so the client works in Docker out of the box."
|
||||
- "Scene Browser Landing Page: The Quick Load recent-scene cards are smaller and scale with the viewport width, so a full row of recents no longer pushes the Scene Library far down the page."
|
||||
- "Scene Browser Landing Page: The Quick Load card menu trigger moved below each card, so it no longer crowds the card title. Scene save files in the Scene Library gained the same context menu — Timeline, Remove from Quick Load (shown when the save is in Quick Load), and Delete — replacing the bare delete button."
|
||||
- "Scene Browser Landing Page: The Quick Load cards now pop out slightly on mouse hover, without shifting the cards around them."
|
||||
- "Prompt Finalization: UX polish for the post-processing actions editor — action fields lay out on a single balanced row with per-mode visibility (flags only show for exact and regex modes), each action card gained a compact header showing its mode and target plus tooltips on all controls, disabled actions dim their fields, an empty action list shows a hint instead of blank space."
|
||||
changes:
|
||||
- "Timeline: Forking a revision to a new save is the only action the timeline applies in this release. Rolling a scene back in place and opening a revision directly are disabled in this version — their websocket routes are gone, so no timeline action can write over an existing scene file. Browsing and previewing revisions are unaffected, and forking now refuses a save name that already exists instead of writing over it."
|
||||
- "Dependencies: Refreshed the dependency lock across the board, including a setuptools bump to 83.0.0 which carries a fix for a source-distribution file-exclusion vulnerability (GHSA-h35f-9h28-mq5c). No dependency required code migrations."
|
||||
- "OpenRouter Client: The default model for newly created OpenRouter clients is now google/gemini-3.6-flash."
|
||||
- "OpenRouter Client: New OpenRouter clients now have reasoning enabled by default, with a budget of 2048 reasoning tokens, so the default model works out of the box. With reasoning off Talemate pre-fills the start of the response to steer it, and some providers — Google and Anthropic among them — reject requests that do that."
|
||||
fixes:
|
||||
- "Docker: `docker compose up` now requires an NVIDIA GPU and the NVIDIA Container Toolkit and exposes all host NVIDIA GPUs to Talemate, restoring CUDA detection for PyTorch. Hosts without an NVIDIA GPU must use `docker compose -f docker-compose.cpu.yml up`; the standalone manual-build command remains a complete CPU configuration."
|
||||
- "Scene Forking: Forking from a message now refuses a save name that is not a valid filename or that an existing save already uses, instead of writing over that save or outside the scene directory. The timeline fork already refused both."
|
||||
- "Prompt Finalization: The fuzzy match threshold slider's always-visible value bubble no longer overlaps the note above it."
|
||||
- "Frontend: A backend websocket URL configured with the host 0.0.0.0 now connects — the URL was used literally, which most browsers refuse, so the app stayed on 'backend not connected'. The host is resolved to the hostname the UI itself was loaded from."
|
||||
- "Help Chat: The warning shown while the Help agent has no configured client no longer stretches to fill the entire help panel — it renders as a compact notice above the chat."
|
||||
- "Character Card Import: A failed description or example dialogue generation no longer wipes the card's own text. Both steps clear the field before regenerating it so the card's version doesn't bias the rewrite, but a generation that errored out or came back empty left the character with nothing at all — an empty description then also blinded the attribute extraction that runs right after it. The card's original description and example dialogue are now restored whenever generation fails, returns nothing, or is cancelled, matching what the import already does when those generation steps are switched off."
|
||||
- "Character Card Import: A failed attribute extraction no longer overwrites the card's attributes. A generation that errored out or came back empty was still written to the character — as a sheet containing nothing but the character's own name — which dropped whatever attributes the card supplied (its gender, for example) and shadowed the character description in every prompt that renders the character sheet. An extraction that produces nothing now keeps the card's attributes, matching what the import already does when the attribute step is switched off."
|
||||
- "Character Card Import: The director's 'Limit character attributes' setting now applies to character card import. The setting governs every other character creation path the director manages, but import ignored it entirely — importing a card with a limit of 5 configured still produced an unbounded sheet, with nothing indicating why. Both import paths (the per-aspect flow and the Creator's Fast one-shot) now generate at most the configured number of attributes. Attributes the card itself supplies are untouched when attribute extraction is switched off."
|
||||
- "Pocket TTS: Pasting a Hugging Face token into the agent settings now enables the gated voice-cloning model download without restarting Talemate — previously a generation attempted before the token was set cached the fallback model without voice cloning, so following the in-app 'paste token and try again' instructions kept failing until a restart. While voice cloning is unavailable the agent card now also shows a warning."
|
||||
- "Prompt Templates: The `system_time` template function crashed with 'Invalid format string' on Windows — it used strftime codes only available on Linux/macOS. The time is now formatted platform-independently with identical output."
|
||||
- "Director Chat: Images created through the director chat's image generation action never appeared in the chat — the generation completed and the image was saved to the scene's assets, but the 'Image Generated' message was inserted into a newly created orphan chat instead of the conversation that requested it. The message is now inserted into the initiating chat."
|
||||
- "Node Editor: The Build Prompt node's `memory_prompt` input socket and the Generate Response node's `action_type` input socket were silently ignored — only the node property ever took effect, so a graph computing either value dynamically and wiring it in had no effect. Non-empty wired values now win over the property (the property still applies when the socket is unconnected or resolves empty). Note: graphs that already had something connected to these sockets will start honoring the connection."
|
||||
- "Scene Library: Deleting the save file of the currently loaded scene is now refused with an error - previously the file (and its version history) was deleted but silently recreated by the next save or autosave, making the delete appear to not work. Load a different scene first."
|
||||
- "Pi Bridge Client: On Windows every generation hung at the very end — the response streamed in fully (visible as tokens-per-second slowly decaying to zero) but was never delivered, leaving the client busy until cancelled. pi is spawned through npm's pi.cmd shim there, and terminating that shim after the response orphaned the underlying node process, which kept the stdio pipes open and blocked the cleanup forever. The client now asks pi to shut down by closing its stdin (pi exits cleanly on stdin EOF on all platforms), force-kills the whole process tree if it doesn't exit within a grace period — so cancelling a generation no longer leaks a node process that keeps the provider request running — and no longer lets cleanup block response delivery."
|
||||
- "Pi Bridge Client: On Windows the client could not launch pi at all — the startup model fetch logged an unhelpful '[WinError 2] The system cannot find the file specified' and generations failed the same way, because pi installed via npm is a pi.cmd shim that Windows only executes by its full path. The pi executable is now resolved to its full path before spawning, and if a launch still fails the error names the executable that could not be run. A missing pi install is also no longer reported at startup — it only surfaces on a configured Pi Bridge client."
|
||||
- "Client Status: A single failed status check (e.g. a brief connection timeout to a busy local KoboldCpp) no longer flaps a connected client to 'Could not connect' for a few seconds — the client is only marked disconnected after consecutive status failures."
|
||||
- "Agent Settings Dialog: Closing the dialog without changing anything no longer re-saves its settings — previously the untouched dialog pushed the copy it was opened with back to the backend, silently reverting any setting changed elsewhere while it was open (such as by the help agent). The help agent likewise refuses to change settings of an agent whose dialog is currently open, asking to close it first."
|
||||
- "OpenRouter Client: A failed model/provider list fetch at startup no longer sticks until the server is restarted — later config saves and client status refreshes now retry it. Setting the API key for the first time during initial setup also correctly triggers the provider fetch."
|
||||
- "Generation Error Dialog: When several generations failed at the same time (e.g. an API throttle hitting both a summarization and a background task), only the most recent error could be answered — the earlier generation was never resumed and its result (such as a scene summary) was silently lost. Error dialogs are now queued and answered one after another, and pending dialogs are cancelled cleanly when the scene is unloaded or the frontend disconnects."
|
||||
- "Timeline: Previewing a revision could fail with an 'unhashable type' error when the scene's changelog contained deltas that diverged from the base snapshot — reconstruction now repairs the affected message history (and other list data) instead of crashing the timeline."
|
||||
- "Scene Export: Exporting a scene with 'Reset Progress' checked wiped the loaded scene's message history and world state and could break subsequent saves — the reset now applies only to the exported file, leaving the current session untouched."
|
||||
- "Client Editor: The Context Length input is now shown for every client type — previously clients without a self-hosted API URL (e.g. OpenRouter and the remote API clients) were missing it from the edit dialog, leaving the client-list slider as the only way to change their context token budget."
|
||||
- "Node Editor: The Apply Style node crashed on any real style template id — it fed the id string into a code path expecting a visual type enum, so only the literal 'UNSPECIFIED' survived. The node now resolves the given template id directly and applies the full template. Note: passing 'UNSPECIFIED' as the template id no longer applies the configured art style — use the Apply Styles node for configuration-driven styles."
|
||||
- "Client Sliders: Adjusting the context or reasoning token budget sliders in the client list no longer jitters back and forth between values — stale client status echoes from the backend could snap the slider back to a previous value shortly after dragging. Saving a client also no longer triggers redundant status round-trips to the inference API, and quickly editing two clients back to back no longer drops the first client's pending change."
|
||||
- "Help & Director Chat: Long answers no longer read as one solid block of text. Headings, paragraphs, lists, quotes and horizontal rules had no spacing of their own, and lists had lost the indent their markers live in — so bullets were invisible and numbered steps showed a bare '.' with the number clipped off. All of it now renders with proper structure and spacing."
|
||||
- "Node Editor: The Clean Up Narration node crashed with an AttributeError whenever it ran, and the raise/Stop node errored with 'Unknown exception' when its StageExit choice was selected."
|
||||
- "Node Editor: The Compress Context ID Part node emitted the compressed value on its `uncompressed` output instead of the original part, and the As Bool node's error path itself crashed with a TypeError when a value could not be cast to a boolean."
|
||||
- "Node Editor: Fixed two registry typos — `agents/editor/CleanUoCharacterMessage` is now `agents/editor/CleanUpCharacterMessage`, and the shipped director module `agernts/director/chat/instructGamestateUpdates` is now `agents/director/chat/instructGamestateUpdates`. Saved graphs referencing the old names keep loading via legacy aliases."
|
||||
- "Node Editor: Socket fixes — Generate Response and State Counter no longer show a duplicate output socket; Generate Scene Types gained a `scene_types` output, Apply Styles and Apply Style gained a `state` passthrough output, and State Reinforcement's declared `reinforcement` output is now actually set. The Focal node's `template` input is correctly typed as `str`, and the Generation Options `spices` input and Spices node output are both typed `spices` so they can be wired directly."
|
||||
- "Node Editor: Property metadata fixes — declared property defaults now match effective defaults on Context History and As Number; Set Scene Phase now actually defaults to the `roleplay` scene type (its effective default was an empty string, which made a freshly placed node error with 'Invalid scene type' until configured); the unused `asset_type` property was removed from Update Message Assets; the Sum node's `numbers` property is now properly typed in the editor UI."
|
||||
- "Scene Types: Applying a scene type template never actually registered the scene type on the scene's intent state — the template wrote to a non-existent attribute, so template-picked scene types were silently lost."
|
||||
- "Character Creation: A description typed into the world editor's character creator was silently discarded when AI generation was enabled, leaving the new character with no description. Provided descriptions are now kept."
|
||||
- "Agent Settings Dialog: Scene mode now honors each setting's visibility conditions. Conditional settings - such as the Creator agent's Fast Character Creation fields, which only apply while Fast mode is on - no longer show up as scene overrides while their gate is off, and a section (along with its tab) whose settings are all currently hidden is dropped from Scene mode instead of rendering empty. Conditions are evaluated against the scene's effective values, so overriding the gating setting for a scene reveals the settings it gates. A setting that already carries an override stays visible even while its gate is off, so it can still be seen in the override count and cleared."
|
||||
- "Character Card Import: Cancelling an import now actually aborts it — the split-mode per-aspect extractions, content-context determination, and story-intent generation each swallowed the cancellation as a warning, so the import completed anyway (and a cancel during story-intent generation leaked into the next unrelated generation)."
|
||||
- "Character Card Import: Attribute extraction no longer runs blind in the default (non-Fast) import mode — the character being profiled was missing from its own extraction prompt, so attributes were generated from the greeting and character book alone, without the character's description. Imported attributes now reflect the description."
|
||||
- "Character Creation: The director's 'Limit character attributes' setting now delivers the number of attributes it promises. The character's own name is written into the generated character sheet as a `Name` line, and it was counted against the limit — so every value delivered one attribute fewer than configured, and a limit of 1 produced no attributes at all. The name no longer costs a slot, in generated sheets as well as in sheets supplied to the Persist Character node."
|
||||
- "Fast Character Creation: The one-shot generation prompt no longer repeats the character's name as an attribute — the name is already generated as its own aspect, so a `Name` entry in the character sheet was duplication, and under a configured attribute limit it consumed one of the allowed lines. This applies at every value of the director's 'Limit character attributes' setting, including the default of 0: Fast mode no longer asks for a `Name` attribute, and one written anyway does not cost a slot."
|
||||
- "Agent Settings: An agent setting that has no on/off switch is no longer left switched off by a stored configuration. Sections like the Summarizer's Summarization, the Conversation and Narrator Generation sections or the World State's Character Portraits are always on by design, so the settings screen shows their options without an Enable checkbox — but a `false` recorded in the configuration file was still applied on startup, switching the section off in the background while its options stayed on display, with no control anywhere to turn it back on. The declaration now wins: such a setting is always loaded as on, and a `false` left in the configuration file — or in a scene's per-scene overrides — is ignored. A node graph that tries to toggle one now reports an error instead of appearing to succeed."
|
||||
- "Agent Settings: Newly added agent settings no longer arrive switched off on an existing installation. Any setting that did not yet exist when the configuration file was last written was loaded as off rather than in the state it ships with, and then recorded as off — so a feature added in a release could be silently inactive for everyone upgrading into it while a fresh installation got it working. It is also what wrote the stale `false` the fix above corrects. Settings absent from the stored configuration now keep the state they ship with; a setting you switched off yourself stays off."
|
||||
- "Example Dialogue: Character example dialogue no longer keeps typographic quotes (“ ” „ ‘ ’ ‚). Talemate delimits spoken words with the straight quote, so an example line carrying fancy quotes rendered as narration instead of dialogue and was mis-chunked by dialogue parsing and text-to-speech. Typographic quotes are now replaced with their plain equivalents wherever example dialogue is written outside a generation — character card import, manual entry and edits in the world editor, examples supplied directly to the Persist Character node, and the creator's example dialogue generation. Generated text was already normalized at the client level, and now also covers the German-style low-9 opening quotes, so a `„…“` pair no longer collapses into a single unbalanced straight quote. Characters already saved with fancy quotes keep them until the affected line is saved again."
|
||||
- "Help Agent: Documentation lookups now find the page that actually answers the question. Every word counted the same, so asking about 'koboldcpp settings' returned five different agent settings pages and no KoboldCpp page at all — the common word decided the match and the rest were ties broken alphabetically. Distinctive words now count for far more than ubiquitous ones. Page length also buys far less rank: a longer description of a page used to be a strictly better one, every extra word another free chance to match, so describing a page more thoroughly made it surface for topics it only mentions in passing. Those matches are now diluted by how much the description covers, so a page that mentions a topic in passing no longer outranks the page about it."
|
||||
- "Story Introduction: Setting the introduction through the director or through the Set Introduction node now updates the scene view and the World Editor right away instead of only after a scene reload."
|
||||
- "Drawer Widths: The director console and help chat drawers no longer stay locked to the window size measured when the page was loaded — they now follow the current window size."
|
||||
- "Dependencies: Excluded nltk 3.10.1 from the accepted version range — that release ships a CWD-import security hook that breaks Talemate's standard install layout (virtualenv inside the project directory), crashing startup on any install not using the committed lock. The lock now resolves nltk 3.10.2, where the hook was removed upstream."
|
||||
- "Docker: Loading a scene no longer fails with a Memory Agent database error. The image installed an FFmpeg build that had moved past the versions torchcodec supports, so the embedding model could not be imported. The FFmpeg version is now pinned, and a mismatch fails the image build instead of shipping."
|
||||
- "Docker: Building the image from a working copy that had already run the frontend outside Docker no longer fails at `pnpm build` with `ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY`. The repository had no `.dockerignore`, so the build context carried the host's `talemate_frontend/node_modules` into the image on top of the one the build had just installed; pnpm read the host's own paths out of it, judged the dependencies stale, and tried to reinstall them mid-build, which needs a terminal to confirm. A `.dockerignore` now keeps host build output, virtual environments, caches, `config.yaml` and `secrets/` out of the build context, and the frontend stage runs pnpm in CI mode. The corepack and uv versions the image installs are pinned as well, so neither can drift into the next broken build."
|
||||
- "Docker: The Help agent can now read the documentation in the container. The image never carried the bundled `docs/` directory the agent reads at runtime, so in Docker it answered without any grounding in the manual - it could neither search nor open a page. The image now ships the documentation markdown (the screenshots stay out, the agent only ever reads the text)."
|
||||
|
||||
0.38.0:
|
||||
features:
|
||||
- "Event Module Auto-Register: Event Modules gained an `auto_register` toggle so a module subscribes to its event as soon as it's registered with the scene, without having to be placed in the scene loop graph."
|
||||
- "Per-Scene Agent Overrides: Agent configuration can now be overridden per scene without changing the global config. The Agent Modal gains a Global / Scene mode switch for toggling and editing overrides; choose, swap, or opt out of the override file under World Editor → Scene → Settings."
|
||||
|
||||
@@ -59,6 +59,28 @@ Ensure all tests pass by running:
|
||||
uv run pytest tests/ -p no:warnings
|
||||
```
|
||||
|
||||
The test dependencies live in the `dev` extra, which is not installed by
|
||||
default — install it once with either of:
|
||||
```bash
|
||||
uv sync --extra dev
|
||||
uv pip install -e ".[dev]"
|
||||
```
|
||||
Plain `uv sync` does not just skip the extra, it *removes* it: run against a
|
||||
working environment it uninstalls `pytest`, `pytest-xdist` and `pytest-asyncio`,
|
||||
breaking the command above.
|
||||
|
||||
The suite runs distributed across your CPU cores by default (via `pytest-xdist`).
|
||||
If your environment predates that — pytest installed, `pytest-xdist` not — pytest
|
||||
exits with `error: unrecognized arguments: -n --dist worksteal`; install the `dev`
|
||||
extra as above.
|
||||
|
||||
Workers discard `-s` / `--capture=no` **stdout** entirely (stderr, including
|
||||
`logging`, still comes through but out of order), and failures are reordered.
|
||||
Pass `-n0` to run serially while debugging a specific test:
|
||||
```bash
|
||||
uv run pytest tests/ -n0 -s -x
|
||||
```
|
||||
|
||||
## Questions?
|
||||
|
||||
If you're unsure whether your contribution would be welcome, please open an issue to discuss it first. This saves everyone time and ensures alignment with the project's direction.
|
||||
62
Dockerfile
@@ -1,3 +1,7 @@
|
||||
# The backend-build stage creates the virtual environment and the final stage
|
||||
# runs it, so both must install the same uv.
|
||||
ARG UV_VERSION=0.12.5
|
||||
|
||||
# Stage 1: Frontend build
|
||||
FROM node:22-slim AS frontend-build
|
||||
|
||||
@@ -5,7 +9,11 @@ WORKDIR /app
|
||||
|
||||
# Enable pnpm via corepack (version pinned by package.json "packageManager").
|
||||
ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||
RUN npm install -g corepack@latest && corepack enable
|
||||
# pnpm asks before it purges a modules directory, and aborts when no TTY can
|
||||
# answer. https://pnpm.io/settings#confirmmodulespurge
|
||||
ENV CI=true
|
||||
ARG COREPACK_VERSION=0.35.0
|
||||
RUN npm install -g corepack@${COREPACK_VERSION} && corepack enable
|
||||
|
||||
# Copy frontend manifest, lockfile and pnpm settings
|
||||
COPY talemate_frontend/package.json talemate_frontend/pnpm-lock.yaml talemate_frontend/pnpm-workspace.yaml ./
|
||||
@@ -31,7 +39,8 @@ RUN apt-get update && apt-get install -y \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install uv
|
||||
RUN pip install uv
|
||||
ARG UV_VERSION
|
||||
RUN pip install uv==${UV_VERSION}
|
||||
|
||||
# Copy installation files
|
||||
COPY pyproject.toml uv.lock /app/
|
||||
@@ -42,6 +51,13 @@ COPY ./src /app/src
|
||||
# Create virtual environment and install dependencies (includes CUDA support via pyproject.toml)
|
||||
RUN uv sync
|
||||
|
||||
# The help agent reads the bundled documentation from TALEMATE_ROOT/docs, and it
|
||||
# reads nothing but markdown. Dropping the rest here keeps 36 MB of screenshots
|
||||
# out of the final image instead of deleting them in a layer that still ships.
|
||||
COPY docs /app/docs
|
||||
RUN find /app/docs -type f ! -name "*.md" -delete && \
|
||||
find /app/docs -depth -type d -empty -delete
|
||||
|
||||
# Stage 3: Final image
|
||||
FROM python:3.11-slim
|
||||
|
||||
@@ -53,32 +69,56 @@ RUN apt-get update && apt-get install -y \
|
||||
tar \
|
||||
xz-utils \
|
||||
gettext-base \
|
||||
libstdc++6 \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install uv in the final stage
|
||||
RUN pip install uv
|
||||
ARG UV_VERSION
|
||||
RUN pip install uv==${UV_VERSION}
|
||||
|
||||
# Node.js runtime for the pi coding agent (Pi Bridge client), reused from the
|
||||
# frontend build stage so the final image needs no extra apt source
|
||||
COPY --from=frontend-build /usr/local/bin/node /usr/local/bin/node
|
||||
COPY --from=frontend-build /usr/local/lib/node_modules /usr/local/lib/node_modules
|
||||
RUN ln -sf /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm && \
|
||||
ln -sf /usr/local/lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx
|
||||
|
||||
# Install pi for the Pi Bridge client (override the version via build arg)
|
||||
ARG PI_VERSION=0.80.10
|
||||
RUN npm install -g @earendil-works/pi-coding-agent@${PI_VERSION} && \
|
||||
npm cache clean --force && \
|
||||
pi --version
|
||||
|
||||
# pi config dir (models.json, auth.json) - mounted as a volume in docker-compose
|
||||
# so it is host-editable and survives container recreation
|
||||
ENV PI_CODING_AGENT_DIR=/app/pi
|
||||
RUN mkdir -p /app/pi
|
||||
|
||||
# Copy virtual environment from backend-build stage
|
||||
COPY --from=backend-build /app/.venv /app/.venv
|
||||
|
||||
# Download and install FFmpeg 8.0 with shared libraries into .venv (matching Windows installer approach)
|
||||
# Using BtbN FFmpeg builds which provide shared libraries - verified to work
|
||||
# Note: We tried using jrottenberg/ffmpeg:8.0-ubuntu image but copying libraries from it didn't work properly,
|
||||
# so we use the direct download approach which is more reliable and matches the Windows installer
|
||||
# FFmpeg shared libraries for torchcodec, which loads FFmpeg 4 to 8 only.
|
||||
# The BtbN master asset now ships FFmpeg 9, so this tracks the 8.1 release branch.
|
||||
ARG FFMPEG_BUILD=ffmpeg-n8.1-latest-linux64-gpl-shared-8.1
|
||||
RUN cd /tmp && \
|
||||
wget -q https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-linux64-gpl-shared.tar.xz -O ffmpeg.tar.xz && \
|
||||
wget -q https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/${FFMPEG_BUILD}.tar.xz -O ffmpeg.tar.xz && \
|
||||
tar -xf ffmpeg.tar.xz && \
|
||||
cp -a ffmpeg-master-latest-linux64-gpl-shared/bin/* /app/.venv/bin/ && \
|
||||
cp -a ffmpeg-master-latest-linux64-gpl-shared/lib/* /app/.venv/lib/ && \
|
||||
rm -rf ffmpeg-master-latest-linux64-gpl-shared ffmpeg.tar.xz && \
|
||||
cp -a ${FFMPEG_BUILD}/bin/* /app/.venv/bin/ && \
|
||||
cp -a ${FFMPEG_BUILD}/lib/* /app/.venv/lib/ && \
|
||||
rm -rf ${FFMPEG_BUILD} ffmpeg.tar.xz && \
|
||||
LD_LIBRARY_PATH=/app/.venv/lib /app/.venv/bin/ffmpeg -version | head -n 1
|
||||
|
||||
# Set LD_LIBRARY_PATH so torchcodec can find ffmpeg libraries at runtime
|
||||
ENV LD_LIBRARY_PATH=/app/.venv/lib:${LD_LIBRARY_PATH}
|
||||
|
||||
# Fail the build, instead of scene loading at runtime, when the two no longer match.
|
||||
RUN /app/.venv/bin/python -B -c "import torchcodec.decoders"
|
||||
|
||||
# Copy Python source code
|
||||
COPY --from=backend-build /app/src /app/src
|
||||
|
||||
COPY --from=backend-build /app/docs /app/docs
|
||||
|
||||
# Copy Node.js build artifacts from frontend-build stage
|
||||
COPY --from=frontend-build /app/dist /app/talemate_frontend/dist
|
||||
|
||||
|
||||
20
docker-compose.cpu.yml
Normal file
@@ -0,0 +1,20 @@
|
||||
services:
|
||||
talemate:
|
||||
image: ghcr.io/vegu-ai/talemate:latest
|
||||
ports:
|
||||
- "${TALEMATE_FRONTEND_PORT:-8082}:${TALEMATE_FRONTEND_PORT:-8082}"
|
||||
- "${TALEMATE_BACKEND_PORT:-5050}:${TALEMATE_BACKEND_PORT:-5050}"
|
||||
volumes:
|
||||
- ./config.yaml:/app/config.yaml
|
||||
- ./secrets:/app/secrets
|
||||
- ./pi:/app/pi
|
||||
- ./scenes:/app/scenes
|
||||
- ./templates:/app/templates
|
||||
- ./chroma:/app/chroma
|
||||
- ./tts:/app/tts
|
||||
environment:
|
||||
- PYTHONUNBUFFERED=1
|
||||
- PYTHONPATH=/app/src:$PYTHONPATH
|
||||
- VITE_TALEMATE_BACKEND_WEBSOCKET_URL=${VITE_TALEMATE_BACKEND_WEBSOCKET_URL:-}
|
||||
- TALEMATE_FRONTEND_PORT=${TALEMATE_FRONTEND_PORT:-8082}
|
||||
- TALEMATE_BACKEND_PORT=${TALEMATE_BACKEND_PORT:-5050}
|
||||
@@ -1,23 +1,18 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
talemate:
|
||||
extends:
|
||||
file: docker-compose.cpu.yml
|
||||
service: talemate
|
||||
# Uncomment this block to enable NVIDIA GPU access for standalone manual builds.
|
||||
# deploy:
|
||||
# resources:
|
||||
# reservations:
|
||||
# devices:
|
||||
# - driver: nvidia
|
||||
# count: all
|
||||
# capabilities: [gpu]
|
||||
image: talemate:local
|
||||
pull_policy: build
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
ports:
|
||||
- "${TALEMATE_FRONTEND_PORT:-8082}:${TALEMATE_FRONTEND_PORT:-8082}"
|
||||
- "${TALEMATE_BACKEND_PORT:-5050}:${TALEMATE_BACKEND_PORT:-5050}"
|
||||
volumes:
|
||||
- ./config.yaml:/app/config.yaml
|
||||
- ./secrets:/app/secrets
|
||||
- ./scenes:/app/scenes
|
||||
- ./templates:/app/templates
|
||||
- ./chroma:/app/chroma
|
||||
- ./tts:/app/tts
|
||||
environment:
|
||||
- PYTHONUNBUFFERED=1
|
||||
- PYTHONPATH=/app/src:$PYTHONPATH
|
||||
- VITE_TALEMATE_BACKEND_WEBSOCKET_URL=${VITE_TALEMATE_BACKEND_WEBSOCKET_URL:-}
|
||||
- TALEMATE_FRONTEND_PORT=${TALEMATE_FRONTEND_PORT:-8082}
|
||||
- TALEMATE_BACKEND_PORT=${TALEMATE_BACKEND_PORT:-5050}
|
||||
|
||||
@@ -1,21 +1,12 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
talemate:
|
||||
image: ghcr.io/vegu-ai/talemate:latest
|
||||
ports:
|
||||
- "${TALEMATE_FRONTEND_PORT:-8082}:${TALEMATE_FRONTEND_PORT:-8082}"
|
||||
- "${TALEMATE_BACKEND_PORT:-5050}:${TALEMATE_BACKEND_PORT:-5050}"
|
||||
volumes:
|
||||
- ./config.yaml:/app/config.yaml
|
||||
- ./secrets:/app/secrets
|
||||
- ./scenes:/app/scenes
|
||||
- ./templates:/app/templates
|
||||
- ./chroma:/app/chroma
|
||||
- ./tts:/app/tts
|
||||
environment:
|
||||
- PYTHONUNBUFFERED=1
|
||||
- PYTHONPATH=/app/src:$PYTHONPATH
|
||||
- VITE_TALEMATE_BACKEND_WEBSOCKET_URL=${VITE_TALEMATE_BACKEND_WEBSOCKET_URL:-}
|
||||
- TALEMATE_FRONTEND_PORT=${TALEMATE_FRONTEND_PORT:-8082}
|
||||
- TALEMATE_BACKEND_PORT=${TALEMATE_BACKEND_PORT:-5050}
|
||||
extends:
|
||||
file: docker-compose.cpu.yml
|
||||
service: talemate
|
||||
deploy:
|
||||
resources:
|
||||
reservations:
|
||||
devices:
|
||||
- driver: nvidia
|
||||
count: all
|
||||
capabilities: [gpu]
|
||||
|
||||
24
docs/dev/nodes-glossary.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# Node reference glossary
|
||||
|
||||
The [node reference](/talemate/user-guide/node-editor/reference/nodes/) in the user guide — one page per node category, listing every node's registry path, input/output sockets and properties — is not written by hand. It is rendered from the live node registry by the `glossary` subcommand of the node tools CLI.
|
||||
|
||||
## Regenerating the pages
|
||||
|
||||
After adding, removing or changing nodes (or their docstrings, sockets or properties), regenerate the reference:
|
||||
|
||||
```bash
|
||||
uv run python -m talemate.game.engine.nodes.tools glossary --write
|
||||
```
|
||||
|
||||
This rewrites the generated portion of every page under `docs/user-guide/node-editor/reference/nodes/`. Anything above the `<!-- glossary:generated -->` marker in a page is a hand-editable intro and is preserved across regenerations — everything below the marker is overwritten.
|
||||
|
||||
## Checking for drift
|
||||
|
||||
```bash
|
||||
uv run python -m talemate.game.engine.nodes.tools glossary --check
|
||||
```
|
||||
|
||||
compares the committed pages against a fresh render and exits non-zero when they have drifted from the code (missing pages, stale pages, or generated content that no longer matches). Run it before shipping node changes to catch a forgotten `--write`.
|
||||
|
||||
!!! note
|
||||
Loading the full node registry takes a while — both commands import every node module before rendering.
|
||||
@@ -177,6 +177,8 @@ start_custom.bat
|
||||
|
||||
For Docker deployments, you can configure the frontend port, backend port, and the WebSocket URL at container startup without rebuilding the image.
|
||||
|
||||
The commands below use the default CUDA configuration and require an NVIDIA GPU and the NVIDIA Container Toolkit. On a host without an NVIDIA GPU, add `-f docker-compose.cpu.yml` to every command; for example, `TALEMATE_FRONTEND_PORT=9090 docker compose -f docker-compose.cpu.yml up`.
|
||||
|
||||
### Changing the frontend port
|
||||
|
||||
Set `TALEMATE_FRONTEND_PORT` before running `docker compose up`:
|
||||
@@ -223,4 +225,7 @@ The WebSocket URL is determined in this order:
|
||||
1. **Runtime environment variable** (`VITE_TALEMATE_BACKEND_WEBSOCKET_URL` at container start)
|
||||
2. **Auto-detection** (`ws://<current-browser-hostname>:5050/ws`)
|
||||
|
||||
This means you can use a single Docker image across different environments (staging, production) by simply changing the environment variable.
|
||||
This means you can use a single Docker image across different environments (staging, production) by simply changing the environment variable.
|
||||
|
||||
!!! info "`0.0.0.0` in the WebSocket URL"
|
||||
`0.0.0.0` is a bind address, not an address a browser can connect to. If the environment variable's host is `0.0.0.0`, the frontend replaces it with the hostname the page was loaded from — the configured port and path are kept. So `ws://0.0.0.0:6060/ws` behaves like auto-detection for the host, but on port `6060`.
|
||||
|
||||
@@ -31,6 +31,7 @@ This variable is read by Vite at build time and re-read at container start in th
|
||||
|----------|---------|---------|
|
||||
| `TALEMATE_DEBUG` | _unset_ | Set to `1` to enable `DEBUG`-level logging and write errors to a separate error log file. See [Debug logging](debug-logging.md). |
|
||||
| `TALEMATE_LOG_PROMPTS` | _unset_ | Set to any non-empty value to write full prompt + response data to `logs/prompt_log.jsonl`. See [Prompt logging](prompt-logging.md). |
|
||||
| `TALEMATE_PI_BRIDGE_TRACE` | _unset_ | Set to `1` to log the [Pi Bridge client's](../../user-guide/clients/types/pi-bridge.md) pi event stream as it is consumed (per-event sizes and types plus a heartbeat warning while the stream is silent). Diagnostic aid for generations that stream but never finish. |
|
||||
|
||||
`start-backend.sh` and `start-backend.bat` set `TALEMATE_DEBUG=1` automatically; the production `start.sh` / `start.bat` do not.
|
||||
|
||||
@@ -47,7 +48,7 @@ See [API key encryption](../../user-guide/api-key-encryption.md) for the full ke
|
||||
|
||||
## Docker Compose passthroughs
|
||||
|
||||
The values below are not consumed by Talemate's Python code directly — they're consumed by `docker-compose.yml` so that the same variable controls both the published host port and the value passed into the container as `TALEMATE_BACKEND_PORT` / `TALEMATE_FRONTEND_PORT`:
|
||||
The values below are not consumed by Talemate's Python code directly — they're consumed by the default and CPU-only Compose configurations so that the same variable controls both the published host port and the value passed into the container as `TALEMATE_BACKEND_PORT` / `TALEMATE_FRONTEND_PORT`:
|
||||
|
||||
- `TALEMATE_BACKEND_PORT`
|
||||
- `TALEMATE_FRONTEND_PORT`
|
||||
|
||||
@@ -3,9 +3,7 @@
|
||||
!!! note "First time setup?"
|
||||
If this is your first time launching Talemate, the [Setup Wizard](setup-wizard.md) will guide you through adding your first client and configuring essential settings. This page covers manual client configuration for adding additional clients or if you skipped the wizard.
|
||||
|
||||
Once Talemate is up and running and you are connected, you will see a notification in the corner instructing you to configured a client.
|
||||
|
||||

|
||||
Once Talemate is up and running and you are connected, the Home screen shows a warning at the top while no client is configured, reminding you that all enabled clients and agents need to be configured before you can load scenes.
|
||||
|
||||
Talemate uses client(s) to connect to local or remote AI text generation APIs like koboldcpp, text-generation-webui or OpenAI.
|
||||
|
||||
@@ -22,7 +20,7 @@ On the right hand side click the **:material-plus-box: ADD CLIENT** button.
|
||||
|
||||
The client configuration window will appear. Here you can choose the type of client you want to add.
|
||||
|
||||

|
||||

|
||||
|
||||
## Choose an API / Client Type
|
||||
|
||||
@@ -43,6 +41,7 @@ Select the API you want to use and click through to follow the instructions to c
|
||||
- [Groq](/talemate/user-guide/clients/types/groq/)
|
||||
- [Google Gemini](/talemate/user-guide/clients/types/google/)
|
||||
- [OpenRouter](/talemate/user-guide/clients/types/openrouter/)
|
||||
- [Pi Bridge](/talemate/user-guide/clients/types/pi-bridge/) — any provider reachable through a local [pi coding agent](https://github.com/earendil-works/pi) install
|
||||
|
||||
##### Local APIs
|
||||
|
||||
|
||||
@@ -5,11 +5,35 @@
|
||||
1. copy config file
|
||||
1. linux: `cp config.example.yaml config.yaml`
|
||||
1. windows: `copy config.example.yaml config.yaml` (or just copy the file and rename it via the file explorer)
|
||||
1. `docker compose up`
|
||||
1. Start Talemate:
|
||||
1. NVIDIA GPU host with the NVIDIA Container Toolkit installed: `docker compose up`
|
||||
1. Host without an NVIDIA GPU: `docker compose -f docker-compose.cpu.yml up`
|
||||
1. Navigate your browser to http://localhost:8082
|
||||
|
||||
The default Compose configuration requires an NVIDIA GPU and the [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html). It reserves all NVIDIA GPUs and does not fall back to CPU execution.
|
||||
|
||||
On a host without an NVIDIA GPU, you must use:
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.cpu.yml up
|
||||
```
|
||||
|
||||
!!! info "Pre-built Images"
|
||||
The default setup uses pre-built images from GitHub Container Registry that include CUDA support by default. To manually build the container instead, use `docker compose -f docker-compose.manual.yml up --build`.
|
||||
The default setup uses a pre-built image from GitHub Container Registry. To build it locally with CUDA enabled, use `docker compose -f docker-compose.yml -f docker-compose.manual.yml up --build`. For a local CPU-only build, use the standalone command `docker compose -f docker-compose.manual.yml up --build`; combining `docker-compose.cpu.yml` and `docker-compose.manual.yml` is also supported.
|
||||
|
||||
## Verify CUDA access
|
||||
|
||||
With the container running, verify that Docker exposed the GPU and that PyTorch can use it:
|
||||
|
||||
```bash
|
||||
docker compose exec talemate nvidia-smi
|
||||
docker compose exec talemate /app/.venv/bin/python -B -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"
|
||||
```
|
||||
|
||||
The final value from the Python command should be `True`. See [Common issues](troubleshoot.md#cuda-is-not-available-in-a-running-container) if either command fails.
|
||||
|
||||
!!! note
|
||||
When connecting local APIs running on the hostmachine (e.g. text-generation-webui), you need to use `host.docker.internal` as the hostname.
|
||||
|
||||
!!! info "Pi Bridge"
|
||||
The image ships with the [pi coding agent](../../user-guide/clients/types/pi-bridge.md) preinstalled for the Pi Bridge client. pi's configuration (`models.json`, `auth.json`) lives in the `./pi` directory next to the compose file.
|
||||
|
||||
@@ -8,6 +8,43 @@
|
||||
|
||||
## Docker
|
||||
|
||||
### Docker cannot start with the NVIDIA device request
|
||||
|
||||
The default configuration requires both an NVIDIA GPU and a working NVIDIA Container Toolkit. If either is missing, Docker reports an error similar to:
|
||||
|
||||
```text
|
||||
could not select device driver "nvidia" with capabilities: [[gpu]]
|
||||
```
|
||||
|
||||
On a host without an NVIDIA GPU, start the CPU-only configuration instead:
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.cpu.yml up
|
||||
```
|
||||
|
||||
If the host has an NVIDIA GPU, confirm `nvidia-smi` works on the host, then install or repair the [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html). Verify the Toolkit before retrying Talemate:
|
||||
|
||||
```bash
|
||||
docker run --rm --gpus all ubuntu nvidia-smi
|
||||
```
|
||||
|
||||
### CUDA is not available in a running container
|
||||
|
||||
If the Toolkit probe succeeds and Talemate starts, check the running container:
|
||||
|
||||
```bash
|
||||
docker compose exec talemate nvidia-smi
|
||||
docker compose exec talemate /app/.venv/bin/python -B -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"
|
||||
```
|
||||
|
||||
If `nvidia-smi` works inside Talemate but the Python command reports `False`, update the host NVIDIA driver to one compatible with the image's locked CUDA 12.8 build, then recreate the container.
|
||||
|
||||
To run without CUDA instead, use:
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.cpu.yml up
|
||||
```
|
||||
|
||||
### Docker has created `config.yaml` directory
|
||||
|
||||
If you do not copy the example config to `config.yaml` before running `docker compose up` docker will create a `config` directory in the root of the project. This will cause the backend to fail to start.
|
||||
@@ -66,4 +103,4 @@ location /ws {
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host $host;
|
||||
}
|
||||
```
|
||||
```
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Load a scenario
|
||||
|
||||
Once you've set up a client and assigned it to all the agents, you will be presented with the `Home` screen. From here, you can load talemate scenarios and upload character cards.
|
||||
Once you've set up a client and assigned it to all the agents, you will be presented with the `Home` screen. From here, you can load talemate scenarios, browse the scene library, and import scenes or character cards — see [Home Screen & Scene Library](/talemate/user-guide/scene-browser) for a full tour.
|
||||
|
||||
To load the introductory `Infinity Quest` scenario, simply click on its entry in the `Quick Load` section.
|
||||
To load the introductory `Infinity Quest` scenario, simply click on its entry in the `Quick load` section.
|
||||
|
||||

|
||||

|
||||
|
||||
!!! info "First time may take a moment"
|
||||
When you load the a scenario for the first time, Talemate will need to initialize the long term memory model. Which likely means a download. Just be patient and it will be ready soon.
|
||||
|
||||
@@ -40,7 +40,7 @@ Select your preferred client from the dropdown and click **Add Client** to open
|
||||
Once you complete the client configuration, the wizard will automatically advance to the next step.
|
||||
|
||||
!!! info "Reasoning Models"
|
||||
If you are using a reasoning model (like DeepSeek R1 or GLM), you will need to enable reasoning in the client settings after setup. For OpenRouter users, the default model selected during the wizard (Gemini 3 Flash) has reasoning enabled automatically, but if you switch to a different reasoning-capable model, you'll need to enable it manually in the client settings.
|
||||
If you are using a reasoning model (like DeepSeek R1 or GLM), you will need to enable reasoning in the client settings after setup. For OpenRouter users, new clients have reasoning enabled by default with a budget of 2048 reasoning tokens, so the default model selected during the wizard (Gemini 3.6 Flash) and other reasoning models work out of the box. If you switch to a model that does not reason, you can turn reasoning off in the client settings.
|
||||
|
||||
## Step 3: Configure Long-term Memory
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 634 KiB |
|
Before Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 702 KiB |
|
Before Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 106 KiB |
BIN
docs/img/0.39.0/api-keys-anthropic.png
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
docs/img/0.39.0/api-keys-cohere.png
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
BIN
docs/img/0.39.0/api-keys-elevenlabs.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
docs/img/0.39.0/api-keys-google.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
docs/img/0.39.0/api-keys-groq.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
docs/img/0.39.0/api-keys-mistral.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
docs/img/0.39.0/api-keys-openai.png
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
BIN
docs/img/0.39.0/api-keys-openrouter.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
docs/img/0.39.0/app-settings-api-keys.png
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
docs/img/0.39.0/app-settings-appearance-messages.png
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
docs/img/0.39.0/app-settings-appearance-visuals.png
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
docs/img/0.39.0/app-settings-creator-content-classification.png
Normal file
|
After Width: | Height: | Size: 89 KiB |
BIN
docs/img/0.39.0/app-settings-creator-perspective-presets.png
Normal file
|
After Width: | Height: | Size: 87 KiB |
BIN
docs/img/0.39.0/app-settings-env-variables.png
Normal file
|
After Width: | Height: | Size: 111 KiB |
BIN
docs/img/0.39.0/app-settings-gameplay.png
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
docs/img/0.39.0/app-settings-player-character.png
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
docs/img/0.39.0/app-settings-presets-embeddings.png
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
docs/img/0.39.0/app-settings-presets-inference.png
Normal file
|
After Width: | Height: | Size: 71 KiB |
BIN
docs/img/0.39.0/app-settings-presets-system-prompts.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
docs/img/0.39.0/app-settings-search.png
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
docs/img/0.39.0/app-settings-unsaved-badge.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
docs/img/0.39.0/character-card-2.png
Normal file
|
After Width: | Height: | Size: 464 KiB |
BIN
docs/img/0.39.0/character-card-4.png
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
docs/img/0.39.0/client-anthropic.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
docs/img/0.39.0/client-cohere.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
docs/img/0.39.0/client-deepseek.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
docs/img/0.39.0/client-google.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
docs/img/0.39.0/client-groq.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
docs/img/0.39.0/client-mistral.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
docs/img/0.39.0/client-openai.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
docs/img/0.39.0/client-openrouter.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
docs/img/0.39.0/connect-a-client-add-client-modal.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
docs/img/0.39.0/embedding-settings-edit.png
Normal file
|
After Width: | Height: | Size: 88 KiB |
BIN
docs/img/0.39.0/embedding-settings-new-1.png
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
docs/img/0.39.0/getting-started-load-screen.png
Normal file
|
After Width: | Height: | Size: 282 KiB |
BIN
docs/img/0.39.0/help-agent-chat.png
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
docs/img/0.39.0/help-agent-settings.png
Normal file
|
After Width: | Height: | Size: 24 KiB |