diff --git a/src/lib/Setting/Pages/BotSettings.svelte b/src/lib/Setting/Pages/BotSettings.svelte
index 7b5897d6..313b56b7 100644
--- a/src/lib/Setting/Pages/BotSettings.svelte
+++ b/src/lib/Setting/Pages/BotSettings.svelte
@@ -37,24 +37,38 @@
{language.chatBot}
{language.model}
{language.submodel}
-
{/if}
+{#if $DataBase.aiModel === "novelai" || $DataBase.subModel === "novelai"}
+ NovelAI Bearer Token
+
+
+{/if}
{#if $DataBase.aiModel === 'textgen_webui' || $DataBase.subModel === 'textgen_webui'}
TextGen {language.providerURL}
@@ -98,12 +117,15 @@
{tokens.globalNote} {language.tokens}
{language.maxContextSize}
+
{#if $DataBase.aiModel === 'gpt35'}
{:else if $DataBase.aiModel === 'gpt4' || $DataBase.aiModel === 'textgen_webui'}
{:else if $DataBase.aiModel === 'custom'}
+{:else}
+
{/if}
{language.maxResponseSize}
diff --git a/src/lib/Setting/Settings.svelte b/src/lib/Setting/Settings.svelte
index 173b1787..bfbac3cb 100644
--- a/src/lib/Setting/Settings.svelte
+++ b/src/lib/Setting/Settings.svelte
@@ -10,8 +10,8 @@
import AdvancedSettings from "./Pages/AdvancedSettings.svelte";
import { SizeStore, settingsOpen } from "src/ts/stores";
import Botpreset from "./botpreset.svelte";
- import Communities from "./Pages/Communities.svelte";
- import { openURL } from "src/ts/globalApi";
+ import Communities from "./Pages/Communities.svelte";
+ import { openURL } from "src/ts/globalApi";
let selected = -1
let openPresetList = false
if(window.innerWidth >= 700){
diff --git a/src/ts/database.ts b/src/ts/database.ts
index 9bd3051e..ba23de50 100644
--- a/src/ts/database.ts
+++ b/src/ts/database.ts
@@ -222,6 +222,19 @@ export function setDatabase(data:Database){
FontColorItalicBold: "#8C8D93"
}
}
+ if(checkNullish(data.hordeConfig)){
+ data.hordeConfig = {
+ apiKey: "",
+ model: "",
+ softPrompt: ""
+ }
+ }
+ if(checkNullish(data.novelai)){
+ data.novelai = {
+ token: "",
+ model: "clio-v1",
+ }
+ }
changeLanguage(data.language)
@@ -431,6 +444,17 @@ export interface Database{
textScreenRounded?:boolean
textScreenBorder?:string
characterOrder:(string|folder)[]
+ hordeConfig:hordeConfig,
+ novelai:{
+ token:string,
+ model:string
+ }
+}
+
+interface hordeConfig{
+ apiKey:string
+ model:string
+ softPrompt:string
}
export interface folder{
diff --git a/src/ts/process/request.ts b/src/ts/process/request.ts
index 124aa07f..e61cb9d2 100644
--- a/src/ts/process/request.ts
+++ b/src/ts/process/request.ts
@@ -4,7 +4,7 @@ import { DataBase, setDatabase, type character } from "../database";
import { pluginProcess } from "./plugins";
import { language } from "../../lang";
import { stringlizeChat } from "./stringlize";
-import { globalFetch } from "../globalApi";
+import { globalFetch, isTauri } from "../globalApi";
interface requestDataArgument{
formated: OpenAIChat[]
@@ -173,6 +173,52 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
break
}
+ case 'novelai':{
+ if(!isTauri){
+ return{
+ type: 'fail',
+ result: "NovelAI doesn't work in web version."
+ }
+ }
+ const proompt = stringlizeChat(formated, currentChar?.name ?? '')
+ const params = {
+ "input": proompt,
+ "model":db.novelai.model,
+ "parameters":{
+ "use_string":true,
+ "temperature":1.7,
+ "max_length":90,
+ "min_length":1,
+ "tail_free_sampling":0.6602,
+ "repetition_penalty":1.0565,
+ "repetition_penalty_range":340,
+ "repetition_penalty_frequency":0,
+ "repetition_penalty_presence":0,
+ "use_cache":false,
+ "return_full_text":false,
+ "prefix":"vanilla",
+ "order":[3,0]}
+ }
+
+ const da = await globalFetch("https://api.novelai.net/ai/generate", {
+ body: params,
+ headers: {
+ "Authorization": "Bearer " + db.novelai.token
+ }
+ })
+
+ if((!da.ok )|| (!da.data.output)){
+ return {
+ type: 'fail',
+ result: (language.errors.httpError + `${JSON.stringify(da.data)}`)
+ }
+ }
+ return {
+ type: "success",
+ result: da.data.output
+ }
+ }
+
case "textgen_webui":{
let DURL = db.textgenWebUIURL
let bodyTemplate:any