Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Часть функционала AI Command | ExosWare 1 21 4

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
25 Дек 2023
Сообщения
14
Реакции
0
Выберите загрузчик игры
  1. Fabric
Кароче просто нейронка в команде, ключ апи к ней ненадо просто Ctrl C ctrl V и все, жду del


AI:
Expand Collapse Copy
package ru.levin.manager.commandManager.impl;

import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.arguments.StringArgumentType;
import net.minecraft.command.CommandSource;
import net.minecraft.util.Formatting;
import ru.levin.manager.ClientManager;
import ru.levin.manager.commandManager.Command;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URI;
import java.nio.charset.StandardCharsets;

import static com.mojang.brigadier.Command.SINGLE_SUCCESS;

public class AICommand extends Command {


    private static final String API_URL = "https://text.pollinations.ai/v1/chat/completions";


    private static final String[] AVAILABLE_MODELS = {
            "openai",           // GPT-4o-mini
            "mistral",          // Mistral 7B
            "llama",            // Llama 3.2 3B (исправлено!)
            "claude",           // Claude 3 Haiku
            "deepseek",         // DeepSeek V3
            "gemini",           // Gemini 2.0 Flash
            "qwen",             // Qwen 2.5
            "command-r",        // Cohere Command R
            "midijourney",      // Для творческих задач
            "gpt-4o-mini"       // Точная GPT модель
    };

    private static String currentModel = "openai";

    public AICommand() {
        super("ai");
    }

    @Override
    public void execute(LiteralArgumentBuilder<CommandSource> root) {
        root.then(arg("prompt", StringArgumentType.greedyString())
                .executes(ctx -> {
                    String prompt = StringArgumentType.getString(ctx, "prompt");
                    ClientManager.message(Formatting.GRAY + "AI: " + Formatting.YELLOW + "Думаю...");

                    new Thread(() -> {
                        String response = askPollinations(prompt);
                        ClientManager.message(Formatting.GRAY + "AI: " + Formatting.WHITE + response);
                    }).start();

                    return SINGLE_SUCCESS;
                }));

        root.then(literal("help").executes(ctx -> {
            ClientManager.message(Formatting.GRAY + "===== AI Помощь =====");
            ClientManager.message(Formatting.GRAY + ".ai <вопрос> - задать вопрос AI");
            ClientManager.message(Formatting.GRAY + ".ai help - показать это сообщение");
            ClientManager.message(Formatting.GRAY + ".ai models - список доступных моделей");
            ClientManager.message(Formatting.GRAY + ".ai model <название> - выбрать модель");
            ClientManager.message(Formatting.GRAY + ".ai info - информация о сервисе");
            return SINGLE_SUCCESS;
        }));

        root.then(literal("models").executes(ctx -> {
            ClientManager.message(Formatting.GRAY + "===== Доступные модели =====");
            for (String model : AVAILABLE_MODELS) {
                String marker = model.equals(currentModel) ? " ✓ (текущая)" : "";
                ClientManager.message(Formatting.GRAY + "- " + model + marker);
            }
            ClientManager.message(Formatting.GRAY + "Используйте .ai model <название> для смены");
            return SINGLE_SUCCESS;
        }));

        root.then(literal("model")
                .then(arg("name", StringArgumentType.word())
                        .executes(ctx -> {
                            String modelName = StringArgumentType.getString(ctx, "name");
                            boolean found = false;
                            for (String model : AVAILABLE_MODELS) {
                                if (model.equalsIgnoreCase(modelName)) {
                                    currentModel = model.toLowerCase();
                                    found = true;
                                    break;
                                }
                            }
                            if (found) {
                                ClientManager.message(Formatting.GREEN + "Модель изменена на: " + currentModel);
                                ClientManager.message(Formatting.GRAY + "Совет: openai (GPT-4o-mini) - лучшая для русского языка");
                            } else {
                                ClientManager.message(Formatting.RED + "Модель не найдена. Используйте .ai models для списка");
                            }
                            return SINGLE_SUCCESS;
                        })));

        root.then(literal("info").executes(ctx -> {
            ClientManager.message(Formatting.GRAY + "===== AI Информация =====");
            ClientManager.message(Formatting.GRAY + "Сервис: Pollinations AI");
            ClientManager.message(Formatting.GRAY + "Модель: " + currentModel);
            ClientManager.message(Formatting.GRAY + "Лимиты: Безлимитные запросы");
            ClientManager.message(Formatting.GRAY + "API ключ: Не требуется");
            ClientManager.message(Formatting.GRAY + "Совет: .ai model openai - лучшая для русского");
            return SINGLE_SUCCESS;
        }));
    }

