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

Часть функционала QwenApi-AI-Chat Category in ClickGui - 1.21.8

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
3 Ноя 2025
Сообщения
6
Реакции
0
Выберите загрузчик игры
  1. Vanilla
  2. Forge
  3. Fabric
Салам, югейм. Сделал AI-чат нужно использовать Hf токен с ( Hugging Face. NO AD)
Модель Qwen 2.5 подходит лучше всего, потому что потребляет мало токенов.


Долго думал, сливать это или нет, потому что функция, по сути, бесполезная:

Может работать некорректно по одной причине переносил импорты с JavaScript на Java, поэтому что-то может не работать или отваливаться.
как добавить в clickgui разберётесь сами и Как установить модель разберётесь сами.
MODEL_ID И API_KEY введете сами
и да если аишка вообще не отвечает проверьте отправляется ли запрос на ( Hugging Face. NO AD)


как по мне полностью бесполезный функционал

qwenapi:
Expand Collapse Copy
package com.ferrion.api;

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

public class QwenAPI {

    private static final String API_URL = "https://router.huggingface.co/v1/chat/completions";
    private static final String MODEL_ID = "";
    private static final String API_KEY = "";

    public static String ask(String message) {
        long startedAt = System.currentTimeMillis();
        try {
            if (isModelQuestion(message)) {
                return "Я Ferrion AI 0.1 beta. Использую модель Qwen2.5-72B-Instruct.";
            }

            HttpURLConnection conn = (HttpURLConnection) URI.create(API_URL).toURL().openConnection();

            conn.setRequestMethod("POST");
            conn.setRequestProperty("Authorization", "Bearer " + API_KEY);
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Accept", "application/json");
            conn.setDoOutput(true);

            String escapedMessage = escapeJson(message);
            String systemPrompt = escapeJson("You are Ferrion AI 0.1 beta built on Qwen2.5-72B-Instruct. Answer clearly and briefly.");
            String jsonInputString = String.format(
                "{\"model\":\"%s\",\"messages\":[{\"role\":\"system\",\"content\":\"%s\"},{\"role\":\"user\",\"content\":\"%s\"}],\"max_tokens\":300,\"temperature\":0.7}",
                MODEL_ID,
                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 == 410) {
                    return "Error 410 - Endpoint unavailable for this model. Try another HF Inference provider or model.";
                }
                return "Error " + responseCode + " - Please check your API token or HF Inference access."
                        + (errorBody.isEmpty() ? "" : " Details: " + 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 clean = cleanResponse(rawJson);
                long elapsed = System.currentTimeMillis() - startedAt;
                return attachStats(clean, rawJson, elapsed);
            }

        } catch (Exception e) {
            e.printStackTrace();
            return "Connection Error: " + e.getMessage();
        }
    }
 
    private static String cleanResponse(String json) {
        try {
            String assistantMarker = "\"message\":{\"role\":\"assistant\",\"content\":\"";
            int contentMarker = json.indexOf(assistantMarker);
            if (contentMarker != -1) {
                int start = contentMarker + assistantMarker.length();
                String extracted = extractJsonString(json, start);
                if (extracted != null && !extracted.isEmpty()) {
                    return unescapeJson(extracted);
                }
            }

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

    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 == '\\') {
                out.append(c);
                escape = true;
                continue;
            }
            if (c == '"') {
                return out.toString();
            }
            out.append(c);
        }
        return null;
    }

    private static String attachStats(String answer, String rawJson, long elapsedMs) {
        int promptTokens = extractIntValue(rawJson, "\"prompt_tokens\":");
        int completionTokens = extractIntValue(rawJson, "\"completion_tokens\":");
        int totalTokens = extractIntValue(rawJson, "\"total_tokens\":");

        String stats = "Tokens: " + (promptTokens >= 0 ? promptTokens : 0)
                + "/" + (completionTokens >= 0 ? completionTokens : 0)
                + "/" + (totalTokens >= 0 ? totalTokens : 0)
                + " | Time: " + Math.max(0L, elapsedMs) + "ms";

        return answer + "\n" + stats;
    }

    private static int extractIntValue(String json, String key) {
        int keyPos = json.indexOf(key);
        if (keyPos == -1) {
            return -1;
        }
        int i = keyPos + key.length();
        while (i < json.length() && Character.isWhitespace(json.charAt(i))) {
            i++;
        }
        int start = i;
        while (i < json.length() && Character.isDigit(json.charAt(i))) {
            i++;
        }
        if (i == start) {
            return -1;
        }
        try {
            return Integer.parseInt(json.substring(start, i));
        } catch (Exception ignored) {
            return -1;
        }
    }

    private static boolean isModelQuestion(String message) {
        if (message == null) {
            return false;
        }
        String normalized = message.toLowerCase();
        return normalized.contains("какая ты модель")
                || normalized.contains("что за модель")
                || normalized.contains("what model")
                || normalized.contains("who are you");
    }

    private static String readBody(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() > 220) {
                return body.substring(0, 220) + "...";
            }
            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", "");
    }

    private static String unescapeJson(String value) {
        return value
                .replace("\\n", "\n")
                .replace("\\\"", "\"")
                .replace("\\\\", "\\");
    }
}
надеюсь одобрят?
 
