{
if($sideBarClosing){
diff --git a/src/lib/UI/Arcodion.svelte b/src/lib/UI/Arcodion.svelte
index 03d4418b..f2325716 100644
--- a/src/lib/UI/Arcodion.svelte
+++ b/src/lib/UI/Arcodion.svelte
@@ -18,7 +18,9 @@
on:click={() => {
open = !open
}}
- >{name}{#if help}
+ >
+
{name}
+ {#if help}
{/if}
{#if open}
diff --git a/src/lib/UI/GUI/ColorInput.svelte b/src/lib/UI/GUI/ColorInput.svelte
index 238c0cfb..c8d9d8af 100644
--- a/src/lib/UI/GUI/ColorInput.svelte
+++ b/src/lib/UI/GUI/ColorInput.svelte
@@ -1,11 +1,13 @@
diff --git a/src/lib/UI/ModelList.svelte b/src/lib/UI/ModelList.svelte
index 38f452f3..a519f447 100644
--- a/src/lib/UI/ModelList.svelte
+++ b/src/lib/UI/ModelList.svelte
@@ -104,6 +104,7 @@
+
diff --git a/src/ts/gui/colorscheme.ts b/src/ts/gui/colorscheme.ts
index 790147e9..32783836 100644
--- a/src/ts/gui/colorscheme.ts
+++ b/src/ts/gui/colorscheme.ts
@@ -230,8 +230,8 @@ export function updateTextTheme(){
root.style.setProperty('--FontColorItalic', db.customTextTheme.FontColorItalic);
root.style.setProperty('--FontColorBold', db.customTextTheme.FontColorBold);
root.style.setProperty('--FontColorItalicBold', db.customTextTheme.FontColorItalicBold);
- root.style.setProperty('--FontColorQuote1', db.customTextTheme.FontColorQuote1);
- root.style.setProperty('--FontColorQuote2', db.customTextTheme.FontColorQuote2);
+ root.style.setProperty('--FontColorQuote1', db.customTextTheme.FontColorQuote1 ?? '#8BE9FD');
+ root.style.setProperty('--FontColorQuote2', db.customTextTheme.FontColorQuote2 ?? '#FFB86C');
break
}
}
diff --git a/src/ts/hotkey.ts b/src/ts/hotkey.ts
index c58b9086..a6681556 100644
--- a/src/ts/hotkey.ts
+++ b/src/ts/hotkey.ts
@@ -1,7 +1,7 @@
import { get } from "svelte/store"
import { alertToast, doingAlert } from "./alert"
import { DataBase, changeToPreset as changeToPreset2 } from "./storage/database"
-import { selectedCharID, settingsOpen } from "./stores"
+import { openPersonaList, openPresetList, selectedCharID, settingsOpen } from "./stores"
export function initHotkey(){
document.addEventListener('keydown', (ev) => {
@@ -73,6 +73,18 @@ export function initHotkey(){
ev.stopPropagation()
break
}
+ case 'p':{
+ openPresetList.set(!get(openPresetList))
+ ev.preventDefault()
+ ev.stopPropagation()
+ break
+ }
+ case 'e':{
+ openPersonaList.set(!get(openPersonaList))
+ ev.preventDefault()
+ ev.stopPropagation()
+ break
+ }
}
}
if(ev.key === 'Escape'){
diff --git a/src/ts/model/names.ts b/src/ts/model/names.ts
index ffc08d98..701e232a 100644
--- a/src/ts/model/names.ts
+++ b/src/ts/model/names.ts
@@ -109,6 +109,8 @@ export function getModelName(name:string){
return 'GPT-4o Mini (2024-07-18)'
case 'gemini-1.5-pro-latest':
return 'Gemini 1.5 Pro'
+ case 'gemini-1.5-pro-exp-0801':
+ return 'Gemini 1.5 Pro Exp (0801)'
case 'gemini-1.5-flash':
return 'Gemini 1.5 Flash'
case 'ollama-hosted':
diff --git a/src/ts/parser.ts b/src/ts/parser.ts
index 3d4ff799..86907784 100644
--- a/src/ts/parser.ts
+++ b/src/ts/parser.ts
@@ -79,11 +79,19 @@ DOMPurify.addHook("uponSanitizeAttribute", (node, data) => {
function renderMarkdown(md:markdownit, data:string){
- return md.render(data.replace(/“|”/g, '"').replace(/‘|’/g, "'"))
- .replace(/\uE9b0/gu, '“')
- .replace(/\uE9b1/gu, '”')
- .replace(/\uE9b2/gu, '‘')
- .replace(/\uE9b3/gu, '’')
+ const db = get(DataBase)
+ let text = md.render(data.replace(/“|”/g, '"').replace(/‘|’/g, "'"))
+
+ if(db?.unformatQuotes){
+ text = text.replace(/\uE9b0/gu, '“').replace(/\uE9b1/gu, '”')
+ text = text.replace(/\uE9b2/gu, '‘').replace(/\uE9b3/gu, '’')
+ }
+ else{
+ text = text.replace(/\uE9b0/gu, '“').replace(/\uE9b1/gu, '”')
+ text = text.replace(/\uE9b2/gu, '‘').replace(/\uE9b3/gu, '’')
+ }
+
+ return text
}
async function renderHighlightableMarkdown(data:string) {
diff --git a/src/ts/process/request.ts b/src/ts/process/request.ts
index e139b6fe..24cc1d2c 100644
--- a/src/ts/process/request.ts
+++ b/src/ts/process/request.ts
@@ -1153,6 +1153,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
case 'gemini-pro':
case 'gemini-pro-vision':
case 'gemini-1.5-pro-latest':
+ case 'gemini-1.5-pro-exp-0801':
case 'gemini-1.5-flash':
case 'gemini-ultra':
case 'gemini-ultra-vision':{
@@ -1997,6 +1998,10 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
headers['anthropic-beta'] = 'prompt-caching-2024-07-31'
}
+ if(db.usePlainFetch){
+ headers['anthropic-dangerous-direct-browser-access'] = 'true'
+ }
+
if(useStreaming){
const res = await fetchNative(replacerURL, {
diff --git a/src/ts/process/scripts.ts b/src/ts/process/scripts.ts
index 488329a9..e3fe865b 100644
--- a/src/ts/process/scripts.ts
+++ b/src/ts/process/scripts.ts
@@ -20,9 +20,9 @@ export async function processScript(char:character|groupChat, data:string, mode:
return (await processScriptFull(char, data, mode)).data
}
-export function exportRegex(){
+export function exportRegex(s?:customscript[]){
let db = get(DataBase)
- const script = db.globalscript
+ const script = s ?? db.globalscript
const data = Buffer.from(JSON.stringify({
type: 'regex',
data: script
@@ -31,22 +31,22 @@ export function exportRegex(){
alertNormal(language.successExport)
}
-export async function importRegex(){
+export async function importRegex(o?:customscript[]):Promise{
+ o = o ?? []
const filedata = (await selectSingleFile(['json'])).data
if(!filedata){
- return
+ return o
}
let db = get(DataBase)
try {
const imported= JSON.parse(Buffer.from(filedata).toString('utf-8'))
if(imported.type === 'regex' && imported.data){
const datas:customscript[] = imported.data
- const script = db.globalscript
+ const script = o
for(const data of datas){
script.push(data)
}
- db.globalscript = script
- setDatabase(db)
+ return o
}
else{
alertError("File invaid or corrupted")
@@ -55,6 +55,7 @@ export async function importRegex(){
} catch (error) {
alertError(`${error}`)
}
+ return o
}
let bestMatchCache = new Map()
diff --git a/src/ts/process/templates/chatTemplate.ts b/src/ts/process/templates/chatTemplate.ts
index 71b969b2..a12886bd 100644
--- a/src/ts/process/templates/chatTemplate.ts
+++ b/src/ts/process/templates/chatTemplate.ts
@@ -11,7 +11,7 @@ export const chatTemplates = {
'chatml': `{% for message in messages %}{{'<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\n' }}{% endif %}`,
'gpt2': `{% for message in messages %}{{'<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\n' }}{% endif %}`,
'gemma': "{% if messages[0]['role'] == 'system' %}{{ raise_exception('System role not supported') }}{% endif %}{% for message in messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% if (message['role'] == 'assistant') %}{% set role = 'model' %}{% else %}{% set role = message['role'] %}{% endif %}{{ '' + role + '\n' + message['content'] | trim + '\n' }}{% endfor %}{% if add_generation_prompt %}{{'model\n'}}{% endif %}",
- 'mistral': "{% for message in messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% if message['role'] == 'user' %}{{ ' [INST] ' + message['content'] + ' [/INST]' }}{% elif message['role'] == 'assistant' %}{{ ' ' + message['content'] + ' ' + eos_token}}{% else %}{{ raise_exception('Only user and assistant roles are supported!') }}{% endif %}{% endfor %}",
+ 'mistral': "{% for message in messages %}{% if message['role'] == 'user' %}{{ ' [INST] ' + message['content'] + ' [/INST]' }}{% elif message['role'] == 'assistant' %}{{ ' ' + message['content'] + ' ' + eos_token}}{% else %}{{ raise_exception('Only user and assistant roles are supported!') }}{% endif %}{% endfor %}",
'vicuna': "{%- set ns = namespace(found=false) -%}\n{%- for message in messages -%}\n {%- if message['role'] == 'system' -%}\n {%- set ns.found = true -%}\n {%- endif -%}\n{%- endfor -%}\n{%- if not ns.found -%}\n {{- '' + 'A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user\\'s questions.' + '\\n\\n' -}}\n{%- endif %}\n{%- for message in messages %}\n {%- if message['role'] == 'system' -%}\n {{- '' + message['content'] + '\\n\\n' -}}\n {%- else -%}\n {%- if message['role'] == 'user' -%}\n {{-'USER: ' + message['content'] + '\\n'-}}\n {%- else -%}\n {{-'ASSISTANT: ' + message['content'] + '\\n' -}}\n {%- endif -%}\n {%- endif -%}\n{%- endfor -%}\n{%- if add_generation_prompt -%}\n {{-'ASSISTANT:'-}}\n{%- endif -%}",
"alpaca": "{%- set ns = namespace(found=false) -%}\n{%- for message in messages -%}\n {%- if message['role'] == 'system' -%}\n {%- set ns.found = true -%}\n {%- endif -%}\n{%- endfor -%}\n{%- if not ns.found -%}\n {{- '' + 'Below is an instruction that describes a task. Write a response that appropriately completes the request.' + '\\n\\n' -}}\n{%- endif %}\n{%- for message in messages %}\n {%- if message['role'] == 'system' -%}\n {{- '' + message['content'] + '\\n\\n' -}}\n {%- else -%}\n {%- if message['role'] == 'user' -%}\n {{-'### Instruction:\\n' + message['content'] + '\\n\\n'-}}\n {%- else -%}\n {{-'### Response:\\n' + message['content'] + '\\n\\n' -}}\n {%- endif -%}\n {%- endif -%}\n{%- endfor -%}\n{%- if add_generation_prompt -%}\n {{-'### Response:\\n'-}}\n{%- endif -%}"
}
@@ -22,7 +22,7 @@ export const templateEffect = {
],
'mistral': [
'no_system_messages',
- 'alter_user_assistant_roles'
+ 'alter_user_assistant_roles',
],
} as {[key:string]:TemplateEffect[]}
@@ -94,6 +94,8 @@ export const applyChatTemplate = (messages:OpenAIChat[]) => {
"messages": formatedMessages,
"add_generation_prompt": true,
"risu_char": currentChar.name,
- "risu_user": getUserName()
+ "risu_user": getUserName(),
+ "eos_token": "",
+ "bos_token": "",
})
}
\ No newline at end of file
diff --git a/src/ts/storage/autoStorage.ts b/src/ts/storage/autoStorage.ts
index 1157b171..2c599b4d 100644
--- a/src/ts/storage/autoStorage.ts
+++ b/src/ts/storage/autoStorage.ts
@@ -2,7 +2,7 @@ import localforage from "localforage"
import { isNodeServer, replaceDbResources } from "./globalApi"
import { NodeStorage } from "./nodeStorage"
import { OpfsStorage } from "./opfsStorage"
-import { alertSelect, alertStore } from "../alert"
+import { alertInput, alertSelect, alertStore } from "../alert"
import { get } from "svelte/store"
import { DataBase, type Database } from "./database"
import { AccountStorage } from "./accountStorage"
@@ -67,6 +67,13 @@ export class AutoStorage{
return true
}
}
+
+ const confirm = await alertInput(`to overwrite your data, type "RISUAI"`)
+ if(confirm !== "RISUAI"){
+ localStorage.setItem('dosync', 'avoid')
+ return false
+ }
+
let replaced:{[key:string]:string} = {}
for(const key of keys){
diff --git a/src/ts/storage/database.ts b/src/ts/storage/database.ts
index 1f5f8b26..20886dd0 100644
--- a/src/ts/storage/database.ts
+++ b/src/ts/storage/database.ts
@@ -428,6 +428,8 @@ export function setDatabase(data:Database){
negInputName: 'text',
timeout: 30
}
+ data.hideApiKey ??= true
+ data.unformatQuotes ??= false
changeLanguage(data.language)
DataBase.set(data)
@@ -710,6 +712,8 @@ export interface Database{
comfyUiUrl: string
useLegacyGUI: boolean
claudeCachingExperimental: boolean
+ hideApiKey: boolean
+ unformatQuotes: boolean
}
export interface customscript{
diff --git a/src/ts/stores.ts b/src/ts/stores.ts
index 2b3a6f2d..0bfeb59a 100644
--- a/src/ts/stores.ts
+++ b/src/ts/stores.ts
@@ -26,7 +26,8 @@ export const ViewBoxsize = writable({ width: 12 * 16, height: 12 * 16 }); // Def
export const settingsOpen = writable(false)
export const botMakerMode = writable(false)
export const moduleBackgroundEmbedding = writable('')
-
+export const openPresetList = writable(false)
+export const openPersonaList = writable(false)
//optimization
export const CurrentCharacter = writable(null) as Writable