    private String askPollinations(String message) {
        long startedAt = System.currentTimeMillis();
        try {
            HttpURLConnection conn = (HttpURLConnection) URI.create(API_URL).toURL().openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setDoOutput(true);
            conn.setConnectTimeout(30000);
            conn.setReadTimeout(60000);

            String escapedMessage = escapeJson(message);
            String systemPrompt = escapeJson(
                    "Ты AI ассистент в Minecraft клиенте. Отвечай кратко, понятно и по делу. " +
                            "Используй русский язык, если вопрос на русском. Будь полезным и дружелюбным. " +
                            "Не пиши слишком длинные сообщения."
            );

            String jsonInputString = String.format(
                    "{\"model\":\"%s\",\"messages\":[{\"role\":\"system\",\"content\":\"%s\"},{\"role\":\"user\",\"content\":\"%s\"}],\"max_tokens\":500,\"temperature\":0.7}",
                    currentModel,
                    systemPrompt,
                    escapedMessage
            );

            try (OutputStream os = conn.getOutputStream()) {
                byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8);
                os.write(input, 0, input.length);
            }

            int responseCode = conn.getResponseCode();

            if (responseCode != 200) {
                String errorBody = readBody(conn.getErrorStream());


                if (responseCode == 404) {
                    // Пробуем с моделью openai
                    if (!currentModel.equals("openai")) {
                        ClientManager.message(Formatting.YELLOW + "Модель " + currentModel + " недоступна, переключаю на openai...");
                        currentModel = "openai";
                        return askPollinations(message);
                    }
                    return "Модель временно недоступна. Попробуйте позже или смените модель командой .ai models";
                }

                if (responseCode == 429) {
                    return "Слишком много запросов. Подождите немного.";
                }
                if (responseCode == 503 || responseCode == 504) {
                    return "Сервис временно недоступен. Попробуйте позже.";
                }
                return "Ошибка " + responseCode + ". " + (errorBody.length() > 100 ? errorBody.substring(0, 100) : errorBody);
            }

            try (BufferedReader br = new BufferedReader(
                    new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) {
                StringBuilder response = new StringBuilder();
                String responseLine;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }
                String rawJson = response.toString();
                String answer = extractAnswer(rawJson);
                long elapsed = System.currentTimeMillis() - startedAt;

                if (answer.isEmpty() || answer.contains("Не удалось") || answer.length() < 5) {
                    return "Не удалось получить ответ. Попробуйте перефразировать вопрос.";
                }


                if (answer.length() > 800) {
                    answer = answer.substring(0, 797) + "...";
                }

                return answer + "\n" + Formatting.GRAY + "(" + elapsed + "ms)";
            }

        } catch (Exception e) {
            e.printStackTrace();
            return "Ошибка подключения: " + e.getMessage();
        }
    }

    private String extractAnswer(String json) {
        try {

            String marker = "\"content\":\"";
            int contentMarker = json.indexOf(marker);
            if (contentMarker != -1) {
                int start = contentMarker + marker.length();
                String extracted = extractJsonString(json, start);
                if (extracted != null && !extracted.isEmpty()) {
                    return unescapeJson(extracted);
                }
            }


            String altMarker = "\"message\":{\"role\":\"assistant\",\"content\":\"";
            contentMarker = json.indexOf(altMarker);
            if (contentMarker != -1) {
                int start = contentMarker + altMarker.length();
                String extracted = extractJsonString(json, start);
                if (extracted != null && !extracted.isEmpty()) {
                    return unescapeJson(extracted);
                }
            }


            if (json.contains("\"response\":")) {
                marker = "\"response\":\"";
                contentMarker = json.indexOf(marker);
                if (contentMarker != -1) {
                    int start = contentMarker + marker.length();
                    String extracted = extractJsonString(json, start);
                    if (extracted != null && !extracted.isEmpty()) {
                        return unescapeJson(extracted);
                    }
                }
            }


            int firstQuote = json.indexOf("\"");
            int lastQuote = json.lastIndexOf("\"");
            if (firstQuote != -1 && lastQuote > firstQuote + 1) {
                String possible = json.substring(firstQuote + 1, lastQuote);
                if (possible.length() > 10 && !possible.contains("{")) {
                    return unescapeJson(possible);
                }
            }
        } catch (Exception ignored) {}
        return "";
    }

    private static String extractJsonString(String json, int start) {
        StringBuilder out = new StringBuilder();
        boolean escape = false;
        for (int i = start; i < json.length(); i++) {
            char c = json.charAt(i);
            if (escape) {
                out.append(c);
                escape = false;
                continue;
            }
            if (c == '\\') {
                escape = true;
                continue;
            }
            if (c == '"') {
                return out.toString();
            }
            out.append(c);
        }
        return null;
    }

    private static String readBody(java.io.InputStream stream) {
        if (stream == null) return "";
        try (BufferedReader br = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8))) {
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                sb.append(line.trim());
            }
            String body = sb.toString();
            if (body.length() > 500) {
                return body.substring(0, 500) + "...";
            }
            return body;
        } catch (Exception ignored) {
            return "";
        }
    }

    private static String escapeJson(String value) {
        if (value == null) return "";
        return value
                .replace("\\", "\\\\")
                .replace("\"", "\\\"")
                .replace("\n", "\\n")
                .replace("\r", "")
                .replace("\t", "\\t");
    }

    private static String unescapeJson(String value) {
        if (value == null) return "";
        return value
                .replace("\\n", "\n")
                .replace("\\\"", "\"")
                .replace("\\\\", "\\")
                .replace("\\t", "\t");
    }
}
SS ниже, там типо я спросил что такое человек пж ненадо удалять изза "SS?"
 