Последнее редактирование:
Салам, югейм. Сделал AI-чат нужно использовать Hf токен с ( Hugging Face. NO AD)
Модель Qwen 2.5 подходит лучше всего, потому что потребляет мало токенов.


Долго думал, сливать это или нет, потому что функция, по сути, бесполезная:

Может работать некорректно по одной причине переносил импорты с JavaScript на Java, поэтому что-то может не работать или отваливаться.
как добавить в clickgui разберётесь сами и Как установить модель разберётесь сами.
MODEL_ID И API_KEY введете сами
и да если аишка вообще не отвечает проверьте отправляется ли запрос на ( Hugging Face. NO AD)


как по мне полностью бесполезный функционал

qwenapi:
Expand Collapse Copy
    private static boolean isModelQuestion(String message) {
        if (message == null) {
            return false;
        }
        String normalized = message.toLowerCase();
        return normalized.contains("какая ты модель")
                || normalized.contains("что за модель")
                || normalized.contains("what model")
                || normalized.contains("who are you");
    }
надеюсь одобрят?
1775153408091.png
 
Салам, югейм. Сделал AI-чат нужно использовать Hf токен с ( Hugging Face. NO AD)
Модель Qwen 2.5 подходит лучше всего, потому что потребляет мало токенов.


Долго думал, сливать это или нет, потому что функция, по сути, бесполезная:

Может работать некорректно по одной причине переносил импорты с JavaScript на Java, поэтому что-то может не работать или отваливаться.
как добавить в clickgui разберётесь сами и Как установить модель разберётесь сами.
MODEL_ID И API_KEY введете сами
и да если аишка вообще не отвечает проверьте отправляется ли запрос на ( Hugging Face. NO AD)


как по мне полностью бесполезный функционал

qwenapi:
Expand Collapse Copy
package com.ferrion.api;

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

public class QwenAPI {

    private static final String API_URL = "https://router.huggingface.co/v1/chat/completions";
    private static final String MODEL_ID = "";
    private static final String API_KEY = "";

    public static String ask(String message) {
        long startedAt = System.currentTimeMillis();
        try {
            if (isModelQuestion(message)) {
                return "Я Ferrion AI 0.1 beta. Использую модель Qwen2.5-72B-Instruct.";
            }

            HttpURLConnection conn = (HttpURLConnection) URI.create(API_URL).toURL().openConnection();

            conn.setRequestMethod("POST");
            conn.setRequestProperty("Authorization", "Bearer " + API_KEY);
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Accept", "application/json");
            conn.setDoOutput(true);

            String escapedMessage = escapeJson(message);
            String systemPrompt = escapeJson("You are Ferrion AI 0.1 beta built on Qwen2.5-72B-Instruct. Answer clearly and briefly.");
            String jsonInputString = String.format(
                "{\"model\":\"%s\",\"messages\":[{\"role\":\"system\",\"content\":\"%s\"},{\"role\":\"user\",\"content\":\"%s\"}],\"max_tokens\":300,\"temperature\":0.7}",
                MODEL_ID,
                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 == 410) {
                    return "Error 410 - Endpoint unavailable for this model. Try another HF Inference provider or model.";
                }
                return "Error " + responseCode + " - Please check your API token or HF Inference access."
                        + (errorBody.isEmpty() ? "" : " Details: " + 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 clean = cleanResponse(rawJson);
                long elapsed = System.currentTimeMillis() - startedAt;
                return attachStats(clean, rawJson, elapsed);
            }

        } catch (Exception e) {
            e.printStackTrace();
            return "Connection Error: " + e.getMessage();
        }
    }
 
    private static String cleanResponse(String json) {
        try {
            String assistantMarker = "\"message\":{\"role\":\"assistant\",\"content\":\"";
            int contentMarker = json.indexOf(assistantMarker);
            if (contentMarker != -1) {
                int start = contentMarker + assistantMarker.length();
                String extracted = extractJsonString(json, start);
                if (extracted != null && !extracted.isEmpty()) {
                    return unescapeJson(extracted);
                }
            }

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

    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 == '\\') {
                out.append(c);
                escape = true;
                continue;
            }
            if (c == '"') {
                return out.toString();
            }
            out.append(c);
        }
        return null;
    }

    private static String attachStats(String answer, String rawJson, long elapsedMs) {
        int promptTokens = extractIntValue(rawJson, "\"prompt_tokens\":");
        int completionTokens = extractIntValue(rawJson, "\"completion_tokens\":");
        int totalTokens = extractIntValue(rawJson, "\"total_tokens\":");

        String stats = "Tokens: " + (promptTokens >= 0 ? promptTokens : 0)
                + "/" + (completionTokens >= 0 ? completionTokens : 0)
                + "/" + (totalTokens >= 0 ? totalTokens : 0)
                + " | Time: " + Math.max(0L, elapsedMs) + "ms";

        return answer + "\n" + stats;
    }

    private static int extractIntValue(String json, String key) {
        int keyPos = json.indexOf(key);
        if (keyPos == -1) {
            return -1;
        }
        int i = keyPos + key.length();
        while (i < json.length() && Character.isWhitespace(json.charAt(i))) {
            i++;
        }
        int start = i;
        while (i < json.length() && Character.isDigit(json.charAt(i))) {
            i++;
        }
        if (i == start) {
            return -1;
        }
        try {
            return Integer.parseInt(json.substring(start, i));
        } catch (Exception ignored) {
            return -1;
        }
    }

    private static boolean isModelQuestion(String message) {
        if (message == null) {
            return false;
        }
        String normalized = message.toLowerCase();
        return normalized.contains("какая ты модель")
                || normalized.contains("что за модель")
                || normalized.contains("what model")
                || normalized.contains("who are you");
    }

    private static String readBody(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() > 220) {
                return body.substring(0, 220) + "...";
            }
            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", "");
    }

    private static String unescapeJson(String value) {
        return value
                .replace("\\n", "\n")
                .replace("\\\"", "\"")
                .replace("\\\\", "\\");
    }
}
надеюсь одобрят?
найс пащу не выходя из майна
 
