| 227 | } |
| 228 | |
| 229 | void LLMClientInterface::handleCompletion(const QJsonObject &request) |
| 230 | { |
| 231 | auto filePath = Context::extractFilePathFromRequest(request); |
| 232 | auto documentInfo = m_documentReader.readDocument(filePath); |
| 233 | if (!documentInfo.document) { |
| 234 | QString error = QString("Document is not available: %1").arg(filePath); |
| 235 | LOG_MESSAGE("Error: " + error); |
| 236 | sendErrorResponse(request, error); |
| 237 | return; |
| 238 | } |
| 239 | |
| 240 | auto updatedContext = prepareContext(request, documentInfo); |
| 241 | |
| 242 | bool isPreset1Active = m_contextManager->isSpecifyCompletion(documentInfo); |
| 243 | |
| 244 | const auto providerName = !isPreset1Active ? m_generalSettings.ccProvider() |
| 245 | : m_generalSettings.ccPreset1Provider(); |
| 246 | const auto modelName = !isPreset1Active ? m_generalSettings.ccModel() |
| 247 | : m_generalSettings.ccPreset1Model(); |
| 248 | const auto url = !isPreset1Active ? m_generalSettings.ccUrl() |
| 249 | : m_generalSettings.ccPreset1Url(); |
| 250 | |
| 251 | const auto provider = m_providerRegistry.getProviderByName(providerName); |
| 252 | |
| 253 | if (!provider) { |
| 254 | QString error = QString("No provider found with name: %1").arg(providerName); |
| 255 | LOG_MESSAGE(error); |
| 256 | sendErrorResponse(request, error); |
| 257 | return; |
| 258 | } |
| 259 | |
| 260 | auto templateName = !isPreset1Active ? m_generalSettings.ccTemplate() |
| 261 | : m_generalSettings.ccPreset1Template(); |
| 262 | |
| 263 | auto promptTemplate = m_promptProvider->getTemplateByName(templateName); |
| 264 | |
| 265 | if (!promptTemplate) { |
| 266 | QString error = QString("No template found with name: %1").arg(templateName); |
| 267 | LOG_MESSAGE(error); |
| 268 | sendErrorResponse(request, error); |
| 269 | return; |
| 270 | } |
| 271 | |
| 272 | QJsonObject payload{{"model", modelName}, {"stream", true}}; |
| 273 | |
| 274 | const auto stopWords = QJsonArray::fromStringList(promptTemplate->stopWords()); |
| 275 | if (!stopWords.isEmpty()) |
| 276 | payload["stop"] = stopWords; |
| 277 | |
| 278 | QString systemPrompt; |
| 279 | if (m_completeSettings.useSystemPrompt()) |
| 280 | systemPrompt.append( |
| 281 | m_completeSettings.useUserMessageTemplateForCC() |
| 282 | && promptTemplate->type() == PluginLLMCore::TemplateType::Chat |
| 283 | ? m_completeSettings.systemPromptForNonFimModels() |
| 284 | : m_completeSettings.systemPrompt()); |
| 285 | |
| 286 | auto project = PluginLLMCore::RulesLoader::getActiveProject(); |
nothing calls this directly
no test coverage detected