This repository has been archived on 2024-10-24. You can view files and clone it, but cannot push or open issues or pull requests.
NG_2024_Stanislav_Mykhailenko/Lesson_8/Task_1/llmmathquiz.cpp
Stanislav Mykhailenko 27d99acbcb
Fix Lesson 8 Task 1
2024-08-02 22:51:17 +03:00

88 lines
2.8 KiB
C++

#include "llmmathquiz.h"
#include "ui_llmmathquiz.h"
LlmMathQuiz::LlmMathQuiz(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::LlmMathQuiz)
{
ui->setupUi(this);
connect(ui->b_submit, &QPushButton::clicked, this, &LlmMathQuiz::submit);
connect(ui->b_generate, &QPushButton::clicked, this, &LlmMathQuiz::generate);
connect (m_manager, &QNetworkAccessManager::finished, this, &LlmMathQuiz::newAnswer);
}
LlmMathQuiz::~LlmMathQuiz()
{
delete ui;
}
void LlmMathQuiz::submit()
{
if (ui->e_user->text().isEmpty())
return;
ui->e_llm->setText(m_llmAnswer);
ui->b_submit->setEnabled(false);
ui->e_user->setReadOnly(true);
if (m_llmAnswer.contains(ui->e_user->text())) {
ui->l_matched->setText(QString::number(ui->l_matched->text().toInt() + 1));
ui->l_match->setText("True");
} else
ui->l_match->setText("False");
ui->b_generate->setEnabled(true);
if (ui->l_number->text().toInt() == 10)
ui->l_score->setText("Final score:");
}
void LlmMathQuiz::generate()
{
if (m_taskReceived) {
m_taskReceived = false;
if (ui->l_number->text().toInt() == 10) {
ui->l_number->setText(QString::number(0));
ui->l_matched->setText(QString::number(0));
ui->l_score->setText("Answers matched:");
} else
ui->l_number->setText(QString::number(ui->l_number->text().toInt() + 1));
}
m_taskReceived = false;
ui->b_generate->setEnabled(false);
ui->e_task->setText("Generating…");
ui->e_user->clear();
ui->e_llm->clear();
ui->l_match->setText("Not checked");
sendPrompt("Generate a math task and a correct answer for it. The task can be anything from simple equations, to logical tasks. Both the task and the answer need to take only one line. Provide the task on the first line, and the answer on the second line. Never use equation 2x + 5 = 11.");
}
void LlmMathQuiz::newAnswer(QNetworkReply *reply)
{
if (reply->error() == QNetworkReply::NoError) {
QByteArray textReply = reply->readAll();
QStringList data = QJsonDocument::fromJson(textReply).object().value("response").toString().split('\n');
ui->e_task->setText(data[0]);
m_llmAnswer = data[1].isEmpty() ? data[2] : data[1];
m_taskReceived = true;
ui->b_submit->setEnabled(true);
ui->e_user->setReadOnly(false);
} else {
ui->e_task->setText("Error!");
ui->b_generate->setEnabled(true);
}
}
void LlmMathQuiz::sendPrompt(QString prompt)
{
QNetworkRequest request(QUrl("http://127.0.0.1:11434/api/generate"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
QJsonObject json;
json["model"] = "llama3.1:8b";
json["prompt"] = prompt;
json["stream"] = false;
m_manager->post(request, QJsonDocument(json).toJson());
}