feat(register): 重构工具注册逻辑并添加设置功能
- 重新设计了工具分类和工具项的注册流程 - 增加了插件管理和基础设置功能- 添加了主题颜色和字体选择功能 - 优化了CUDA设置和AI推理库加载逻辑 - 新增了ToolsRegistrationError异常类
This commit is contained in:
@@ -5,16 +5,21 @@ import com.axis.innovators.box.events.SettingsLoadEvents;
|
|||||||
import com.axis.innovators.box.events.StartupEvent;
|
import com.axis.innovators.box.events.StartupEvent;
|
||||||
import com.axis.innovators.box.events.SubscribeEvent;
|
import com.axis.innovators.box.events.SubscribeEvent;
|
||||||
import com.axis.innovators.box.gui.*;
|
import com.axis.innovators.box.gui.*;
|
||||||
|
import com.axis.innovators.box.plugins.PluginDescriptor;
|
||||||
import com.axis.innovators.box.plugins.PluginLoader;
|
import com.axis.innovators.box.plugins.PluginLoader;
|
||||||
import com.axis.innovators.box.register.RegistrationTool;
|
import com.axis.innovators.box.register.RegistrationTool;
|
||||||
import com.axis.innovators.box.tools.LibraryLoad;
|
import com.axis.innovators.box.tools.LibraryLoad;
|
||||||
import com.axis.innovators.box.tools.SystemInfoUtil;
|
import com.axis.innovators.box.tools.SystemInfoUtil;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.tzd.lm.LM;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
import javax.swing.table.DefaultTableModel;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 主类
|
* 主类
|
||||||
@@ -46,6 +51,7 @@ public class Main {
|
|||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
LibraryLoad.loadLibrary("FridaNative");
|
LibraryLoad.loadLibrary("FridaNative");
|
||||||
|
LM.loadLibrary(LM.CUDA);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("Failed to load the 'FridaNative' library", e);
|
logger.error("Failed to load the 'FridaNative' library", e);
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
@@ -97,10 +103,202 @@ public class Main {
|
|||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onSettingsLoad(SettingsLoadEvents event) {
|
public void onSettingsLoad(SettingsLoadEvents event) {
|
||||||
JLabel placeholder = new JLabel("设置功能开发中...", SwingConstants.CENTER);
|
JTabbedPane tabbedPane = new JTabbedPane();
|
||||||
placeholder.setFont(new Font("微软雅黑", Font.PLAIN, 24));
|
|
||||||
placeholder.setForeground(new Color(127, 140, 153));
|
JPanel pluginPanel = createPluginSettingsPanel();
|
||||||
event.content().add(placeholder, BorderLayout.CENTER);
|
tabbedPane.addTab("插件", null, pluginPanel, "插件管理");
|
||||||
|
|
||||||
|
JPanel generalPanel = createGeneralSettingsPanel();
|
||||||
|
tabbedPane.addTab("基础设置", null, generalPanel, "外观设置");
|
||||||
|
|
||||||
|
JPanel aboutPanel = createAboutPanel();
|
||||||
|
tabbedPane.addTab("关于", null, aboutPanel, "版本信息");
|
||||||
|
|
||||||
|
event.content().add(tabbedPane, BorderLayout.CENTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
private JPanel createAboutPanel() {
|
||||||
|
JPanel panel = new JPanel(new BorderLayout());
|
||||||
|
panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
|
||||||
|
|
||||||
|
JTextArea infoArea = new JTextArea();
|
||||||
|
infoArea.setEditable(false);
|
||||||
|
infoArea.setLineWrap(true);
|
||||||
|
infoArea.setWrapStyleWord(true);
|
||||||
|
infoArea.append("软件版本: " + Main.VERSIONS + "\n\n");
|
||||||
|
infoArea.append("开发作者:\n");
|
||||||
|
for (String author : Main.AUTHOR) {
|
||||||
|
infoArea.append("• " + author + "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
panel.add(new JScrollPane(infoArea), BorderLayout.CENTER);
|
||||||
|
return panel;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 字体选择器内部类
|
||||||
|
private static class FontChooser extends JPanel {
|
||||||
|
private final JComboBox<String> fontFamilyCombo;
|
||||||
|
private final JSpinner fontSizeSpinner;
|
||||||
|
|
||||||
|
public FontChooser(Font currentFont) {
|
||||||
|
setLayout(new GridLayout(2, 2, 5, 5));
|
||||||
|
|
||||||
|
// 字体族选择
|
||||||
|
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
||||||
|
String[] fontFamilies = ge.getAvailableFontFamilyNames();
|
||||||
|
fontFamilyCombo = new JComboBox<>(fontFamilies);
|
||||||
|
fontFamilyCombo.setSelectedItem(currentFont.getFamily());
|
||||||
|
|
||||||
|
// 字体大小选择
|
||||||
|
SpinnerNumberModel sizeModel = new SpinnerNumberModel(
|
||||||
|
currentFont.getSize(), 8, 48, 1
|
||||||
|
);
|
||||||
|
fontSizeSpinner = new JSpinner(sizeModel);
|
||||||
|
|
||||||
|
add(new JLabel("字体:"));
|
||||||
|
add(fontFamilyCombo);
|
||||||
|
add(new JLabel("大小:"));
|
||||||
|
add(fontSizeSpinner);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Font getSelectedFont() {
|
||||||
|
return new Font(
|
||||||
|
(String) fontFamilyCombo.getSelectedItem(),
|
||||||
|
Font.PLAIN,
|
||||||
|
(Integer) fontSizeSpinner.getValue()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 应用主题颜色
|
||||||
|
private void applyThemeColor(Color color) {
|
||||||
|
// 更新全局颜色设置
|
||||||
|
UIManager.put("Panel.background", color);
|
||||||
|
UIManager.put("TabbedPane.background", color);
|
||||||
|
|
||||||
|
// 更新现有界面
|
||||||
|
SwingUtilities.updateComponentTreeUI(Main.getMain().getMainWindow());
|
||||||
|
}
|
||||||
|
|
||||||
|
private JPanel createPluginSettingsPanel() {
|
||||||
|
JPanel panel = new JPanel(new BorderLayout());
|
||||||
|
|
||||||
|
// 表格列配置
|
||||||
|
String[] columns = {"插件名称", "版本支持", "描述"};
|
||||||
|
DefaultTableModel model = new DefaultTableModel(columns, 0) {
|
||||||
|
@Override
|
||||||
|
public boolean isCellEditable(int row, int column) {
|
||||||
|
return false; // 禁止编辑
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 从PluginLoader获取插件数据
|
||||||
|
List<PluginDescriptor> plugins = PluginLoader.getLoadedPlugins();
|
||||||
|
for (PluginDescriptor plugin : plugins) {
|
||||||
|
model.addRow(new Object[]{
|
||||||
|
plugin.getName(),
|
||||||
|
String.join(", ", plugin.getSupportedVersions()),
|
||||||
|
plugin.getDescription()
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
JTable table = new JTable(model);
|
||||||
|
table.setRowHeight(30);
|
||||||
|
table.getTableHeader().setFont(new Font("微软雅黑", Font.BOLD, 14));
|
||||||
|
|
||||||
|
// 添加滚动面板
|
||||||
|
JScrollPane scrollPane = new JScrollPane(table);
|
||||||
|
scrollPane.setBorder(BorderFactory.createTitledBorder("已加载插件列表"));
|
||||||
|
panel.add(scrollPane, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
return panel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JPanel createGeneralSettingsPanel() {
|
||||||
|
JPanel panel = new JPanel(new GridBagLayout());
|
||||||
|
GridBagConstraints gbc = new GridBagConstraints();
|
||||||
|
gbc.insets = new Insets(5, 5, 5, 5);
|
||||||
|
gbc.anchor = GridBagConstraints.WEST;
|
||||||
|
|
||||||
|
// 颜色选择组件
|
||||||
|
gbc.gridx = 0;
|
||||||
|
gbc.gridy = 0;
|
||||||
|
panel.add(new JLabel("界面主题颜色:"), gbc);
|
||||||
|
|
||||||
|
JButton colorBtn = new JButton("选择颜色");
|
||||||
|
colorBtn.addActionListener(e -> {
|
||||||
|
Color color = JColorChooser.showDialog(panel, "选择主题颜色", Color.WHITE);
|
||||||
|
if (color != null) {
|
||||||
|
applyThemeColor(color);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
gbc.gridx = 1;
|
||||||
|
panel.add(colorBtn, gbc);
|
||||||
|
|
||||||
|
// 字体选择组件
|
||||||
|
gbc.gridy++;
|
||||||
|
gbc.gridx = 0;
|
||||||
|
panel.add(new JLabel("界面字体:"), gbc);
|
||||||
|
|
||||||
|
JButton fontBtn = new JButton("选择字体");
|
||||||
|
fontBtn.addActionListener(e -> {
|
||||||
|
Font currentFont = UIManager.getFont("Label.font");
|
||||||
|
FontChooser fontChooser = new FontChooser(currentFont);
|
||||||
|
int result = JOptionPane.showConfirmDialog(
|
||||||
|
panel,
|
||||||
|
fontChooser,
|
||||||
|
"选择字体",
|
||||||
|
JOptionPane.OK_CANCEL_OPTION
|
||||||
|
);
|
||||||
|
|
||||||
|
if (result == JOptionPane.OK_OPTION) {
|
||||||
|
applyUIFont(fontChooser.getSelectedFont());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
gbc.gridx = 1;
|
||||||
|
panel.add(fontBtn, gbc);
|
||||||
|
|
||||||
|
// 添加CUDA选项
|
||||||
|
gbc.gridy++;
|
||||||
|
gbc.gridx = 0;
|
||||||
|
panel.add(new JLabel("AI推理时使用CUDA:"), gbc);
|
||||||
|
|
||||||
|
JCheckBox cudaCheckBox = new JCheckBox("启用CUDA加速", LM.CUDA);
|
||||||
|
cudaCheckBox.addActionListener(e -> {
|
||||||
|
boolean useCUDA = cudaCheckBox.isSelected();
|
||||||
|
LM.CUDA = useCUDA;
|
||||||
|
logger.info("CUDA加速设置已更新: " + (useCUDA ? "启用" : "禁用"));
|
||||||
|
|
||||||
|
try {
|
||||||
|
LM.loadLibrary(useCUDA);
|
||||||
|
logger.info("AI推理库已重新加载");
|
||||||
|
} catch (Exception ex) {
|
||||||
|
logger.error("无法重新加载AI推理库", ex);
|
||||||
|
JOptionPane.showMessageDialog(panel, "无法重新加载AI推理库,请检查CUDA环境", "错误", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
gbc.gridx = 1;
|
||||||
|
panel.add(cudaCheckBox, gbc);
|
||||||
|
|
||||||
|
return panel;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 应用全局字体
|
||||||
|
private void applyUIFont(Font font) {
|
||||||
|
Enumeration<Object> keys = UIManager.getLookAndFeelDefaults().keys();
|
||||||
|
while (keys.hasMoreElements()) {
|
||||||
|
Object key = keys.nextElement();
|
||||||
|
Object value = UIManager.get(key);
|
||||||
|
if (value instanceof Font) {
|
||||||
|
Font derived = font.deriveFont(((Font)value).getStyle());
|
||||||
|
UIManager.put(key, derived);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新所有窗口
|
||||||
|
for (Window window : Window.getWindows()) {
|
||||||
|
SwingUtilities.updateComponentTreeUI(window);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
@@ -146,42 +344,6 @@ public class Main {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void runWindow() {
|
public void runWindow() {
|
||||||
int id = 0;
|
|
||||||
MainWindow.ToolCategory debugCategory = new MainWindow.ToolCategory("调试工具",
|
|
||||||
"debug/debug.png",
|
|
||||||
"用于调试指定Windows工具的一个分类");
|
|
||||||
|
|
||||||
debugCategory.addTool(new MainWindow.ToolItem("Frida注入工具", "debug/frida/frida_main.png",
|
|
||||||
"使用frida注入目标进程的脚本程序 " +
|
|
||||||
"\n作者:tzdwindows 7", ++id, new AbstractAction() {
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
Window owner = SwingUtilities.windowForComponent((Component) e.getSource());
|
|
||||||
FridaWindow fridaWindow = new FridaWindow(owner);
|
|
||||||
fridaWindow.setVisible(true);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
ex.addToolCategory(debugCategory);
|
|
||||||
|
|
||||||
MainWindow.ToolCategory aICategory = new MainWindow.ToolCategory("AI工具",
|
|
||||||
"ai/ai.png",
|
|
||||||
"人工智能/大语言模型");
|
|
||||||
|
|
||||||
aICategory.addTool(new MainWindow.ToolItem("本地AI执行工具", "ai/local/local_main.png",
|
|
||||||
"在本机对开源大语言模型进行推理" +
|
|
||||||
"\n作者:tzdwindows 7", ++id, new AbstractAction() {
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
Window owner = SwingUtilities.windowForComponent((Component) e.getSource());
|
|
||||||
LocalWindow dialog = new LocalWindow(owner);
|
|
||||||
dialog.setVisible(true);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
ex.addToolCategory(aICategory);
|
|
||||||
|
|
||||||
// 主任务2:加载工具栏
|
|
||||||
progressBarManager.updateMainProgress(++completedTasks);
|
progressBarManager.updateMainProgress(++completedTasks);
|
||||||
|
|
||||||
if (!registrationTool.getToolCategories().isEmpty()) {
|
if (!registrationTool.getToolCategories().isEmpty()) {
|
||||||
|
|||||||
@@ -396,6 +396,7 @@ public class MainWindow extends JFrame {
|
|||||||
private final String icon;
|
private final String icon;
|
||||||
private final ImageIcon iconImage;
|
private final ImageIcon iconImage;
|
||||||
private final String description;
|
private final String description;
|
||||||
|
private final UUID id = UUID.randomUUID();
|
||||||
private final List<ToolItem> tools = new ArrayList<>();
|
private final List<ToolItem> tools = new ArrayList<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -445,6 +446,10 @@ public class MainWindow extends JFrame {
|
|||||||
public ImageIcon getIconImage() {
|
public ImageIcon getIconImage() {
|
||||||
return iconImage;
|
return iconImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public UUID getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 工具项数据类
|
// 工具项数据类
|
||||||
|
|||||||
@@ -6,8 +6,6 @@ import org.apache.logging.log4j.LogManager;
|
|||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.net.*;
|
import java.net.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.jar.*;
|
import java.util.jar.*;
|
||||||
|
|||||||
@@ -1,12 +1,18 @@
|
|||||||
package com.axis.innovators.box.register;
|
package com.axis.innovators.box.register;
|
||||||
|
|
||||||
import com.axis.innovators.box.Main;
|
import com.axis.innovators.box.Main;
|
||||||
|
import com.axis.innovators.box.gui.FridaWindow;
|
||||||
|
import com.axis.innovators.box.gui.LocalWindow;
|
||||||
import com.axis.innovators.box.gui.MainWindow;
|
import com.axis.innovators.box.gui.MainWindow;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 负责注册Registration项(限定时机,在执行.run之前可设置)
|
* 负责注册Registration项(限定时机,在执行.run之前可设置)
|
||||||
@@ -16,23 +22,100 @@ public class RegistrationTool {
|
|||||||
private static final Logger logger = LogManager.getLogger(RegistrationTool.class);
|
private static final Logger logger = LogManager.getLogger(RegistrationTool.class);
|
||||||
private final List<MainWindow.ToolCategory> toolCategories = new ArrayList<>();
|
private final List<MainWindow.ToolCategory> toolCategories = new ArrayList<>();
|
||||||
private final Main main;
|
private final Main main;
|
||||||
|
private final List<UUID> uuidList = new ArrayList<>();
|
||||||
|
private final List<String> registeredNameList = new ArrayList<>();
|
||||||
|
|
||||||
public RegistrationTool(Main mainWindow){
|
public RegistrationTool(Main mainWindow) {
|
||||||
this.main = mainWindow;
|
this.main = mainWindow;
|
||||||
|
int id = 0;
|
||||||
|
MainWindow.ToolCategory debugCategory = new MainWindow.ToolCategory("调试工具",
|
||||||
|
"debug/debug.png",
|
||||||
|
"用于调试指定Windows工具的一个分类");
|
||||||
|
|
||||||
|
debugCategory.addTool(new MainWindow.ToolItem("Frida注入工具", "debug/frida/frida_main.png",
|
||||||
|
"使用frida注入目标进程的脚本程序 " +
|
||||||
|
"\n作者:tzdwindows 7", ++id, new AbstractAction() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
Window owner = SwingUtilities.windowForComponent((Component) e.getSource());
|
||||||
|
FridaWindow fridaWindow = new FridaWindow(owner);
|
||||||
|
fridaWindow.setVisible(true);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
MainWindow.ToolCategory aICategory = new MainWindow.ToolCategory("AI工具",
|
||||||
|
"ai/ai.png",
|
||||||
|
"人工智能/大语言模型");
|
||||||
|
|
||||||
|
aICategory.addTool(new MainWindow.ToolItem("本地AI执行工具", "ai/local/local_main.png",
|
||||||
|
"在本机对开源大语言模型进行推理" +
|
||||||
|
"\n作者:tzdwindows 7", ++id, new AbstractAction() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
Window owner = SwingUtilities.windowForComponent((Component) e.getSource());
|
||||||
|
LocalWindow dialog = new LocalWindow(owner);
|
||||||
|
dialog.setVisible(true);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
addToolCategory(debugCategory, "system:debugTools");
|
||||||
|
addToolCategory(aICategory,"system:fridaTools");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 注册ToolCategory
|
* 注册ToolCategory
|
||||||
* @param toolCategory ToolCategory
|
* @param toolCategory ToolCategory
|
||||||
*/
|
*/
|
||||||
public void addToolCategory(MainWindow.ToolCategory toolCategory){
|
public void addToolCategory(MainWindow.ToolCategory toolCategory,
|
||||||
|
String registeredName) {
|
||||||
if (!main.isWindow()) {
|
if (!main.isWindow()) {
|
||||||
|
if (registeredNameList.contains(registeredName)) {
|
||||||
|
throw new ToolsRegistrationError(registeredName + " duplicate registered names");
|
||||||
|
}
|
||||||
|
uuidList.add(toolCategory.getId());
|
||||||
|
registeredNameList.add(registeredName);
|
||||||
toolCategories.add(toolCategory);
|
toolCategories.add(toolCategory);
|
||||||
} else {
|
} else {
|
||||||
logger.warn("Wrong time to add tools");
|
logger.warn("Wrong time to add tools");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据UUID获取ToolCategory
|
||||||
|
* @param id UUID
|
||||||
|
* @return ToolCategory对象
|
||||||
|
*/
|
||||||
|
public MainWindow.ToolCategory getToolCategory(UUID id) {
|
||||||
|
if (!main.isWindow()) {
|
||||||
|
for (MainWindow.ToolCategory toolCategory : toolCategories) {
|
||||||
|
if (toolCategory.getId().equals(id)) {
|
||||||
|
return toolCategory;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logger.warn("Wrong time to operation tools");
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据注册名获取UUID
|
||||||
|
* @param registeredName 注册名
|
||||||
|
* @return UUID
|
||||||
|
*/
|
||||||
|
public UUID getUUID(String registeredName){
|
||||||
|
if (!main.isWindow()) {
|
||||||
|
for (int i = 0; i < registeredNameList.size(); i++) {
|
||||||
|
if (registeredNameList.get(i).equals(registeredName)) {
|
||||||
|
return uuidList.get(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logger.warn("Wrong time to operation tools");
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public List<MainWindow.ToolCategory> getToolCategories() {
|
public List<MainWindow.ToolCategory> getToolCategories() {
|
||||||
return toolCategories;
|
return toolCategories;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.axis.innovators.box.register;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 当工具注册失败时抛出此错误
|
||||||
|
* @author tzdwindows 7
|
||||||
|
*/
|
||||||
|
public class ToolsRegistrationError extends Error{
|
||||||
|
public ToolsRegistrationError(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -14,11 +14,7 @@ public class LM {
|
|||||||
public final static String DEEP_SEEK = FolderCreator.getModelFolder() + "\\DeepSeek-R1-Distill-Qwen-1.5B-Q8_0.gguf";
|
public final static String DEEP_SEEK = FolderCreator.getModelFolder() + "\\DeepSeek-R1-Distill-Qwen-1.5B-Q8_0.gguf";
|
||||||
private static final Logger logger = LogManager.getLogger(LM.class);
|
private static final Logger logger = LogManager.getLogger(LM.class);
|
||||||
|
|
||||||
static {
|
public static void loadLibrary(boolean cuda){
|
||||||
loadLibrary(CUDA);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void loadLibrary(boolean cuda){
|
|
||||||
if (!cuda) {
|
if (!cuda) {
|
||||||
logger.warn("The cpu will be used for inference");
|
logger.warn("The cpu will be used for inference");
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user