Вложения

  • photo_2026-04-05_18-06-29.jpg
    photo_2026-04-05_18-06-29.jpg
    31.9 KB · Просмотры: 132
Кароче просто нейронка в команде, ключ апи к ней ненадо просто Ctrl C ctrl V и все, жду del


AI:
Expand Collapse Copy
package ru.levin.manager.commandManager.impl;

import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.arguments.StringArgumentType;
import net.minecraft.command.CommandSource;
import net.minecraft.util.Formatting;
import ru.levin.manager.ClientManager;
import ru.levin.manager.commandManager.Command;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URI;
import java.nio.charset.StandardCharsets;

import static com.mojang.brigadier.Command.SINGLE_SUCCESS;

public class AICommand extends Command {


    private static final String API_URL = "https://text.pollinations.ai/v1/chat/completions";


    private static final String[] AVAILABLE_MODELS = {
            "openai",           // GPT-4o-mini
            "mistral",          // Mistral 7B
            "llama",            // Llama 3.2 3B (исправлено!)
            "claude",           // Claude 3 Haiku
            "deepseek",         // DeepSeek V3
            "gemini",           // Gemini 2.0 Flash
            "qwen",             // Qwen 2.5
            "command-r",        // Cohere Command R
            "midijourney",      // Для творческих задач
            "gpt-4o-mini"       // Точная GPT модель
    };

    private static String currentModel = "openai";

    public AICommand() {
        super("ai");
    }

