mirror of
https://github.com/Palm1r/QodeAssist.git
synced 2025-07-17 20:44:32 -04:00
✨ feat: Add removing codeblock wrappers from code completion
This commit is contained in:
@ -85,6 +85,8 @@ void RequestHandler::handleLLMResponse(QNetworkReply *reply,
|
|||||||
if (isComplete) {
|
if (isComplete) {
|
||||||
auto cleanedCompletion = removeStopWords(accumulatedResponse,
|
auto cleanedCompletion = removeStopWords(accumulatedResponse,
|
||||||
config.promptTemplate->stopWords());
|
config.promptTemplate->stopWords());
|
||||||
|
removeCodeBlockWrappers(cleanedCompletion);
|
||||||
|
|
||||||
emit completionReceived(cleanedCompletion, request, true);
|
emit completionReceived(cleanedCompletion, request, true);
|
||||||
}
|
}
|
||||||
} else if (config.requestType == RequestType::Chat) {
|
} else if (config.requestType == RequestType::Chat) {
|
||||||
@ -115,22 +117,23 @@ void RequestHandler::prepareNetworkRequest(
|
|||||||
networkRequest.setRawHeader("Authorization", QString("Bearer %1").arg(apiKey).toUtf8());
|
networkRequest.setRawHeader("Authorization", QString("Bearer %1").arg(apiKey).toUtf8());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RequestHandler::processSingleLineCompletion(QNetworkReply *reply,
|
bool RequestHandler::processSingleLineCompletion(
|
||||||
|
QNetworkReply *reply,
|
||||||
const QJsonObject &request,
|
const QJsonObject &request,
|
||||||
const QString &accumulatedResponse,
|
const QString &accumulatedResponse,
|
||||||
const LLMConfig &config)
|
const LLMConfig &config)
|
||||||
{
|
{
|
||||||
int newlinePos = accumulatedResponse.indexOf('\n');
|
QString cleanedResponse = accumulatedResponse;
|
||||||
|
removeCodeBlockWrappers(cleanedResponse);
|
||||||
|
|
||||||
|
int newlinePos = cleanedResponse.indexOf('\n');
|
||||||
if (newlinePos != -1) {
|
if (newlinePos != -1) {
|
||||||
QString singleLineCompletion = accumulatedResponse.left(newlinePos).trimmed();
|
QString singleLineCompletion = cleanedResponse.left(newlinePos).trimmed();
|
||||||
singleLineCompletion = removeStopWords(singleLineCompletion,
|
singleLineCompletion
|
||||||
config.promptTemplate->stopWords());
|
= removeStopWords(singleLineCompletion, config.promptTemplate->stopWords());
|
||||||
|
|
||||||
emit completionReceived(singleLineCompletion, request, true);
|
emit completionReceived(singleLineCompletion, request, true);
|
||||||
m_accumulatedResponses.remove(reply);
|
m_accumulatedResponses.remove(reply);
|
||||||
reply->abort();
|
reply->abort();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -147,4 +150,36 @@ QString RequestHandler::removeStopWords(const QStringView &completion, const QSt
|
|||||||
return filteredCompletion;
|
return filteredCompletion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RequestHandler::removeCodeBlockWrappers(QString &response)
|
||||||
|
{
|
||||||
|
static const QRegularExpression
|
||||||
|
fullCodeBlockRegex(R"(```[\w\s]*\n([\s\S]*?)```)", QRegularExpression::MultilineOption);
|
||||||
|
static const QRegularExpression
|
||||||
|
partialStartBlockRegex(R"(```[\w\s]*\n([\s\S]*?)$)", QRegularExpression::MultilineOption);
|
||||||
|
static const QRegularExpression
|
||||||
|
partialEndBlockRegex(R"(^([\s\S]*?)```)", QRegularExpression::MultilineOption);
|
||||||
|
|
||||||
|
QRegularExpressionMatchIterator matchIterator = fullCodeBlockRegex.globalMatch(response);
|
||||||
|
while (matchIterator.hasNext()) {
|
||||||
|
QRegularExpressionMatch match = matchIterator.next();
|
||||||
|
QString codeBlock = match.captured(0);
|
||||||
|
QString codeContent = match.captured(1).trimmed();
|
||||||
|
response.replace(codeBlock, codeContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
QRegularExpressionMatch startMatch = partialStartBlockRegex.match(response);
|
||||||
|
if (startMatch.hasMatch()) {
|
||||||
|
QString partialBlock = startMatch.captured(0);
|
||||||
|
QString codeContent = startMatch.captured(1).trimmed();
|
||||||
|
response.replace(partialBlock, codeContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
QRegularExpressionMatch endMatch = partialEndBlockRegex.match(response);
|
||||||
|
if (endMatch.hasMatch()) {
|
||||||
|
QString partialBlock = endMatch.captured(0);
|
||||||
|
QString codeContent = endMatch.captured(1).trimmed();
|
||||||
|
response.replace(partialBlock, codeContent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace QodeAssist::LLMCore
|
} // namespace QodeAssist::LLMCore
|
||||||
|
@ -58,6 +58,7 @@ private:
|
|||||||
const QString &accumulatedResponse,
|
const QString &accumulatedResponse,
|
||||||
const LLMConfig &config);
|
const LLMConfig &config);
|
||||||
QString removeStopWords(const QStringView &completion, const QStringList &stopWords);
|
QString removeStopWords(const QStringView &completion, const QStringList &stopWords);
|
||||||
|
void removeCodeBlockWrappers(QString &response);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace QodeAssist::LLMCore
|
} // namespace QodeAssist::LLMCore
|
||||||
|
Reference in New Issue
Block a user