All Downloads are FREE. Search and download functionalities are using the official Maven repository.

anlavn.ai.YourGPT Maven / Gradle / Ivy

package anlavn.ai;
// Make By Bình An || AnLaVN || KatoVN

import anlavn.file.Log;
import anlavn.file.Raw;
import anlavn.file.Zip;
import anlavn.net.DocNet;
import anlavn.net.License;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**Lớp YourGPT hỗ trợ suy luận LLM (Mô hình ngôn ngữ lớn) với LLaMA.
Lớp này cung cấp các phương thức để tải mô-đun YourGPT, khởi động máy chủ, tương tác với mô hình... * @author AnLaVN - https://github.com/AnLaVN */ public final class YourGPT implements AutoCloseable { private static Process YGPTProcess = null; private static String MODEL_FILE = null; private static final String LLAMA_PATH = "YourGPT_LLaMA", MODEL_PATH = "YourGPT_Model", MODEL_DEFAULT = "https://huggingface.co/TheBloke/Mistral-7B-OpenOrca-GGUF/resolve/main/mistral-7b-openorca.Q4_K_M.gguf"; /**Các tham số LLaMA có thể định cấu hình cho máy chủ YourGPT.
Các tham số này phải được điều chỉnh trước khi khởi động máy chủ.
* Đọc thêm về các thông số có sẵn tại: https://github.com/ggerganov/llama.cpp/blob/master/examples/server/README.md */ public static Map params = new HashMap<>(); public static String API_KEY = "alk~XXX...XXX"; @Override public void close() throws Exception { destroy(); } private static void setFile(String filePath, String module) { String fileName = filePath.substring(filePath.lastIndexOf("/") + 1), fileLoca = module + "/" + fileName; File modulef = new File(module); if (!modulef.exists()) modulef.mkdir(); boolean isNet = filePath.startsWith("http"); MODEL_FILE = fileLoca; if (isNet && !new File(fileLoca).exists()) { try { Log.add("YourGPT - Download \"" + fileName + "\" to module " + module); new DocNet(filePath).saveAs(fileLoca); if (fileName.endsWith(".zip")) Zip.extract(isNet ? fileLoca : filePath, module); else new Raw(filePath).copyTo(fileLoca, 26214400); } catch (IOException e) { Log.add("!!! Error try to init YourGPT: Can not init module " + module + ". Please check your connecttion. !!!\n\t\tError code: " + e.toString()); throw new RuntimeException(e); } } } /**Sử dụng phương thức này để tải mô-đun YourGPT bằng LLaMA mặc định và LLM mặc định.
Tương đương với việc gọi `loadModule("Win_CUDA12")`. * @see YourGPT#loadModule(java.lang.String) * @see YourGPT#loadModule(java.lang.String, java.lang.String) */ public static void loadModule() { loadModule("Win_CUDA12"); } /**Sử dụng phương thức này để tải mô-đun YourGPT bằng LLaMA được chỉ định và LLM mặc định. * @param llama tên của tệp LLaMA cần tải.
* Ví dụ: "Win_CUDA12"
* Khám phá thêm tại https://anlavn-api.vercel.app/api/llama * @see YourGPT#loadModule() * @see YourGPT#loadModule(java.lang.String, java.lang.String) */ public static void loadModule(String llama) { loadModule(llama, MODEL_DEFAULT); } /**Sử dụng phương thức này để tải mô-đun YourGPT bằng LLaMA được chỉ định và LLM được chỉ định. * @param llama tên của tệp LLaMA cần tải.
* Ví dụ: "Win_CUDA12"
* Khám phá thêm tại https://anlavn-api.vercel.app/api/llama
* @param model vị trí của LLM được chỉ định, nó có thể là đường dẫn cục bộ hoặc địa chỉ liên kết.
* Ví dụ: *
"C:/Users/AnLaVN/mistral-7b-openorca.Q4_K_M.gguf" cho vị trí tập tin hoặc, *
"https://huggingface.co/TheBloke/Mistral-7B-OpenOrca-GGUF/resolve/main/mistral-7b-openorca.Q4_K_M.gguf"

* Khám phá thêm LLM tại https://huggingface.co * @see YourGPT#loadModule() * @see YourGPT#loadModule(java.lang.String) */ public static void loadModule(String llama, String model) { try { License.check(API_KEY, "AnLaVN03"); String licenseKey = URLEncoder.encode(API_KEY, StandardCharsets.UTF_8.toString()); llama = new DocNet("https://anlavn-api.vercel.app/api/llama?name="+llama+"&key="+licenseKey).readLine(); setFile(llama, LLAMA_PATH); setFile(model, MODEL_PATH); } catch (IOException e) { Log.add("!!! Error try to load module YourGPT: Please check your connecttion or API key. !!!\n\t\tError code: " + e.toString()); throw new RuntimeException(e); } } /**Sử dụng phương thức này để khởi động máy chủ YourGPT với các tham số đã chỉ định.
* Nếu mô-đun chưa được tải, nó sẽ cố tải bằng cài đặt mặc định. */ public static void start() { License.check(API_KEY, "AnLaVN03"); if (YGPTProcess != null) { Log.add("YourGPT - Process already start before. Try to destroy by default."); destroy(); } if (MODEL_FILE == null) { Log.add("YourGPT - Module has not been loaded. Try to load module by default."); loadModule(); } List commands = new ArrayList<>(); commands.add(LLAMA_PATH + "/llama-server"); params.put("-m", "../" + MODEL_FILE); for (Map.Entry entry : params.entrySet()) { commands.add(entry.getKey()); commands.add(entry.getValue()); } String[] command = commands.toArray(String[]::new); new Thread() { @Override public void run() { try { Log.add("YourGPT - Start process with command:\n\t\t" + String.join(" ", command)); ProcessBuilder pb = new ProcessBuilder(command); pb.directory(new File(LLAMA_PATH)); pb.redirectErrorStream(true); YGPTProcess = pb.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(YGPTProcess.getInputStream())); int result = reader.read(); while (result != -1) { System.out.print((char) result); result = reader.read(); } } catch (IOException e) { Log.add("!!! Error try to start YourGPT: Error code: " + e.toString()); throw new RuntimeException(e); } }}.start(); } /**Sử dụng phương thức này để truy xuất danh sách các tên LLaMA mới nhất hiện có. * @return mảng các tên LLaMA mới nhất.
* Khám phá thêm tại https://anlavn-api.vercel.app/api/llama * @throws java.io.IOException nếu không có kết nối internet hoặc máy chủ bị hỏng. */ public static String[] getLLaMA() throws IOException { return new DocNet("https://anlavn-api.vercel.app/api/llama").readLine().split(","); } /**Sử dụng phương thức này để dọn sạch mô-đun YourGPT.LLaMA nếu nó tồn tại.*/ public static void cleanLLaMA() { Log.add("YourGPT - Clean YourGPT.LLaMA module if exists."); new File(LLAMA_PATH).deleteOnExit(); } /**Sử dụng phương thức này để dọn sạch mô-đun YourGPT.Model nếu nó tồn tại.*/ public static void cleanModel() { Log.add("YourGPT - Clean YourGPT.Model module if exists."); new File(MODEL_PATH).deleteOnExit(); } /**Sử dụng phương thức này để buộc phá hủy tiến trình YourGPT.*/ public static void destroy() { if (YGPTProcess != null) { Log.add("YourGPT - Forcibly destroy process."); YGPTProcess.destroyForcibly(); YGPTProcess = null; } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy