diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 0b3a732f..0032e74d 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -8,7 +8,7 @@ }, "package": { "productName": "RisuAI", - "version": "1.18.2" + "version": "1.19.0" }, "tauri": { "allowlist": { diff --git a/src/lib/Setting/Pages/BotSettings.svelte b/src/lib/Setting/Pages/BotSettings.svelte index b1798739..a0aa0019 100644 --- a/src/lib/Setting/Pages/BotSettings.svelte +++ b/src/lib/Setting/Pages/BotSettings.svelte @@ -69,6 +69,12 @@ {/if} +{#if $DataBase.aiModel === "kobold" || $DataBase.subModel === "kobold"} + Kobold URL + +{/if} + + {#if $DataBase.aiModel.startsWith("horde") || $DataBase.subModel.startsWith("horde") } Horde {language.apiKey} diff --git a/src/lib/Setting/Settings.svelte b/src/lib/Setting/Settings.svelte index f3f11252..e1415237 100644 --- a/src/lib/Setting/Settings.svelte +++ b/src/lib/Setting/Settings.svelte @@ -13,9 +13,9 @@ import Communities from "./Pages/Communities.svelte"; import GlobalLoreBookSettings from "./Pages/GlobalLoreBookSettings.svelte"; import Lorepreset from "./lorepreset.svelte"; - import GlobalRegex from "./Pages/GlobalRegex.svelte"; - import LanguageSettings from "./Pages/LanguageSettings.svelte"; - import AccessibilitySettings from "./Pages/AccessibilitySettings.svelte"; + import GlobalRegex from "./Pages/GlobalRegex.svelte"; + import LanguageSettings from "./Pages/LanguageSettings.svelte"; + import AccessibilitySettings from "./Pages/AccessibilitySettings.svelte"; let selected = -1 let openPresetList = false let openLoreList = false diff --git a/src/lib/UI/Arcodion.svelte b/src/lib/UI/Arcodion.svelte new file mode 100644 index 00000000..fc33234e --- /dev/null +++ b/src/lib/UI/Arcodion.svelte @@ -0,0 +1,15 @@ + + +
+ + {#if open} +
+ +
+ {/if} +
diff --git a/src/lib/UI/ModelList.svelte b/src/lib/UI/ModelList.svelte index bd118304..b0187c0a 100644 --- a/src/lib/UI/ModelList.svelte +++ b/src/lib/UI/ModelList.svelte @@ -1,32 +1,74 @@ -{#await getHordeModels()} - -{:then models} - -{/await} \ No newline at end of file + + + +{/if} + + + diff --git a/src/ts/database.ts b/src/ts/database.ts index 488f3467..f4b559ac 100644 --- a/src/ts/database.ts +++ b/src/ts/database.ts @@ -7,7 +7,7 @@ import { cloneDeep } from 'lodash'; export const DataBase = writable({} as any as Database) export const loadedStore = writable(false) -export let appVer = '1.18.2' +export let appVer = '1.19.0' export function setDatabase(data:Database){ @@ -386,6 +386,7 @@ export interface botPreset{ forceReplaceUrl2:string promptPreprocess: boolean, bias: [string, number][] + koboldURL?: string } export interface Database{ @@ -486,6 +487,7 @@ export interface Database{ globalscript: customscript[] sendWithEnter:boolean clickToEdit: boolean + koboldURL:string } @@ -627,7 +629,9 @@ export function saveCurrentPreset(){ forceReplaceUrl: db.forceReplaceUrl, forceReplaceUrl2: db.forceReplaceUrl2, promptPreprocess: db.promptPreprocess, - bias: db.bias + bias: db.bias, + koboldURL: db.koboldURL + } db.botPresets = pres DataBase.set(db) @@ -668,5 +672,6 @@ export function changeToPreset(id =0){ db.promptPreprocess = newPres.promptPreprocess ?? db.promptPreprocess db.forceReplaceUrl2 = newPres.forceReplaceUrl2 ?? db.forceReplaceUrl2 db.bias = newPres.bias ?? db.bias + db.koboldURL = newPres.koboldURL ?? db.koboldURL DataBase.set(db) } \ No newline at end of file diff --git a/src/ts/horde/getModels.ts b/src/ts/horde/getModels.ts index b2b4e6d8..9323558e 100644 --- a/src/ts/horde/getModels.ts +++ b/src/ts/horde/getModels.ts @@ -3,7 +3,7 @@ import { sleep } from "../util" let modelList:string[]|'loading' = null //until horde is ready -modelList = [] +// modelList = [] export async function getHordeModels():Promise { diff --git a/src/ts/process/index.ts b/src/ts/process/index.ts index 8158b892..5019fff9 100644 --- a/src/ts/process/index.ts +++ b/src/ts/process/index.ts @@ -241,7 +241,7 @@ export async function sendChat(chatProcessIndex = -1):Promise { else{ while(currentTokens > maxContextTokens){ if(chats.length <= 1){ - alertError(language.errors.toomuchtoken) + alertError(language.errors.toomuchtoken + "\n\nRequired Tokens: " + currentTokens) return false } diff --git a/src/ts/process/request.ts b/src/ts/process/request.ts index b122f56b..12077108 100644 --- a/src/ts/process/request.ts +++ b/src/ts/process/request.ts @@ -23,6 +23,7 @@ interface requestDataArgument{ type requestDataResponse = { type: 'success'|'fail' result: string + noRetry?: boolean }|{ type: "streaming", result: ReadableStream @@ -33,11 +34,11 @@ export async function requestChatData(arg:requestDataArgument, model:'model'|'su let trys = 0 while(true){ const da = await requestChatDataMain(arg, model) - if(da.type === 'success' || da.type === 'streaming'){ + if(da.type === 'success' || da.type === 'streaming' || da.noRetry){ return da } trys += 1 - if(trys > db.requestRetrys || model.startsWith('horde')){ + if(trys > db.requestRetrys){ return da } } @@ -417,31 +418,50 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' } } } + case "kobold":{ + const proompt = stringlizeChat(formated, currentChar?.name ?? '') + const url = new URL(db.koboldURL) + url.pathname = '/generate' + + const da = await fetch(url, { + method: "POST", + body: JSON.stringify({ + "prompt": proompt, + "temperature": db.temperature, + "top_p": 0.9 + }), + headers: { + "content-type": "application/json", + } + }) + + if(da.status !== 200){ + return { + type: "fail", + result: await da.text(), + noRetry: da.status >= 500 + } + } + + const data = await da.json() + return data.results[0].text + } default:{ if(aiModel.startsWith("horde:::")){ - const realModel = aiModel.split(":::")[1].trim() + const proompt = stringlizeChat(formated, currentChar?.name ?? '') - const workers = ((await (await fetch("https://stablehorde.net/api/v2/workers")).json()) as {id:string,models:string[]}[]).filter((a) => { - - if(a && a.models && a.id){ - console.log(a) - return a.models.includes(realModel) - } - return false - }).map((a) => { - return a.id - }) + const realModel = aiModel.split(":::")[1] const argument = { - "prompt": "string", + "prompt": proompt, "params": { "n": 1, "frmtadsnsp": false, "frmtrmblln": false, "frmtrmspch": false, "frmttriminc": false, - "max_context_length": 200, - "max_length": 20, + "max_context_length": db.maxContext + 100, + "max_length": db.maxResponse, "rep_pen": 3, "rep_pen_range": 0, "rep_pen_slope": 10, @@ -459,7 +479,8 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' "trusted_workers": false, "slow_workers": true, "worker_blacklist": false, - "dry_run": false + "dry_run": false, + "models": [realModel] } const da = await fetch("https://stablehorde.net/api/v2/generate/text/async", { @@ -485,12 +506,12 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' } = await da.json() let warnMessage = "" - if(json.message && json.message.startsWith("Warning:")){ + if(json.message){ warnMessage = "with " + json.message } while(true){ - await sleep(1000) + await sleep(2000) const data = await (await fetch("https://stablehorde.net/api/v2/generate/text/status/" + json.id)).json() if(!data.is_possible){ fetch("https://stablehorde.net/api/v2/generate/text/status/" + json.id, { @@ -498,20 +519,22 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' }) return { type: 'fail', - result: "Response not possible" + warnMessage + result: "Response not possible" + warnMessage, + noRetry: true } } - if(data.done){ + if(data.done && Array.isArray(data.generations) && data.generations.length > 0){ const generations:{text:string}[] = data.generations if(generations && generations.length > 0){ return { type: "success", - result: generations[0].text + result: unstringlizeChat(generations[0].text, formated, currentChar?.name ?? '') } } return { type: 'fail', - result: "No Generations when done" + result: "No Generations when done", + noRetry: true } } } diff --git a/src/ts/process/stringlize.ts b/src/ts/process/stringlize.ts index 62e58d4d..bc62b518 100644 --- a/src/ts/process/stringlize.ts +++ b/src/ts/process/stringlize.ts @@ -8,7 +8,7 @@ export function stringlizeChat(formated:OpenAIChat[], char:string = ''){ let resultString:string[] = [] for(const form of formated){ if(form.role === 'system'){ - resultString.push("system note: " + form.content) + resultString.push("system: " + form.content) } else if(form.name){ resultString.push(form.name + ": " + form.content) @@ -23,7 +23,7 @@ export function stringlizeChat(formated:OpenAIChat[], char:string = ''){ export function unstringlizeChat(text:string, formated:OpenAIChat[], char:string = ''){ console.log(text) let minIndex = -1 - let chunks:string[] = ["system note:"] + let chunks:string[] = ["system note:", "system:"] if(char){ chunks.push(`${char}:`) } diff --git a/version.json b/version.json index 730763c6..b4b09ed0 100644 --- a/version.json +++ b/version.json @@ -1 +1 @@ -{"version":"1.18.2"} \ No newline at end of file +{"version":"1.19.0"} \ No newline at end of file