feat: Add transfer timeout settings

This commit is contained in:
Petr Mironychev
2026-06-08 15:20:21 +02:00
parent 43a30281b6
commit 74eed49fb4
8 changed files with 35 additions and 3 deletions

View File

@@ -76,6 +76,8 @@ void ChatCompressor::startCompression(const QString &chatFilePath, ChatModel *ch
const QString customEndpoint = Settings::generalSettings().caCustomEndpoint();
const QString endpoint = !customEndpoint.isEmpty() ? customEndpoint
: promptTemplate->endpoint();
m_provider->client()->setTransferTimeout(
static_cast<int>(Settings::generalSettings().requestTimeout() * 1000));
m_currentRequestId = m_provider->sendRequest(
QUrl(Settings::generalSettings().caUrl()), payload, endpoint);
LOG_MESSAGE(QString("Starting compression request: %1").arg(m_currentRequestId));

View File

@@ -338,6 +338,9 @@ void ClientInterface::sendMessage(
provider->client()->setMaxToolContinuations(
Settings::toolsSettings().maxToolContinuations());
provider->client()->setTransferTimeout(
static_cast<int>(Settings::generalSettings().requestTimeout() * 1000));
connect(
provider->client(),
&::LLMQore::BaseClient::chunkReceived,

View File

@@ -354,6 +354,9 @@ void LLMClientInterface::handleCompletion(const QJsonObject &request)
&LLMClientInterface::handleRequestFailed,
Qt::UniqueConnection);
provider->client()->setTransferTimeout(
static_cast<int>(m_generalSettings.requestTimeout() * 1000));
auto requestId
= provider->sendRequest(QUrl(url), payload, resolveEndpoint(promptTemplate, isPreset1Active));
m_activeRequests[requestId] = {request, provider};

View File

@@ -144,6 +144,9 @@ void QuickRefactorHandler::prepareAndSendRequest(
provider->client()->setMaxToolContinuations(
Settings::toolsSettings().maxToolContinuations());
provider->client()->setTransferTimeout(
static_cast<int>(Settings::generalSettings().requestTimeout() * 1000));
m_isRefactoringInProgress = true;
connect(

View File

@@ -73,6 +73,17 @@ GeneralSettings::GeneralSettings()
enableCheckUpdate.setLabelText(TrConstants::ENABLE_CHECK_UPDATE_ON_START);
enableCheckUpdate.setDefaultValue(true);
requestTimeout.setSettingsKey(Constants::REQUEST_TIMEOUT);
requestTimeout.setLabelText(Tr::tr("Request timeout (seconds):"));
requestTimeout.setToolTip(Tr::tr(
"Maximum time to wait for the model to send data before a request is aborted. "
"Applies to all requests — chat, code completion, quick refactor and chat compression. "
"The timer resets every time data is received, so this effectively limits the "
"time-to-first-token and any stall between tokens. Increase it for slow or local "
"models that need a long time to start responding. Set to 0 to disable the timeout."));
requestTimeout.setRange(0, 3600);
requestTimeout.setDefaultValue(120);
resetToDefaults.m_buttonText = TrConstants::RESET_TO_DEFAULTS;
checkUpdate.m_buttonText = TrConstants::CHECK_UPDATE;
@@ -333,6 +344,10 @@ GeneralSettings::GeneralSettings()
Row{qrPresetConfig, qrConfigureApiKey, Stretch{1}},
qrGrid}};
auto networkGroup = Group{
title(Tr::tr("Network")),
Column{Row{requestTimeout, Stretch{1}}}};
auto *supportLabel = new QLabel(Tr::tr("Support the development of QodeAssist:"));
auto *supportLinks = new QLabel(
@@ -348,12 +363,14 @@ GeneralSettings::GeneralSettings()
supportLinks->setTextFormat(Qt::RichText);
auto rootLayout = Column{
Row{supportLabel, supportLinks, Stretch{1}},
Row{supportLabel, supportLinks, Stretch{1}, checkUpdate, resetToDefaults},
Space{8},
Row{enableQodeAssist, Stretch{1}, Row{checkUpdate, resetToDefaults}},
Row{enableQodeAssist, Stretch{1}},
Row{enableLogging, Stretch{1}},
Row{enableCheckUpdate, Stretch{1}},
Space{8},
networkGroup,
Space{8},
ccGroup,
Space{8},
caGroup,
@@ -679,6 +696,7 @@ void GeneralSettings::resetPageToDefaults()
if (reply == QMessageBox::Yes) {
resetAspect(enableQodeAssist);
resetAspect(enableLogging);
resetAspect(requestTimeout);
resetAspect(ccProvider);
resetAspect(ccModel);
resetAspect(ccTemplate);

View File

@@ -28,6 +28,8 @@ public:
Utils::BoolAspect enableLogging{this};
Utils::BoolAspect enableCheckUpdate{this};
Utils::IntegerAspect requestTimeout{this};
ButtonAspect checkUpdate{this};
ButtonAspect resetToDefaults{this};

View File

@@ -60,6 +60,7 @@ const char CC_SHOW_PROGRESS_WIDGET[] = "QodeAssist.ccShowProgressWidget";
const char CC_USE_OPEN_FILES_CONTEXT[] = "QodeAssist.ccUseOpenFilesContext";
const char ENABLE_LOGGING[] = "QodeAssist.enableLogging";
const char ENABLE_CHECK_UPDATE[] = "QodeAssist.enableCheckUpdate";
const char REQUEST_TIMEOUT[] = "QodeAssist.requestTimeout";
const char PROVIDER_PATHS[] = "QodeAssist.providerPaths";
const char СС_START_SUGGESTION_TIMER[] = "QodeAssist.startSuggestionTimer";