Начинающий
- Статус
- Оффлайн
- Регистрация
- 3 Ноя 2025
- Сообщения
- 6
- Реакции
- 0
- Выберите загрузчик игры
- Vanilla
- Forge
- Fabric
Салам, югейм. Сделал AI-чат нужно использовать Hf токен с ( Hugging Face. NO AD)
Модель Qwen 2.5 подходит лучше всего, потому что потребляет мало токенов.
Долго думал, сливать это или нет, потому что функция, по сути, бесполезная:
Может работать некорректно по одной причине переносил импорты с JavaScript на Java, поэтому что-то может не работать или отваливаться.
как добавить в clickgui разберётесь сами и Как установить модель разберётесь сами.
MODEL_ID И API_KEY введете сами
и да если аишка вообще не отвечает проверьте отправляется ли запрос на ( Hugging Face. NO AD)
как по мне полностью бесполезный функционал
надеюсь одобрят?
Модель Qwen 2.5 подходит лучше всего, потому что потребляет мало токенов.
Долго думал, сливать это или нет, потому что функция, по сути, бесполезная:
Может работать некорректно по одной причине переносил импорты с JavaScript на Java, поэтому что-то может не работать или отваливаться.
как добавить в clickgui разберётесь сами и Как установить модель разберётесь сами.
MODEL_ID И API_KEY введете сами
и да если аишка вообще не отвечает проверьте отправляется ли запрос на ( Hugging Face. NO AD)
как по мне полностью бесполезный функционал
qwenapi:
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("\\\\", "\\");
}
}
Последнее редактирование:
