A SillyTavern extension that enables using different AI models/APIs for different characters in group chats. Please feel free to create issues and contribute!
By default, SillyTavern group chats use a single API connection for all characters. This means every character in your group chat speaks using the same model, which limits creative possibilities:
- You can't have one character use Claude while another uses GPT
- You can't assign a cheaper/faster model to simple characters and a smarter model to complex ones
- You can't leverage different models' strengths for different character personalities
Multi-Model Chat lets you assign a Connection Profile to each character. When that character is drafted to speak in a group chat, the extension automatically switches to their assigned profile before generation.
- 🔄 Automatic Profile Switching. Seamlessly switches connection profiles when characters speak. (and Presets which you've saved to Profiles!)
- 🎭 Per-Character Assignment. Assign different profiles to different characters via ST Char Settings or chat commands.
- 📢 Optional Notifications. Get notified when profiles switch (can be disabled).
- 🔙 Profile Restoration. Optionally restore your original profile after leaving a group chat.
- ⚡ Slash Commands. Use
/mmc-assign,/mmc-go, and others directly from chat. - 🎛️ Centralized Assignments UI. View, manage, and clear all character profile assignments in one place.
- 💾 Persistent Storage. Profile assignments are saved in character cards and export with them.
- ✍️ Manual Profile Entry. Easily add custom connection profile names if auto-detection fails.
- SillyTavern 1.12.6 or later.
- Connection Profiles extension enabled. (built-in since 1.12.6)
- At least 2 connection profiles configured.
- Open SillyTavern.
- Go to Extensions → Install Extension.
- Paste this repository URL:
https://github.com/SinnerConsort/st-multi-model-chat. - Click Install.
- Refresh the page.
- Navigate to your SillyTavern installation's
data/<user>/extensionsfolder. - Clone or download this repository into a folder named
multi-model-chat. - Restart SillyTavern.
Before using this extension, you need connection profiles configured:
- Go to API Connections (plug icon).
- Configure your first API/model/preset combination.
- In the Connection Profiles section, click Save and name it. (e.g., "Claude-Sonnet")
- Repeat for each API/model you want to use. (e.g., "GPT-4", "Local-Llama", etc.)
- Create or open a group chat with characters that have profiles assigned.
- Open a character's settings.
- Click on a field near ▶ play buttons.
- Select a connection profile from the dropdown.
- Refresh profiles in extension settings by clicking a button.
- Chat normally - the extension handles profile switching automatically.
- Watch the notifications (if enabled) to see when profiles switch.
- Alternatively, use the ▶ play buttons in the group member list to immediately switch profiles and trigger a character.
| Command | Description |
|---|---|
/mmc-go [character] |
Switch to character's assigned profile and trigger them to generate. |
/mmc-assign [char]=[profile] |
Assign a connection profile to a character. Use /mmc-assign Char= to clear an assignment. |
/mmc-add-profile [name] |
Manually add a connection profile name to the extension's list. |
/mmc-debug |
Show debug information about profiles, settings, and current assignments. |
Access settings via Extensions → Multi-Model Chat:
| Setting | Description |
|---|---|
| Enable profile switching | Master toggle for the extension. |
| Show notifications | Display toasts when profiles switch. |
| Restore original profile | Return to your previous profile after leaving a group chat. |
| Fallback Profile | Assign a default profile for unassigned characters. |
| Add Profile Manually | If profiles aren't detected, type the exact name and click Add. |
| Current Assignments | Full list of characters assigned to a specified models. |
- When you're in a group chat, SillyTavern selects which character will speak next.
- The extension listens for the
GROUP_MEMBER_DRAFTEDevent. - It checks if that character has an assigned connection profile.
- If yes, it executes
/profile [name]to switch before generation begins. - The character's response is generated using their assigned API/model.
Name your profiles descriptively so they're easy to assign:
Claude-Opus-CreativeGPT4-AnalyticalLocal-Fast
Consider assigning models based on character needs:
- Complex characters. Use more capable models (Claude Opus, GPT-4).
- Simple NPCs. Use faster/cheaper models (Haiku, local models).
- Specific personalities. Match model "vibes" to characters.
The extension works across different API types:
- OpenAI ↔ Anthropic ↔ Local models. It doesn't matter for an extension, because Silly Tavern itself rules it.
- Just make sure each profile is fully configured with all necessary settings!
- Ensure the extension is enabled in settings. Verify the character has a profile assigned (check Advanced Definitions).
- Make sure the profile name exists (use Refresh Profiles button).
- The assigned profile may have been deleted.
- Re-assign a valid profile to the character.
- Profile switching happens via slash commands which have minimal overhead.
- If you notice delays, they're likely from API connection time, not the extension.
- Of course it takes some time to generate responses and send them to API. Be patient.
- Works only in group chats (solo chats don't need this).
- Requires Chat Completion API profiles (Text Completion may have issues).
- Profile switching is visible in the UI (Connection Profiles section updates). But I guess it won't be a problem.
Contributions welcome! This extension was born from community discussion #3785.
Ideas for improvement:
- Support for Text Completion APIs.
- Preset switching in addition to profiles (but you can just save Presets in Profiles, it's built-in ST's feature).
- Per-group default profiles.
- Profile assignment via World Info.
AGPL-3.0 - Same as SillyTavern.
- SillyTavern team for the excellent extension API.
- Cohee for clarifying the implementation path.
victoralvelaisfor initiating the GitHub discussion.- The ST community for requesting this feature.