first commit
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
// 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
|
||||
Reference in New Issue
Block a user