    @Override
    public void execute(LiteralArgumentBuilder<CommandSource> root) {
        root.then(arg("prompt", StringArgumentType.greedyString())
                .executes(ctx -> {
                    String prompt = StringArgumentType.getString(ctx, "prompt");
                    ClientManager.message(Formatting.GRAY + "AI: " + Formatting.YELLOW + "Думаю...");

                    new Thread(() -> {
                        String response = askPollinations(prompt);
                        ClientManager.message(Formatting.GRAY + "AI: " + Formatting.WHITE + response);
                    }).start();

                    return SINGLE_SUCCESS;
                }));

        root.then(literal("help").executes(ctx -> {
            ClientManager.message(Formatting.GRAY + "===== AI Помощь =====");
            ClientManager.message(Formatting.GRAY + ".ai <вопрос> - задать вопрос AI");
            ClientManager.message(Formatting.GRAY + ".ai help - показать это сообщение");
            ClientManager.message(Formatting.GRAY + ".ai models - список доступных моделей");
            ClientManager.message(Formatting.GRAY + ".ai model <название> - выбрать модель");
            ClientManager.message(Formatting.GRAY + ".ai info - информация о сервисе");
            return SINGLE_SUCCESS;
        }));

        root.then(literal("models").executes(ctx -> {
            ClientManager.message(Formatting.GRAY + "===== Доступные модели =====");
            for (String model : AVAILABLE_MODELS) {
                String marker = model.equals(currentModel) ? " ✓ (текущая)" : "";
                ClientManager.message(Formatting.GRAY + "- " + model + marker);
            }
            ClientManager.message(Formatting.GRAY + "Используйте .ai model <название> для смены");
            return SINGLE_SUCCESS;
        }));

        root.then(literal("model")
                .then(arg("name", StringArgumentType.word())
                        .executes(ctx -> {
                            String modelName = StringArgumentType.getString(ctx, "name");
                            boolean found = false;
                            for (String model : AVAILABLE_MODELS) {
                                if (model.equalsIgnoreCase(modelName)) {
                                    currentModel = model.toLowerCase();
                                    found = true;
                                    break;
                                }
                            }
                            if (found) {
                                ClientManager.message(Formatting.GREEN + "Модель изменена на: " + currentModel);
                                ClientManager.message(Formatting.GRAY + "Совет: openai (GPT-4o-mini) - лучшая для русского языка");
                            } else {
                                ClientManager.message(Formatting.RED + "Модель не найдена. Используйте .ai models для списка");
                            }
                            return SINGLE_SUCCESS;
                        })));

        root.then(literal("info").executes(ctx -> {
            ClientManager.message(Formatting.GRAY + "===== AI Информация =====");
            ClientManager.message(Formatting.GRAY + "Сервис: Pollinations AI");
            ClientManager.message(Formatting.GRAY + "Модель: " + currentModel);
            ClientManager.message(Formatting.GRAY + "Лимиты: Безлимитные запросы");
            ClientManager.message(Formatting.GRAY + "API ключ: Не требуется");
            ClientManager.message(Formatting.GRAY + "Совет: .ai model openai - лучшая для русского");
            return SINGLE_SUCCESS;
        }));
    }

