починил нейроконструктор, исправил распознавание сообщений из чата

This commit is contained in:
2026-02-08 17:29:49 +03:00
parent 451ddd9ae0
commit cbb875f3f8
15 changed files with 531 additions and 223 deletions
+29 -10
View File
@@ -124,6 +124,18 @@ void NeuralNetworkManager::setupDefaultConfigs()
networkConfigs[Ollama] = ollamaConfig;
}
void NeuralNetworkManager::setCurrentNetworkType(NetworkType type)
{
QMutexLocker locker(&mutex);
m_currentNetworkType = type;
}
void NeuralNetworkManager::sendMessage(const QString &message)
{
// Используем текущий тип сети
sendMessage(message, m_currentNetworkType);
}
void NeuralNetworkManager::sendMessage(const QString &message, NetworkType networkType)
{
QMutexLocker locker(&mutex);
@@ -138,8 +150,6 @@ void NeuralNetworkManager::sendMessage(const QString &message, NetworkType netwo
qint64 currentTime = QDateTime::currentSecsSinceEpoch();
if (!isGigaChatTokenValid()) {
// Добавляем сообщение в очередь
PendingMessage pendingMsg;
pendingMsg.message = message;
@@ -154,7 +164,6 @@ void NeuralNetworkManager::sendMessage(const QString &message, NetworkType netwo
return;
}
}
// Если токен валиден, отправляем сообщение сразу
sendMessageInternal(message, networkType);
}
@@ -424,17 +433,15 @@ void NeuralNetworkManager::handleGigaChatTokenReply(QNetworkReply *reply)
if (reply->error() != QNetworkReply::NoError) {
QString errorMsg = QString("Ошибка получения токена GigaChat: %1").arg(reply->errorString());
// Очищаем очередь сообщений если не удалось получить токен
pendingMessages.clear();
gigaChatAuth.tokenExpiry = 0;
emit errorOccurred(errorMsg);
reply->deleteLater();
return;
}
QJsonDocument doc = QJsonDocument::fromJson(data);
if (doc.isNull()) {
pendingMessages.clear();
emit errorOccurred("Неверный формат ответа от GigaChat");
reply->deleteLater();
@@ -444,6 +451,7 @@ void NeuralNetworkManager::handleGigaChatTokenReply(QNetworkReply *reply)
QJsonObject json = doc.object();
if (json.contains("access_token")) {
m_tokenRetryCount = 0;
gigaChatAuth.accessToken = json["access_token"].toString();
int expiresIn = json.contains("expires_in")
@@ -463,10 +471,10 @@ void NeuralNetworkManager::handleGigaChatTokenReply(QNetworkReply *reply)
QString errorMsg = json["error"].toString();
// Очищаем очередь сообщений
pendingMessages.clear();
emit errorOccurred("Ошибка GigaChat: " + errorMsg);
} else {
pendingMessages.clear();
emit errorOccurred("Неизвестный формат ответа от GigaChat");
}
@@ -513,9 +521,20 @@ void NeuralNetworkManager::requestGigaChatToken()
return;
}
// Проверяем количество попыток
if (m_tokenRetryCount >= MAX_TOKEN_RETRIES) {
qDebug() << "Превышено максимальное количество попыток получения токена";
m_tokenRetryCount = 0;
pendingMessages.clear(); // Только после превышения лимита очищаем очередь
emit errorOccurred("Не удалось получить токен GigaChat после нескольких попыток");
return;
}
m_tokenRetryCount++;
isProcessingGigaChatToken = true;
if (gigaChatAuth.clientId.isEmpty() || gigaChatAuth.authorizationCode.isEmpty()) {
emit errorOccurred("Не установлены учетные данные GigaChat");
// Очищаем очередь сообщений
pendingMessages.clear();
return;