mirror of https://github.com/leafspark/AutoGGUF
refactor: move functions out of AutoGGUF.py
- relocate functions into utils.py and TaskListItem.py
This commit is contained in:
parent
e307a4d3b5
commit
6583412b76
101
src/AutoGGUF.py
101
src/AutoGGUF.py
|
@ -1,36 +1,34 @@
|
|||
import importlib
|
||||
import json
|
||||
import re
|
||||
import shutil
|
||||
import importlib
|
||||
|
||||
from functools import partial
|
||||
from datetime import datetime
|
||||
from typing import Tuple, Dict, List, Any
|
||||
from dotenv import load_dotenv
|
||||
from functools import partial
|
||||
from typing import Any, Dict, List, Tuple
|
||||
|
||||
import requests
|
||||
from PySide6.QtCore import *
|
||||
from PySide6.QtGui import *
|
||||
from PySide6.QtWidgets import *
|
||||
from dotenv import load_dotenv
|
||||
|
||||
from GPUMonitor import GPUMonitor
|
||||
from KVOverrideEntry import KVOverrideEntry
|
||||
from Logger import Logger
|
||||
from ModelInfoDialog import ModelInfoDialog
|
||||
import lora_conversion
|
||||
import presets
|
||||
import ui_update
|
||||
import utils
|
||||
from CustomTitleBar import CustomTitleBar
|
||||
from error_handling import show_error, handle_error
|
||||
from TaskListItem import TaskListItem
|
||||
from GPUMonitor import GPUMonitor
|
||||
from Localizations import *
|
||||
from Logger import Logger
|
||||
from QuantizationThread import QuantizationThread
|
||||
from TaskListItem import TaskListItem
|
||||
from error_handling import handle_error, show_error
|
||||
from imports_and_globals import (
|
||||
ensure_directory,
|
||||
open_file_safe,
|
||||
resource_path,
|
||||
show_about,
|
||||
ensure_directory,
|
||||
)
|
||||
from Localizations import *
|
||||
import presets
|
||||
import ui_update
|
||||
import lora_conversion
|
||||
import utils
|
||||
import requests
|
||||
|
||||
|
||||
class AutoGGUF(QMainWindow):
|
||||
|
@ -93,8 +91,13 @@ def __init__(self, args: List[str]) -> None:
|
|||
self.browse_imatrix = utils.browse_imatrix.__get__(self)
|
||||
self.get_models_data = utils.get_models_data.__get__(self)
|
||||
self.get_tasks_data = utils.get_tasks_data.__get__(self)
|
||||
self.add_kv_override = partial(utils.add_kv_override, self)
|
||||
self.remove_kv_override = partial(utils.remove_kv_override, self)
|
||||
self.cancel_task = partial(TaskListItem.cancel_task, self)
|
||||
self.delete_task = partial(TaskListItem.delete_task, self)
|
||||
self.show_task_context_menu = partial(TaskListItem.show_task_context_menu, self)
|
||||
self.show_task_properties = partial(TaskListItem.show_task_properties, self)
|
||||
self.cancel_task_by_item = partial(TaskListItem.cancel_task_by_item, self)
|
||||
self.toggle_gpu_offload_auto = partial(ui_update.toggle_gpu_offload_auto, self)
|
||||
self.update_threads_spinbox = partial(ui_update.update_threads_spinbox, self)
|
||||
self.update_threads_slider = partial(ui_update.update_threads_slider, self)
|
||||
|
@ -1171,51 +1174,6 @@ def download_error(self, error_message) -> None:
|
|||
if os.path.exists(partial_file):
|
||||
os.remove(partial_file)
|
||||
|
||||
def show_task_context_menu(self, position) -> None:
|
||||
self.logger.debug(SHOWING_TASK_CONTEXT_MENU)
|
||||
item = self.task_list.itemAt(position)
|
||||
if item is not None:
|
||||
context_menu = QMenu(self)
|
||||
|
||||
properties_action = QAction(PROPERTIES, self)
|
||||
properties_action.triggered.connect(lambda: self.show_task_properties(item))
|
||||
context_menu.addAction(properties_action)
|
||||
|
||||
task_item = self.task_list.itemWidget(item)
|
||||
if task_item.status != COMPLETED:
|
||||
cancel_action = QAction(CANCEL, self)
|
||||
cancel_action.triggered.connect(lambda: self.cancel_task(item))
|
||||
context_menu.addAction(cancel_action)
|
||||
|
||||
if task_item.status == CANCELED:
|
||||
restart_action = QAction(RESTART, self)
|
||||
restart_action.triggered.connect(lambda: self.restart_task(task_item))
|
||||
context_menu.addAction(restart_action)
|
||||
|
||||
delete_action = QAction(DELETE, self)
|
||||
delete_action.triggered.connect(lambda: self.delete_task(item))
|
||||
context_menu.addAction(delete_action)
|
||||
|
||||
context_menu.exec(self.task_list.viewport().mapToGlobal(position))
|
||||
|
||||
def show_task_properties(self, item) -> None:
|
||||
self.logger.debug(SHOWING_PROPERTIES_FOR_TASK.format(item.text()))
|
||||
task_item = self.task_list.itemWidget(item)
|
||||
for thread in self.quant_threads:
|
||||
if thread.log_file == task_item.log_file:
|
||||
model_info_dialog = ModelInfoDialog(thread.model_info, self)
|
||||
model_info_dialog.exec()
|
||||
break
|
||||
|
||||
def cancel_task_by_item(self, item) -> None:
|
||||
task_item = self.task_list.itemWidget(item)
|
||||
for thread in self.quant_threads:
|
||||
if thread.log_file == task_item.log_file:
|
||||
thread.terminate()
|
||||
task_item.update_status(CANCELED)
|
||||
self.quant_threads.remove(thread)
|
||||
break
|
||||
|
||||
def create_label(self, text, tooltip) -> QLabel:
|
||||
label = QLabel(text)
|
||||
label.setToolTip(tooltip)
|
||||
|
@ -1337,23 +1295,6 @@ def validate_quantization_inputs(self) -> None:
|
|||
if errors:
|
||||
raise ValueError("\n".join(errors))
|
||||
|
||||
def add_kv_override(self, override_string=None) -> None:
|
||||
entry = KVOverrideEntry()
|
||||
entry.deleted.connect(self.remove_kv_override)
|
||||
if override_string:
|
||||
key, value = override_string.split("=")
|
||||
type_, val = value.split(":")
|
||||
entry.key_input.setText(key)
|
||||
entry.type_combo.setCurrentText(type_)
|
||||
entry.value_input.setText(val)
|
||||
self.kv_override_layout.addWidget(entry)
|
||||
self.kv_override_entries.append(entry)
|
||||
|
||||
def remove_kv_override(self, entry) -> None:
|
||||
self.kv_override_layout.removeWidget(entry)
|
||||
self.kv_override_entries.remove(entry)
|
||||
entry.deleteLater()
|
||||
|
||||
def quantize_model(self) -> None:
|
||||
self.logger.info(STARTING_MODEL_QUANTIZATION)
|
||||
try:
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
from PySide6.QtCore import *
|
||||
from PySide6.QtGui import QAction
|
||||
from PySide6.QtWidgets import *
|
||||
|
||||
from Localizations import (
|
||||
|
@ -6,7 +7,16 @@
|
|||
CANCELLING_TASK,
|
||||
CONFIRM_DELETION_TITLE,
|
||||
CONFIRM_DELETION,
|
||||
SHOWING_TASK_CONTEXT_MENU,
|
||||
CANCELED,
|
||||
CANCEL,
|
||||
PROPERTIES,
|
||||
COMPLETED,
|
||||
SHOWING_PROPERTIES_FOR_TASK,
|
||||
DELETE,
|
||||
RESTART,
|
||||
)
|
||||
from ModelInfoDialog import ModelInfoDialog
|
||||
|
||||
|
||||
class TaskListItem(QWidget):
|
||||
|
@ -37,6 +47,52 @@ def __init__(
|
|||
self.progress_timer.timeout.connect(self.update_progress)
|
||||
self.progress_value = 0
|
||||
|
||||
def show_task_context_menu(self, position) -> None:
|
||||
self.logger.debug(SHOWING_TASK_CONTEXT_MENU)
|
||||
item = self.task_list.itemAt(position)
|
||||
if item is not None:
|
||||
context_menu = QMenu(self)
|
||||
|
||||
properties_action = QAction(PROPERTIES, self)
|
||||
properties_action.triggered.connect(lambda: self.show_task_properties(item))
|
||||
context_menu.addAction(properties_action)
|
||||
|
||||
task_item = self.task_list.itemWidget(item)
|
||||
if task_item.status != COMPLETED:
|
||||
cancel_action = QAction(CANCEL, self)
|
||||
cancel_action.triggered.connect(lambda: self.cancel_task(item))
|
||||
context_menu.addAction(cancel_action)
|
||||
|
||||
if task_item.status == CANCELED:
|
||||
restart_action = QAction(RESTART, self)
|
||||
restart_action.triggered.connect(lambda: self.restart_task(task_item))
|
||||
context_menu.addAction(restart_action)
|
||||
|
||||
delete_action = QAction(DELETE, self)
|
||||
delete_action.triggered.connect(lambda: self.delete_task(item))
|
||||
context_menu.addAction(delete_action)
|
||||
|
||||
context_menu.exec(self.task_list.viewport().mapToGlobal(position))
|
||||
|
||||
def show_task_properties(self, item) -> None:
|
||||
self.logger.debug(SHOWING_PROPERTIES_FOR_TASK.format(item.text()))
|
||||
task_item = self.task_list.itemWidget(item)
|
||||
for thread in self.quant_threads:
|
||||
if thread.log_file == task_item.log_file:
|
||||
model_info_dialog = ModelInfoDialog(thread.model_info, self)
|
||||
|
||||
model_info_dialog.exec()
|
||||
break
|
||||
|
||||
def cancel_task_by_item(self, item) -> None:
|
||||
task_item = self.task_list.itemWidget(item)
|
||||
for thread in self.quant_threads:
|
||||
if thread.log_file == task_item.log_file:
|
||||
thread.terminate()
|
||||
task_item.update_status(CANCELED)
|
||||
self.quant_threads.remove(thread)
|
||||
break
|
||||
|
||||
def cancel_task(self, item) -> None:
|
||||
self.logger.info(CANCELLING_TASK.format(item.text()))
|
||||
self.cancel_task_by_item(item)
|
||||
|
|
20
src/utils.py
20
src/utils.py
|
@ -8,6 +8,26 @@
|
|||
from Localizations import *
|
||||
from error_handling import show_error
|
||||
from imports_and_globals import ensure_directory
|
||||
from KVOverrideEntry import KVOverrideEntry
|
||||
|
||||
|
||||
def add_kv_override(self, override_string=None) -> None:
|
||||
entry = KVOverrideEntry()
|
||||
entry.deleted.connect(self.remove_kv_override)
|
||||
if override_string:
|
||||
key, value = override_string.split("=")
|
||||
type_, val = value.split(":")
|
||||
entry.key_input.setText(key)
|
||||
entry.type_combo.setCurrentText(type_)
|
||||
entry.value_input.setText(val)
|
||||
self.kv_override_layout.addWidget(entry)
|
||||
self.kv_override_entries.append(entry)
|
||||
|
||||
|
||||
def remove_kv_override(self, entry) -> None:
|
||||
self.kv_override_layout.removeWidget(entry)
|
||||
self.kv_override_entries.remove(entry)
|
||||
entry.deleteLater()
|
||||
|
||||
|
||||
def get_models_data(self) -> list[dict[str, Union[str, Any]]]:
|
||||
|
|
Loading…
Reference in New Issue