Салам, югейм. Сделал AI-чат нужно использовать Hf токен с ( Hugging Face. NO AD)
Модель Qwen 2.5 подходит лучше всего, потому что потребляет мало токенов.


Долго думал, сливать это или нет, потому что функция, по сути, бесполезная:

Может работать некорректно по одной причине переносил импорты с JavaScript на Java, поэтому что-то может не работать или отваливаться.
как добавить в clickgui разберётесь сами и Как установить модель разберётесь сами.
MODEL_ID И API_KEY введете сами
и да если аишка вообще не отвечает проверьте отправляется ли запрос на ( Hugging Face. NO AD)


как по мне полностью бесполезный функционал

qwenapi:
Expand Collapse Copy
package com.ferrion.api;

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

public class QwenAPI {

    private static final String API_URL = "https://router.huggingface.co/v1/chat/completions";
    private static final String MODEL_ID = "";
    private static final String API_KEY = "";

    public static String ask(String message) {
        long startedAt = System.currentTimeMillis();
        try {
            if (isModelQuestion(message)) {
                return "Я Ferrion AI 0.1 beta. Использую модель Qwen2.5-72B-Instruct.";
            }

            HttpURLConnection conn = (HttpURLConnection) URI.create(API_URL).toURL().openConnection();

            conn.setRequestMethod("POST");
            conn.setRequestProperty("Authorization", "Bearer " + API_KEY);
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Accept", "application/json");
            conn.setDoOutput(true);

            String escapedMessage = escapeJson(message);
            String systemPrompt = escapeJson("You are Ferrion AI 0.1 beta built on Qwen2.5-72B-Instruct. Answer clearly and briefly.");
            String jsonInputString = String.format(
                "{\"model\":\"%s\",\"messages\":[{\"role\":\"system\",\"content\":\"%s\"},{\"role\":\"user\",\"content\":\"%s\"}],\"max_tokens\":300,\"temperature\":0.7}",
                MODEL_ID,
                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 == 410) {
                    return "Error 410 - Endpoint unavailable for this model. Try another HF Inference provider or model.";
                }
                return "Error " + responseCode + " - Please check your API token or HF Inference access."
                        + (errorBody.isEmpty() ? "" : " Details: " + 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 clean = cleanResponse(rawJson);
                long elapsed = System.currentTimeMillis() - startedAt;
                return attachStats(clean, rawJson, elapsed);
            }

        } catch (Exception e) {
            e.printStackTrace();
            return "Connection Error: " + e.getMessage();
        }
    }
 
    private static String cleanResponse(String json) {
        try {
            String assistantMarker = "\"message\":{\"role\":\"assistant\",\"content\":\"";
            int contentMarker = json.indexOf(assistantMarker);
            if (contentMarker != -1) {
                int start = contentMarker + assistantMarker.length();
                String extracted = extractJsonString(json, start);
                if (extracted != null && !extracted.isEmpty()) {
                    return unescapeJson(extracted);
                }
            }

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

    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 == '\\') {
                out.append(c);
                escape = true;
                continue;
            }
            if (c == '"') {
                return out.toString();
            }
            out.append(c);
        }
        return null;
    }

    private static String attachStats(String answer, String rawJson, long elapsedMs) {
        int promptTokens = extractIntValue(rawJson, "\"prompt_tokens\":");
        int completionTokens = extractIntValue(rawJson, "\"completion_tokens\":");
        int totalTokens = extractIntValue(rawJson, "\"total_tokens\":");

        String stats = "Tokens: " + (promptTokens >= 0 ? promptTokens : 0)
                + "/" + (completionTokens >= 0 ? completionTokens : 0)
                + "/" + (totalTokens >= 0 ? totalTokens : 0)
                + " | Time: " + Math.max(0L, elapsedMs) + "ms";

        return answer + "\n" + stats;
    }

    private static int extractIntValue(String json, String key) {
        int keyPos = json.indexOf(key);
        if (keyPos == -1) {
            return -1;
        }
        int i = keyPos + key.length();
        while (i < json.length() && Character.isWhitespace(json.charAt(i))) {
            i++;
        }
        int start = i;
        while (i < json.length() && Character.isDigit(json.charAt(i))) {
            i++;
        }
        if (i == start) {
            return -1;
        }
        try {
            return Integer.parseInt(json.substring(start, i));
        } catch (Exception ignored) {
            return -1;
        }
    }

    private static boolean isModelQuestion(String message) {
        if (message == null) {
            return false;
        }
        String normalized = message.toLowerCase();
        return normalized.contains("какая ты модель")
                || normalized.contains("что за модель")
                || normalized.contains("what model")
                || normalized.contains("who are you");
    }

    private static String readBody(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() > 220) {
                return body.substring(0, 220) + "...";
            }
            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", "");
    }

    private static String unescapeJson(String value) {
        return value
                .replace("\\n", "\n")
                .replace("\\\"", "\"")
                .replace("\\\\", "\\");
    }
}
надеюсь одобрят?
 

