mirror of
https://github.com/ParisNeo/lollms-webui.git
synced 2025-01-30 08:03:57 +00:00
enhanced ui
This commit is contained in:
parent
911f2e9567
commit
bb5794d475
41
app.py
41
app.py
@ -13,7 +13,7 @@ __github__ = "https://github.com/ParisNeo/lollms-webui"
|
|||||||
__copyright__ = "Copyright 2023, "
|
__copyright__ = "Copyright 2023, "
|
||||||
__license__ = "Apache 2.0"
|
__license__ = "Apache 2.0"
|
||||||
|
|
||||||
__version__ ="7.0 (Alpha)"
|
__version__ ="7.0 (Beta)"
|
||||||
|
|
||||||
main_repo = "https://github.com/ParisNeo/lollms-webui.git"
|
main_repo = "https://github.com/ParisNeo/lollms-webui.git"
|
||||||
import os
|
import os
|
||||||
@ -235,11 +235,11 @@ try:
|
|||||||
|
|
||||||
|
|
||||||
self.add_endpoint("/reload_binding", "reload_binding", self.reload_binding, methods=["POST"])
|
self.add_endpoint("/reload_binding", "reload_binding", self.reload_binding, methods=["POST"])
|
||||||
|
self.add_endpoint("/restart_program", "restart_program", self.restart_program, methods=["GET"])
|
||||||
self.add_endpoint("/update_software", "update_software", self.update_software, methods=["GET"])
|
self.add_endpoint("/update_software", "update_software", self.update_software, methods=["GET"])
|
||||||
self.add_endpoint("/clear_uploads", "clear_uploads", self.clear_uploads, methods=["GET"])
|
self.add_endpoint("/clear_uploads", "clear_uploads", self.clear_uploads, methods=["GET"])
|
||||||
self.add_endpoint("/selectdb", "selectdb", self.selectdb, methods=["GET"])
|
self.add_endpoint("/selectdb", "selectdb", self.selectdb, methods=["GET"])
|
||||||
|
|
||||||
self.add_endpoint("/restart_program", "restart_program", self.restart_program, methods=["GET"])
|
|
||||||
|
|
||||||
self.add_endpoint("/check_update", "check_update", self.check_update, methods=["GET"])
|
self.add_endpoint("/check_update", "check_update", self.check_update, methods=["GET"])
|
||||||
|
|
||||||
@ -1640,42 +1640,6 @@ try:
|
|||||||
ASCIIColors.error(f"Couldn't clear the upload folder.\nMaybe some files are opened somewhere else.\Try doing it manually")
|
ASCIIColors.error(f"Couldn't clear the upload folder.\nMaybe some files are opened somewhere else.\Try doing it manually")
|
||||||
return {"status": False, 'error': "Couldn't clear the upload folder.\nMaybe some files are opened somewhere else.\Try doing it manually"}
|
return {"status": False, 'error': "Couldn't clear the upload folder.\nMaybe some files are opened somewhere else.\Try doing it manually"}
|
||||||
|
|
||||||
|
|
||||||
def update_software(self):
|
|
||||||
ASCIIColors.info("")
|
|
||||||
ASCIIColors.info("")
|
|
||||||
ASCIIColors.info("")
|
|
||||||
ASCIIColors.info(" ╔══════════════════════════════════════════════════╗")
|
|
||||||
ASCIIColors.info(" ║ Upgrading backend ║")
|
|
||||||
ASCIIColors.info(" ╚══════════════════════════════════════════════════╝")
|
|
||||||
ASCIIColors.info("")
|
|
||||||
ASCIIColors.info("")
|
|
||||||
ASCIIColors.info("")
|
|
||||||
# Perform a 'git pull' to check for updates
|
|
||||||
try:
|
|
||||||
# Execute 'git pull' and redirect the output to the console
|
|
||||||
process = subprocess.Popen(['git', 'pull'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
|
|
||||||
|
|
||||||
# Read and print the output in real-time
|
|
||||||
while True:
|
|
||||||
output = process.stdout.readline()
|
|
||||||
if output == '' and process.poll() is not None:
|
|
||||||
break
|
|
||||||
if output:
|
|
||||||
print(output.strip())
|
|
||||||
|
|
||||||
# Wait for the process to finish and get the return code
|
|
||||||
return_code = process.poll()
|
|
||||||
|
|
||||||
if return_code == 0:
|
|
||||||
return {"status": True}
|
|
||||||
else:
|
|
||||||
return {"status": False, 'error': f"git pull failed with return code {return_code}"}
|
|
||||||
|
|
||||||
except subprocess.CalledProcessError as ex:
|
|
||||||
# There was an error in 'git pull' command
|
|
||||||
return {"status": False, 'error': str(ex)}
|
|
||||||
|
|
||||||
def selectdb(self):
|
def selectdb(self):
|
||||||
from tkinter import Tk, filedialog
|
from tkinter import Tk, filedialog
|
||||||
# Initialize Tkinter
|
# Initialize Tkinter
|
||||||
@ -1705,7 +1669,6 @@ try:
|
|||||||
run_restart_script(self.args)
|
run_restart_script(self.args)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def update_software(self):
|
def update_software(self):
|
||||||
ASCIIColors.info("")
|
ASCIIColors.info("")
|
||||||
ASCIIColors.info("")
|
ASCIIColors.info("")
|
||||||
|
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-0e1cb70c.js"></script>
|
<script type="module" crossorigin src="/assets/index-24ca9f97.js"></script>
|
||||||
<link rel="stylesheet" href="/assets/index-78770f39.css">
|
<link rel="stylesheet" href="/assets/index-875a93ad.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
|
@ -1314,10 +1314,10 @@
|
|||||||
v-for="(item, index) in mountedExtensions" :key="index + '-' + item.name"
|
v-for="(item, index) in mountedExtensions" :key="index + '-' + item.name"
|
||||||
ref="mountedExtensions">
|
ref="mountedExtensions">
|
||||||
<div class="group items-center flex flex-row">
|
<div class="group items-center flex flex-row">
|
||||||
<button @click.stop="onPersonalitySelected(item)">
|
<button @click.stop="onExtensionSelected(item)">
|
||||||
<img :src="bUrl + item.avatar" @error="personalityImgPlacehodler"
|
<img :src="bUrl + item.avatar" @error="personalityImgPlacehodler"
|
||||||
class="w-8 h-8 rounded-full object-fill text-red-700 border-2 active:scale-90 group-hover:border-secondary "
|
class="w-8 h-8 rounded-full object-fill text-red-700 border-2 active:scale-90 group-hover:border-secondary "
|
||||||
:class="configFile.active_personality_id == configFile.personalities.indexOf(item.full_path) ? 'border-secondary' : 'border-transparent z-0'"
|
:class="configFile.active_personality_id == configFile.extensions.indexOf(item.full_path) ? 'border-secondary' : 'border-transparent z-0'"
|
||||||
:title="item.name">
|
:title="item.name">
|
||||||
</button>
|
</button>
|
||||||
<button @click.stop="unmountExtension (item)">
|
<button @click.stop="unmountExtension (item)">
|
||||||
@ -1878,6 +1878,9 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
async modelsZooToggleCollapse(){
|
async modelsZooToggleCollapse(){
|
||||||
this.mzc_collapsed = !this.mzc_collapsed
|
this.mzc_collapsed = !this.mzc_collapsed
|
||||||
|
if (!this.mzc_collapsed){
|
||||||
|
this.refreshModelsZoo();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
async selectSortOption(index){
|
async selectSortOption(index){
|
||||||
this.$store.state.sort_type=index
|
this.$store.state.sort_type=index
|
||||||
@ -2017,6 +2020,17 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
async restart_software() {
|
||||||
|
console.log("Posting")
|
||||||
|
const res = await this.api_get_req('restart_program')
|
||||||
|
console.log("Posting done")
|
||||||
|
if(res.status){
|
||||||
|
this.$refs.toast.showToast("Success!", 4, true)
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.$refs.toast.showToast("Failure!", 4, false)
|
||||||
|
}
|
||||||
|
},
|
||||||
on_loading_text(text){
|
on_loading_text(text){
|
||||||
|
|
||||||
console.log("Loading text",text)
|
console.log("Loading text",text)
|
||||||
@ -2056,12 +2070,6 @@ export default {
|
|||||||
this.extCatgArr = []
|
this.extCatgArr = []
|
||||||
}
|
}
|
||||||
|
|
||||||
// this.bindingsArr.sort((a, b) => a.name.localeCompare(b.name))
|
|
||||||
// this.modelsArr.sort()
|
|
||||||
// this.persCatgArr.sort()
|
|
||||||
// this.persArr.sort()
|
|
||||||
console.log("models_zoo:")
|
|
||||||
console.log(this.models_zoo)
|
|
||||||
|
|
||||||
|
|
||||||
//await this.getPersonalitiesArr()
|
//await this.getPersonalitiesArr()
|
||||||
@ -2069,18 +2077,10 @@ export default {
|
|||||||
this.personalitiesFiltered = this.personalities.filter((item) => item.category === this.configFile.personality_category)
|
this.personalitiesFiltered = this.personalities.filter((item) => item.category === this.configFile.personality_category)
|
||||||
// this.personalitiesFiltered.sort()
|
// this.personalitiesFiltered.sort()
|
||||||
//mountedPersArr
|
//mountedPersArr
|
||||||
console.log("Extensions zoo")
|
|
||||||
console.log(this.$store.state.extensionsZoo)
|
|
||||||
this.modelsFiltered = this.models_zoo
|
this.modelsFiltered = this.models_zoo
|
||||||
this.extension_category = this.configFile.extension_category
|
this.extension_category = this.configFile.extension_category
|
||||||
this.extensionsFiltererd = this.$store.state.extensionsZoo.filter((item) => item.category === this.configFile.extension_category )
|
this.extensionsFiltererd = this.$store.state.extensionsZoo.filter((item) => item.category === this.configFile.extension_category )
|
||||||
console.log("Extensions filtered")
|
|
||||||
console.log(this.extensionsFiltererd)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//this.bindings = await this.api_get_req("list_bindings")
|
|
||||||
// this.bindingsArr.sort((a, b) => a.name.localeCompare(b.name))
|
|
||||||
this.isLoading = false
|
this.isLoading = false
|
||||||
this.isMounted = true
|
this.isMounted = true
|
||||||
|
|
||||||
@ -2314,7 +2314,6 @@ export default {
|
|||||||
|
|
||||||
},
|
},
|
||||||
onSelected(model_object, force=false) {
|
onSelected(model_object, force=false) {
|
||||||
|
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
if (this.isLoading) {
|
if (this.isLoading) {
|
||||||
this.$refs.toast.showToast("Loading... please wait", 4, false)
|
this.$refs.toast.showToast("Loading... please wait", 4, false)
|
||||||
@ -2327,13 +2326,12 @@ export default {
|
|||||||
console.log("update_model",res)
|
console.log("update_model",res)
|
||||||
this.configFile.model_name = model_object.model.name
|
this.configFile.model_name = model_object.model.name
|
||||||
if(res.status){
|
if(res.status){
|
||||||
this.refreshModelsZoo().then(()=>{
|
this.$refs.toast.showToast("Selected model:\n" + model_object.name, 4, true)
|
||||||
this.updateModelsZoo();
|
nextTick(() => {
|
||||||
this.$refs.toast.showToast("Selected model:\n" + model_object.name, 4, true)
|
feather.replace()
|
||||||
nextTick(() => {
|
this.is_loading_zoo = false
|
||||||
feather.replace()
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
self.updateModelsZoo()
|
||||||
}else{
|
}else{
|
||||||
this.$refs.toast.showToast("Couldn't select model:\n" + model_object.name, 4, false)
|
this.$refs.toast.showToast("Couldn't select model:\n" + model_object.name, 4, false)
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
@ -2403,7 +2401,8 @@ export default {
|
|||||||
axios.post("/add_reference_to_local_model",{"path": this.reference_path}).then((resp)=>{
|
axios.post("/add_reference_to_local_model",{"path": this.reference_path}).then((resp)=>{
|
||||||
if(resp.status){
|
if(resp.status){
|
||||||
this.$refs.toast.showToast("Reference created", 4, true)
|
this.$refs.toast.showToast("Reference created", 4, true)
|
||||||
this.refreshModelsZoo().then(()=>{this.updateModelsZoo();})
|
this.is_loading_zoo = true;
|
||||||
|
this.refreshModelsZoo().then(()=>{this.updateModelsZoo(); this.is_loading_zoofalse;})
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
this.$refs.toast.showToast("Couldn't create reference", 4, false)
|
this.$refs.toast.showToast("Couldn't create reference", 4, false)
|
||||||
@ -2538,7 +2537,8 @@ export default {
|
|||||||
model_object.uninstalling = false;
|
model_object.uninstalling = false;
|
||||||
socket.off('install_progress', progressListener);
|
socket.off('install_progress', progressListener);
|
||||||
this.showProgress = false;
|
this.showProgress = false;
|
||||||
this.refreshModelsZoo().then(()=>{this.updateModelsZoo();})
|
this.is_loading_zoo = true;
|
||||||
|
this.refreshModelsZoo().then(()=>{this.updateModelsZoo(); this.is_loading_zoo = false;})
|
||||||
|
|
||||||
this.modelsFiltered = this.models_zoo
|
this.modelsFiltered = this.models_zoo
|
||||||
this.$refs.toast.showToast("Model:\n" + model_object.model.name + "\nwas uninstalled!", 4, true)
|
this.$refs.toast.showToast("Model:\n" + model_object.model.name + "\nwas uninstalled!", 4, true)
|
||||||
@ -2875,17 +2875,22 @@ export default {
|
|||||||
|
|
||||||
},
|
},
|
||||||
async refreshModelsZoo() {
|
async refreshModelsZoo() {
|
||||||
|
this.models_zoo = []
|
||||||
|
console.log("refreshing models")
|
||||||
|
this.is_loading_zoo = true;
|
||||||
await this.$store.dispatch('refreshModelsZoo');
|
await this.$store.dispatch('refreshModelsZoo');
|
||||||
console.log("ModelsZoo refreshed")
|
console.log("ModelsZoo refreshed")
|
||||||
await this.$store.dispatch('refreshModels');
|
await this.$store.dispatch('refreshModels');
|
||||||
console.log("Models refreshed")
|
console.log("Models refreshed")
|
||||||
|
this.updateModelsZoo()
|
||||||
|
console.log("Models updated")
|
||||||
|
this.is_loading_zoo = false;
|
||||||
},
|
},
|
||||||
async updateModelsZoo(){
|
async updateModelsZoo(){
|
||||||
let models_zoo = this.$store.state.modelsZoo
|
let models_zoo = this.$store.state.modelsZoo
|
||||||
if(models_zoo.length==0)
|
if(models_zoo.length==0)
|
||||||
return
|
return
|
||||||
|
|
||||||
console.log("loading models_zoo", models_zoo)
|
|
||||||
let index = models_zoo.findIndex(item => item.name == this.configFile.model_name)
|
let index = models_zoo.findIndex(item => item.name == this.configFile.model_name)
|
||||||
if (index>0){
|
if (index>0){
|
||||||
this.imgModel = models_zoo[index].icon
|
this.imgModel = models_zoo[index].icon
|
||||||
@ -2924,8 +2929,6 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
console.log("models_zoo")
|
|
||||||
|
|
||||||
|
|
||||||
models_zoo.forEach(model => {
|
models_zoo.forEach(model => {
|
||||||
if (model.name == this.$store.state.config["model_name"]) {
|
if (model.name == this.$store.state.config["model_name"]) {
|
||||||
@ -2937,8 +2940,6 @@ export default {
|
|||||||
});
|
});
|
||||||
|
|
||||||
this.models_zoo = models_zoo
|
this.models_zoo = models_zoo
|
||||||
console.log("models_zoo")
|
|
||||||
console.log(this.models_zoo)
|
|
||||||
|
|
||||||
|
|
||||||
// Returns array of model filenames which are = to name of models zoo entry
|
// Returns array of model filenames which are = to name of models zoo entry
|
||||||
@ -2972,7 +2973,7 @@ export default {
|
|||||||
this.models_zoo.push(newModelEntry)
|
this.models_zoo.push(newModelEntry)
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
this.models_zoo[index].isInstalled=true;
|
this.models_zoo[index].isInstalled=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.models_zoo.sort((a, b) => {
|
this.models_zoo.sort((a, b) => {
|
||||||
@ -2995,8 +2996,8 @@ export default {
|
|||||||
this.update_setting('binding_name', value, async (res) => {
|
this.update_setting('binding_name', value, async (res) => {
|
||||||
console.log("updated binding_name")
|
console.log("updated binding_name")
|
||||||
await this.$store.dispatch('refreshConfig');
|
await this.$store.dispatch('refreshConfig');
|
||||||
await this.refreshModelsZoo();
|
this.models_zoo = []
|
||||||
await this.updateModelsZoo();
|
this.mzc_collapsed = true;
|
||||||
const index = this.bindingsArr.findIndex(item => item.folder == value)
|
const index = this.bindingsArr.findIndex(item => item.folder == value)
|
||||||
const item = this.bindingsArr[index]
|
const item = this.bindingsArr[index]
|
||||||
if (item) {
|
if (item) {
|
||||||
@ -3585,7 +3586,6 @@ export default {
|
|||||||
}, async mounted() {
|
}, async mounted() {
|
||||||
console.log("Getting voices")
|
console.log("Getting voices")
|
||||||
this.getVoices();
|
this.getVoices();
|
||||||
this.updateModelsZoo();
|
|
||||||
console.log("Constructing")
|
console.log("Constructing")
|
||||||
this.load_everything()
|
this.load_everything()
|
||||||
},
|
},
|
||||||
@ -3777,7 +3777,7 @@ export default {
|
|||||||
},
|
},
|
||||||
mountedExtensions:{
|
mountedExtensions:{
|
||||||
get() {
|
get() {
|
||||||
return this.$store.state.config.extensions;
|
return this.$store.state.mountedExtensions;
|
||||||
},
|
},
|
||||||
set(value) {
|
set(value) {
|
||||||
this.$store.commit('setActiveExtensions', value);
|
this.$store.commit('setActiveExtensions', value);
|
||||||
|
@ -10,6 +10,10 @@ export default async ({ mode }) => {
|
|||||||
try {
|
try {
|
||||||
const response = await fetch('/get_server_address'); // Replace with the actual endpoint on your Flask server
|
const response = await fetch('/get_server_address'); // Replace with the actual endpoint on your Flask server
|
||||||
const serverAddress = await response.text();
|
const serverAddress = await response.text();
|
||||||
|
if(serverAddress.includes('<')){
|
||||||
|
console.log(`Server address not found`)
|
||||||
|
return process.env.VITE_LOLLMS_API
|
||||||
|
}
|
||||||
console.log(`Server address: ${serverAddress}`)
|
console.log(`Server address: ${serverAddress}`)
|
||||||
return `${serverAddress}`; // Construct the full server address dynamically
|
return `${serverAddress}`; // Construct the full server address dynamically
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit ba1306e8e955b8c8822f0f7f2d4a032d4e4de1d0
|
Subproject commit 0fbc134c58f5e8263adf2d8365646952feb40cb1
|
Loading…
x
Reference in New Issue
Block a user