Skip to content

Commit 5ea69d4

Browse files
authored
Merge pull request #957 from Capsize-Games/devastator
Devastator
2 parents 2702133 + c143921 commit 5ea69d4

21 files changed

+276
-96
lines changed

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
setup(
44
name="airunner",
5-
version="3.1.4",
5+
version="3.1.5",
66
author="Capsize LLC",
77
description="A Stable Diffusion GUI",
88
long_description=open("README.md", "r", encoding="utf-8").read(),
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from typing import Sequence, Union
2+
import os
3+
4+
from alembic import op
5+
import sqlalchemy as sa
6+
from sqlalchemy.dialects import sqlite
7+
8+
# revision identifiers, used by Alembic.
9+
revision: str = '75020956e3e2'
10+
down_revision: Union[str, None] = '26a0d29a3af3'
11+
branch_labels: Union[str, Sequence[str], None] = None
12+
depends_on: Union[str, Sequence[str], None] = None
13+
14+
def convert_image_to_binary(image_path):
15+
with open(image_path, 'rb') as file:
16+
binary_data = file.read()
17+
return binary_data
18+
19+
def upgrade():
20+
try:
21+
op.create_table(
22+
'users',
23+
sa.Column('id', sa.Integer, primary_key=True, autoincrement=True),
24+
sa.Column('username', sa.String, nullable=False),
25+
)
26+
op.execute(
27+
sa.text("INSERT INTO users (username) VALUES ('User')")
28+
)
29+
except Exception as e:
30+
print(f"Error during upgrade: {e}")
31+
32+
try:
33+
op.drop_column('chatbots', 'username')
34+
except Exception as e:
35+
print(f"Column already dropped: {e}")
36+
37+
def downgrade():
38+
try:
39+
op.add_column('chatbots', sa.Column('username', sa.String, nullable=True))
40+
except Exception as e:
41+
print(f"Column already exists: {e}")
42+
43+
try:
44+
op.drop_table('users')
45+
except Exception as e:
46+
print(f"Table already dropped: {e}")
47+
# ### end Alembic commands ###

src/airunner/data/models/settings_models.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,6 @@ class Chatbot(Base):
345345
__tablename__ = 'chatbots'
346346
id = Column(Integer, primary_key=True, autoincrement=True)
347347
name = Column(String, default="Chatbot")
348-
username = Column(String, default="User")
349348
botname = Column(String, default="Computer")
350349
use_personality = Column(Boolean, default=True)
351350
use_mood = Column(Boolean, default=True)
@@ -390,6 +389,12 @@ class Chatbot(Base):
390389
messages = relationship("Message", back_populates="chatbot")
391390

392391

392+
class User(Base):
393+
__tablename__ = 'users'
394+
id = Column(Integer, primary_key=True, autoincrement=True)
395+
username = Column(String, nullable=False)
396+
397+
393398
class TargetFiles(Base):
394399
__tablename__ = 'target_files'
395400
id = Column(Integer, primary_key=True, autoincrement=True)

src/airunner/handlers/llm/agent/base_agent.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ def available_actions(self):
130130

131131
@property
132132
def username(self) -> str:
133-
return self.chatbot.username
133+
return self.user.username
134134

135135
@property
136136
def botname(self) -> str:
@@ -327,7 +327,7 @@ def build_system_prompt(
327327
use_guardrails = self.chatbot.use_guardrails
328328
bot_mood = self.bot_mood
329329
bot_personality = self.chatbot.bot_personality
330-
username = self.chatbot.username
330+
username = self.user.username
331331
botname = self.chatbot.botname
332332
if use_system_instructions:
333333
system_instructions = self.chatbot.system_instructions

src/airunner/handlers/llm/causal_lm_transformer_base_handler.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,7 @@ def chat_template(self):
103103

104104
@property
105105
def username(self):
106-
if self.chatbot.assign_names:
107-
return self.chatbot.username
108-
return "User"
106+
return self.user.username
109107

110108
@property
111109
def botname(self):

src/airunner/styles/dark_theme/styles.qss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -752,3 +752,7 @@ QScrollArea#chat_container #message_container QPushButton:hover {
752752
background-color: #000;
753753
border: 1px solid #1f1f1f;
754754
}
755+
756+
#image {
757+
border: 1px solid #1f1f1f;
758+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from PIL import Image
2+
from PIL.ImageQt import QImage
3+
4+
5+
def pil_to_qimage(pil_image):
6+
if pil_image.mode == "RGB":
7+
r, g, b = pil_image.split()
8+
pil_image = Image.merge("RGBA", (r, g, b, Image.new("L", r.size, 255)))
9+
elif pil_image.mode == "L":
10+
pil_image = pil_image.convert("RGBA")
11+
data = pil_image.tobytes("raw", "RGBA")
12+
qimage = QImage(data, pil_image.size[0], pil_image.size[1], QImage.Format.Format_RGBA8888)
13+
return qimage
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from PIL.ImageQt import QPixmap
2+
3+
from airunner.utils.convert_pil_to_qimage import pil_to_qimage
4+
5+
6+
def convert_pil_to_qpixmap(image):
7+
qimage = pil_to_qimage(image)
8+
pixmap = QPixmap.fromImage(qimage)
9+
return pixmap

src/airunner/utils/toggle_signals.py

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/airunner/widgets/llm/bot_preferences.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from airunner.data.models.settings_models import TargetFiles, Chatbot
55
from airunner.enums import SignalCode
66
from airunner.utils.open_file_path import open_file_path
7-
from airunner.utils.toggle_signals import toggle_signals
87
from airunner.widgets.base_widget import BaseWidget
98
from airunner.widgets.llm.document_widget import DocumentWidget
109
from airunner.widgets.llm.templates.bot_preferences_ui import Ui_bot_preferences
@@ -22,7 +21,6 @@ def showEvent(self, event):
2221

2322
def load_form_elements(self):
2423
elements = [
25-
"username",
2624
"botname",
2725
"bot_personality",
2826
"names_groupbox",
@@ -33,8 +31,7 @@ def load_form_elements(self):
3331
"guardrails_groupbox",
3432
"target_files",
3533
]
36-
toggle_signals(self.ui, elements)
37-
self.ui.username.setText(self.chatbot.username)
34+
self.toggle_signals(self.ui, elements)
3835
self.ui.botname.setText(self.chatbot.botname)
3936
self.ui.bot_personality.setPlainText(self.chatbot.bot_personality)
4037
self.ui.names_groupbox.setChecked(self.chatbot.assign_names)
@@ -44,10 +41,12 @@ def load_form_elements(self):
4441
self.ui.guardrails_prompt.setPlainText(self.chatbot.guardrails_prompt)
4542
self.ui.guardrails_groupbox.setChecked(self.chatbot.use_guardrails)
4643
self.load_documents()
47-
toggle_signals(self.ui, elements, False)
44+
self.toggle_signals(self.ui, elements, False)
4845

49-
def username_changed(self, val):
50-
self.update_chatbot("username", val)
46+
@staticmethod
47+
def toggle_signals(ui: object, elements: list, block: bool = True):
48+
for element in elements:
49+
getattr(ui, element).blockSignals(block)
5150

5251
def botname_changed(self, val):
5352
self.update_chatbot("botname", val)

src/airunner/widgets/llm/chat_prompt_widget.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ def do_generate(self, image_override=None, prompt_override=None, callback=None,
192192
self.generating = True
193193

194194
widget = self.add_message_to_conversation(
195-
name=self.chatbot.username,
195+
name=self.user.username,
196196
message=self.prompt,
197197
is_bot=False
198198
)
@@ -338,7 +338,13 @@ def add_message_to_conversation(
338338

339339
widget = None
340340
if message != "":
341-
widget = MessageWidget(name=name, message=message, is_bot=is_bot, message_id=message_id, conversation_id=self.conversation_id)
341+
widget = MessageWidget(
342+
name=name,
343+
message=message,
344+
is_bot=is_bot,
345+
message_id=message_id,
346+
conversation_id=self.conversation_id
347+
)
342348
self.ui.scrollAreaWidgetContents.layout().addWidget(widget)
343349

344350
self.add_spacer()

src/airunner/widgets/llm/llm_history_widget.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ def load_conversations(self):
4343
self.ui.scrollAreaWidgetContents.setLayout(layout)
4444

4545
for conversation in conversations:
46+
if conversation.title == "":
47+
continue
4648
llm_history_item_widget = LLMHistoryItemWidget(
4749
conversation=conversation
4850
)

src/airunner/widgets/llm/message_widget.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
from airunner.data.models.settings_models import Message, Conversation
1+
from airunner.data.models.settings_models import Message
22
from airunner.enums import SignalCode
33
from airunner.widgets.base_widget import BaseWidget
44
from airunner.widgets.llm.templates.message_ui import Ui_message
55

6-
from PySide6.QtGui import QTextCursor, QFontDatabase, QFont
6+
from PySide6.QtGui import QFontDatabase, QFont
77
from PySide6.QtWidgets import QTextEdit, QApplication, QWidget
88
from PySide6.QtGui import QFontMetrics
9-
from PySide6.QtCore import Qt, QSize, Slot, QEvent, QTimer
9+
from PySide6.QtCore import Qt, QSize, Slot, QEvent
1010
from PySide6.QtCore import Signal
1111

1212

src/airunner/widgets/llm/templates/bot_preferences.ui

Lines changed: 5 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -166,32 +166,6 @@
166166
</item>
167167
</layout>
168168
</item>
169-
<item>
170-
<layout class="QVBoxLayout" name="verticalLayout_5">
171-
<item>
172-
<widget class="QLabel" name="label_3">
173-
<property name="font">
174-
<font>
175-
<bold>true</bold>
176-
</font>
177-
</property>
178-
<property name="text">
179-
<string>User name</string>
180-
</property>
181-
</widget>
182-
</item>
183-
<item>
184-
<widget class="QLineEdit" name="username">
185-
<property name="text">
186-
<string>User</string>
187-
</property>
188-
<property name="placeholderText">
189-
<string>User name</string>
190-
</property>
191-
</widget>
192-
</item>
193-
</layout>
194-
</item>
195169
</layout>
196170
</widget>
197171
</item>
@@ -353,22 +327,6 @@
353327
</widget>
354328
<resources/>
355329
<connections>
356-
<connection>
357-
<sender>username</sender>
358-
<signal>textChanged(QString)</signal>
359-
<receiver>bot_preferences</receiver>
360-
<slot>username_changed(QString)</slot>
361-
<hints>
362-
<hint type="sourcelabel">
363-
<x>674</x>
364-
<y>460</y>
365-
</hint>
366-
<hint type="destinationlabel">
367-
<x>55</x>
368-
<y>0</y>
369-
</hint>
370-
</hints>
371-
</connection>
372330
<connection>
373331
<sender>botname</sender>
374332
<signal>textChanged(QString)</signal>
@@ -392,8 +350,8 @@
392350
<slot>bot_personality_changed()</slot>
393351
<hints>
394352
<hint type="sourcelabel">
395-
<x>392</x>
396-
<y>971</y>
353+
<x>404</x>
354+
<y>1105</y>
397355
</hint>
398356
<hint type="destinationlabel">
399357
<x>292</x>
@@ -425,7 +383,7 @@
425383
<hints>
426384
<hint type="sourcelabel">
427385
<x>108</x>
428-
<y>916</y>
386+
<y>995</y>
429387
</hint>
430388
<hint type="destinationlabel">
431389
<x>0</x>
@@ -440,8 +398,8 @@
440398
<slot>guardrails_prompt_changed()</slot>
441399
<hints>
442400
<hint type="sourcelabel">
443-
<x>202</x>
444-
<y>765</y>
401+
<x>214</x>
402+
<y>836</y>
445403
</hint>
446404
<hint type="destinationlabel">
447405
<x>1</x>
@@ -579,7 +537,6 @@
579537
</connection>
580538
</connections>
581539
<slots>
582-
<slot>username_changed(QString)</slot>
583540
<slot>botname_changed(QString)</slot>
584541
<slot>bot_personality_changed()</slot>
585542
<slot>toggle_use_names(bool)</slot>

src/airunner/widgets/llm/templates/bot_preferences_ui.py

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -103,22 +103,6 @@ def setupUi(self, bot_preferences):
103103

104104
self.horizontalLayout.addLayout(self.verticalLayout_6)
105105

106-
self.verticalLayout_5 = QVBoxLayout()
107-
self.verticalLayout_5.setObjectName(u"verticalLayout_5")
108-
self.label_3 = QLabel(self.names_groupbox)
109-
self.label_3.setObjectName(u"label_3")
110-
self.label_3.setFont(font)
111-
112-
self.verticalLayout_5.addWidget(self.label_3)
113-
114-
self.username = QLineEdit(self.names_groupbox)
115-
self.username.setObjectName(u"username")
116-
117-
self.verticalLayout_5.addWidget(self.username)
118-
119-
120-
self.horizontalLayout.addLayout(self.verticalLayout_5)
121-
122106

123107
self.gridLayout.addWidget(self.names_groupbox, 3, 0, 1, 1)
124108

@@ -213,7 +197,6 @@ def setupUi(self, bot_preferences):
213197

214198

215199
self.retranslateUi(bot_preferences)
216-
self.username.textChanged.connect(bot_preferences.username_changed)
217200
self.botname.textChanged.connect(bot_preferences.botname_changed)
218201
self.bot_personality.textChanged.connect(bot_preferences.bot_personality_changed)
219202
self.names_groupbox.toggled.connect(bot_preferences.toggle_use_names)
@@ -242,9 +225,6 @@ def retranslateUi(self, bot_preferences):
242225
self.label.setText(QCoreApplication.translate("bot_preferences", u"Assistant name", None))
243226
self.botname.setText(QCoreApplication.translate("bot_preferences", u"AI Runner", None))
244227
self.botname.setPlaceholderText(QCoreApplication.translate("bot_preferences", u"Bot name", None))
245-
self.label_3.setText(QCoreApplication.translate("bot_preferences", u"User name", None))
246-
self.username.setText(QCoreApplication.translate("bot_preferences", u"User", None))
247-
self.username.setPlaceholderText(QCoreApplication.translate("bot_preferences", u"User name", None))
248228
self.guardrails_groupbox.setTitle(QCoreApplication.translate("bot_preferences", u"Guardrails", None))
249229
self.guardrails_prompt.setPlaceholderText(QCoreApplication.translate("bot_preferences", u"The guardrails prompt is used to moderate results.", None))
250230
self.groupBox.setTitle(QCoreApplication.translate("bot_preferences", u"Existing Agents", None))

src/airunner/widgets/llm/templates/message.ui

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,8 @@
147147
<slot>delete()</slot>
148148
<hints>
149149
<hint type="sourcelabel">
150-
<x>435</x>
151-
<y>19</y>
150+
<x>485</x>
151+
<y>30</y>
152152
</hint>
153153
<hint type="destinationlabel">
154154
<x>391</x>
@@ -163,8 +163,8 @@
163163
<slot>copy()</slot>
164164
<hints>
165165
<hint type="sourcelabel">
166-
<x>469</x>
167-
<y>28</y>
166+
<x>452</x>
167+
<y>34</y>
168168
</hint>
169169
<hint type="destinationlabel">
170170
<x>451</x>

0 commit comments

Comments
 (0)