Spaces:
Running
Running
Upload 35 files
Browse files- index.html +43 -17
- kimi-css/kimi-settings.css +108 -0
- kimi-js/kimi-config.js +2 -1
- kimi-js/kimi-database.js +4 -4
- kimi-js/kimi-llm-manager.js +9 -9
- kimi-js/kimi-module.js +3 -3
- kimi-js/kimi-script.js +2 -1
- kimi-js/kimi-utils.js +1 -1
- kimi-js/kimi-voices.js +70 -5
- kimi-locale/de.json +5 -1
- kimi-locale/en.json +5 -1
- kimi-locale/es.json +6 -2
- kimi-locale/fr.json +5 -1
- kimi-locale/it.json +7 -3
- kimi-locale/ja.json +6 -2
- kimi-locale/pt.json +6 -2
- kimi-locale/zh.json +7 -3
index.html
CHANGED
|
@@ -159,12 +159,12 @@
|
|
| 159 |
<button class="settings-tab" data-tab="llm">
|
| 160 |
<i class="fas fa-robot"></i> <span data-i18n="tab_llm">API & Models</span>
|
| 161 |
</button>
|
| 162 |
-
<button class="settings-tab" data-tab="personality">
|
| 163 |
-
<i class="fas fa-brain"></i> <span data-i18n="tab_personality">Personality</span>
|
| 164 |
-
</button>
|
| 165 |
<button class="settings-tab" data-tab="appearance">
|
| 166 |
<i class="fas fa-palette"></i> <span data-i18n="tab_appearance">Appearance</span>
|
| 167 |
</button>
|
|
|
|
|
|
|
|
|
|
| 168 |
<button class="settings-tab" data-tab="data">
|
| 169 |
<i class="fas fa-database"></i> <span data-i18n="tab_data">Data</span>
|
| 170 |
</button>
|
|
@@ -194,17 +194,36 @@
|
|
| 194 |
</div>
|
| 195 |
</div>
|
| 196 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 197 |
<div class="config-row">
|
| 198 |
<label class="config-label" data-i18n="preferred_voice">Preferred Voice</label>
|
| 199 |
<div class="config-control">
|
| 200 |
<select class="kimi-select" id="voice-selection" aria-label="Preferred Voice">
|
| 201 |
<!-- Dynamic options inserted by KimiVoiceManager; legacy 'auto' removed -->
|
| 202 |
</select>
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 208 |
</div>
|
| 209 |
</div>
|
| 210 |
</div>
|
|
@@ -262,8 +281,18 @@
|
|
| 262 |
<div class="config-section" id="character-section">
|
| 263 |
<h3><i class="fas fa-user-astronaut"></i> <span data-i18n="characters">Characters</span></h3>
|
| 264 |
<div class="character-grid" id="character-grid"></div>
|
| 265 |
-
|
| 266 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 267 |
</div>
|
| 268 |
</div>
|
| 269 |
|
|
@@ -461,15 +490,15 @@
|
|
| 461 |
<div class="config-control">
|
| 462 |
<div class="slider-container">
|
| 463 |
<input type="range" class="kimi-slider" id="llm-max-tokens" min="10" max="8192"
|
| 464 |
-
step="10" value="
|
| 465 |
-
<span class="slider-value" id="llm-max-tokens-value">
|
| 466 |
</div>
|
| 467 |
</div>
|
| 468 |
</div>
|
| 469 |
<div class="config-note-info settings">
|
| 470 |
<i class="fas fa-ruler"></i>
|
| 471 |
<small class="config-help" data-i18n="max_tokens_help">Maximum response length in tokens
|
| 472 |
-
(default:
|
| 473 |
</div>
|
| 474 |
|
| 475 |
<div class="config-row">
|
|
@@ -553,9 +582,6 @@
|
|
| 553 |
</div>
|
| 554 |
</div>
|
| 555 |
|
| 556 |
-
<div class="config-row">
|
| 557 |
-
<!-- Animations toggle removed: animations always enabled by default -->
|
| 558 |
-
</div>
|
| 559 |
</div>
|
| 560 |
|
| 561 |
<div class="config-section">
|
|
@@ -1060,7 +1086,7 @@
|
|
| 1060 |
<h3><i class="fas fa-code"></i> Technical Information</h3>
|
| 1061 |
<div class="tech-info">
|
| 1062 |
<p><strong>Created date :</strong> July 16, 2025</p>
|
| 1063 |
-
<p><strong>Version :</strong> v1.1.7.1 "
|
| 1064 |
<p><strong>Last update :</strong> November 12, 2025</p>
|
| 1065 |
<p><strong>Technologies :</strong> HTML5, CSS3, JavaScript ES6+, IndexedDB, Web Speech
|
| 1066 |
API</p>
|
|
|
|
| 159 |
<button class="settings-tab" data-tab="llm">
|
| 160 |
<i class="fas fa-robot"></i> <span data-i18n="tab_llm">API & Models</span>
|
| 161 |
</button>
|
|
|
|
|
|
|
|
|
|
| 162 |
<button class="settings-tab" data-tab="appearance">
|
| 163 |
<i class="fas fa-palette"></i> <span data-i18n="tab_appearance">Appearance</span>
|
| 164 |
</button>
|
| 165 |
+
<button class="settings-tab" data-tab="personality">
|
| 166 |
+
<i class="fas fa-brain"></i> <span data-i18n="tab_personality">Personality</span>
|
| 167 |
+
</button>
|
| 168 |
<button class="settings-tab" data-tab="data">
|
| 169 |
<i class="fas fa-database"></i> <span data-i18n="tab_data">Data</span>
|
| 170 |
</button>
|
|
|
|
| 194 |
</div>
|
| 195 |
</div>
|
| 196 |
|
| 197 |
+
<div class="config-row">
|
| 198 |
+
<label class="config-label" data-i18n="enable_tts">Enable Text-to-Speech</label>
|
| 199 |
+
<div class="config-control">
|
| 200 |
+
<div class="toggle-switch active" id="tts-toggle" role="switch" aria-checked="true"
|
| 201 |
+
tabindex="0" aria-labelledby="tts-toggle-label">
|
| 202 |
+
</div>
|
| 203 |
+
</div>
|
| 204 |
+
</div>
|
| 205 |
+
|
| 206 |
+
<div class="config-note-info info">
|
| 207 |
+
<i class="fas fa-volume-up"></i>
|
| 208 |
+
<small class="config-help" data-i18n="enable_tts_help">Enable or disable voice synthesis
|
| 209 |
+
globally. When disabled, Kimi will not speak responses (default: enabled).</small>
|
| 210 |
+
</div>
|
| 211 |
+
|
| 212 |
<div class="config-row">
|
| 213 |
<label class="config-label" data-i18n="preferred_voice">Preferred Voice</label>
|
| 214 |
<div class="config-control">
|
| 215 |
<select class="kimi-select" id="voice-selection" aria-label="Preferred Voice">
|
| 216 |
<!-- Dynamic options inserted by KimiVoiceManager; legacy 'auto' removed -->
|
| 217 |
</select>
|
| 218 |
+
</div>
|
| 219 |
+
</div>
|
| 220 |
+
|
| 221 |
+
<div class="config-row">
|
| 222 |
+
<label class="config-label" data-i18n="show_all_system_voices">Show All System
|
| 223 |
+
Voices</label>
|
| 224 |
+
<div class="config-control">
|
| 225 |
+
<div class="toggle-switch" id="show-all-voices-toggle" role="switch"
|
| 226 |
+
aria-checked="false" tabindex="0" aria-labelledby="show-all-voices-label">
|
| 227 |
</div>
|
| 228 |
</div>
|
| 229 |
</div>
|
|
|
|
| 281 |
<div class="config-section" id="character-section">
|
| 282 |
<h3><i class="fas fa-user-astronaut"></i> <span data-i18n="characters">Characters</span></h3>
|
| 283 |
<div class="character-grid" id="character-grid"></div>
|
| 284 |
+
|
| 285 |
+
<div class="character-selection-notice">
|
| 286 |
+
<i class="fas fa-info-circle"></i>
|
| 287 |
+
<span data-i18n="character_selection_notice">Click the button below to apply your character
|
| 288 |
+
selection. This will reload the page.</span>
|
| 289 |
+
</div>
|
| 290 |
+
|
| 291 |
+
<div class="character-actions-center">
|
| 292 |
+
<button class="kimi-button-primary pulse-animation" id="save-character-btn">
|
| 293 |
+
<i class="fas fa-check-circle"></i>
|
| 294 |
+
<span data-i18n="apply_character">Apply Character Selection</span>
|
| 295 |
+
</button>
|
| 296 |
</div>
|
| 297 |
</div>
|
| 298 |
|
|
|
|
| 490 |
<div class="config-control">
|
| 491 |
<div class="slider-container">
|
| 492 |
<input type="range" class="kimi-slider" id="llm-max-tokens" min="10" max="8192"
|
| 493 |
+
step="10" value="800" />
|
| 494 |
+
<span class="slider-value" id="llm-max-tokens-value">800</span>
|
| 495 |
</div>
|
| 496 |
</div>
|
| 497 |
</div>
|
| 498 |
<div class="config-note-info settings">
|
| 499 |
<i class="fas fa-ruler"></i>
|
| 500 |
<small class="config-help" data-i18n="max_tokens_help">Maximum response length in tokens
|
| 501 |
+
(default: 800). Higher values allow longer responses.</small>
|
| 502 |
</div>
|
| 503 |
|
| 504 |
<div class="config-row">
|
|
|
|
| 582 |
</div>
|
| 583 |
</div>
|
| 584 |
|
|
|
|
|
|
|
|
|
|
| 585 |
</div>
|
| 586 |
|
| 587 |
<div class="config-section">
|
|
|
|
| 1086 |
<h3><i class="fas fa-code"></i> Technical Information</h3>
|
| 1087 |
<div class="tech-info">
|
| 1088 |
<p><strong>Created date :</strong> July 16, 2025</p>
|
| 1089 |
+
<p><strong>Version :</strong> v1.1.7.1 "HuggingFace and Github version"</p>
|
| 1090 |
<p><strong>Last update :</strong> November 12, 2025</p>
|
| 1091 |
<p><strong>Technologies :</strong> HTML5, CSS3, JavaScript ES6+, IndexedDB, Web Speech
|
| 1092 |
API</p>
|
kimi-css/kimi-settings.css
CHANGED
|
@@ -1312,6 +1312,114 @@
|
|
| 1312 |
}
|
| 1313 |
}
|
| 1314 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1315 |
.character-card {
|
| 1316 |
background: var(--card-bg);
|
| 1317 |
border: 2px solid transparent;
|
|
|
|
| 1312 |
}
|
| 1313 |
}
|
| 1314 |
|
| 1315 |
+
/* Character Selection Notice */
|
| 1316 |
+
.character-selection-notice {
|
| 1317 |
+
display: flex;
|
| 1318 |
+
align-items: center;
|
| 1319 |
+
justify-content: center;
|
| 1320 |
+
gap: 10px;
|
| 1321 |
+
padding: 12px 20px;
|
| 1322 |
+
margin: 20px auto 16px;
|
| 1323 |
+
background: linear-gradient(135deg, rgba(139, 92, 246, 0.1), rgba(59, 130, 246, 0.1));
|
| 1324 |
+
border: 1px solid rgba(139, 92, 246, 0.3);
|
| 1325 |
+
border-radius: 12px;
|
| 1326 |
+
color: var(--text-color);
|
| 1327 |
+
font-size: 0.9rem;
|
| 1328 |
+
max-width: 600px;
|
| 1329 |
+
}
|
| 1330 |
+
|
| 1331 |
+
.character-selection-notice i {
|
| 1332 |
+
color: var(--primary-color);
|
| 1333 |
+
font-size: 1.1rem;
|
| 1334 |
+
flex-shrink: 0;
|
| 1335 |
+
}
|
| 1336 |
+
|
| 1337 |
+
/* Character Actions Center */
|
| 1338 |
+
.character-actions-center {
|
| 1339 |
+
display: flex;
|
| 1340 |
+
justify-content: center;
|
| 1341 |
+
margin: 24px 0 32px;
|
| 1342 |
+
}
|
| 1343 |
+
|
| 1344 |
+
/* Primary CTA Button for Character Selection */
|
| 1345 |
+
.kimi-button-primary {
|
| 1346 |
+
display: inline-flex;
|
| 1347 |
+
align-items: center;
|
| 1348 |
+
justify-content: center;
|
| 1349 |
+
gap: 12px;
|
| 1350 |
+
padding: 16px 40px;
|
| 1351 |
+
font-size: 1.05rem;
|
| 1352 |
+
font-weight: 600;
|
| 1353 |
+
color: white;
|
| 1354 |
+
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
|
| 1355 |
+
border: none;
|
| 1356 |
+
border-radius: 14px;
|
| 1357 |
+
cursor: pointer;
|
| 1358 |
+
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
| 1359 |
+
box-shadow: 0 4px 20px rgba(139, 92, 246, 0.3);
|
| 1360 |
+
position: relative;
|
| 1361 |
+
overflow: hidden;
|
| 1362 |
+
min-width: 280px;
|
| 1363 |
+
}
|
| 1364 |
+
|
| 1365 |
+
.kimi-button-primary::before {
|
| 1366 |
+
content: "";
|
| 1367 |
+
position: absolute;
|
| 1368 |
+
top: 0;
|
| 1369 |
+
left: -100%;
|
| 1370 |
+
width: 100%;
|
| 1371 |
+
height: 100%;
|
| 1372 |
+
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
|
| 1373 |
+
transition: left 0.5s;
|
| 1374 |
+
}
|
| 1375 |
+
|
| 1376 |
+
.kimi-button-primary:hover {
|
| 1377 |
+
transform: translateY(-2px);
|
| 1378 |
+
box-shadow: 0 8px 30px rgba(139, 92, 246, 0.5);
|
| 1379 |
+
}
|
| 1380 |
+
|
| 1381 |
+
.kimi-button-primary:hover::before {
|
| 1382 |
+
left: 100%;
|
| 1383 |
+
}
|
| 1384 |
+
|
| 1385 |
+
.kimi-button-primary:active {
|
| 1386 |
+
transform: translateY(0);
|
| 1387 |
+
}
|
| 1388 |
+
|
| 1389 |
+
.kimi-button-primary i {
|
| 1390 |
+
font-size: 1.2rem;
|
| 1391 |
+
}
|
| 1392 |
+
|
| 1393 |
+
.kimi-button-primary.success {
|
| 1394 |
+
background: linear-gradient(135deg, #10b981, #059669);
|
| 1395 |
+
box-shadow: 0 4px 20px rgba(16, 185, 129, 0.4);
|
| 1396 |
+
}
|
| 1397 |
+
|
| 1398 |
+
.kimi-button-primary:disabled {
|
| 1399 |
+
opacity: 0.6;
|
| 1400 |
+
cursor: not-allowed;
|
| 1401 |
+
transform: none;
|
| 1402 |
+
}
|
| 1403 |
+
|
| 1404 |
+
/* Pulse Animation for CTA */
|
| 1405 |
+
@keyframes pulse-glow {
|
| 1406 |
+
0%,
|
| 1407 |
+
100% {
|
| 1408 |
+
box-shadow: 0 4px 20px rgba(139, 92, 246, 0.3);
|
| 1409 |
+
}
|
| 1410 |
+
50% {
|
| 1411 |
+
box-shadow: 0 4px 30px rgba(139, 92, 246, 0.6);
|
| 1412 |
+
}
|
| 1413 |
+
}
|
| 1414 |
+
|
| 1415 |
+
.kimi-button-primary.pulse-animation {
|
| 1416 |
+
animation: pulse-glow 2s ease-in-out infinite;
|
| 1417 |
+
}
|
| 1418 |
+
|
| 1419 |
+
.kimi-button-primary.pulse-animation:hover {
|
| 1420 |
+
animation: none;
|
| 1421 |
+
}
|
| 1422 |
+
|
| 1423 |
.character-card {
|
| 1424 |
background: var(--card-bg);
|
| 1425 |
border: 2px solid transparent;
|
kimi-js/kimi-config.js
CHANGED
|
@@ -9,8 +9,9 @@ window.KIMI_CONFIG = {
|
|
| 9 |
VOICE_RATE: 1.1,
|
| 10 |
VOICE_PITCH: 1.1,
|
| 11 |
VOICE_VOLUME: 0.8,
|
|
|
|
| 12 |
LLM_TEMPERATURE: 0.9,
|
| 13 |
-
LLM_MAX_TOKENS:
|
| 14 |
LLM_TOP_P: 0.9,
|
| 15 |
LLM_FREQUENCY_PENALTY: 0.9,
|
| 16 |
LLM_PRESENCE_PENALTY: 0.8,
|
|
|
|
| 9 |
VOICE_RATE: 1.1,
|
| 10 |
VOICE_PITCH: 1.1,
|
| 11 |
VOICE_VOLUME: 0.8,
|
| 12 |
+
TTS_ENABLED: true,
|
| 13 |
LLM_TEMPERATURE: 0.9,
|
| 14 |
+
LLM_MAX_TOKENS: 800,
|
| 15 |
LLM_TOP_P: 0.9,
|
| 16 |
LLM_FREQUENCY_PENALTY: 0.9,
|
| 17 |
LLM_PRESENCE_PENALTY: 0.8,
|
kimi-js/kimi-database.js
CHANGED
|
@@ -39,7 +39,7 @@ class KimiDatabase {
|
|
| 39 |
category: "llm",
|
| 40 |
settings: {
|
| 41 |
temperature: 0.9,
|
| 42 |
-
maxTokens:
|
| 43 |
top_p: 0.9,
|
| 44 |
frequency_penalty: 0.9,
|
| 45 |
presence_penalty: 0.8
|
|
@@ -59,7 +59,7 @@ class KimiDatabase {
|
|
| 59 |
name: "Mistral Small 3.2",
|
| 60 |
provider: "openrouter",
|
| 61 |
apiKey: "",
|
| 62 |
-
config: { temperature: 0.9, maxTokens:
|
| 63 |
added: new Date().toISOString(),
|
| 64 |
lastUsed: null
|
| 65 |
});
|
|
@@ -289,7 +289,7 @@ class KimiDatabase {
|
|
| 289 |
category: "llm",
|
| 290 |
settings: {
|
| 291 |
temperature: 0.9,
|
| 292 |
-
maxTokens:
|
| 293 |
top_p: 0.9,
|
| 294 |
frequency_penalty: 0.9,
|
| 295 |
presence_penalty: 0.8
|
|
@@ -317,7 +317,7 @@ class KimiDatabase {
|
|
| 317 |
name: "Mistral Small 3.2",
|
| 318 |
provider: "openrouter",
|
| 319 |
apiKey: "",
|
| 320 |
-
config: { temperature: 0.9, maxTokens:
|
| 321 |
added: new Date().toISOString(),
|
| 322 |
lastUsed: null
|
| 323 |
}
|
|
|
|
| 39 |
category: "llm",
|
| 40 |
settings: {
|
| 41 |
temperature: 0.9,
|
| 42 |
+
maxTokens: 800,
|
| 43 |
top_p: 0.9,
|
| 44 |
frequency_penalty: 0.9,
|
| 45 |
presence_penalty: 0.8
|
|
|
|
| 59 |
name: "Mistral Small 3.2",
|
| 60 |
provider: "openrouter",
|
| 61 |
apiKey: "",
|
| 62 |
+
config: { temperature: 0.9, maxTokens: 800 },
|
| 63 |
added: new Date().toISOString(),
|
| 64 |
lastUsed: null
|
| 65 |
});
|
|
|
|
| 289 |
category: "llm",
|
| 290 |
settings: {
|
| 291 |
temperature: 0.9,
|
| 292 |
+
maxTokens: 800,
|
| 293 |
top_p: 0.9,
|
| 294 |
frequency_penalty: 0.9,
|
| 295 |
presence_penalty: 0.8
|
|
|
|
| 317 |
name: "Mistral Small 3.2",
|
| 318 |
provider: "openrouter",
|
| 319 |
apiKey: "",
|
| 320 |
+
config: { temperature: 0.9, maxTokens: 800 },
|
| 321 |
added: new Date().toISOString(),
|
| 322 |
lastUsed: null
|
| 323 |
}
|
kimi-js/kimi-llm-manager.js
CHANGED
|
@@ -481,7 +481,7 @@ class KimiLLMManager {
|
|
| 481 |
// Get LLM settings from individual preferences (FIXED: was using grouped settings)
|
| 482 |
const llmSettings = {
|
| 483 |
temperature: await this.db.getPreference("llmTemperature", 0.9),
|
| 484 |
-
maxTokens: await this.db.getPreference("llmMaxTokens",
|
| 485 |
top_p: await this.db.getPreference("llmTopP", 0.9),
|
| 486 |
frequency_penalty: await this.db.getPreference("llmFrequencyPenalty", 0.9),
|
| 487 |
presence_penalty: await this.db.getPreference("llmPresencePenalty", 0.8)
|
|
@@ -523,7 +523,7 @@ class KimiLLMManager {
|
|
| 523 |
async chatDirectly(userMessage, options = {}) {
|
| 524 |
const llmSettings = {
|
| 525 |
temperature: await this.db.getPreference("llmTemperature", 0.9),
|
| 526 |
-
maxTokens: await this.db.getPreference("llmMaxTokens",
|
| 527 |
top_p: await this.db.getPreference("llmTopP", 0.9),
|
| 528 |
frequency_penalty: await this.db.getPreference("llmFrequencyPenalty", 0.9),
|
| 529 |
presence_penalty: await this.db.getPreference("llmPresencePenalty", 0.8)
|
|
@@ -559,7 +559,7 @@ class KimiLLMManager {
|
|
| 559 |
// Get LLM settings from individual preferences
|
| 560 |
const llmSettings = {
|
| 561 |
temperature: await this.db.getPreference("llmTemperature", 0.9),
|
| 562 |
-
maxTokens: await this.db.getPreference("llmMaxTokens",
|
| 563 |
top_p: await this.db.getPreference("llmTopP", 0.9),
|
| 564 |
frequency_penalty: await this.db.getPreference("llmFrequencyPenalty", 0.9),
|
| 565 |
presence_penalty: await this.db.getPreference("llmPresencePenalty", 0.8)
|
|
@@ -617,13 +617,13 @@ class KimiLLMManager {
|
|
| 617 |
// Get LLM settings from individual preferences (FIXED: was using grouped settings)
|
| 618 |
const llmSettings = {
|
| 619 |
temperature: await this.db.getPreference("llmTemperature", 0.9),
|
| 620 |
-
maxTokens: await this.db.getPreference("llmMaxTokens",
|
| 621 |
top_p: await this.db.getPreference("llmTopP", 0.9),
|
| 622 |
frequency_penalty: await this.db.getPreference("llmFrequencyPenalty", 0.9),
|
| 623 |
presence_penalty: await this.db.getPreference("llmPresencePenalty", 0.8)
|
| 624 |
};
|
| 625 |
// Unified fallback defaults (must stay consistent with database defaults)
|
| 626 |
-
const unifiedDefaults = { temperature: 0.9, maxTokens:
|
| 627 |
const payload = {
|
| 628 |
model: modelId,
|
| 629 |
messages: [
|
|
@@ -718,12 +718,12 @@ class KimiLLMManager {
|
|
| 718 |
// Get LLM settings from individual preferences (FIXED: was using grouped settings)
|
| 719 |
const llmSettings = {
|
| 720 |
temperature: await this.db.getPreference("llmTemperature", 0.9),
|
| 721 |
-
maxTokens: await this.db.getPreference("llmMaxTokens",
|
| 722 |
top_p: await this.db.getPreference("llmTopP", 0.9),
|
| 723 |
frequency_penalty: await this.db.getPreference("llmFrequencyPenalty", 0.9),
|
| 724 |
presence_penalty: await this.db.getPreference("llmPresencePenalty", 0.8)
|
| 725 |
};
|
| 726 |
-
const unifiedDefaults = { temperature: 0.9, maxTokens:
|
| 727 |
const payload = {
|
| 728 |
model: this.currentModel,
|
| 729 |
messages: messages,
|
|
@@ -1017,7 +1017,7 @@ class KimiLLMManager {
|
|
| 1017 |
// Get unified defaults and options
|
| 1018 |
const unifiedDefaults = window.getUnifiedDefaults
|
| 1019 |
? window.getUnifiedDefaults()
|
| 1020 |
-
: { temperature: 0.9, maxTokens:
|
| 1021 |
|
| 1022 |
const enableStreaming = await this.db.getPreference("enableStreaming", true);
|
| 1023 |
|
|
@@ -1155,7 +1155,7 @@ class KimiLLMManager {
|
|
| 1155 |
|
| 1156 |
const unifiedDefaults = window.getUnifiedDefaults
|
| 1157 |
? window.getUnifiedDefaults()
|
| 1158 |
-
: { temperature: 0.9, maxTokens:
|
| 1159 |
|
| 1160 |
const enableStreaming = await this.db.getPreference("enableStreaming", true);
|
| 1161 |
|
|
|
|
| 481 |
// Get LLM settings from individual preferences (FIXED: was using grouped settings)
|
| 482 |
const llmSettings = {
|
| 483 |
temperature: await this.db.getPreference("llmTemperature", 0.9),
|
| 484 |
+
maxTokens: await this.db.getPreference("llmMaxTokens", 800),
|
| 485 |
top_p: await this.db.getPreference("llmTopP", 0.9),
|
| 486 |
frequency_penalty: await this.db.getPreference("llmFrequencyPenalty", 0.9),
|
| 487 |
presence_penalty: await this.db.getPreference("llmPresencePenalty", 0.8)
|
|
|
|
| 523 |
async chatDirectly(userMessage, options = {}) {
|
| 524 |
const llmSettings = {
|
| 525 |
temperature: await this.db.getPreference("llmTemperature", 0.9),
|
| 526 |
+
maxTokens: await this.db.getPreference("llmMaxTokens", 800),
|
| 527 |
top_p: await this.db.getPreference("llmTopP", 0.9),
|
| 528 |
frequency_penalty: await this.db.getPreference("llmFrequencyPenalty", 0.9),
|
| 529 |
presence_penalty: await this.db.getPreference("llmPresencePenalty", 0.8)
|
|
|
|
| 559 |
// Get LLM settings from individual preferences
|
| 560 |
const llmSettings = {
|
| 561 |
temperature: await this.db.getPreference("llmTemperature", 0.9),
|
| 562 |
+
maxTokens: await this.db.getPreference("llmMaxTokens", 800),
|
| 563 |
top_p: await this.db.getPreference("llmTopP", 0.9),
|
| 564 |
frequency_penalty: await this.db.getPreference("llmFrequencyPenalty", 0.9),
|
| 565 |
presence_penalty: await this.db.getPreference("llmPresencePenalty", 0.8)
|
|
|
|
| 617 |
// Get LLM settings from individual preferences (FIXED: was using grouped settings)
|
| 618 |
const llmSettings = {
|
| 619 |
temperature: await this.db.getPreference("llmTemperature", 0.9),
|
| 620 |
+
maxTokens: await this.db.getPreference("llmMaxTokens", 800),
|
| 621 |
top_p: await this.db.getPreference("llmTopP", 0.9),
|
| 622 |
frequency_penalty: await this.db.getPreference("llmFrequencyPenalty", 0.9),
|
| 623 |
presence_penalty: await this.db.getPreference("llmPresencePenalty", 0.8)
|
| 624 |
};
|
| 625 |
// Unified fallback defaults (must stay consistent with database defaults)
|
| 626 |
+
const unifiedDefaults = { temperature: 0.9, maxTokens: 800, top_p: 0.9, frequency_penalty: 0.9, presence_penalty: 0.8 };
|
| 627 |
const payload = {
|
| 628 |
model: modelId,
|
| 629 |
messages: [
|
|
|
|
| 718 |
// Get LLM settings from individual preferences (FIXED: was using grouped settings)
|
| 719 |
const llmSettings = {
|
| 720 |
temperature: await this.db.getPreference("llmTemperature", 0.9),
|
| 721 |
+
maxTokens: await this.db.getPreference("llmMaxTokens", 800),
|
| 722 |
top_p: await this.db.getPreference("llmTopP", 0.9),
|
| 723 |
frequency_penalty: await this.db.getPreference("llmFrequencyPenalty", 0.9),
|
| 724 |
presence_penalty: await this.db.getPreference("llmPresencePenalty", 0.8)
|
| 725 |
};
|
| 726 |
+
const unifiedDefaults = { temperature: 0.9, maxTokens: 800, top_p: 0.9, frequency_penalty: 0.9, presence_penalty: 0.8 };
|
| 727 |
const payload = {
|
| 728 |
model: this.currentModel,
|
| 729 |
messages: messages,
|
|
|
|
| 1017 |
// Get unified defaults and options
|
| 1018 |
const unifiedDefaults = window.getUnifiedDefaults
|
| 1019 |
? window.getUnifiedDefaults()
|
| 1020 |
+
: { temperature: 0.9, maxTokens: 800, top_p: 0.9, frequency_penalty: 0.9, presence_penalty: 0.8 };
|
| 1021 |
|
| 1022 |
const enableStreaming = await this.db.getPreference("enableStreaming", true);
|
| 1023 |
|
|
|
|
| 1155 |
|
| 1156 |
const unifiedDefaults = window.getUnifiedDefaults
|
| 1157 |
? window.getUnifiedDefaults()
|
| 1158 |
+
: { temperature: 0.9, maxTokens: 800, top_p: 0.9, frequency_penalty: 0.9, presence_penalty: 0.8 };
|
| 1159 |
|
| 1160 |
const enableStreaming = await this.db.getPreference("enableStreaming", true);
|
| 1161 |
|
kimi-js/kimi-module.js
CHANGED
|
@@ -636,7 +636,7 @@ async function loadSettingsData() {
|
|
| 636 |
const modelId = preferences.llmModelId || (window.kimiLLM ? window.kimiLLM.currentModel : "");
|
| 637 |
const selectedCharacter = preferences.selectedCharacter || "kimi";
|
| 638 |
const llmTemperature = preferences.llmTemperature !== undefined ? preferences.llmTemperature : 0.9;
|
| 639 |
-
const llmMaxTokens = preferences.llmMaxTokens !== undefined ? preferences.llmMaxTokens :
|
| 640 |
const llmTopP = preferences.llmTopP !== undefined ? preferences.llmTopP : 0.9;
|
| 641 |
const llmFrequencyPenalty = preferences.llmFrequencyPenalty !== undefined ? preferences.llmFrequencyPenalty : 0.9;
|
| 642 |
const llmPresencePenalty = preferences.llmPresencePenalty !== undefined ? preferences.llmPresencePenalty : 0.8;
|
|
@@ -877,7 +877,7 @@ async function syncLLMMaxTokensSlider() {
|
|
| 877 |
const llmMaxTokensSlider = document.getElementById("llm-max-tokens");
|
| 878 |
const llmMaxTokensValue = document.getElementById("llm-max-tokens-value");
|
| 879 |
if (llmMaxTokensSlider && llmMaxTokensValue && kimiDB) {
|
| 880 |
-
const saved = await kimiDB.getPreference("llmMaxTokens",
|
| 881 |
llmMaxTokensSlider.value = saved;
|
| 882 |
llmMaxTokensValue.textContent = saved;
|
| 883 |
}
|
|
@@ -1591,7 +1591,7 @@ function setupSettingsListeners(kimiDB, kimiMemory) {
|
|
| 1591 |
if (llmMaxTokensSlider) {
|
| 1592 |
const listener = e => {
|
| 1593 |
const validation = window.KimiValidationUtils?.validateRange(e.target.value, "llmMaxTokens");
|
| 1594 |
-
const value = validation?.value || parseInt(e.target.value) ||
|
| 1595 |
|
| 1596 |
document.getElementById("llm-max-tokens-value").textContent = value;
|
| 1597 |
e.target.value = value;
|
|
|
|
| 636 |
const modelId = preferences.llmModelId || (window.kimiLLM ? window.kimiLLM.currentModel : "");
|
| 637 |
const selectedCharacter = preferences.selectedCharacter || "kimi";
|
| 638 |
const llmTemperature = preferences.llmTemperature !== undefined ? preferences.llmTemperature : 0.9;
|
| 639 |
+
const llmMaxTokens = preferences.llmMaxTokens !== undefined ? preferences.llmMaxTokens : 800;
|
| 640 |
const llmTopP = preferences.llmTopP !== undefined ? preferences.llmTopP : 0.9;
|
| 641 |
const llmFrequencyPenalty = preferences.llmFrequencyPenalty !== undefined ? preferences.llmFrequencyPenalty : 0.9;
|
| 642 |
const llmPresencePenalty = preferences.llmPresencePenalty !== undefined ? preferences.llmPresencePenalty : 0.8;
|
|
|
|
| 877 |
const llmMaxTokensSlider = document.getElementById("llm-max-tokens");
|
| 878 |
const llmMaxTokensValue = document.getElementById("llm-max-tokens-value");
|
| 879 |
if (llmMaxTokensSlider && llmMaxTokensValue && kimiDB) {
|
| 880 |
+
const saved = await kimiDB.getPreference("llmMaxTokens", 800);
|
| 881 |
llmMaxTokensSlider.value = saved;
|
| 882 |
llmMaxTokensValue.textContent = saved;
|
| 883 |
}
|
|
|
|
| 1591 |
if (llmMaxTokensSlider) {
|
| 1592 |
const listener = e => {
|
| 1593 |
const validation = window.KimiValidationUtils?.validateRange(e.target.value, "llmMaxTokens");
|
| 1594 |
+
const value = validation?.value || parseInt(e.target.value) || 800;
|
| 1595 |
|
| 1596 |
document.getElementById("llm-max-tokens-value").textContent = value;
|
| 1597 |
e.target.value = value;
|
kimi-js/kimi-script.js
CHANGED
|
@@ -456,11 +456,12 @@ document.addEventListener("DOMContentLoaded", async function () {
|
|
| 456 |
await window.kimiMemoryUI.updateMemoryStats();
|
| 457 |
}
|
| 458 |
if (window.setI18n) window.setI18n(saveCharacterBtn, "saved");
|
|
|
|
| 459 |
saveCharacterBtn.classList.add("success");
|
| 460 |
saveCharacterBtn.disabled = true;
|
| 461 |
|
| 462 |
setTimeout(() => {
|
| 463 |
-
if (window.setI18n) window.setI18n(saveCharacterBtn, "
|
| 464 |
saveCharacterBtn.classList.remove("success");
|
| 465 |
saveCharacterBtn.disabled = false;
|
| 466 |
}, 1000);
|
|
|
|
| 456 |
await window.kimiMemoryUI.updateMemoryStats();
|
| 457 |
}
|
| 458 |
if (window.setI18n) window.setI18n(saveCharacterBtn, "saved");
|
| 459 |
+
saveCharacterBtn.classList.remove("pulse-animation");
|
| 460 |
saveCharacterBtn.classList.add("success");
|
| 461 |
saveCharacterBtn.disabled = true;
|
| 462 |
|
| 463 |
setTimeout(() => {
|
| 464 |
+
if (window.setI18n) window.setI18n(saveCharacterBtn, "apply_character");
|
| 465 |
saveCharacterBtn.classList.remove("success");
|
| 466 |
saveCharacterBtn.disabled = false;
|
| 467 |
}, 1000);
|
kimi-js/kimi-utils.js
CHANGED
|
@@ -188,7 +188,7 @@ window.KimiValidationUtils = {
|
|
| 188 |
voicePitch: { min: 0.5, max: 2, def: 1.1 },
|
| 189 |
voiceVolume: { min: 0, max: 1, def: 0.8 },
|
| 190 |
llmTemperature: { min: 0, max: 1, def: 0.9 },
|
| 191 |
-
llmMaxTokens: { min: 1, max: 8192, def:
|
| 192 |
llmTopP: { min: 0, max: 1, def: 0.9 },
|
| 193 |
llmFrequencyPenalty: { min: 0, max: 2, def: 0.9 },
|
| 194 |
llmPresencePenalty: { min: 0, max: 2, def: 0.8 },
|
|
|
|
| 188 |
voicePitch: { min: 0.5, max: 2, def: 1.1 },
|
| 189 |
voiceVolume: { min: 0, max: 1, def: 0.8 },
|
| 190 |
llmTemperature: { min: 0, max: 1, def: 0.9 },
|
| 191 |
+
llmMaxTokens: { min: 1, max: 8192, def: 800 },
|
| 192 |
llmTopP: { min: 0, max: 1, def: 0.9 },
|
| 193 |
llmFrequencyPenalty: { min: 0, max: 2, def: 0.9 },
|
| 194 |
llmPresencePenalty: { min: 0, max: 2, def: 0.8 },
|
kimi-js/kimi-voices.js
CHANGED
|
@@ -6,6 +6,7 @@ class KimiVoiceManager {
|
|
| 6 |
this.isInitialized = false;
|
| 7 |
// Removed cross-language reuse: voices must match selected language strictly
|
| 8 |
this.showAllVoices = false; // user toggle to display every system voice
|
|
|
|
| 9 |
// Refactor 2025-09: Simplified voice/language handling (removed 'auto' gendered selection)
|
| 10 |
|
| 11 |
// Capability flags (added 2025-09)
|
|
@@ -128,6 +129,7 @@ class KimiVoiceManager {
|
|
| 128 |
|
| 129 |
this.setupLanguageSelector();
|
| 130 |
this.setupShowAllVoicesToggle();
|
|
|
|
| 131 |
|
| 132 |
// Initialize speech recognition only if available
|
| 133 |
if (this.hasSR) {
|
|
@@ -159,17 +161,72 @@ class KimiVoiceManager {
|
|
| 159 |
}
|
| 160 |
|
| 161 |
setupShowAllVoicesToggle() {
|
| 162 |
-
const
|
| 163 |
-
if (!
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 167 |
// Persist preference
|
| 168 |
this.db?.setPreference("showAllVoices", String(this.showAllVoices));
|
| 169 |
this.updateVoiceSelector();
|
| 170 |
});
|
| 171 |
}
|
| 172 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 173 |
_applySpeechRecognitionCapabilityUI() {
|
| 174 |
if (!this.micButton) return;
|
| 175 |
if (!this.hasSR) {
|
|
@@ -593,6 +650,14 @@ class KimiVoiceManager {
|
|
| 593 |
}
|
| 594 |
|
| 595 |
async speak(text, options = {}) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 596 |
// If no text or voice not ready, attempt short retries for voice initialization
|
| 597 |
if (!text) {
|
| 598 |
console.warn("Unable to speak: empty text");
|
|
|
|
| 6 |
this.isInitialized = false;
|
| 7 |
// Removed cross-language reuse: voices must match selected language strictly
|
| 8 |
this.showAllVoices = false; // user toggle to display every system voice
|
| 9 |
+
this.ttsEnabled = true; // global TTS enable/disable toggle
|
| 10 |
// Refactor 2025-09: Simplified voice/language handling (removed 'auto' gendered selection)
|
| 11 |
|
| 12 |
// Capability flags (added 2025-09)
|
|
|
|
| 129 |
|
| 130 |
this.setupLanguageSelector();
|
| 131 |
this.setupShowAllVoicesToggle();
|
| 132 |
+
this.setupTtsToggle();
|
| 133 |
|
| 134 |
// Initialize speech recognition only if available
|
| 135 |
if (this.hasSR) {
|
|
|
|
| 161 |
}
|
| 162 |
|
| 163 |
setupShowAllVoicesToggle() {
|
| 164 |
+
const toggleSwitch = document.getElementById("show-all-voices-toggle");
|
| 165 |
+
if (!toggleSwitch) return;
|
| 166 |
+
|
| 167 |
+
// Set initial state
|
| 168 |
+
if (this.showAllVoices) {
|
| 169 |
+
toggleSwitch.classList.add("active");
|
| 170 |
+
toggleSwitch.setAttribute("aria-checked", "true");
|
| 171 |
+
} else {
|
| 172 |
+
toggleSwitch.classList.remove("active");
|
| 173 |
+
toggleSwitch.setAttribute("aria-checked", "false");
|
| 174 |
+
}
|
| 175 |
+
|
| 176 |
+
// Handle click event
|
| 177 |
+
toggleSwitch.addEventListener("click", () => {
|
| 178 |
+
this.showAllVoices = !this.showAllVoices;
|
| 179 |
+
|
| 180 |
+
// Update UI
|
| 181 |
+
if (this.showAllVoices) {
|
| 182 |
+
toggleSwitch.classList.add("active");
|
| 183 |
+
toggleSwitch.setAttribute("aria-checked", "true");
|
| 184 |
+
} else {
|
| 185 |
+
toggleSwitch.classList.remove("active");
|
| 186 |
+
toggleSwitch.setAttribute("aria-checked", "false");
|
| 187 |
+
}
|
| 188 |
+
|
| 189 |
// Persist preference
|
| 190 |
this.db?.setPreference("showAllVoices", String(this.showAllVoices));
|
| 191 |
this.updateVoiceSelector();
|
| 192 |
});
|
| 193 |
}
|
| 194 |
|
| 195 |
+
setupTtsToggle() {
|
| 196 |
+
const toggleSwitch = document.getElementById("tts-toggle");
|
| 197 |
+
if (!toggleSwitch) return;
|
| 198 |
+
|
| 199 |
+
// Set initial state
|
| 200 |
+
if (this.ttsEnabled) {
|
| 201 |
+
toggleSwitch.classList.add("active");
|
| 202 |
+
toggleSwitch.setAttribute("aria-checked", "true");
|
| 203 |
+
} else {
|
| 204 |
+
toggleSwitch.classList.remove("active");
|
| 205 |
+
toggleSwitch.setAttribute("aria-checked", "false");
|
| 206 |
+
}
|
| 207 |
+
|
| 208 |
+
// Handle click event
|
| 209 |
+
toggleSwitch.addEventListener("click", () => {
|
| 210 |
+
this.ttsEnabled = !this.ttsEnabled;
|
| 211 |
+
|
| 212 |
+
// Update UI
|
| 213 |
+
if (this.ttsEnabled) {
|
| 214 |
+
toggleSwitch.classList.add("active");
|
| 215 |
+
toggleSwitch.setAttribute("aria-checked", "true");
|
| 216 |
+
} else {
|
| 217 |
+
toggleSwitch.classList.remove("active");
|
| 218 |
+
toggleSwitch.setAttribute("aria-checked", "false");
|
| 219 |
+
// Cancel any ongoing speech
|
| 220 |
+
if (this.speechSynthesis && this.speechSynthesis.speaking) {
|
| 221 |
+
this.speechSynthesis.cancel();
|
| 222 |
+
}
|
| 223 |
+
}
|
| 224 |
+
|
| 225 |
+
// Persist preference
|
| 226 |
+
this.db?.setPreference("ttsEnabled", String(this.ttsEnabled));
|
| 227 |
+
});
|
| 228 |
+
}
|
| 229 |
+
|
| 230 |
_applySpeechRecognitionCapabilityUI() {
|
| 231 |
if (!this.micButton) return;
|
| 232 |
if (!this.hasSR) {
|
|
|
|
| 650 |
}
|
| 651 |
|
| 652 |
async speak(text, options = {}) {
|
| 653 |
+
// Check if TTS is globally enabled
|
| 654 |
+
if (!this.ttsEnabled) {
|
| 655 |
+
if (window.KIMI_CONFIG?.DEBUG?.VOICE) {
|
| 656 |
+
console.log("TTS is disabled globally, skipping speak");
|
| 657 |
+
}
|
| 658 |
+
return;
|
| 659 |
+
}
|
| 660 |
+
|
| 661 |
// If no text or voice not ready, attempt short retries for voice initialization
|
| 662 |
if (!text) {
|
| 663 |
console.warn("Unable to speak: empty text");
|
kimi-locale/de.json
CHANGED
|
@@ -129,12 +129,14 @@
|
|
| 129 |
"about_kimi": "Über Kimi",
|
| 130 |
"characters": "Charaktere",
|
| 131 |
"save": "Speichern",
|
|
|
|
|
|
|
| 132 |
"reset_to_default": "Auf Standard Zurücksetzen",
|
| 133 |
"top_p": "Top-p",
|
| 134 |
"frequency_penalty": "Häufigkeitsstrafe",
|
| 135 |
"presence_penalty": "Anwesenheitsstrafe",
|
| 136 |
"temperature_help": "Steuert Zufälligkeit und Kreativität (Standard: 0,9).",
|
| 137 |
-
"max_tokens_help": "Maximale Antwortlänge in Token (Standard:
|
| 138 |
"top_p_help": "Steuert die Vielfalt der Wortauswahl (Standard: 0,9).",
|
| 139 |
"frequency_penalty_help": "Reduziert Wiederholung bereits verwendeter Wörter (Standard: 0,9).",
|
| 140 |
"presence_penalty_help": "Ermutigt die Diskussion neuer Themen (Standard: 0,8).",
|
|
@@ -189,6 +191,8 @@
|
|
| 189 |
"language_portuguese": "Portugiesisch (Brasilien)",
|
| 190 |
"automatic": "Automatisch",
|
| 191 |
"show_all_system_voices": "Alle Systemstimmen anzeigen",
|
|
|
|
|
|
|
| 192 |
"trait_description_affection": "Liebevoll und fürsorglich sein.",
|
| 193 |
"trait_description_romance": "Romantisch und süß sein.",
|
| 194 |
"trait_description_empathy": "Empathisch und verständnisvoll sein.",
|
|
|
|
| 129 |
"about_kimi": "Über Kimi",
|
| 130 |
"characters": "Charaktere",
|
| 131 |
"save": "Speichern",
|
| 132 |
+
"apply_character": "Charakterauswahl Anwenden",
|
| 133 |
+
"character_selection_notice": "Klicken Sie auf die Schaltfläche unten, um Ihre Charakterauswahl anzuwenden. Dies lädt die Seite neu.",
|
| 134 |
"reset_to_default": "Auf Standard Zurücksetzen",
|
| 135 |
"top_p": "Top-p",
|
| 136 |
"frequency_penalty": "Häufigkeitsstrafe",
|
| 137 |
"presence_penalty": "Anwesenheitsstrafe",
|
| 138 |
"temperature_help": "Steuert Zufälligkeit und Kreativität (Standard: 0,9).",
|
| 139 |
+
"max_tokens_help": "Maximale Antwortlänge in Token (Standard: 800).",
|
| 140 |
"top_p_help": "Steuert die Vielfalt der Wortauswahl (Standard: 0,9).",
|
| 141 |
"frequency_penalty_help": "Reduziert Wiederholung bereits verwendeter Wörter (Standard: 0,9).",
|
| 142 |
"presence_penalty_help": "Ermutigt die Diskussion neuer Themen (Standard: 0,8).",
|
|
|
|
| 191 |
"language_portuguese": "Portugiesisch (Brasilien)",
|
| 192 |
"automatic": "Automatisch",
|
| 193 |
"show_all_system_voices": "Alle Systemstimmen anzeigen",
|
| 194 |
+
"enable_tts": "Text-zu-Sprache Aktivieren",
|
| 195 |
+
"enable_tts_help": "Aktiviert oder deaktiviert die Sprachsynthese global. Wenn deaktiviert, wird Kimi nicht sprechen (Standard: aktiviert).",
|
| 196 |
"trait_description_affection": "Liebevoll und fürsorglich sein.",
|
| 197 |
"trait_description_romance": "Romantisch und süß sein.",
|
| 198 |
"trait_description_empathy": "Empathisch und verständnisvoll sein.",
|
kimi-locale/en.json
CHANGED
|
@@ -129,12 +129,14 @@
|
|
| 129 |
"about_kimi": "About Kimi",
|
| 130 |
"characters": "Characters",
|
| 131 |
"save": "Save",
|
|
|
|
|
|
|
| 132 |
"reset_to_default": "Reset to Default",
|
| 133 |
"top_p": "Top-p",
|
| 134 |
"frequency_penalty": "Frequency Penalty",
|
| 135 |
"presence_penalty": "Presence Penalty",
|
| 136 |
"temperature_help": "Controls randomness and creativity (default: 0.9).",
|
| 137 |
-
"max_tokens_help": "Maximum response length in tokens (default:
|
| 138 |
"top_p_help": "Controls diversity of word selection (default: 0.9).",
|
| 139 |
"frequency_penalty_help": "Reduces repetition of words already used (default: 0.9).",
|
| 140 |
"presence_penalty_help": "Encourages discussing new topics (default: 0.8).",
|
|
@@ -189,6 +191,8 @@
|
|
| 189 |
"language_portuguese": "Portuguese (BR)",
|
| 190 |
"automatic": "Automatic",
|
| 191 |
"show_all_system_voices": "Show all system voices",
|
|
|
|
|
|
|
| 192 |
"trait_description_affection": "Be loving and caring.",
|
| 193 |
"trait_description_romance": "Be romantic and sweet.",
|
| 194 |
"trait_description_empathy": "Be empathetic and understanding.",
|
|
|
|
| 129 |
"about_kimi": "About Kimi",
|
| 130 |
"characters": "Characters",
|
| 131 |
"save": "Save",
|
| 132 |
+
"apply_character": "Apply Character Selection",
|
| 133 |
+
"character_selection_notice": "Click the button below to apply your character selection. This will reload the page.",
|
| 134 |
"reset_to_default": "Reset to Default",
|
| 135 |
"top_p": "Top-p",
|
| 136 |
"frequency_penalty": "Frequency Penalty",
|
| 137 |
"presence_penalty": "Presence Penalty",
|
| 138 |
"temperature_help": "Controls randomness and creativity (default: 0.9).",
|
| 139 |
+
"max_tokens_help": "Maximum response length in tokens (default: 800).",
|
| 140 |
"top_p_help": "Controls diversity of word selection (default: 0.9).",
|
| 141 |
"frequency_penalty_help": "Reduces repetition of words already used (default: 0.9).",
|
| 142 |
"presence_penalty_help": "Encourages discussing new topics (default: 0.8).",
|
|
|
|
| 191 |
"language_portuguese": "Portuguese (BR)",
|
| 192 |
"automatic": "Automatic",
|
| 193 |
"show_all_system_voices": "Show all system voices",
|
| 194 |
+
"enable_tts": "Enable Text-to-Speech",
|
| 195 |
+
"enable_tts_help": "Enable or disable voice synthesis globally. When disabled, Kimi will not speak responses (default: enabled).",
|
| 196 |
"trait_description_affection": "Be loving and caring.",
|
| 197 |
"trait_description_romance": "Be romantic and sweet.",
|
| 198 |
"trait_description_empathy": "Be empathetic and understanding.",
|
kimi-locale/es.json
CHANGED
|
@@ -129,12 +129,14 @@
|
|
| 129 |
"about_kimi": "Acerca de Kimi",
|
| 130 |
"characters": "Personajes",
|
| 131 |
"save": "Guardar",
|
| 132 |
-
"
|
|
|
|
|
|
|
| 133 |
"top_p": "Top-p",
|
| 134 |
"frequency_penalty": "Penalización de Frecuencia",
|
| 135 |
"presence_penalty": "Penalización de Presencia",
|
| 136 |
"temperature_help": "Controla la aleatoriedad y creatividad (por defecto: 0,9).",
|
| 137 |
-
"max_tokens_help": "Longitud máxima de respuesta en tokens (por defecto:
|
| 138 |
"top_p_help": "Controla la diversidad de selección de palabras (por defecto: 0,9).",
|
| 139 |
"frequency_penalty_help": "Reduce la repetición de palabras ya usadas (por defecto: 0,9).",
|
| 140 |
"presence_penalty_help": "Fomenta la discusión de nuevos temas (por defecto: 0,8).",
|
|
@@ -189,6 +191,8 @@
|
|
| 189 |
"language_portuguese": "Portugués (Brasil)",
|
| 190 |
"automatic": "Automático",
|
| 191 |
"show_all_system_voices": "Mostrar todas las voces del sistema",
|
|
|
|
|
|
|
| 192 |
"trait_description_affection": "Ser amoroso y cariñoso.",
|
| 193 |
"trait_description_romance": "Ser romántico y dulce.",
|
| 194 |
"trait_description_empathy": "Ser empático y comprensivo.",
|
|
|
|
| 129 |
"about_kimi": "Acerca de Kimi",
|
| 130 |
"characters": "Personajes",
|
| 131 |
"save": "Guardar",
|
| 132 |
+
"apply_character": "Aplicar Selección de Personaje",
|
| 133 |
+
"character_selection_notice": "Haz clic en el botón de abajo para aplicar tu selección de personaje. Esto recargará la página.",
|
| 134 |
+
"reset_to_default": "Restablecer Valores Predeterminados",
|
| 135 |
"top_p": "Top-p",
|
| 136 |
"frequency_penalty": "Penalización de Frecuencia",
|
| 137 |
"presence_penalty": "Penalización de Presencia",
|
| 138 |
"temperature_help": "Controla la aleatoriedad y creatividad (por defecto: 0,9).",
|
| 139 |
+
"max_tokens_help": "Longitud máxima de respuesta en tokens (por defecto: 800).",
|
| 140 |
"top_p_help": "Controla la diversidad de selección de palabras (por defecto: 0,9).",
|
| 141 |
"frequency_penalty_help": "Reduce la repetición de palabras ya usadas (por defecto: 0,9).",
|
| 142 |
"presence_penalty_help": "Fomenta la discusión de nuevos temas (por defecto: 0,8).",
|
|
|
|
| 191 |
"language_portuguese": "Portugués (Brasil)",
|
| 192 |
"automatic": "Automático",
|
| 193 |
"show_all_system_voices": "Mostrar todas las voces del sistema",
|
| 194 |
+
"enable_tts": "Activar Síntesis de Voz",
|
| 195 |
+
"enable_tts_help": "Activa o desactiva la síntesis de voz globalmente. Cuando está desactivado, Kimi no hablará (predeterminado: activado).",
|
| 196 |
"trait_description_affection": "Ser amoroso y cariñoso.",
|
| 197 |
"trait_description_romance": "Ser romántico y dulce.",
|
| 198 |
"trait_description_empathy": "Ser empático y comprensivo.",
|
kimi-locale/fr.json
CHANGED
|
@@ -129,12 +129,14 @@
|
|
| 129 |
"about_kimi": "À propos de Kimi",
|
| 130 |
"characters": "Personnages",
|
| 131 |
"save": "Sauvegarder",
|
|
|
|
|
|
|
| 132 |
"reset_to_default": "Remettre par défaut",
|
| 133 |
"top_p": "Top-p",
|
| 134 |
"frequency_penalty": "Pénalité de fréquence",
|
| 135 |
"presence_penalty": "Pénalité de présence",
|
| 136 |
"temperature_help": "Contrôle le caractère aléatoire et la créativité (défaut : 0,9).",
|
| 137 |
-
"max_tokens_help": "Longueur maximale de réponse en jetons (défaut :
|
| 138 |
"top_p_help": "Contrôle la diversité de sélection des mots (défaut : 0,9).",
|
| 139 |
"frequency_penalty_help": "Réduit la répétition de mots déjà utilisés (défaut : 0,9).",
|
| 140 |
"presence_penalty_help": "Encourage la discussion de nouveaux sujets (défaut : 0,8).",
|
|
@@ -191,6 +193,8 @@
|
|
| 191 |
"language_portuguese": "Portugais (Brésil)",
|
| 192 |
"automatic": "Automatique",
|
| 193 |
"show_all_system_voices": "Afficher toutes les voix système",
|
|
|
|
|
|
|
| 194 |
"trait_description_affection": "Être aimante et attentionnée.",
|
| 195 |
"trait_description_romance": "Être romantique et douce.",
|
| 196 |
"trait_description_empathy": "Être empathique et compréhensive.",
|
|
|
|
| 129 |
"about_kimi": "À propos de Kimi",
|
| 130 |
"characters": "Personnages",
|
| 131 |
"save": "Sauvegarder",
|
| 132 |
+
"apply_character": "Appliquer la Sélection du Personnage",
|
| 133 |
+
"character_selection_notice": "Cliquez sur le bouton ci-dessous pour appliquer votre sélection de personnage. Cela rechargera la page.",
|
| 134 |
"reset_to_default": "Remettre par défaut",
|
| 135 |
"top_p": "Top-p",
|
| 136 |
"frequency_penalty": "Pénalité de fréquence",
|
| 137 |
"presence_penalty": "Pénalité de présence",
|
| 138 |
"temperature_help": "Contrôle le caractère aléatoire et la créativité (défaut : 0,9).",
|
| 139 |
+
"max_tokens_help": "Longueur maximale de réponse en jetons (défaut : 800).",
|
| 140 |
"top_p_help": "Contrôle la diversité de sélection des mots (défaut : 0,9).",
|
| 141 |
"frequency_penalty_help": "Réduit la répétition de mots déjà utilisés (défaut : 0,9).",
|
| 142 |
"presence_penalty_help": "Encourage la discussion de nouveaux sujets (défaut : 0,8).",
|
|
|
|
| 193 |
"language_portuguese": "Portugais (Brésil)",
|
| 194 |
"automatic": "Automatique",
|
| 195 |
"show_all_system_voices": "Afficher toutes les voix système",
|
| 196 |
+
"enable_tts": "Activer la Synthèse Vocale",
|
| 197 |
+
"enable_tts_help": "Active ou désactive la synthèse vocale globalement. Lorsque désactivé, Kimi ne parlera pas (par défaut : activé).",
|
| 198 |
"trait_description_affection": "Être aimante et attentionnée.",
|
| 199 |
"trait_description_romance": "Être romantique et douce.",
|
| 200 |
"trait_description_empathy": "Être empathique et compréhensive.",
|
kimi-locale/it.json
CHANGED
|
@@ -129,12 +129,14 @@
|
|
| 129 |
"about_kimi": "Informazioni su Kimi",
|
| 130 |
"characters": "Personaggi",
|
| 131 |
"save": "Salva",
|
| 132 |
-
"
|
|
|
|
|
|
|
| 133 |
"top_p": "Top-p",
|
| 134 |
"frequency_penalty": "Penalità di Frequenza",
|
| 135 |
"presence_penalty": "Penalità di Presenza",
|
| 136 |
"temperature_help": "Controlla casualità e creatività (predefinito: 0,9).",
|
| 137 |
-
"max_tokens_help": "Lunghezza massima della risposta in token (predefinito:
|
| 138 |
"top_p_help": "Controlla la diversità di selezione delle parole (predefinito: 0,9).",
|
| 139 |
"frequency_penalty_help": "Riduce la ripetizione di parole già usate (predefinito: 0,9).",
|
| 140 |
"presence_penalty_help": "Incoraggia la discussione di nuovi argomenti (predefinito: 0,8).",
|
|
@@ -189,7 +191,9 @@
|
|
| 189 |
"language_portuguese": "Portoghese (Brasile)",
|
| 190 |
"automatic": "Automatico",
|
| 191 |
"show_all_system_voices": "Mostra tutte le voci di sistema",
|
| 192 |
-
"
|
|
|
|
|
|
|
| 193 |
"trait_description_romance": "Essere romantica e dolce.",
|
| 194 |
"trait_description_empathy": "Essere empatica e comprensiva.",
|
| 195 |
"trait_description_playfulness": "Essere occasionalmente giocosa.",
|
|
|
|
| 129 |
"about_kimi": "Informazioni su Kimi",
|
| 130 |
"characters": "Personaggi",
|
| 131 |
"save": "Salva",
|
| 132 |
+
"apply_character": "Applica Selezione Personaggio",
|
| 133 |
+
"character_selection_notice": "Fai clic sul pulsante qui sotto per applicare la selezione del personaggio. Questo ricaricherà la pagina.",
|
| 134 |
+
"reset_to_default": "Ripristina Predefinite",
|
| 135 |
"top_p": "Top-p",
|
| 136 |
"frequency_penalty": "Penalità di Frequenza",
|
| 137 |
"presence_penalty": "Penalità di Presenza",
|
| 138 |
"temperature_help": "Controlla casualità e creatività (predefinito: 0,9).",
|
| 139 |
+
"max_tokens_help": "Lunghezza massima della risposta in token (predefinito: 800).",
|
| 140 |
"top_p_help": "Controlla la diversità di selezione delle parole (predefinito: 0,9).",
|
| 141 |
"frequency_penalty_help": "Riduce la ripetizione di parole già usate (predefinito: 0,9).",
|
| 142 |
"presence_penalty_help": "Incoraggia la discussione di nuovi argomenti (predefinito: 0,8).",
|
|
|
|
| 191 |
"language_portuguese": "Portoghese (Brasile)",
|
| 192 |
"automatic": "Automatico",
|
| 193 |
"show_all_system_voices": "Mostra tutte le voci di sistema",
|
| 194 |
+
"enable_tts": "Abilita Sintesi Vocale",
|
| 195 |
+
"enable_tts_help": "Abilita o disabilita la sintesi vocale globalmente. Quando disabilitato, Kimi non parlerà (predefinito: abilitato).",
|
| 196 |
+
"trait_description_affection": "Essere amorevole e premuroso.",
|
| 197 |
"trait_description_romance": "Essere romantica e dolce.",
|
| 198 |
"trait_description_empathy": "Essere empatica e comprensiva.",
|
| 199 |
"trait_description_playfulness": "Essere occasionalmente giocosa.",
|
kimi-locale/ja.json
CHANGED
|
@@ -129,12 +129,14 @@
|
|
| 129 |
"about_kimi": "Kimiについて",
|
| 130 |
"characters": "キャラクター",
|
| 131 |
"save": "保存",
|
|
|
|
|
|
|
| 132 |
"reset_to_default": "デフォルトにリセット",
|
| 133 |
"top_p": "Top-p",
|
| 134 |
"frequency_penalty": "頻度ペナルティ",
|
| 135 |
"presence_penalty": "存在ペナルティ",
|
| 136 |
"temperature_help": "ランダム性と創造性を制御します(デフォルト: 0.9)。",
|
| 137 |
-
"max_tokens_help": "トークン単位での最大応答長(デフォルト:
|
| 138 |
"top_p_help": "単語選択の多様性を制御します(デフォルト: 0.9)。値が低いほど応答が集中します。",
|
| 139 |
"frequency_penalty_help": "既に使用された単語の繰り返しを減らします(デフォルト: 0.9)。",
|
| 140 |
"presence_penalty_help": "新しいトピックの議論を促進します(デフォルト: 0.8)。",
|
|
@@ -189,7 +191,9 @@
|
|
| 189 |
"language_portuguese": "ポルトガル語 (ブラジル)",
|
| 190 |
"automatic": "自動",
|
| 191 |
"show_all_system_voices": "すべてのシステム音声を表示",
|
| 192 |
-
"
|
|
|
|
|
|
|
| 193 |
"trait_description_romance": "ロマンチックで優しい。",
|
| 194 |
"trait_description_empathy": "共感的で理解がある。",
|
| 195 |
"trait_description_playfulness": "時々遊び心がある。",
|
|
|
|
| 129 |
"about_kimi": "Kimiについて",
|
| 130 |
"characters": "キャラクター",
|
| 131 |
"save": "保存",
|
| 132 |
+
"apply_character": "キャラクター選択を適用",
|
| 133 |
+
"character_selection_notice": "下のボタンをクリックしてキャラクター選択を適用します。ページがリロードされます。",
|
| 134 |
"reset_to_default": "デフォルトにリセット",
|
| 135 |
"top_p": "Top-p",
|
| 136 |
"frequency_penalty": "頻度ペナルティ",
|
| 137 |
"presence_penalty": "存在ペナルティ",
|
| 138 |
"temperature_help": "ランダム性と創造性を制御します(デフォルト: 0.9)。",
|
| 139 |
+
"max_tokens_help": "トークン単位での最大応答長(デフォルト: 800)。",
|
| 140 |
"top_p_help": "単語選択の多様性を制御します(デフォルト: 0.9)。値が低いほど応答が集中します。",
|
| 141 |
"frequency_penalty_help": "既に使用された単語の繰り返しを減らします(デフォルト: 0.9)。",
|
| 142 |
"presence_penalty_help": "新しいトピックの議論を促進します(デフォルト: 0.8)。",
|
|
|
|
| 191 |
"language_portuguese": "ポルトガル語 (ブラジル)",
|
| 192 |
"automatic": "自動",
|
| 193 |
"show_all_system_voices": "すべてのシステム音声を表示",
|
| 194 |
+
"enable_tts": "音声合成を有効化",
|
| 195 |
+
"enable_tts_help": "音声合成をグローバルに有効または無効にします。無効にすると、Kimiは話しません(デフォルト:有効)。",
|
| 196 |
+
"trait_description_affection": "愛情深く思いやりを持つ。",
|
| 197 |
"trait_description_romance": "ロマンチックで優しい。",
|
| 198 |
"trait_description_empathy": "共感的で理解がある。",
|
| 199 |
"trait_description_playfulness": "時々遊び心がある。",
|
kimi-locale/pt.json
CHANGED
|
@@ -129,12 +129,14 @@
|
|
| 129 |
"about_kimi": "Sobre a Kimi",
|
| 130 |
"characters": "Personagens",
|
| 131 |
"save": "Salvar",
|
|
|
|
|
|
|
| 132 |
"reset_to_default": "Restaurar Padrão",
|
| 133 |
"top_p": "Top-p",
|
| 134 |
"frequency_penalty": "Penalidade de Frequência",
|
| 135 |
"presence_penalty": "Penalidade de Presença",
|
| 136 |
"temperature_help": "Controla aleatoriedade e criatividade (padrão: 0.9).",
|
| 137 |
-
"max_tokens_help": "Comprimento máximo da resposta em tokens (padrão:
|
| 138 |
"top_p_help": "Controla a diversidade da seleção de palavras (padrão: 0.9).",
|
| 139 |
"frequency_penalty_help": "Reduz a repetição de palavras já usadas (padrão: 0.9).",
|
| 140 |
"presence_penalty_help": "Incentiva a discussão de novos tópicos (padrão: 0.8).",
|
|
@@ -189,7 +191,9 @@
|
|
| 189 |
"language_portuguese": "Português (Brasil)",
|
| 190 |
"automatic": "Automático",
|
| 191 |
"show_all_system_voices": "Mostrar todas as vozes do sistema",
|
| 192 |
-
"
|
|
|
|
|
|
|
| 193 |
"trait_description_romance": "Seja romântico e doce.",
|
| 194 |
"trait_description_empathy": "Seja empático e compreensivo.",
|
| 195 |
"trait_description_playfulness": "Seja ocasionalmente brincalhão.",
|
|
|
|
| 129 |
"about_kimi": "Sobre a Kimi",
|
| 130 |
"characters": "Personagens",
|
| 131 |
"save": "Salvar",
|
| 132 |
+
"apply_character": "Aplicar Seleção de Personagem",
|
| 133 |
+
"character_selection_notice": "Clique no botão abaixo para aplicar sua seleção de personagem. Isso recarregará a página.",
|
| 134 |
"reset_to_default": "Restaurar Padrão",
|
| 135 |
"top_p": "Top-p",
|
| 136 |
"frequency_penalty": "Penalidade de Frequência",
|
| 137 |
"presence_penalty": "Penalidade de Presença",
|
| 138 |
"temperature_help": "Controla aleatoriedade e criatividade (padrão: 0.9).",
|
| 139 |
+
"max_tokens_help": "Comprimento máximo da resposta em tokens (padrão: 800).",
|
| 140 |
"top_p_help": "Controla a diversidade da seleção de palavras (padrão: 0.9).",
|
| 141 |
"frequency_penalty_help": "Reduz a repetição de palavras já usadas (padrão: 0.9).",
|
| 142 |
"presence_penalty_help": "Incentiva a discussão de novos tópicos (padrão: 0.8).",
|
|
|
|
| 191 |
"language_portuguese": "Português (Brasil)",
|
| 192 |
"automatic": "Automático",
|
| 193 |
"show_all_system_voices": "Mostrar todas as vozes do sistema",
|
| 194 |
+
"enable_tts": "Ativar Síntese de Fala",
|
| 195 |
+
"enable_tts_help": "Ativa ou desativa a síntese de fala globalmente. Quando desativado, Kimi não falará (padrão: ativado).",
|
| 196 |
+
"trait_description_affection": "Ser amoroso e carinhoso.",
|
| 197 |
"trait_description_romance": "Seja romântico e doce.",
|
| 198 |
"trait_description_empathy": "Seja empático e compreensivo.",
|
| 199 |
"trait_description_playfulness": "Seja ocasionalmente brincalhão.",
|
kimi-locale/zh.json
CHANGED
|
@@ -129,12 +129,14 @@
|
|
| 129 |
"about_kimi": "关于Kimi",
|
| 130 |
"characters": "角色",
|
| 131 |
"save": "保存",
|
| 132 |
-
"
|
|
|
|
|
|
|
| 133 |
"top_p": "Top-p",
|
| 134 |
"frequency_penalty": "频率惩罚",
|
| 135 |
"presence_penalty": "存在惩罚",
|
| 136 |
"temperature_help": "控制随机性和创造性(默认:0.9)。",
|
| 137 |
-
"max_tokens_help": "以令牌为单位的最大响应长度(默认:
|
| 138 |
"top_p_help": "控制单词选择的多样性(默认:0.9)。",
|
| 139 |
"frequency_penalty_help": "减少已使用单词的重复(默认:0.9)。",
|
| 140 |
"presence_penalty_help": "鼓励讨论新话题(默认:0.8)。",
|
|
@@ -189,7 +191,9 @@
|
|
| 189 |
"language_portuguese": "葡萄牙语(巴西)",
|
| 190 |
"automatic": "自动",
|
| 191 |
"show_all_system_voices": "显示所有系统语音",
|
| 192 |
-
"
|
|
|
|
|
|
|
| 193 |
"trait_description_romance": "要浪漫和甜蜜。",
|
| 194 |
"trait_description_empathy": "要有同情心和理解力。",
|
| 195 |
"trait_description_playfulness": "偶尔要顽皮。",
|
|
|
|
| 129 |
"about_kimi": "关于Kimi",
|
| 130 |
"characters": "角色",
|
| 131 |
"save": "保存",
|
| 132 |
+
"apply_character": "应用角色选择",
|
| 133 |
+
"character_selection_notice": "点击下方按钮应用您的角色选择。这将重新加载页面。",
|
| 134 |
+
"reset_to_default": "恢复默认",
|
| 135 |
"top_p": "Top-p",
|
| 136 |
"frequency_penalty": "频率惩罚",
|
| 137 |
"presence_penalty": "存在惩罚",
|
| 138 |
"temperature_help": "控制随机性和创造性(默认:0.9)。",
|
| 139 |
+
"max_tokens_help": "以令牌为单位的最大响应长度(默认:800)。",
|
| 140 |
"top_p_help": "控制单词选择的多样性(默认:0.9)。",
|
| 141 |
"frequency_penalty_help": "减少已使用单词的重复(默认:0.9)。",
|
| 142 |
"presence_penalty_help": "鼓励讨论新话题(默认:0.8)。",
|
|
|
|
| 191 |
"language_portuguese": "葡萄牙语(巴西)",
|
| 192 |
"automatic": "自动",
|
| 193 |
"show_all_system_voices": "显示所有系统语音",
|
| 194 |
+
"enable_tts": "启用文本转语音",
|
| 195 |
+
"enable_tts_help": "全局启用或禁用语音合成。禁用时,Kimi将不会说话(默认:启用)。",
|
| 196 |
+
"trait_description_affection": "充满爱心和关怀。",
|
| 197 |
"trait_description_romance": "要浪漫和甜蜜。",
|
| 198 |
"trait_description_empathy": "要有同情心和理解力。",
|
| 199 |
"trait_description_playfulness": "偶尔要顽皮。",
|