Files
TTW_Bot/neuralnetworkmanager.h
T

113 lines
3.3 KiB
C++

// neuralnetworkmanager.h
#ifndef NEURALNETWORKMANAGER_H
#define NEURALNETWORKMANAGER_H
#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QJsonObject>
#include <QJsonArray>
#include <QMutex>
#include <QTimer>
#include <QSslConfiguration>
class NeuralNetworkManager : public QObject
{
Q_OBJECT
public:
enum NetworkType {
DeepSeek,
GigaChat,
ChatGPT,
Ollama
};
explicit NeuralNetworkManager(QObject *parent = nullptr);
~NeuralNetworkManager();
// Основные методы
void setCurrentNetworkType(NetworkType type);
void sendMessage(const QString &message);
void sendMessage(const QString &message, NetworkType networkType);
void setPrefix(const QString &prefix);
void setApiKey(NetworkType networkType, const QString &apiKey);
void setModel(NetworkType networkType, const QString &model);
void setBaseUrl(NetworkType networkType, const QString &url);
// Настройки Ollama
void setOllamaUrl(const QString &url);
// Настройки GigaChat OAuth
void setGigaChatCredentials(const QString &clientId,
const QString &authorizationCode);
void refreshGigaChatToken();
private slots:
void handleNetworkReply(QNetworkReply *reply);
void handleGigaChatTokenReply(QNetworkReply *reply);
private:
struct NetworkConfig {
QString apiKey;
QString model;
QString baseUrl;
QString endpoint;
};
struct GigaChatAuth {
QString clientId;
QString authorizationCode;
QString accessToken;
qint64 tokenExpiry = 0; // Unix timestamp
};
// SSL настройки
void setupSSL();
void setupSSLForGigaChat();
NetworkType m_currentNetworkType = DeepSeek;
// Основные переменные
QNetworkAccessManager *networkManager;
QMap<NetworkType, NetworkConfig> networkConfigs;
QString currentPrefix;
QMutex mutex;
GigaChatAuth gigaChatAuth;
QString gigaChatScope = "GIGACHAT_API_PERS";
bool isProcessingGigaChatToken = false;
// Методы для подготовки запросов
QNetworkRequest prepareRequest(NetworkType type);
QByteArray prepareRequestBody(NetworkType type, const QString &message);
// Методы для парсинга ответов
QString parseResponse(NetworkType type, const QByteArray &data);
QString truncateResponse(const QString &response);
// Методы для работы с GigaChat OAuth
void requestGigaChatToken();
bool isGigaChatTokenValid() const;
bool shouldRefreshGigaChatToken() const;
int m_tokenRetryCount = 0;
const int MAX_TOKEN_RETRIES = 3;
// Очередь сообщений для GigaChat
struct PendingMessage {
QString message;
NetworkType networkType;
};
QList<PendingMessage> pendingMessages;
void processPendingMessages();
void sendMessageInternal(const QString &message, NetworkType networkType);
// Конфигурация по умолчанию
void setupDefaultConfigs();
signals:
void responseReceived(const QString &response);
void errorOccurred(const QString &errorMessage);
void gigaChatTokenRefreshed();
};
#endif // NEURALNETWORKMANAGER_H