TTW_Bot/neuralnetworkmanager.h

113 lines
3.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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