108 lines
3.1 KiB
C++
108 lines
3.1 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 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();
|
|
|
|
// Основные переменные
|
|
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;
|
|
|
|
// Очередь сообщений для 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
|