Вложения

  • c165b60b53bfb3fe62874f8456dfed89.png
    c165b60b53bfb3fe62874f8456dfed89.png
    271.8 KB · Просмотры: 58
Салам, югейм. Сделал AI-чат нужно использовать Hf токен с ( Hugging Face. NO AD)
Модель Qwen 2.5 подходит лучше всего, потому что потребляет мало токенов.


Долго думал, сливать это или нет, потому что функция, по сути, бесполезная:

Может работать некорректно по одной причине переносил импорты с JavaScript на Java, поэтому что-то может не работать или отваливаться.
как добавить в clickgui разберётесь сами и Как установить модель разберётесь сами.
MODEL_ID И API_KEY введете сами
и да если аишка вообще не отвечает проверьте отправляется ли запрос на ( Hugging Face. NO AD)


как по мне полностью бесполезный функционал

qwenapi:
Expand Collapse Copy
package com.ferrion.api;

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

public class QwenAPI {

    private static final String API_URL = "https://router.huggingface.co/v1/chat/completions";
    private static final String MODEL_ID = "";
    private static final String API_KEY = "";

    public static String ask(String message) {
        long startedAt = System.currentTimeMillis();
        try {
            if (isModelQuestion(message)) {
                return "Я Ferrion AI 0.1 beta. Использую модель Qwen2.5-72B-Instruct.";
            }

            HttpURLConnection conn = (HttpURLConnection) URI.create(API_URL).toURL().openConnection();

            conn.setRequestMethod("POST");
            conn.setRequestProperty("Authorization", "Bearer " + API_KEY);
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Accept", "application/json");
            conn.setDoOutput(true);

            String escapedMessage = escapeJson(message);
            String systemPrompt = escapeJson("You are Ferrion AI 0.1 beta built on Qwen2.5-72B-Instruct. Answer clearly and briefly.");
            String jsonInputString = String.format(
                "{\"model\":\"%s\",\"messages\":[{\"role\":\"system\",\"content\":\"%s\"},{\"role\":\"user\",\"content\":\"%s\"}],\"max_tokens\":300,\"temperature\":0.7}",
                MODEL_ID,
                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 == 410) {
                    return "Error 410 - Endpoint unavailable for this model. Try another HF Inference provider or model.";
                }
                return "Error " + responseCode + " - Please check your API token or HF Inference access."
                        + (errorBody.isEmpty() ? "" : " Details: " + 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 clean = cleanResponse(rawJson);
                long elapsed = System.currentTimeMillis() - startedAt;
                return attachStats(clean, rawJson, elapsed);
            }

        } catch (Exception e) {
            e.printStackTrace();
            return "Connection Error: " + e.getMessage();
        }
    }
 
    private static String cleanResponse(String json) {
        try {
            String assistantMarker = "\"message\":{\"role\":\"assistant\",\"content\":\"";
            int contentMarker = json.indexOf(assistantMarker);
            if (contentMarker != -1) {
                int start = contentMarker + assistantMarker.length();
                String extracted = extractJsonString(json, start);
                if (extracted != null && !extracted.isEmpty()) {
                    return unescapeJson(extracted);
                }
            }

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

    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 == '\\') {
                out.append(c);
                escape = true;
                continue;
            }
            if (c == '"') {
                return out.toString();
            }
            out.append(c);
        }
        return null;
    }

    private static String attachStats(String answer, String rawJson, long elapsedMs) {
        int promptTokens = extractIntValue(rawJson, "\"prompt_tokens\":");
        int completionTokens = extractIntValue(rawJson, "\"completion_tokens\":");
        int totalTokens = extractIntValue(rawJson, "\"total_tokens\":");

        String stats = "Tokens: " + (promptTokens >= 0 ? promptTokens : 0)
                + "/" + (completionTokens >= 0 ? completionTokens : 0)
                + "/" + (totalTokens >= 0 ? totalTokens : 0)
                + " | Time: " + Math.max(0L, elapsedMs) + "ms";

        return answer + "\n" + stats;
    }

    private static int extractIntValue(String json, String key) {
        int keyPos = json.indexOf(key);
        if (keyPos == -1) {
            return -1;
        }
        int i = keyPos + key.length();
        while (i < json.length() && Character.isWhitespace(json.charAt(i))) {
            i++;
        }
        int start = i;
        while (i < json.length() && Character.isDigit(json.charAt(i))) {
            i++;
        }
        if (i == start) {
            return -1;
        }
        try {
            return Integer.parseInt(json.substring(start, i));
        } catch (Exception ignored) {
            return -1;
        }
    }

    private static boolean isModelQuestion(String message) {
        if (message == null) {
            return false;
        }
        String normalized = message.toLowerCase();
        return normalized.contains("какая ты модель")
                || normalized.contains("что за модель")
                || normalized.contains("what model")
                || normalized.contains("who are you");
    }

    private static String readBody(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() > 220) {
                return body.substring(0, 220) + "...";
            }
            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", "");
    }

    private static String unescapeJson(String value) {
        return value
                .replace("\\n", "\n")
                .replace("\\\"", "\"")
                .replace("\\\\", "\\");
    }
}
надеюсь одобрят?
Имба щас сижу пишу килауру под фт в майне
 
