mirror of https://github.com/leafspark/AutoGGUF
119 lines
4.6 KiB
Python
119 lines
4.6 KiB
Python
import json
|
|
|
|
from PySide6.QtCore import Qt
|
|
from PySide6.QtWidgets import QApplication, QFileDialog, QMessageBox
|
|
from Localizations import (
|
|
SAVING_PRESET,
|
|
SAVE_PRESET,
|
|
JSON_FILES,
|
|
PRESET_SAVED,
|
|
PRESET_SAVED_TO,
|
|
LOADING_PRESET,
|
|
LOAD_PRESET,
|
|
PRESET_LOADED,
|
|
PRESET_LOADED_FROM,
|
|
)
|
|
|
|
|
|
def save_preset(self) -> None:
|
|
self.logger.info(SAVING_PRESET)
|
|
preset = {
|
|
"quant_types": [item.text() for item in self.quant_type.selectedItems()],
|
|
"allow_requantize": self.allow_requantize.isChecked(),
|
|
"leave_output_tensor": self.leave_output_tensor.isChecked(),
|
|
"pure": self.pure.isChecked(),
|
|
"imatrix": self.imatrix.text(),
|
|
"include_weights": self.include_weights.text(),
|
|
"exclude_weights": self.exclude_weights.text(),
|
|
"use_output_tensor_type": self.use_output_tensor_type.isChecked(),
|
|
"output_tensor_type": self.output_tensor_type.currentText(),
|
|
"use_token_embedding_type": self.use_token_embedding_type.isChecked(),
|
|
"token_embedding_type": self.token_embedding_type.currentText(),
|
|
"keep_split": self.keep_split.isChecked(),
|
|
"kv_overrides": [
|
|
entry.get_raw_override_string() for entry in self.kv_override_entries
|
|
],
|
|
"extra_arguments": self.extra_arguments.text(),
|
|
}
|
|
|
|
if not QApplication.keyboardModifiers() & Qt.ShiftModifier:
|
|
file_name, _ = QFileDialog.getSaveFileName(self, SAVE_PRESET, "", JSON_FILES)
|
|
if file_name:
|
|
with open(file_name, "w") as f:
|
|
json.dump(preset, f, indent=4)
|
|
QMessageBox.information(
|
|
self, PRESET_SAVED, PRESET_SAVED_TO.format(file_name)
|
|
)
|
|
self.logger.info(PRESET_SAVED_TO.format(file_name))
|
|
else:
|
|
clipboard = QApplication.clipboard()
|
|
preset_str = json.dumps(preset, indent=1)
|
|
clipboard.setText(preset_str)
|
|
QMessageBox.information(self, PRESET_SAVED, "Preset copied to clipboard")
|
|
self.logger.info("Preset copied to clipboard")
|
|
|
|
|
|
def load_preset(self) -> None:
|
|
self.logger.info(LOADING_PRESET)
|
|
|
|
try:
|
|
if QApplication.keyboardModifiers() & Qt.ShiftModifier:
|
|
clipboard = QApplication.clipboard()
|
|
preset = json.loads(clipboard.text())
|
|
source = "clipboard"
|
|
else:
|
|
file_name, _ = QFileDialog.getOpenFileName(
|
|
self, LOAD_PRESET, "", JSON_FILES
|
|
)
|
|
if not file_name:
|
|
return
|
|
with open(file_name, "r") as f:
|
|
preset = json.load(f)
|
|
source = file_name
|
|
|
|
self.quant_type.clearSelection()
|
|
for quant_type in preset.get("quant_types", []):
|
|
items = self.quant_type.findItems(quant_type, Qt.MatchExactly)
|
|
if items:
|
|
items[0].setSelected(True)
|
|
self.allow_requantize.setChecked(preset.get("allow_requantize", False))
|
|
self.leave_output_tensor.setChecked(preset.get("leave_output_tensor", False))
|
|
self.pure.setChecked(preset.get("pure", False))
|
|
self.imatrix.setText(preset.get("imatrix", ""))
|
|
self.include_weights.setText(preset.get("include_weights", ""))
|
|
self.exclude_weights.setText(preset.get("exclude_weights", ""))
|
|
self.use_output_tensor_type.setChecked(
|
|
preset.get("use_output_tensor_type", False)
|
|
)
|
|
self.output_tensor_type.setCurrentText(preset.get("output_tensor_type", ""))
|
|
self.use_token_embedding_type.setChecked(
|
|
preset.get("use_token_embedding_type", False)
|
|
)
|
|
self.token_embedding_type.setCurrentText(preset.get("token_embedding_type", ""))
|
|
self.keep_split.setChecked(preset.get("keep_split", False))
|
|
self.extra_arguments.setText(preset.get("extra_arguments", ""))
|
|
|
|
# Clear existing KV overrides and add new ones
|
|
for entry in self.kv_override_entries:
|
|
self.remove_kv_override(entry)
|
|
for override in preset.get("kv_overrides", []):
|
|
self.add_kv_override(override)
|
|
|
|
QMessageBox.information(
|
|
self,
|
|
PRESET_LOADED,
|
|
PRESET_LOADED_FROM.format(
|
|
source
|
|
if not QApplication.keyboardModifiers() & Qt.ShiftModifier
|
|
else "clipboard"
|
|
),
|
|
)
|
|
self.logger.info(PRESET_LOADED_FROM.format(source))
|
|
|
|
except json.JSONDecodeError:
|
|
QMessageBox.critical(self, "Error", "Invalid JSON in clipboard")
|
|
self.logger.error("Failed to parse JSON from clipboard")
|
|
except Exception as e:
|
|
QMessageBox.critical(self, "Error", f"Failed to load preset: {str(e)}")
|
|
self.logger.error(f"Failed to load preset: {str(e)}")
|