149 lines
4.0 KiB
Markdown
149 lines
4.0 KiB
Markdown
|
|
# Japanese Mode - Quick Reference for Web UI
|
||
|
|
|
||
|
|
## What Was Implemented
|
||
|
|
|
||
|
|
A **language toggle system** for the Miku bot that switches between:
|
||
|
|
- **English Mode** (Default) - Uses standard Llama 3.1 model
|
||
|
|
- **Japanese Mode** - Uses Llama 3.1 Swallow model, responds entirely in Japanese
|
||
|
|
|
||
|
|
## API Endpoints
|
||
|
|
|
||
|
|
### 1. Check Language Status
|
||
|
|
```
|
||
|
|
GET /language
|
||
|
|
```
|
||
|
|
Response:
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"language_mode": "english",
|
||
|
|
"available_languages": ["english", "japanese"],
|
||
|
|
"current_model": "llama3.1"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Toggle Language (English ↔ Japanese)
|
||
|
|
```
|
||
|
|
POST /language/toggle
|
||
|
|
```
|
||
|
|
Response:
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"status": "ok",
|
||
|
|
"language_mode": "japanese",
|
||
|
|
"model_now_using": "swallow",
|
||
|
|
"message": "Miku is now speaking in JAPANESE!"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Set Specific Language
|
||
|
|
```
|
||
|
|
POST /language/set?language=japanese
|
||
|
|
```
|
||
|
|
or
|
||
|
|
```
|
||
|
|
POST /language/set?language=english
|
||
|
|
```
|
||
|
|
|
||
|
|
Response:
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"status": "ok",
|
||
|
|
"language_mode": "japanese",
|
||
|
|
"model_now_using": "swallow",
|
||
|
|
"message": "Miku is now speaking in JAPANESE!"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Web UI Integration
|
||
|
|
|
||
|
|
Add a simple toggle button to your web UI:
|
||
|
|
|
||
|
|
```html
|
||
|
|
<button onclick="toggleLanguage()">🌐 Toggle Language</button>
|
||
|
|
<div id="language-status">English</div>
|
||
|
|
|
||
|
|
<script>
|
||
|
|
async function toggleLanguage() {
|
||
|
|
const response = await fetch('/language/toggle', { method: 'POST' });
|
||
|
|
const data = await response.json();
|
||
|
|
document.getElementById('language-status').textContent =
|
||
|
|
data.language_mode.toUpperCase();
|
||
|
|
}
|
||
|
|
|
||
|
|
async function getLanguageStatus() {
|
||
|
|
const response = await fetch('/language');
|
||
|
|
const data = await response.json();
|
||
|
|
document.getElementById('language-status').textContent =
|
||
|
|
data.language_mode.toUpperCase();
|
||
|
|
}
|
||
|
|
|
||
|
|
// Check status on load
|
||
|
|
getLanguageStatus();
|
||
|
|
</script>
|
||
|
|
```
|
||
|
|
|
||
|
|
## Design Approach
|
||
|
|
|
||
|
|
**Why no full translation of prompts?**
|
||
|
|
|
||
|
|
Instead of translating all Miku's personality prompts to Japanese, we:
|
||
|
|
|
||
|
|
1. **Keep English context** - Helps the Swallow model understand Miku's personality better
|
||
|
|
2. **Append language instruction** - Add "Respond entirely in Japanese (日本語)" to the prompt
|
||
|
|
3. **Let Swallow handle it** - The model is trained for Japanese and understands English instructions
|
||
|
|
|
||
|
|
**Benefits:**
|
||
|
|
- ✅ Minimal implementation effort
|
||
|
|
- ✅ No translation maintenance needed
|
||
|
|
- ✅ Model still understands Miku's complete personality
|
||
|
|
- ✅ Can easily expand to other languages
|
||
|
|
- ✅ Works perfectly for instruction-based language switching
|
||
|
|
|
||
|
|
## How the Bot Behaves
|
||
|
|
|
||
|
|
### English Mode
|
||
|
|
- Responds in English
|
||
|
|
- Uses standard Llama 3.1 model
|
||
|
|
- All personality and context in English
|
||
|
|
- Emoji reactions work as normal
|
||
|
|
|
||
|
|
### Japanese Mode
|
||
|
|
- Responds entirely in 日本語 (Japanese)
|
||
|
|
- Uses Llama 3.1 Swallow model (trained on Japanese text)
|
||
|
|
- Understands English context but responds in Japanese
|
||
|
|
- Maintains same personality and mood system
|
||
|
|
|
||
|
|
## Testing the Implementation
|
||
|
|
|
||
|
|
1. **Default behavior** - Miku speaks English
|
||
|
|
2. **Toggle once** - Miku switches to Japanese
|
||
|
|
3. **Send message** - Check if response is in Japanese
|
||
|
|
4. **Toggle again** - Miku switches back to English
|
||
|
|
5. **Send message** - Confirm response is in English
|
||
|
|
|
||
|
|
## Technical Details
|
||
|
|
|
||
|
|
| Component | English | Japanese |
|
||
|
|
|-----------|---------|----------|
|
||
|
|
| Text Model | `llama3.1` | `swallow` |
|
||
|
|
| Prompts | miku_prompt.txt | miku_prompt_jp.txt |
|
||
|
|
| Lore | miku_lore.txt | miku_lore_jp.txt |
|
||
|
|
| Lyrics | miku_lyrics.txt | miku_lyrics_jp.txt |
|
||
|
|
| Language Instruction | None | "Respond in 日本語 only" |
|
||
|
|
|
||
|
|
## Notes
|
||
|
|
|
||
|
|
- Language mode is **global** (affects all users/servers)
|
||
|
|
- If you need **per-server language settings**, store mode in `servers_config.json`
|
||
|
|
- Evil mode takes priority over language mode if both are active
|
||
|
|
- Conversation history stores both English and Japanese messages seamlessly
|
||
|
|
- Vision model always uses NVIDIA GPU (language mode doesn't affect vision)
|
||
|
|
|
||
|
|
## Future Improvements
|
||
|
|
|
||
|
|
1. Save language preference to `memory/servers_config.json`
|
||
|
|
2. Add `LANGUAGE_MODE` to per-server settings
|
||
|
|
3. Create per-channel language support
|
||
|
|
4. Add language auto-detection from user messages
|
||
|
|
5. Create fully translated Japanese prompt files for better accuracy
|