Салам, югейм. Сделал AI-чат нужно использовать Hf токен с ( Hugging Face. NO AD)
Модель Qwen 2.5 подходит лучше всего, потому что потребляет мало токенов.


Долго думал, сливать это или нет, потому что функция, по сути, бесполезная:

Может работать некорректно по одной причине переносил импорты с JavaScript на Java, поэтому что-то может не работать или отваливаться.
как добавить в clickgui разберётесь сами и Как установить модель разберётесь сами.
MODEL_ID И API_KEY введете сами
и да если аишка вообще не отвечает проверьте отправляется ли запрос на ( Hugging Face. NO AD)


как по мне полностью бесполезный функционал

qwenapi:
Expand Collapse Copy
package com.ferrion.api;

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

public class QwenAPI {

    private static final String API_URL = "https://router.huggingface.co/v1/chat/completions";
    private static final String MODEL_ID = "";
    private static final String API_KEY = "";

    public static String ask(String message) {
        long startedAt = System.currentTimeMillis();
        try {
            if (isModelQuestion(message)) {
                return "Я Ferrion AI 0.1 beta. Использую модель Qwen2.5-72B-Instruct.";
            }

            HttpURLConnection conn = (HttpURLConnection) URI.create(API_URL).toURL().openConnection();

            conn.setRequestMethod("POST");
            conn.setRequestProperty("Authorization", "Bearer " + API_KEY);
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Accept", "application/json");
            conn.setDoOutput(true);

            String escapedMessage = escapeJson(message);
            String systemPrompt = escapeJson("You are Ferrion AI 0.1 beta built on Qwen2.5-72B-Instruct. Answer clearly and briefly.");
            String jsonInputString = String.format(
                "{\"model\":\"%s\",\"messages\":[{\"role\":\"system\",\"content\":\"%s\"},{\"role\":\"user\",\"content\":\"%s\"}],\"max_tokens\":300,\"temperature\":0.7}",
                MODEL_ID,
                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 == 410) {
                    return "Error 410 - Endpoint unavailable for this model. Try another HF Inference provider or model.";
                }
                return "Error " + responseCode + " - Please check your API token or HF Inference access."
                        + (errorBody.isEmpty() ? "" : " Details: " + 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 clean = cleanResponse(rawJson);
                long elapsed = System.currentTimeMillis() - startedAt;
                return attachStats(clean, rawJson, elapsed);
            }

        } catch (Exception e) {
            e.printStackTrace();
            return "Connection Error: " + e.getMessage();
        }
    }
 
    private static String cleanResponse(String json) {
        try {
            String assistantMarker = "\"message\":{\"role\":\"assistant\",\"content\":\"";
            int contentMarker = json.indexOf(assistantMarker);
            if (contentMarker != -1) {
                int start = contentMarker + assistantMarker.length();
                String extracted = extractJsonString(json, start);
                if (extracted != null && !extracted.isEmpty()) {
                    return unescapeJson(extracted);
                }
            }

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

    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 == '\\') {
                out.append(c);
                escape = true;
                continue;
            }
            if (c == '"') {
                return out.toString();
            }
            out.append(c);
        }
        return null;
    }

    private static String attachStats(String answer, String rawJson, long elapsedMs) {
        int promptTokens = extractIntValue(rawJson, "\"prompt_tokens\":");
        int completionTokens = extractIntValue(rawJson, "\"completion_tokens\":");
        int totalTokens = extractIntValue(rawJson, "\"total_tokens\":");

        String stats = "Tokens: " + (promptTokens >= 0 ? promptTokens : 0)
                + "/" + (completionTokens >= 0 ? completionTokens : 0)
                + "/" + (totalTokens >= 0 ? totalTokens : 0)
                + " | Time: " + Math.max(0L, elapsedMs) + "ms";

        return answer + "\n" + stats;
    }

    private static int extractIntValue(String json, String key) {
        int keyPos = json.indexOf(key);
        if (keyPos == -1) {
            return -1;
        }
        int i = keyPos + key.length();
        while (i < json.length() && Character.isWhitespace(json.charAt(i))) {
            i++;
        }
        int start = i;
        while (i < json.length() && Character.isDigit(json.charAt(i))) {
            i++;
        }
        if (i == start) {
            return -1;
        }
        try {
            return Integer.parseInt(json.substring(start, i));
        } catch (Exception ignored) {
            return -1;
        }
    }

    private static boolean isModelQuestion(String message) {
        if (message == null) {
            return false;
        }
        String normalized = message.toLowerCase();
        return normalized.contains("какая ты модель")
                || normalized.contains("что за модель")
                || normalized.contains("what model")
                || normalized.contains("who are you");
    }

    private static String readBody(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() > 220) {
                return body.substring(0, 220) + "...";
            }
            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", "");
    }

    private static String unescapeJson(String value) {
        return value
                .replace("\\n", "\n")
                .replace("\\\"", "\"")
                .replace("\\\\", "\\");
    }
}
надеюсь одобрят?
ну его нахуй
 