    private String askPollinations(String message) {
        long startedAt = System.currentTimeMillis();
        try {
            HttpURLConnection conn = (HttpURLConnection) URI.create(API_URL).toURL().openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setDoOutput(true);
            conn.setConnectTimeout(30000);
            conn.setReadTimeout(60000);

            String escapedMessage = escapeJson(message);
            String systemPrompt = escapeJson(
                    "Ты AI ассистент в Minecraft клиенте. Отвечай кратко, понятно и по делу. " +
                            "Используй русский язык, если вопрос на русском. Будь полезным и дружелюбным. " +
                            "Не пиши слишком длинные сообщения."
            );

            String jsonInputString = String.format(
                    "{\"model\":\"%s\",\"messages\":[{\"role\":\"system\",\"content\":\"%s\"},{\"role\":\"user\",\"content\":\"%s\"}],\"max_tokens\":500,\"temperature\":0.7}",
                    currentModel,
                    systemPrompt,
                    escapedMessage
            );

            try (OutputStream os = conn.getOutputStream()) {
                byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8);
                os.write(input, 0, input.length);
            }

            int responseCode = conn.getResponseCode();

            if (responseCode != 200) {
                String errorBody = readBody(conn.getErrorStream());


                if (responseCode == 404) {
                    // Пробуем с моделью openai
                    if (!currentModel.equals("openai")) {
                        ClientManager.message(Formatting.YELLOW + "Модель " + currentModel + " недоступна, переключаю на openai...");
                        currentModel = "openai";
                        return askPollinations(message);
                    }
                    return "Модель временно недоступна. Попробуйте позже или смените модель командой .ai models";
                }

                if (responseCode == 429) {
                    return "Слишком много запросов. Подождите немного.";
                }
                if (responseCode == 503 || responseCode == 504) {
                    return "Сервис временно недоступен. Попробуйте позже.";
                }
                return "Ошибка " + responseCode + ". " + (errorBody.length() > 100 ? errorBody.substring(0, 100) : errorBody);
            }

            try (BufferedReader br = new BufferedReader(
                    new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) {
                StringBuilder response = new StringBuilder();
                String responseLine;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }
                String rawJson = response.toString();
                String answer = extractAnswer(rawJson);
                long elapsed = System.currentTimeMillis() - startedAt;

                if (answer.isEmpty() || answer.contains("Не удалось") || answer.length() < 5) {
                    return "Не удалось получить ответ. Попробуйте перефразировать вопрос.";
                }


                if (answer.length() > 800) {
                    answer = answer.substring(0, 797) + "...";
                }

                return answer + "\n" + Formatting.GRAY + "(" + elapsed + "ms)";
            }

        } catch (Exception e) {
            e.printStackTrace();
            return "Ошибка подключения: " + e.getMessage();
        }
    }

    private String extractAnswer(String json) {
        try {

            String marker = "\"content\":\"";
            int contentMarker = json.indexOf(marker);
            if (contentMarker != -1) {
                int start = contentMarker + marker.length();
                String extracted = extractJsonString(json, start);
                if (extracted != null && !extracted.isEmpty()) {
                    return unescapeJson(extracted);
                }
            }


            String altMarker = "\"message\":{\"role\":\"assistant\",\"content\":\"";
            contentMarker = json.indexOf(altMarker);
            if (contentMarker != -1) {
                int start = contentMarker + altMarker.length();
                String extracted = extractJsonString(json, start);
                if (extracted != null && !extracted.isEmpty()) {
                    return unescapeJson(extracted);
                }
            }


            if (json.contains("\"response\":")) {
                marker = "\"response\":\"";
                contentMarker = json.indexOf(marker);
                if (contentMarker != -1) {
                    int start = contentMarker + marker.length();
                    String extracted = extractJsonString(json, start);
                    if (extracted != null && !extracted.isEmpty()) {
                        return unescapeJson(extracted);
                    }
                }
            }


            int firstQuote = json.indexOf("\"");
            int lastQuote = json.lastIndexOf("\"");
            if (firstQuote != -1 && lastQuote > firstQuote + 1) {
                String possible = json.substring(firstQuote + 1, lastQuote);
                if (possible.length() > 10 && !possible.contains("{")) {
                    return unescapeJson(possible);
                }
            }
        } catch (Exception ignored) {}
        return "";
    }

    private static String extractJsonString(String json, int start) {
        StringBuilder out = new StringBuilder();
        boolean escape = false;
        for (int i = start; i < json.length(); i++) {
            char c = json.charAt(i);
            if (escape) {
                out.append(c);
                escape = false;
                continue;
            }
            if (c == '\\') {
                escape = true;
                continue;
            }
            if (c == '"') {
                return out.toString();
            }
            out.append(c);
        }
        return null;
    }

    private static String readBody(java.io.InputStream stream) {
        if (stream == null) return "";
        try (BufferedReader br = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8))) {
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                sb.append(line.trim());
            }
            String body = sb.toString();
            if (body.length() > 500) {
                return body.substring(0, 500) + "...";
            }
            return body;
        } catch (Exception ignored) {
            return "";
        }
    }

    private static String escapeJson(String value) {
        if (value == null) return "";
        return value
                .replace("\\", "\\\\")
                .replace("\"", "\\\"")
                .replace("\n", "\\n")
                .replace("\r", "")
                .replace("\t", "\\t");
    }

    private static String unescapeJson(String value) {
        if (value == null) return "";
        return value
                .replace("\\n", "\n")
                .replace("\\\"", "\"")
                .replace("\\\\", "\\")
                .replace("\\t", "\t");
    }
}
SS ниже, там типо я спросил что такое человек пж ненадо удалять изза "SS?"
а че оно ваще делает,безсмыслено как будто,но для прикола нормально,50 на 50 кароче
 
Назад
Сверху Снизу