diff --git a/src/plugins/aimanager/codegeex/codegeexllm.cpp b/src/plugins/aimanager/codegeex/codegeexllm.cpp index 13d74d571..0b7b16839 100644 --- a/src/plugins/aimanager/codegeex/codegeexllm.cpp +++ b/src/plugins/aimanager/codegeex/codegeexllm.cpp @@ -492,8 +492,6 @@ void CodeGeeXLLM::request(const QString &prompt, ResponseHandler handler) */ void CodeGeeXLLM::generate(const QString &prefix, const QString &suffix) { - if (d->talkId.isEmpty()) - d->createNewSession(); setModelState(Busy); auto file = getCurrentFileInfo(); diff --git a/src/plugins/aimanager/openai/openaicompatiblellm.cpp b/src/plugins/aimanager/openai/openaicompatiblellm.cpp index 68a54e39d..dc4e3ab23 100644 --- a/src/plugins/aimanager/openai/openaicompatiblellm.cpp +++ b/src/plugins/aimanager/openai/openaicompatiblellm.cpp @@ -274,6 +274,8 @@ void OpenAiCompatibleLLM::request(const QJsonObject &data) connect(reply, &QNetworkReply::finished, this, [=](){ if (!d->httpResult.isEmpty()) d->currentConversation->update(d->httpResult); + if (reply->error()) + d->currentConversation->popUserData(); d->handleReplyFinished(reply); }); @@ -308,6 +310,7 @@ void OpenAiCompatibleLLM::generate(const QString &prefix, const QString &suffix) dataObject.insert("suffix", suffix); dataObject.insert("prompt", prefix); dataObject.insert("temperature", 0.01); + dataObject.insert("stop", "\n\n"); dataObject.insert("stream", d->stream); if (d->maxTokens != 0) dataObject.insert("max_tokens", d->maxTokens); diff --git a/src/plugins/codegeex/codegeexmanager.cpp b/src/plugins/codegeex/codegeexmanager.cpp index 6141c43a3..6b1c1e808 100644 --- a/src/plugins/codegeex/codegeexmanager.cpp +++ b/src/plugins/codegeex/codegeexmanager.cpp @@ -253,7 +253,8 @@ void CodeGeeXManager::requestAsync(const QString &prompt) QJsonObject obj = chatLLM->create(*c); if (isConnectToNetWork()) obj.insert("command", "online_search_v1"); // only worked on CodeGeeX llm - emit sendSyncRequest(obj); + if (isRunning) // incase stop generate before prompt preprocessed + emit sendSyncRequest(obj); }); } @@ -319,7 +320,6 @@ void CodeGeeXManager::onLLMChanged(const LLMInfo &llmInfo) { if (chatLLM) { if (chatLLM->modelState() == AbstractLLM::Busy) { - emit terminated(); stopReceiving(); chatLLM->cancel(); } @@ -405,6 +405,7 @@ void CodeGeeXManager::initLLM(AbstractLLM *llm) emit notify(2, tr("LLM is not valid. %1").arg(errStr)); else emit notify(2, tr("Error: %1, try again later").arg(data)); + emit terminated(); return; } onResponse(QString::number(answerFlag), data, state); diff --git a/src/plugins/codegeex/codegeexmanager.h b/src/plugins/codegeex/codegeexmanager.h index 1bbc83b03..1d4c5813d 100644 --- a/src/plugins/codegeex/codegeexmanager.h +++ b/src/plugins/codegeex/codegeexmanager.h @@ -102,7 +102,6 @@ class CodeGeeXManager : public QObject void requestMessageUpdate(const MessageData &msg); void chatStarted(); void crawledWebsite(const QString &msgID, const QList &websites); - void terminated(); void chatFinished(); void sessionRecordsUpdated(); void setTextToSend(const QString &prompt); @@ -113,6 +112,7 @@ class CodeGeeXManager : public QObject void noChunksFounded(); void quit(); void llmChanged(const LLMInfo &info); + void terminated(); public Q_SLOTS: void slotSendSyncRequest(const QJsonObject &obj); diff --git a/src/plugins/codegeex/widgets/askpagewidget.cpp b/src/plugins/codegeex/widgets/askpagewidget.cpp index 965c94817..00d748d7e 100644 --- a/src/plugins/codegeex/widgets/askpagewidget.cpp +++ b/src/plugins/codegeex/widgets/askpagewidget.cpp @@ -224,9 +224,9 @@ void AskPageWidget::initConnection() connect(CodeGeeXManager::instance(), &CodeGeeXManager::requestMessageUpdate, this, &AskPageWidget::onMessageUpdate); connect(CodeGeeXManager::instance(), &CodeGeeXManager::chatStarted, this, &AskPageWidget::enterAnswerState); connect(CodeGeeXManager::instance(), &CodeGeeXManager::chatFinished, this, &AskPageWidget::onChatFinished); - connect(CodeGeeXManager::instance(), &CodeGeeXManager::terminated, this, &AskPageWidget::onChatFinished); connect(CodeGeeXManager::instance(), &CodeGeeXManager::setTextToSend, this, &AskPageWidget::setInputText); connect(CodeGeeXManager::instance(), &CodeGeeXManager::showCustomWidget, this, &AskPageWidget::showCustomWidget); + connect(CodeGeeXManager::instance(), &CodeGeeXManager::terminated, this, &AskPageWidget::onStopGenerate); connect(inputEdit, &InputEditWidget::messageSended, this, &AskPageWidget::slotMessageSend); connect(inputEdit, &InputEditWidget::pressedEnter, this, &AskPageWidget::slotMessageSend); @@ -238,16 +238,7 @@ void AskPageWidget::initConnection() connect(inputEdit->edit(), &DTextEdit::textChanged, this, [this]() { inputWidget->setFixedHeight(inputEdit->height() + inputExtraHeight); }); - connect(stopGenerate, &DPushButton::clicked, this, [this]() { - CodeGeeXManager::instance()->stopReceiving(); - Q_EMIT CodeGeeXManager::instance()->terminated(); - if (!msgComponents.values().contains(waitComponets)) { - QString stopId = "Stop:" + QString::number(QDateTime::currentMSecsSinceEpoch()); - msgComponents.insert(stopId, waitComponets); - } - waitComponets->stopWaiting(); - waitingAnswer = false; - }); + connect(stopGenerate, &DPushButton::clicked, this, &AskPageWidget::onStopGenerate); connect(scrollArea->verticalScrollBar(), &QScrollBar::rangeChanged, this, [=]() { if (scrollArea->verticalScrollBar()->isVisible()) { int maxValue = scrollArea->verticalScrollBar()->maximum(); @@ -360,6 +351,18 @@ void AskPageWidget::updateModelCb() CodeGeeXManager::instance()->onLLMChanged(LLMInfo::fromVariantMap(modelCb->currentData().toMap())); } +void AskPageWidget::onStopGenerate() +{ + CodeGeeXManager::instance()->stopReceiving(); + if (!msgComponents.values().contains(waitComponets)) { + QString stopId = "Stop:" + QString::number(QDateTime::currentMSecsSinceEpoch()); + msgComponents.insert(stopId, waitComponets); + } + waitComponets->stopWaiting(); + waitingAnswer = false; + enterInputState(); +} + void AskPageWidget::askQuestion(const QString &question) { CodeGeeXManager::instance()->sendMessage(question); @@ -372,7 +375,7 @@ void AskPageWidget::resetBtns() deleteBtn->setEnabled(!isIntroPageState()); createNewBtn->setVisible(!isIntroPageState()); - historyBtn->setVisible(true); +// historyBtn->setVisible(true); } void AskPageWidget::setInputText(const QString &prompt) diff --git a/src/plugins/codegeex/widgets/askpagewidget.h b/src/plugins/codegeex/widgets/askpagewidget.h index a5542d305..b00f59120 100644 --- a/src/plugins/codegeex/widgets/askpagewidget.h +++ b/src/plugins/codegeex/widgets/askpagewidget.h @@ -51,6 +51,7 @@ public Q_SLOTS: void setInputText(const QString &prompt); void showCustomWidget(QWidget *widget); void updateModelCb(); + void onStopGenerate(); private: void initUI(); diff --git a/src/plugins/codegeex/widgets/messagecomponent.cpp b/src/plugins/codegeex/widgets/messagecomponent.cpp index 7116bd218..1d838f810 100644 --- a/src/plugins/codegeex/widgets/messagecomponent.cpp +++ b/src/plugins/codegeex/widgets/messagecomponent.cpp @@ -220,7 +220,7 @@ void MessageComponent::initConnect() showChunksReferences(); finished = true; }); - connect(CodeGeeXManager::instance(), &CodeGeeXManager::terminated, this, + connect(CodeGeeXManager::instance(), &CodeGeeXManager::requestStop, this, [=]() { finished = true; });