потребляет мало токенов.
к слову существует легчайший способ бесплатно пользоваться последней моделью через свой аккаунт qwen. можно воспользоваться openrouter и подключить qwen-3.6 plus бесплатно (noad)
 
Салам, югейм. Сделал AI-чат нужно использовать Hf токен с ( Hugging Face. NO AD)
Модель Qwen 2.5 подходит лучше всего, потому что потребляет мало токенов.


Долго думал, сливать это или нет, потому что функция, по сути, бесполезная:

Может работать некорректно по одной причине переносил импорты с JavaScript на Java, поэтому что-то может не работать или отваливаться.
как добавить в clickgui разберётесь сами и Как установить модель разберётесь сами.
MODEL_ID И API_KEY введете сами
и да если аишка вообще не отвечает проверьте отправляется ли запрос на ( Hugging Face. NO AD)


как по мне полностью бесполезный функционал

qwenapi:
Expand Collapse Copy
package com.ferrion.api;

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

public class QwenAPI {

    private static final String API_URL = "https://router.huggingface.co/v1/chat/completions";
    private static final String MODEL_ID = "";
    private static final String API_KEY = "";

    public static String ask(String message) {
        long startedAt = System.currentTimeMillis();
        try {
            if (isModelQuestion(message)) {
                return "Я Ferrion AI 0.1 beta. Использую модель Qwen2.5-72B-Instruct.";
            }

            HttpURLConnection conn = (HttpURLConnection) URI.create(API_URL).toURL().openConnection();

            conn.setRequestMethod("POST");
            conn.setRequestProperty("Authorization", "Bearer " + API_KEY);
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Accept", "application/json");
            conn.setDoOutput(true);

            String escapedMessage = escapeJson(message);
            String systemPrompt = escapeJson("You are Ferrion AI 0.1 beta built on Qwen2.5-72B-Instruct. Answer clearly and briefly.");
            String jsonInputString = String.format(
                "{\"model\":\"%s\",\"messages\":[{\"role\":\"system\",\"content\":\"%s\"},{\"role\":\"user\",\"content\":\"%s\"}],\"max_tokens\":300,\"temperature\":0.7}",
                MODEL_ID,
                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 == 410) {
                    return "Error 410 - Endpoint unavailable for this model. Try another HF Inference provider or model.";
                }
                return "Error " + responseCode + " - Please check your API token or HF Inference access."
                        + (errorBody.isEmpty() ? "" : " Details: " + 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 clean = cleanResponse(rawJson);
                long elapsed = System.currentTimeMillis() - startedAt;
                return attachStats(clean, rawJson, elapsed);
            }

        } catch (Exception e) {
            e.printStackTrace();
            return "Connection Error: " + e.getMessage();
        }
    }
 
    private static String cleanResponse(String json) {
        try {
            String assistantMarker = "\"message\":{\"role\":\"assistant\",\"content\":\"";
            int contentMarker = json.indexOf(assistantMarker);
            if (contentMarker != -1) {
                int start = contentMarker + assistantMarker.length();
                String extracted = extractJsonString(json, start);
                if (extracted != null && !extracted.isEmpty()) {
                    return unescapeJson(extracted);
                }
            }

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

    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 == '\\') {
                out.append(c);
                escape = true;
                continue;
            }
            if (c == '"') {
                return out.toString();
            }
            out.append(c);
        }
        return null;
    }

    private static String attachStats(String answer, String rawJson, long elapsedMs) {
        int promptTokens = extractIntValue(rawJson, "\"prompt_tokens\":");
        int completionTokens = extractIntValue(rawJson, "\"completion_tokens\":");
        int totalTokens = extractIntValue(rawJson, "\"total_tokens\":");

        String stats = "Tokens: " + (promptTokens >= 0 ? promptTokens : 0)
                + "/" + (completionTokens >= 0 ? completionTokens : 0)
                + "/" + (totalTokens >= 0 ? totalTokens : 0)
                + " | Time: " + Math.max(0L, elapsedMs) + "ms";

        return answer + "\n" + stats;
    }

    private static int extractIntValue(String json, String key) {
        int keyPos = json.indexOf(key);
        if (keyPos == -1) {
            return -1;
        }
        int i = keyPos + key.length();
        while (i < json.length() && Character.isWhitespace(json.charAt(i))) {
            i++;
        }
        int start = i;
        while (i < json.length() && Character.isDigit(json.charAt(i))) {
            i++;
        }
        if (i == start) {
            return -1;
        }
        try {
            return Integer.parseInt(json.substring(start, i));
        } catch (Exception ignored) {
            return -1;
        }
    }

    private static boolean isModelQuestion(String message) {
        if (message == null) {
            return false;
        }
        String normalized = message.toLowerCase();
        return normalized.contains("какая ты модель")
                || normalized.contains("что за модель")
                || normalized.contains("what model")
                || normalized.contains("who are you");
    }

    private static String readBody(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() > 220) {
                return body.substring(0, 220) + "...";
            }
            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", "");
    }

    private static String unescapeJson(String value) {
        return value
                .replace("\\n", "\n")
                .replace("\\\"", "\"")
                .replace("\\\\", "\\");
    }
}
надеюсь одобрят?
1775268125898.png
what m0del? :FeelsBadMan:
 
