| 169 | } |
| 170 | |
| 171 | void ChatCompressor::buildRequestPayload( |
| 172 | QJsonObject &payload, PluginLLMCore::PromptTemplate *promptTemplate) |
| 173 | { |
| 174 | PluginLLMCore::ContextData context; |
| 175 | |
| 176 | context.systemPrompt = QStringLiteral( |
| 177 | "You are a helpful assistant that creates concise summaries of conversations. " |
| 178 | "Your summaries preserve key information, technical details, and the flow of discussion."); |
| 179 | |
| 180 | QVector<PluginLLMCore::Message> messages; |
| 181 | for (const auto &msg : m_chatModel->getChatHistory()) { |
| 182 | if (msg.role == ChatModel::ChatRole::Tool |
| 183 | || msg.role == ChatModel::ChatRole::FileEdit |
| 184 | || msg.role == ChatModel::ChatRole::Thinking) |
| 185 | continue; |
| 186 | |
| 187 | PluginLLMCore::Message apiMessage; |
| 188 | apiMessage.role = (msg.role == ChatModel::ChatRole::User) ? "user" : "assistant"; |
| 189 | apiMessage.content = msg.content; |
| 190 | messages.append(apiMessage); |
| 191 | } |
| 192 | |
| 193 | PluginLLMCore::Message compressionRequest; |
| 194 | compressionRequest.role = "user"; |
| 195 | compressionRequest.content = buildCompressionPrompt(); |
| 196 | messages.append(compressionRequest); |
| 197 | |
| 198 | context.history = messages; |
| 199 | |
| 200 | m_provider->prepareRequest( |
| 201 | payload, promptTemplate, context, PluginLLMCore::RequestType::Chat, false, false); |
| 202 | } |
| 203 | |
| 204 | bool ChatCompressor::createCompressedChatFile( |
| 205 | const QString &sourcePath, const QString &destPath, const QString &summary) |
nothing calls this directly
no test coverage detected