// neuralnetworkmanager.h #ifndef NEURALNETWORKMANAGER_H #define NEURALNETWORKMANAGER_H #include #include #include #include #include #include #include #include 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 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 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