Skip to content

Commit

Permalink
Add smart trigger for call suggestion
Browse files Browse the repository at this point in the history
  • Loading branch information
Palm1r committed Sep 8, 2024
1 parent 15af137 commit 9361c27
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 3 deletions.
20 changes: 17 additions & 3 deletions QodeAssistClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ namespace QodeAssist {

QodeAssistClient::QodeAssistClient()
: LanguageClient::Client(new LLMClientInterface())
, m_recentCharCount(0)
{
setName("Qode Assist");
LanguageClient::LanguageFilter filter;
Expand All @@ -51,6 +52,8 @@ QodeAssistClient::QodeAssistClient()

start();
setupConnections();

m_typingTimer.start();
}

QodeAssistClient::~QodeAssistClient()
Expand Down Expand Up @@ -86,7 +89,18 @@ void QodeAssistClient::openDocument(TextEditor::TextDocument *document)
const int cursorPosition = widget->textCursor().position();
if (cursorPosition < position || cursorPosition > position + charsAdded)
return;
scheduleRequest(widget);

m_recentCharCount += charsAdded;

if (m_typingTimer.elapsed()
> Settings::generalSettings().autoCompletionTypingInterval()) {
m_recentCharCount = charsAdded;
m_typingTimer.restart();
}

if (m_recentCharCount > Settings::generalSettings().autoCompletionCharThreshold()) {
scheduleRequest(widget);
}
});
}

Expand Down Expand Up @@ -130,7 +144,8 @@ void QodeAssistClient::scheduleRequest(TextEditor::TextEditorWidget *editor)
connect(timer, &QTimer::timeout, this, [this, editor]() {
if (editor
&& editor->textCursor().position()
== m_scheduledRequests[editor]->property("cursorPosition").toInt())
== m_scheduledRequests[editor]->property("cursorPosition").toInt()
&& m_recentCharCount > Settings::generalSettings().autoCompletionCharThreshold())
requestCompletions(editor);
});
connect(editor, &TextEditorWidget::destroyed, this, [this, editor]() {
Expand All @@ -146,7 +161,6 @@ void QodeAssistClient::scheduleRequest(TextEditor::TextEditorWidget *editor)
it.value()->setProperty("cursorPosition", editor->textCursor().position());
it.value()->start(Settings::generalSettings().startSuggestionTimer());
}

void QodeAssistClient::handleCompletions(const GetCompletionRequest::Response &response,
TextEditor::TextEditorWidget *editor)
{
Expand Down
3 changes: 3 additions & 0 deletions QodeAssistClient.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ class QodeAssistClient : public LanguageClient::Client
QHash<TextEditor::TextEditorWidget *, QTimer *> m_scheduledRequests;
QMetaObject::Connection m_documentOpenedConnection;
QMetaObject::Connection m_documentClosedConnection;

QElapsedTimer m_typingTimer;
int m_recentCharCount;
};

} // namespace QodeAssist
2 changes: 2 additions & 0 deletions QodeAssistConstants.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ const char USE_FREQUENCY_PENALTY[] = "QodeAssist.useFrequencyPenalty";
const char FREQUENCY_PENALTY[] = "QodeAssist.frequencyPenalty";
const char PROVIDER_PATHS[] = "QodeAssist.providerPaths";
const char START_SUGGESTION_TIMER[] = "QodeAssist.startSuggestionTimer";
const char AUTO_COMPLETION_CHAR_THRESHOLD[] = "QodeAssist.autoCompletionCharThreshold";
const char AUTO_COMPLETION_TYPING_INTERVAL[] = "QodeAssist.autoCompletionTypingInterval";
const char MAX_FILE_THRESHOLD[] = "QodeAssist.maxFileThreshold";
const char OLLAMA_LIVETIME[] = "QodeAssist.ollamaLivetime";
const char SPECIFIC_INSTRUCTIONS[] = "QodeAssist.specificInstractions";
Expand Down
22 changes: 22 additions & 0 deletions settings/GeneralSettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,24 @@ GeneralSettings::GeneralSettings()
startSuggestionTimer.setRange(10, 10000);
startSuggestionTimer.setDefaultValue(500);

autoCompletionCharThreshold.setSettingsKey(Constants::AUTO_COMPLETION_CHAR_THRESHOLD);
autoCompletionCharThreshold.setLabelText(
Tr::tr("Character threshold for AI suggestion start:"));
autoCompletionCharThreshold.setToolTip(
Tr::tr("The number of characters that need to be typed within the typing interval "
"before an AI suggestion request is sent."));
autoCompletionCharThreshold.setRange(1, 10);
autoCompletionCharThreshold.setDefaultValue(2);

autoCompletionTypingInterval.setSettingsKey(Constants::AUTO_COMPLETION_TYPING_INTERVAL);
autoCompletionTypingInterval.setLabelText(
Tr::tr("Typing interval for AI suggestion start(ms):"));
autoCompletionTypingInterval.setToolTip(
Tr::tr("The time window (in milliseconds) during which the character threshold "
"must be met to trigger an AI suggestion request."));
autoCompletionTypingInterval.setRange(500, 5000);
autoCompletionTypingInterval.setDefaultValue(2000);

llmProviders.setSettingsKey(Constants::LLM_PROVIDERS);
llmProviders.setDisplayName(Tr::tr("FIM Provider:"));
llmProviders.setDisplayStyle(Utils::SelectionAspect::DisplayStyle::ComboBox);
Expand Down Expand Up @@ -121,6 +139,8 @@ GeneralSettings::GeneralSettings()
auto rootLayout = Column{Row{enableQodeAssist, Stretch{1}, resetToDefaults},
enableAutoComplete,
startSuggestionTimer,
autoCompletionCharThreshold,
autoCompletionTypingInterval,
multiLineCompletion,
Space{8},
enableLogging,
Expand Down Expand Up @@ -208,6 +228,8 @@ void GeneralSettings::resetPageToDefaults()
resetAspect(fimPrompts);
resetAspect(enableLogging);
resetAspect(startSuggestionTimer);
resetAspect(autoCompletionTypingInterval);
resetAspect(autoCompletionCharThreshold);
}

fimPrompts.setStringValue("StarCoder2");
Expand Down
2 changes: 2 additions & 0 deletions settings/GeneralSettings.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ class GeneralSettings : public Utils::AspectContainer
Utils::BoolAspect multiLineCompletion{this};
Utils::BoolAspect enableLogging{this};
Utils::IntegerAspect startSuggestionTimer{this};
Utils::IntegerAspect autoCompletionCharThreshold{this};
Utils::IntegerAspect autoCompletionTypingInterval{this};

Utils::SelectionAspect llmProviders{this};
Utils::StringAspect url{this};
Expand Down

0 comments on commit 9361c27

Please sign in to comment.