mirror of
https://github.com/ParisNeo/lollms-webui.git
synced 2024-12-18 12:16:22 +00:00
steps can fail now
This commit is contained in:
parent
0c22ce20da
commit
c720b10e36
@ -684,9 +684,9 @@ class LoLLMsAPPI(LollmsApplication):
|
|||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
link_text = self.personality.link_text
|
link_text = "\n" #self.personality.link_text
|
||||||
if not is_continue:
|
if not is_continue:
|
||||||
self.full_message_list.append("\n"+self.config.discussion_prompt_separator +message["sender"].replace(":","")+": "+message["content"].strip()+self.personality.link_text+self.personality.ai_message_prefix)
|
self.full_message_list.append("\n"+self.config.discussion_prompt_separator +message["sender"].replace(":","")+": "+message["content"].strip()+link_text+self.personality.ai_message_prefix)
|
||||||
else:
|
else:
|
||||||
self.full_message_list.append("\n"+self.config.discussion_prompt_separator +message["sender"].replace(":","")+": "+message["content"].strip())
|
self.full_message_list.append("\n"+self.config.discussion_prompt_separator +message["sender"].replace(":","")+": "+message["content"].strip())
|
||||||
|
|
||||||
@ -706,6 +706,7 @@ class LoLLMsAPPI(LollmsApplication):
|
|||||||
|
|
||||||
if self.config["debug"]:
|
if self.config["debug"]:
|
||||||
ASCIIColors.yellow(discussion_messages)
|
ASCIIColors.yellow(discussion_messages)
|
||||||
|
ASCIIColors.yellow(f"prompt size:{len(tokens)} tokens")
|
||||||
|
|
||||||
return discussion_messages, message["content"], tokens
|
return discussion_messages, message["content"], tokens
|
||||||
|
|
||||||
@ -722,7 +723,7 @@ class LoLLMsAPPI(LollmsApplication):
|
|||||||
else:
|
else:
|
||||||
self.full_message_list.append(ump + message["content"])
|
self.full_message_list.append(ump + message["content"])
|
||||||
|
|
||||||
link_text = self.personality.link_text
|
link_text = "\n"# self.personality.link_text
|
||||||
|
|
||||||
if len(self.full_message_list) > self.config["nb_messages_to_remember"]:
|
if len(self.full_message_list) > self.config["nb_messages_to_remember"]:
|
||||||
discussion_messages = self.personality.personality_conditioning+ link_text.join(self.full_message_list[-self.config["nb_messages_to_remember"]:])
|
discussion_messages = self.personality.personality_conditioning+ link_text.join(self.full_message_list[-self.config["nb_messages_to_remember"]:])
|
||||||
@ -785,6 +786,7 @@ class LoLLMsAPPI(LollmsApplication):
|
|||||||
"user_message_id": self.current_user_message_id,
|
"user_message_id": self.current_user_message_id,
|
||||||
"ai_message_id": self.current_ai_message_id,
|
"ai_message_id": self.current_ai_message_id,
|
||||||
'finished_generating_at': self.current_discussion.current_message_finished_generating_at,
|
'finished_generating_at': self.current_discussion.current_message_finished_generating_at,
|
||||||
|
'metadata':metadata
|
||||||
}, room=client_id
|
}, room=client_id
|
||||||
)
|
)
|
||||||
return False
|
return False
|
||||||
@ -798,6 +800,7 @@ class LoLLMsAPPI(LollmsApplication):
|
|||||||
"user_message_id": self.current_user_message_id,
|
"user_message_id": self.current_user_message_id,
|
||||||
"ai_message_id": self.current_ai_message_id,
|
"ai_message_id": self.current_ai_message_id,
|
||||||
'finished_generating_at': self.current_discussion.current_message_finished_generating_at,
|
'finished_generating_at': self.current_discussion.current_message_finished_generating_at,
|
||||||
|
'metadata':metadata
|
||||||
}, room=client_id
|
}, room=client_id
|
||||||
)
|
)
|
||||||
self.socketio.sleep(0.01)
|
self.socketio.sleep(0.01)
|
||||||
@ -822,6 +825,7 @@ class LoLLMsAPPI(LollmsApplication):
|
|||||||
'discussion_id':self.current_discussion.discussion_id,
|
'discussion_id':self.current_discussion.discussion_id,
|
||||||
'message_type': message_type.value,
|
'message_type': message_type.value,
|
||||||
'finished_generating_at': self.current_discussion.current_message_finished_generating_at,
|
'finished_generating_at': self.current_discussion.current_message_finished_generating_at,
|
||||||
|
'metadata':metadata
|
||||||
}, room=client_id
|
}, room=client_id
|
||||||
)
|
)
|
||||||
self.socketio.sleep(0.01)
|
self.socketio.sleep(0.01)
|
||||||
@ -835,6 +839,7 @@ class LoLLMsAPPI(LollmsApplication):
|
|||||||
'discussion_id':self.current_discussion.discussion_id,
|
'discussion_id':self.current_discussion.discussion_id,
|
||||||
'message_type': message_type.value,
|
'message_type': message_type.value,
|
||||||
'finished_generating_at': self.current_discussion.current_message_finished_generating_at,
|
'finished_generating_at': self.current_discussion.current_message_finished_generating_at,
|
||||||
|
'metadata':metadata
|
||||||
}, room=client_id
|
}, room=client_id
|
||||||
)
|
)
|
||||||
self.socketio.sleep(0.01)
|
self.socketio.sleep(0.01)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# =================== Lord Of Large Language Models Configuration file ===========================
|
# =================== Lord Of Large Language Models Configuration file ===========================
|
||||||
version: 15
|
version: 16
|
||||||
binding_name: null
|
binding_name: null
|
||||||
model_name: null
|
model_name: null
|
||||||
|
|
||||||
@ -45,4 +45,5 @@ auto_update: false
|
|||||||
audio_in_language: 'en-US'
|
audio_in_language: 'en-US'
|
||||||
audio_out_voice: null
|
audio_out_voice: null
|
||||||
auto_speak: false
|
auto_speak: false
|
||||||
|
audio_pitch: 1
|
||||||
silenceTimer: 5000
|
silenceTimer: 5000
|
@ -2,8 +2,8 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
if len(sys.argv) != 2:
|
if len(sys.argv) != 1:
|
||||||
print("Usage: python restart_script.py <repo_path>")
|
print("Usage: python restart_script.py")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
# Reload the main script with the original arguments
|
# Reload the main script with the original arguments
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
4
web/dist/index.html
vendored
4
web/dist/index.html
vendored
@ -6,8 +6,8 @@
|
|||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>LoLLMS WebUI - Welcome</title>
|
<title>LoLLMS WebUI - Welcome</title>
|
||||||
<script type="module" crossorigin src="/assets/index-b5959380.js"></script>
|
<script type="module" crossorigin src="/assets/index-04dfca4a.js"></script>
|
||||||
<link rel="stylesheet" href="/assets/index-3a2a1b2d.css">
|
<link rel="stylesheet" href="/assets/index-2dff239f.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
|
@ -217,9 +217,9 @@ import MountedPersonalitiesComponent from './MountedPersonalitiesComponent.vue'
|
|||||||
import { nextTick, ref, TransitionGroup } from 'vue'
|
import { nextTick, ref, TransitionGroup } from 'vue'
|
||||||
import feather from 'feather-icons'
|
import feather from 'feather-icons'
|
||||||
import filesize from '../plugins/filesize'
|
import filesize from '../plugins/filesize'
|
||||||
import MountedPersonalities from './MountedPersonalities.vue'
|
import MountedPersonalities from '@/components/MountedPersonalities.vue'
|
||||||
import MountedPersonalitiesList from './MountedPersonalitiesList.vue'
|
import MountedPersonalitiesList from '@/components/MountedPersonalitiesList.vue'
|
||||||
import PersonalitiesCommands from './PersonalitiesCommands.vue';
|
import PersonalitiesCommands from '@/components/PersonalitiesCommands.vue';
|
||||||
import { useStore } from 'vuex'; // Import the useStore function
|
import { useStore } from 'vuex'; // Import the useStore function
|
||||||
import { inject } from 'vue';
|
import { inject } from 'vue';
|
||||||
export default {
|
export default {
|
||||||
|
@ -131,7 +131,7 @@
|
|||||||
<!-- MESSAGE CONTENT -->
|
<!-- MESSAGE CONTENT -->
|
||||||
<div class="flex flex-col items-start w-full">
|
<div class="flex flex-col items-start w-full">
|
||||||
<div v-for="(step, index) in message.steps" :key="'step-' + message.id + '-' + index" class="step font-bold" :style="{ backgroundColor: step.done ? 'transparent' : 'inherit' }">
|
<div v-for="(step, index) in message.steps" :key="'step-' + message.id + '-' + index" class="step font-bold" :style="{ backgroundColor: step.done ? 'transparent' : 'inherit' }">
|
||||||
<Step :done="step.done" :message="step.message" />
|
<Step :done="step.done" :message="step.message" :status="step.status" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -252,6 +252,7 @@ export default {
|
|||||||
|
|
||||||
// Create a new SpeechSynthesisUtterance instance
|
// Create a new SpeechSynthesisUtterance instance
|
||||||
this.msg = new SpeechSynthesisUtterance();
|
this.msg = new SpeechSynthesisUtterance();
|
||||||
|
this.msg.pitch = this.$store.state.config.audio_pitch;
|
||||||
|
|
||||||
// Optionally, set the voice and other parameters as before
|
// Optionally, set the voice and other parameters as before
|
||||||
if (this.voices.length > 0) {
|
if (this.voices.length > 0) {
|
||||||
@ -275,7 +276,9 @@ export default {
|
|||||||
lastIndex = markerIndex;
|
lastIndex = markerIndex;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return lastIndex+startIndex;
|
if(lastIndex==-1){lastIndex=txt.length}
|
||||||
|
console.log(lastIndex)
|
||||||
|
return lastIndex+startIndex+1;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Function to speak a chunk of text
|
// Function to speak a chunk of text
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<div class="flex -space-x-4 " v-if="mountedPersArr.length > 1">
|
<div class="flex -space-x-4 " v-if="mountedPersArr.length > 1">
|
||||||
<img :src="bUrl + mountedPers.avatar" @error="personalityImgPlacehodler"
|
<img :src="bUrl + mountedPers.avatar" @error="personalityImgPlacehodler"
|
||||||
class="w-8 h-8 rounded-full object-fill text-red-700 border-2 active:scale-90 hover:z-20 hover:-translate-y-2 duration-150 border-secondary cursor-pointer"
|
class="w-8 h-8 rounded-full object-fill text-red-700 border-2 active:scale-90 hover:z-20 hover:-translate-y-2 duration-150 border-secondary cursor-pointer"
|
||||||
:title="'Active personality: '+mountedPers.name" >
|
:title="'Active personality: '+mountedPers.name" @click="onSettingsPersonality(mountedPers)">
|
||||||
|
|
||||||
<div class="flex items-center justify-center w-8 h-8 cursor-pointer text-xs font-medium bg-bg-light dark:bg-bg-dark border-2 hover:border-secondary rounded-full hover:bg-bg-light-tone dark:hover:bg-bg-dark-tone dark:border-gray-800 hover:z-20 hover:-translate-y-2 duration-150 active:scale-90"
|
<div class="flex items-center justify-center w-8 h-8 cursor-pointer text-xs font-medium bg-bg-light dark:bg-bg-dark border-2 hover:border-secondary rounded-full hover:bg-bg-light-tone dark:hover:bg-bg-dark-tone dark:border-gray-800 hover:z-20 hover:-translate-y-2 duration-150 active:scale-90"
|
||||||
@click.stop="toggleShowPersList" title="Click to show more">+{{ mountedPersArr.length - 1 }}</div>
|
@click.stop="toggleShowPersList" title="Click to show more">+{{ mountedPersArr.length - 1 }}</div>
|
||||||
@ -34,11 +34,14 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
<UniversalForm ref="universalForm" class="z-20" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import defaultPersonalityImgPlaceholder from "../assets/logo.svg"
|
import defaultPersonalityImgPlaceholder from "../assets/logo.svg"
|
||||||
|
import UniversalForm from '@/components/UniversalForm.vue';
|
||||||
|
|
||||||
import { nextTick } from "vue";
|
import { nextTick } from "vue";
|
||||||
import { useStore } from 'vuex'; // Import the useStore function
|
import { useStore } from 'vuex'; // Import the useStore function
|
||||||
import { computed } from 'vue'; // Import the computed function
|
import { computed } from 'vue'; // Import the computed function
|
||||||
@ -56,6 +59,9 @@ export default {
|
|||||||
onShowPersList: Function,
|
onShowPersList: Function,
|
||||||
onReady:Function,
|
onReady:Function,
|
||||||
},
|
},
|
||||||
|
components: {
|
||||||
|
UniversalForm
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
bUrl: bUrl,
|
bUrl: bUrl,
|
||||||
@ -112,6 +118,54 @@ export default {
|
|||||||
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
onSettingsPersonality(persEntry) {
|
||||||
|
try {
|
||||||
|
|
||||||
|
axios.get('/get_active_personality_settings').then(res => {
|
||||||
|
|
||||||
|
if (res) {
|
||||||
|
|
||||||
|
console.log('pers sett', res)
|
||||||
|
if (res.data && Object.keys(res.data).length > 0) {
|
||||||
|
|
||||||
|
this.$refs.universalForm.showForm(res.data, "Personality settings - " + persEntry.name, "Save changes", "Cancel").then(res => {
|
||||||
|
|
||||||
|
// send new data
|
||||||
|
try {
|
||||||
|
axios.post('/set_active_personality_settings',
|
||||||
|
res).then(response => {
|
||||||
|
|
||||||
|
if (response && response.data) {
|
||||||
|
console.log('personality set with new settings', response.data)
|
||||||
|
this.$refs.toast.showToast("Personality settings updated successfully!", 4, true)
|
||||||
|
|
||||||
|
} else {
|
||||||
|
this.$refs.toast.showToast("Did not get Personality settings responses.\n" + response, 4, false)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
})
|
||||||
|
} catch (error) {
|
||||||
|
this.$refs.toast.showToast("Did not get Personality settings responses.\n Endpoint error: " + error.message, 4, false)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.$refs.toast.showToast("Personality has no settings", 4, false)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
|
||||||
|
this.$refs.toast.showToast("Could not open personality settings. Endpoint error: " + error.message, 4, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
toggleShowPersList() {
|
toggleShowPersList() {
|
||||||
//this.show = !this.show
|
//this.show = !this.show
|
||||||
this.onShowPersList()
|
this.onShowPersList()
|
||||||
|
@ -7,12 +7,18 @@
|
|||||||
class="text-gray-400 w-4 h-4"
|
class="text-gray-400 w-4 h-4"
|
||||||
></i>
|
></i>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="done">
|
<div v-if="done && status">
|
||||||
<i
|
<i
|
||||||
data-feather="check-square"
|
data-feather="check-square"
|
||||||
class="text-green-500 w-4 h-4"
|
class="text-green-500 w-4 h-4"
|
||||||
></i>
|
></i>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-if="done && !status">
|
||||||
|
<i
|
||||||
|
data-feather="x-square"
|
||||||
|
class="text-red-500 w-4 h-4"
|
||||||
|
></i>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="!done" role="status">
|
<div v-if="!done" role="status">
|
||||||
<svg aria-hidden="true" class="w-6 h-6 animate-spin fill-secondary" viewBox="0 0 100 101"
|
<svg aria-hidden="true" class="w-6 h-6 animate-spin fill-secondary" viewBox="0 0 100 101"
|
||||||
@ -43,7 +49,12 @@
|
|||||||
message: {
|
message: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true
|
||||||
}
|
},
|
||||||
|
status: {
|
||||||
|
type: Boolean,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div v-if="show"
|
<div v-if="show"
|
||||||
class="fixed top-0 left-0 right-0 bottom-0 flex items-center justify-center bg-black bg-opacity-50 p-4">
|
class="fixed top-0 left-0 right-0 bottom-0 flex items-center justify-center bg-black bg-opacity-50 p-4">
|
||||||
<div class="relative w-full max-w-md ">
|
<div class="relative w-full max-w-md">
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="flex flex-col rounded-lg bg-bg-light-tone-panel dark:bg-bg-dark-tone-panel duration-150 shadow-lg max-h-screen">
|
class="flex flex-col rounded-lg bg-bg-light-tone-panel dark:bg-bg-dark-tone-panel duration-150 shadow-lg max-h-screen">
|
||||||
@ -197,7 +197,7 @@
|
|||||||
{{ ConfirmButtonText }}
|
{{ ConfirmButtonText }}
|
||||||
</button>
|
</button>
|
||||||
<button @click.stop="hide(false)" type="button"
|
<button @click.stop="hide(false)" type="button"
|
||||||
class="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-gray-200 rounded-lg border border-gray-200 text-sm font-medium px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-gray-700 dark:text-gray-300 dark:border-gray-500 dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-600">
|
class="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-gray-200 rounded-lg border border-gray-200 text-sm font-medium px-5 py-2.5 hover:text-gray-900 focus:z-11 dark:bg-gray-700 dark:text-gray-300 dark:border-gray-500 dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-600">
|
||||||
{{ DenyButtonText }}
|
{{ DenyButtonText }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
<!-- LEFT SIDE PANEL -->
|
<!-- LEFT SIDE PANEL -->
|
||||||
<div id="leftPanel" class="flex flex-col flex-grow overflow-y-scroll no-scrollbar "
|
<div id="leftPanel" class="flex flex-col flex-grow overflow-y-scroll no-scrollbar "
|
||||||
@dragover.stop.prevent="setDropZoneDiscussion()">
|
@dragover.stop.prevent="setDropZoneDiscussion()">
|
||||||
<div class=" sticky z-10 top-0 bg-bg-light-tone dark:bg-bg-dark-tone shadow-md ">
|
<div class=" sticky z-5 top-0 bg-bg-light-tone dark:bg-bg-dark-tone shadow-md ">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -187,11 +187,11 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="z-20">
|
<div class="z-5">
|
||||||
<DragDrop ref="dragdropDiscussion" @panelDrop="setFileListDiscussion">Drop your discussion file here
|
<DragDrop ref="dragdropDiscussion" @panelDrop="setFileListDiscussion">Drop your discussion file here
|
||||||
</DragDrop>
|
</DragDrop>
|
||||||
</div>
|
</div>
|
||||||
<div class="relative flex flex-row flex-grow mb-10 ">
|
<div class="relative flex flex-row flex-grow mb-10 z-0">
|
||||||
|
|
||||||
<!-- DISCUSSION LIST -->
|
<!-- DISCUSSION LIST -->
|
||||||
<div class="mx-4 flex flex-col flex-grow " :class="isDragOverDiscussion ? 'pointer-events-none' : ''">
|
<div class="mx-4 flex flex-col flex-grow " :class="isDragOverDiscussion ? 'pointer-events-none' : ''">
|
||||||
@ -967,13 +967,15 @@ export default {
|
|||||||
else if(messageItem && msgObj.message_type==this.msgTypes.MSG_TYPE_CHUNK){
|
else if(messageItem && msgObj.message_type==this.msgTypes.MSG_TYPE_CHUNK){
|
||||||
messageItem.content += msgObj.data
|
messageItem.content += msgObj.data
|
||||||
} else if (msgObj.message_type == this.msgTypes.MSG_TYPE_STEP_START){
|
} else if (msgObj.message_type == this.msgTypes.MSG_TYPE_STEP_START){
|
||||||
messageItem.steps.push({"message":msgObj.data,"done":false})
|
console.log(msgObj.metadata)
|
||||||
|
messageItem.steps.push({"message":msgObj.data,"done":false, "status":true })
|
||||||
} else if (msgObj.message_type == this.msgTypes.MSG_TYPE_STEP_END) {
|
} else if (msgObj.message_type == this.msgTypes.MSG_TYPE_STEP_END) {
|
||||||
// Find the step with the matching message and update its 'done' property to true
|
// Find the step with the matching message and update its 'done' property to true
|
||||||
const matchingStep = messageItem.steps.find(step => step.message === msgObj.data);
|
const matchingStep = messageItem.steps.find(step => step.message === msgObj.data);
|
||||||
|
|
||||||
if (matchingStep) {
|
if (matchingStep) {
|
||||||
matchingStep.done = true;
|
matchingStep.done = true;
|
||||||
|
matchingStep.status=msgObj.metadata.status
|
||||||
}
|
}
|
||||||
} else if (msgObj.message_type == this.msgTypes.MSG_TYPE_EXCEPTION) {
|
} else if (msgObj.message_type == this.msgTypes.MSG_TYPE_EXCEPTION) {
|
||||||
this.$refs.toast.showToast(msgObj.data, 5, false)
|
this.$refs.toast.showToast(msgObj.data, 5, false)
|
||||||
|
@ -697,6 +697,28 @@
|
|||||||
</button>
|
</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="min-width: 200px;">
|
||||||
|
<label for="audio_pitch" class="text-sm font-bold" style="margin-right: 1rem;">audio pitch:</label>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input id="audio_pitch" v-model="audio_pitch"
|
||||||
|
type="range" min="0" max="10" step="0.1"
|
||||||
|
class="flex-none h-2 mt-14 mb-2 w-full bg-gray-200 rounded-lg appearance-none cursor-pointer dark:bg-gray-700 focus:ring-blue-500 focus:border-blue-500 dark:border-gray-600 dark:placeholder-gray-400 dark:focus:ring-blue-500 dark:focus:border-blue-500">
|
||||||
|
|
||||||
|
<p
|
||||||
|
class="mt-1 px-2 py-1 border border-gray-300 rounded"
|
||||||
|
>{{ audio_pitch }}</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<button
|
||||||
|
class="hover:text-secondary bg-blue-100 m-2 p-2 duration-75 flex justify-center w-full hover:bg-bg-light-tone hover:dark:bg-bg-dark-tone rounded-lg"
|
||||||
|
@click="update_setting('audio_pitch', audio_pitch)"
|
||||||
|
>
|
||||||
|
<i data-feather="check"></i>
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td style="min-width: 200px;">
|
<td style="min-width: 200px;">
|
||||||
@ -3110,6 +3132,15 @@ export default {
|
|||||||
this.$store.state.config.auto_speak = value
|
this.$store.state.config.auto_speak = value
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
audio_pitch:{
|
||||||
|
get() {
|
||||||
|
return this.$store.state.config.audio_pitch;
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
// You should not set the value directly here; use the updateSetting method instead
|
||||||
|
this.$store.state.config.audio_pitch = value
|
||||||
|
},
|
||||||
|
},
|
||||||
audio_in_language:{
|
audio_in_language:{
|
||||||
get() {
|
get() {
|
||||||
return this.$store.state.config.audio_in_language;
|
return this.$store.state.config.audio_in_language;
|
||||||
|
Loading…
Reference in New Issue
Block a user