Added saving the model and the personality full path

This commit is contained in:
Saifeddine ALOUI 2023-06-15 00:26:12 +02:00
parent 695b4a9bc6
commit 2077fa0042
10 changed files with 117 additions and 73 deletions

View File

@ -575,7 +575,8 @@ class LoLLMsAPPI():
message = data["prompt"] message = data["prompt"]
message_id = self.current_discussion.add_message( message_id = self.current_discussion.add_message(
"user", message, parent=self.message_id "user", message, parent=self.message_id,model = self.config["model_name"],
personality=self.config["personalities"][self.config["active_personality_id"]]
) )
self.current_user_message_id = message_id self.current_user_message_id = message_id
@ -675,7 +676,8 @@ class LoLLMsAPPI():
self.personality.name, self.personality.welcome_message, self.personality.name, self.personality.welcome_message,
DiscussionsDB.MSG_TYPE_NORMAL, DiscussionsDB.MSG_TYPE_NORMAL,
0, 0,
-1 -1,model = self.config["model_name"],
personality=self.config["personalities"][self.config["active_personality_id"]]
) )
self.current_ai_message_id = message_id self.current_ai_message_id = message_id

View File

@ -20,7 +20,7 @@ class DiscussionsDB:
""" """
create database schema create database schema
""" """
db_version = 3 db_version = 4
# Verify encoding and change it if it is not complient # Verify encoding and change it if it is not complient
with sqlite3.connect(self.db_path) as conn: with sqlite3.connect(self.db_path) as conn:
# Execute a PRAGMA statement to get the current encoding of the database # Execute a PRAGMA statement to get the current encoding of the database
@ -65,6 +65,8 @@ class DiscussionsDB:
cursor.execute(""" cursor.execute("""
CREATE TABLE message ( CREATE TABLE message (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
model TEXT,
personality TEXT,
sender TEXT NOT NULL, sender TEXT NOT NULL,
content TEXT NOT NULL, content TEXT NOT NULL,
type INT NOT NULL, type INT NOT NULL,
@ -101,6 +103,9 @@ class DiscussionsDB:
cursor.execute("ALTER TABLE message ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP") # Added in V3 cursor.execute("ALTER TABLE message ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP") # Added in V3
cursor.execute("ALTER TABLE discussion ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP") # Added in V3 cursor.execute("ALTER TABLE discussion ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP") # Added in V3
cursor.execute("ALTER TABLE message ADD COLUMN model TEXT DEFAULT ''") # Added in V4
cursor.execute("ALTER TABLE message ADD COLUMN personality INT DEFAULT ''") # Added in V4
# Upgrade the schema to version 1 # Upgrade the schema to version 1
elif version < 2: elif version < 2:
print(f"Upgrading schema to version {db_version}...") print(f"Upgrading schema to version {db_version}...")
@ -110,6 +115,9 @@ class DiscussionsDB:
cursor.execute("ALTER TABLE message ADD COLUMN parent INT DEFAULT 0") # Added in V2 cursor.execute("ALTER TABLE message ADD COLUMN parent INT DEFAULT 0") # Added in V2
cursor.execute("ALTER TABLE message ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP") # Added in V3 cursor.execute("ALTER TABLE message ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP") # Added in V3
cursor.execute("ALTER TABLE discussion ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP") # Added in V3 cursor.execute("ALTER TABLE discussion ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP") # Added in V3
cursor.execute("ALTER TABLE message ADD COLUMN model TEXT DEFAULT ''") # Added in V4
cursor.execute("ALTER TABLE message ADD COLUMN personality INT DEFAULT ''") # Added in V4
except : except :
pass pass
# Upgrade the schema to version 1 # Upgrade the schema to version 1
@ -120,6 +128,20 @@ class DiscussionsDB:
try: try:
cursor.execute("ALTER TABLE message ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP") # Added in V3 cursor.execute("ALTER TABLE message ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP") # Added in V3
cursor.execute("ALTER TABLE discussion ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP") # Added in V3 cursor.execute("ALTER TABLE discussion ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP") # Added in V3
cursor.execute("ALTER TABLE message ADD COLUMN model TEXT DEFAULT ''") # Added in V4
cursor.execute("ALTER TABLE message ADD COLUMN personality INT DEFAULT ''") # Added in V4
except :
pass
# Upgrade the schema to version 1
elif version < 4:
print(f"Upgrading schema to version {db_version}...")
# Add the 'created_at' column to the 'message' table
if message_table_exist:
try:
cursor.execute("ALTER TABLE message ADD COLUMN model TEXT DEFAULT ''") # Added in V4
cursor.execute("ALTER TABLE message ADD COLUMN personality INT DEFAULT ''") # Added in V4
except : except :
pass pass
# Update the schema version # Update the schema version
@ -311,7 +333,7 @@ class Discussion:
self.discussion_id = discussion_id self.discussion_id = discussion_id
self.discussions_db = discussions_db self.discussions_db = discussions_db
def add_message(self, sender, content, message_type=0, rank=0, parent=0): def add_message(self, sender, content, message_type=0, rank=0, parent=0, model ="", personality=""):
"""Adds a new message to the discussion """Adds a new message to the discussion
Args: Args:
@ -322,8 +344,8 @@ class Discussion:
int: The added message id int: The added message id
""" """
message_id = self.discussions_db.insert( message_id = self.discussions_db.insert(
"INSERT INTO message (sender, content, type, rank, parent, discussion_id) VALUES (?, ?, ?, ?, ?, ?)", "INSERT INTO message (sender, content, type, rank, parent, model, personality, discussion_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
(sender, content, message_type, rank, parent, self.discussion_id) (sender, content, message_type, rank, parent, model, personality, self.discussion_id)
) )
return message_id return message_id
@ -354,10 +376,10 @@ class Discussion:
list: List of entries in the format {"id":message id, "sender":sender name, "content":message content, "type":message type, "rank": message rank} list: List of entries in the format {"id":message id, "sender":sender name, "content":message content, "type":message type, "rank": message rank}
""" """
rows = self.discussions_db.select( rows = self.discussions_db.select(
"SELECT * FROM message WHERE discussion_id=?", (self.discussion_id,) "SELECT id, sender, content, type, rank, parent, model, personality FROM message WHERE discussion_id=?", (self.discussion_id,)
) )
return [{"id": row[0], "sender": row[1], "content": row[2], "type": row[3], "rank": row[4], "parent": row[5]} for row in rows] return [{"id": row[0], "sender": row[1], "content": row[2], "type": row[3], "rank": row[4], "parent": row[5], "model": row[6], "personality": row[7]} for row in rows]
def update_message(self, message_id, new_content): def update_message(self, message_id, new_content):
"""Updates the content of a message """Updates the content of a message

13
app.py
View File

@ -506,7 +506,7 @@ class LoLLMsWebUI(LoLLMsAPPI):
drive_disk_usage = psutil.disk_usage(current_drive) drive_disk_usage = psutil.disk_usage(current_drive)
try: try:
models_folder_disk_usage = psutil.disk_usage(str(self.lollms_paths.personal_models_path/f'{self.config["binding_name"]}')) models_folder_disk_usage = psutil.disk_usage(str(self.lollms_paths.personal_models_path/f'{self.config["binding_name"]}'))
return jsonify({ return jsonify( {
"total_space":drive_disk_usage.total, "total_space":drive_disk_usage.total,
"available_space":drive_disk_usage.free, "available_space":drive_disk_usage.free,
"usage":drive_disk_usage.used, "usage":drive_disk_usage.used,
@ -777,11 +777,12 @@ class LoLLMsWebUI(LoLLMsAPPI):
if self.config["active_personality_id"]>=index: if self.config["active_personality_id"]>=index:
self.config["active_personality_id"]=0 self.config["active_personality_id"]=0
if len(self.config["personalities"])>0: if len(self.config["personalities"])>0:
self.personalities = self.process.rebuild_personalities() self.mounted_personalities = self.process.rebuild_personalities()
self.personality = self.mounted_personalities[self.config["active_personality_id"]] self.personality = self.mounted_personalities[self.config["active_personality_id"]]
else: else:
self.personalities = [] self.personalities = ["english/generic/lollms"]
self.personality = None self.mounted_personalities = self.process.rebuild_personalities()
self.personality = self.mounted_personalities[self.config["active_personality_id"]]
self.apply_settings() self.apply_settings()
ASCIIColors.success("ok") ASCIIColors.success("ok")
return jsonify({ return jsonify({
@ -790,14 +791,14 @@ class LoLLMsWebUI(LoLLMsAPPI):
"active_personality_id":self.config["active_personality_id"] "active_personality_id":self.config["active_personality_id"]
}) })
except: except:
ASCIIColors.error(f"nok : Personality not found @ {pth}") ASCIIColors.error(f"nok : Personality not found @ {language}/{category}/{name}")
return jsonify({"status": False, "error":"Couldn't unmount personality"}) return jsonify({"status": False, "error":"Couldn't unmount personality"})
def select_personality(self): def select_personality(self):
print("- Selecting active personality ...",end="")
data = request.get_json() data = request.get_json()
id = data['id'] id = data['id']
print(f"- Selecting active personality {id} ...",end="")
if id<len(self.config["personalities"]): if id<len(self.config["personalities"]):
self.config["active_personality_id"]=id self.config["active_personality_id"]=id
self.personality = self.mounted_personalities[self.config["active_personality_id"]] self.personality = self.mounted_personalities[self.config["active_personality_id"]]

View File

@ -1,7 +1,7 @@
# =================== Lord Of Large Language Models Configuration file =========================== # =================== Lord Of Large Language Models Configuration file ===========================
version: 7 version: 7
binding_name: llama_cpp_official binding_name: gpt4all
model_name: airoboros-13b-gpt4.ggmlv3.q4_0.bin model_name: ggml-gpt4all-j-v1.3-groovy.bin
# Host information # Host information
host: localhost host: localhost

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
web/dist/assets/index-d5a22ec2.css vendored Normal file

File diff suppressed because one or more lines are too long

4
web/dist/index.html vendored
View File

@ -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>GPT4All - WEBUI</title> <title>GPT4All - WEBUI</title>
<script type="module" crossorigin src="/assets/index-5f487c0a.js"></script> <script type="module" crossorigin src="/assets/index-5903b487.js"></script>
<link rel="stylesheet" href="/assets/index-3a0806cb.css"> <link rel="stylesheet" href="/assets/index-d5a22ec2.css">
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>

View File

@ -12,8 +12,11 @@
<div class="flex flex-row flex-grow items-start "> <div class="flex flex-row flex-grow items-start ">
<!-- SENDER NAME --> <!-- SENDER NAME -->
<div class="flex "> <div class="flex ">
<p class="drop-shadow-sm text-lg text-opacity-95 font-bold grow ">{{ message.sender }}</p> <p class="drop-shadow-sm text-lg text-opacity-95 font-bold grow ">{{ message.sender }}</p>
<button @click="toggleModel" class="expand-button">{{ expanded ? ' - ' : ' + ' }}</button>
<p v-if="expanded" class="drop-shadow-sm text-lg text-opacity-95 font-bold grow">
{{ message.model }}
</p>
</div> </div>
<div class="flex-grow "> <div class="flex-grow ">
@ -100,7 +103,17 @@
</div> </div>
</template> </template>
<style>
.expand-button {
margin-left: 10px; /* Add space between sender and expand button */
margin-right: 10px; /* Add space between sender and expand button */
background: none;
border: none;
padding: 0;
cursor: pointer;
}
</style>
<script> <script>
import botImgPlaceholder from "../assets/logo.svg" import botImgPlaceholder from "../assets/logo.svg"
import userImgPlaceholder from "../assets/default_user.svg" import userImgPlaceholder from "../assets/default_user.svg"
@ -121,7 +134,7 @@ export default {
}, },
data() { data() {
return { return {
expanded: false,
new_message_content: '', new_message_content: '',
showConfirmation: false, showConfirmation: false,
@ -142,6 +155,9 @@ export default {
}) })
}, methods: { }, methods: {
toggleModel() {
this.expanded = !this.expanded;
},
copyContentToClipboard() { copyContentToClipboard() {
this.$emit('copy', this.message.content) this.$emit('copy', this.message.content)

View File

@ -1432,7 +1432,8 @@ export default {
const lastPers = this.mountedPersArr[this.mountedPersArr.length - 1] const lastPers = this.mountedPersArr[this.mountedPersArr.length - 1]
console.log(lastPers, this.mountedPersArr.length) console.log(lastPers, this.mountedPersArr.length)
const res2 = await this.select_personality(lastPers.personality) // const res2 = await this.select_personality(lastPers.personality)
const res2 = await this.select_personality(pers.personality)
if (res2.status) { if (res2.status) {
this.$refs.toast.showToast("Selected personality:\n" + lastPers.name, 4, true) this.$refs.toast.showToast("Selected personality:\n" + lastPers.name, 4, true)
@ -1448,22 +1449,20 @@ export default {
getMountedPersonalities() { getMountedPersonalities() {
let mountedPersArr = [] let mountedPersArr = []
if (this.configFile.personalities.length > 0) { console.log(this.configFile.personalities.length)
// console.log('perrs listo',this.personalities)
for (let i = 0; i < this.configFile.personalities.length; i++) { for (let i = 0; i < this.configFile.personalities.length; i++) {
const full_path_item = this.configFile.personalities[i] const full_path_item = this.configFile.personalities[i]
//console.log('perrs listo',this.personalities) const index = this.personalities.findIndex(item => item.full_path == full_path_item)
const index = this.personalities.findIndex(item => item.full_path == full_path_item) console.log('index',index)
if (index) { console.log("i:",i)
const pers = this.personalities[index]
const pers = this.personalities[index] if (pers) {
if (pers) { mountedPersArr.push(pers)
mountedPersArr.push(pers) }
else{
} mountedPersArr.push(this.personalities[this.personalities.findIndex(item => item.full_path == "english/generic/lollms")])
}
} }
} }
this.mountedPersArr = [] this.mountedPersArr = []
this.mountedPersArr = mountedPersArr this.mountedPersArr = mountedPersArr