| 278 | } |
| 279 | |
| 280 | QJsonArray ChatModel::prepareMessagesForRequest(const QString &systemPrompt) const |
| 281 | { |
| 282 | QJsonArray messages; |
| 283 | messages.append(QJsonObject{{"role", "system"}, {"content", systemPrompt}}); |
| 284 | |
| 285 | for (const auto &message : m_messages) { |
| 286 | QString role; |
| 287 | switch (message.role) { |
| 288 | case ChatRole::User: |
| 289 | role = "user"; |
| 290 | break; |
| 291 | case ChatRole::Assistant: |
| 292 | role = "assistant"; |
| 293 | break; |
| 294 | case ChatRole::Tool: |
| 295 | case ChatRole::FileEdit: |
| 296 | continue; |
| 297 | default: |
| 298 | continue; |
| 299 | } |
| 300 | |
| 301 | QString content |
| 302 | = message.attachments.isEmpty() |
| 303 | ? message.content |
| 304 | : message.content + "\n\nAttached files list:" |
| 305 | + std::accumulate( |
| 306 | message.attachments.begin(), |
| 307 | message.attachments.end(), |
| 308 | QString(), |
| 309 | [](QString acc, const Context::ContentFile &attachment) { |
| 310 | return acc |
| 311 | + QString("\nname: %1\nfile content:\n%2") |
| 312 | .arg(attachment.filename, attachment.content); |
| 313 | }); |
| 314 | |
| 315 | messages.append(QJsonObject{{"role", role}, {"content", content}}); |
| 316 | } |
| 317 | |
| 318 | return messages; |
| 319 | } |
| 320 | |
| 321 | QString ChatModel::lastMessageId() const |
| 322 | { |