Салам, югейм. Сделал AI-чат нужно использовать Hf токен с ( Hugging Face. NO AD)
Модель Qwen 2.5 подходит лучше всего, потому что потребляет мало токенов.


Долго думал, сливать это или нет, потому что функция, по сути, бесполезная:

Может работать некорректно по одной причине переносил импорты с JavaScript на Java, поэтому что-то может не работать или отваливаться.
как добавить в clickgui разберётесь сами и Как установить модель разберётесь сами.
MODEL_ID И API_KEY введете сами
и да если аишка вообще не отвечает проверьте отправляется ли запрос на ( Hugging Face. NO AD)


как по мне полностью бесполезный функционал

qwenapi:
Expand Collapse Copy
package com.ferrion.api;

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

public class QwenAPI {

    private static final String API_URL = "https://router.huggingface.co/v1/chat/completions";
    private static final String MODEL_ID = "";
    private static final String API_KEY = "";

    public static String ask(String message) {
        long startedAt = System.currentTimeMillis();
        try {
            if (isModelQuestion(message)) {
                return "Я Ferrion AI 0.1 beta. Использую модель Qwen2.5-72B-Instruct.";
            }

            HttpURLConnection conn = (HttpURLConnection) URI.create(API_URL).toURL().openConnection();

            conn.setRequestMethod("POST");
            conn.setRequestProperty("Authorization", "Bearer " + API_KEY);
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Accept", "application/json");
            conn.setDoOutput(true);

            String escapedMessage = escapeJson(message);
            String systemPrompt = escapeJson("You are Ferrion AI 0.1 beta built on Qwen2.5-72B-Instruct. Answer clearly and briefly.");
            String jsonInputString = String.format(
                "{\"model\":\"%s\",\"messages\":[{\"role\":\"system\",\"content\":\"%s\"},{\"role\":\"user\",\"content\":\"%s\"}],\"max_tokens\":300,\"temperature\":0.7}",
                MODEL_ID,
                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 == 410) {
                    return "Error 410 - Endpoint unavailable for this model. Try another HF Inference provider or model.";
                }
                return "Error " + responseCode + " - Please check your API token or HF Inference access."
                        + (errorBody.isEmpty() ? "" : " Details: " + 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 clean = cleanResponse(rawJson);
                long elapsed = System.currentTimeMillis() - startedAt;
                return attachStats(clean, rawJson, elapsed);
            }

        } catch (Exception e) {
            e.printStackTrace();
            return "Connection Error: " + e.getMessage();
        }
    }
 
    private static String cleanResponse(String json) {
        try {
            String assistantMarker = "\"message\":{\"role\":\"assistant\",\"content\":\"";
            int contentMarker = json.indexOf(assistantMarker);
            if (contentMarker != -1) {
                int start = contentMarker + assistantMarker.length();
                String extracted = extractJsonString(json, start);
                if (extracted != null && !extracted.isEmpty()) {
                    return unescapeJson(extracted);
                }
            }

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

    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 == '\\') {
                out.append(c);
                escape = true;
                continue;
            }
            if (c == '"') {
                return out.toString();
            }
            out.append(c);
        }
        return null;
    }

    private static String attachStats(String answer, String rawJson, long elapsedMs) {
        int promptTokens = extractIntValue(rawJson, "\"prompt_tokens\":");
        int completionTokens = extractIntValue(rawJson, "\"completion_tokens\":");
        int totalTokens = extractIntValue(rawJson, "\"total_tokens\":");

        String stats = "Tokens: " + (promptTokens >= 0 ? promptTokens : 0)
                + "/" + (completionTokens >= 0 ? completionTokens : 0)
                + "/" + (totalTokens >= 0 ? totalTokens : 0)
                + " | Time: " + Math.max(0L, elapsedMs) + "ms";

        return answer + "\n" + stats;
    }

    private static int extractIntValue(String json, String key) {
        int keyPos = json.indexOf(key);
        if (keyPos == -1) {
            return -1;
        }
        int i = keyPos + key.length();
        while (i < json.length() && Character.isWhitespace(json.charAt(i))) {
            i++;
        }
        int start = i;
        while (i < json.length() && Character.isDigit(json.charAt(i))) {
            i++;
        }
        if (i == start) {
            return -1;
        }
        try {
            return Integer.parseInt(json.substring(start, i));
        } catch (Exception ignored) {
            return -1;
        }
    }

    private static boolean isModelQuestion(String message) {
        if (message == null) {
            return false;
        }
        String normalized = message.toLowerCase();
        return normalized.contains("какая ты модель")
                || normalized.contains("что за модель")
                || normalized.contains("what model")
                || normalized.contains("who are you");
    }

    private static String readBody(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() > 220) {
                return body.substring(0, 220) + "...";
            }
            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", "");
    }

    private static String unescapeJson(String value) {
        return value
                .replace("\\n", "\n")
                .replace("\\\"", "\"")
                .replace("\\\\", "\\");
    }
}
надеюсь одобрят?
бля я не успел первым выложить
 
Салам, югейм. Сделал AI-чат нужно использовать Hf токен с ( Hugging Face. NO AD)
Модель Qwen 2.5 подходит лучше всего, потому что потребляет мало токенов.


Долго думал, сливать это или нет, потому что функция, по сути, бесполезная:

Может работать некорректно по одной причине переносил импорты с JavaScript на Java, поэтому что-то может не работать или отваливаться.
как добавить в clickgui разберётесь сами и Как установить модель разберётесь сами.
MODEL_ID И API_KEY введете сами
и да если аишка вообще не отвечает проверьте отправляется ли запрос на ( Hugging Face. NO AD)


как по мне полностью бесполезный функционал

qwenapi:
Expand Collapse Copy
package com.ferrion.api;

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

public class QwenAPI {

    private static final String API_URL = "https://router.huggingface.co/v1/chat/completions";
    private static final String MODEL_ID = "";
    private static final String API_KEY = "";

    public static String ask(String message) {
        long startedAt = System.currentTimeMillis();
        try {
            if (isModelQuestion(message)) {
                return "Я Ferrion AI 0.1 beta. Использую модель Qwen2.5-72B-Instruct.";
            }

            HttpURLConnection conn = (HttpURLConnection) URI.create(API_URL).toURL().openConnection();

            conn.setRequestMethod("POST");
            conn.setRequestProperty("Authorization", "Bearer " + API_KEY);
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Accept", "application/json");
            conn.setDoOutput(true);

            String escapedMessage = escapeJson(message);
            String systemPrompt = escapeJson("You are Ferrion AI 0.1 beta built on Qwen2.5-72B-Instruct. Answer clearly and briefly.");
            String jsonInputString = String.format(
                "{\"model\":\"%s\",\"messages\":[{\"role\":\"system\",\"content\":\"%s\"},{\"role\":\"user\",\"content\":\"%s\"}],\"max_tokens\":300,\"temperature\":0.7}",
                MODEL_ID,
                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 == 410) {
                    return "Error 410 - Endpoint unavailable for this model. Try another HF Inference provider or model.";
                }
                return "Error " + responseCode + " - Please check your API token or HF Inference access."
                        + (errorBody.isEmpty() ? "" : " Details: " + 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 clean = cleanResponse(rawJson);
                long elapsed = System.currentTimeMillis() - startedAt;
                return attachStats(clean, rawJson, elapsed);
            }

        } catch (Exception e) {
            e.printStackTrace();
            return "Connection Error: " + e.getMessage();
        }
    }
 
    private static String cleanResponse(String json) {
        try {
            String assistantMarker = "\"message\":{\"role\":\"assistant\",\"content\":\"";
            int contentMarker = json.indexOf(assistantMarker);
            if (contentMarker != -1) {
                int start = contentMarker + assistantMarker.length();
                String extracted = extractJsonString(json, start);
                if (extracted != null && !extracted.isEmpty()) {
                    return unescapeJson(extracted);
                }
            }

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

    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 == '\\') {
                out.append(c);
                escape = true;
                continue;
            }
            if (c == '"') {
                return out.toString();
            }
            out.append(c);
        }
        return null;
    }

    private static String attachStats(String answer, String rawJson, long elapsedMs) {
        int promptTokens = extractIntValue(rawJson, "\"prompt_tokens\":");
        int completionTokens = extractIntValue(rawJson, "\"completion_tokens\":");
        int totalTokens = extractIntValue(rawJson, "\"total_tokens\":");

        String stats = "Tokens: " + (promptTokens >= 0 ? promptTokens : 0)
                + "/" + (completionTokens >= 0 ? completionTokens : 0)
                + "/" + (totalTokens >= 0 ? totalTokens : 0)
                + " | Time: " + Math.max(0L, elapsedMs) + "ms";

        return answer + "\n" + stats;
    }

    private static int extractIntValue(String json, String key) {
        int keyPos = json.indexOf(key);
        if (keyPos == -1) {
            return -1;
        }
        int i = keyPos + key.length();
        while (i < json.length() && Character.isWhitespace(json.charAt(i))) {
            i++;
        }
        int start = i;
        while (i < json.length() && Character.isDigit(json.charAt(i))) {
            i++;
        }
        if (i == start) {
            return -1;
        }
        try {
            return Integer.parseInt(json.substring(start, i));
        } catch (Exception ignored) {
            return -1;
        }
    }

    private static boolean isModelQuestion(String message) {
        if (message == null) {
            return false;
        }
        String normalized = message.toLowerCase();
        return normalized.contains("какая ты модель")
                || normalized.contains("что за модель")
                || normalized.contains("what model")
                || normalized.contains("who are you");
    }

    private static String readBody(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() > 220) {
                return body.substring(0, 220) + "...";
            }
            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", "");
    }

    private static String unescapeJson(String value) {
        return value
                .replace("\\n", "\n")
                .replace("\\\"", "\"")
                .replace("\\\\", "\\");
    }
}
надеюсь одобрят?
hahahahahahahahhahahahah
 
Назад
Сверху Снизу