diff --git a/kernel/api/ai.go b/kernel/api/ai.go index 0182b7916..1def61b5b 100644 --- a/kernel/api/ai.go +++ b/kernel/api/ai.go @@ -35,10 +35,22 @@ func chatGPT(c *gin.Context) { } msg := arg["msg"].(string) - if "" == util.OpenAIAPIKey { - util.PushMsg(model.Conf.Language(193), 5000) + ret.Data = model.ChatGPT(msg) +} + +func chatGPTContinueWriteBlocks(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { return } - ret.Data = util.ChatGPT(msg) + idsArg := arg["ids"].([]interface{}) + var ids []string + for _, id := range idsArg { + ids = append(ids, id.(string)) + } + ret.Data = model.ChatGPTContinueWriteBlocks(ids) } diff --git a/kernel/api/router.go b/kernel/api/router.go index 32ec0addb..2030ed49c 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -329,4 +329,5 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/av/renderAttributeView", model.CheckAuth, renderAttributeView) ginServer.Handle("POST", "/api/ai/chatGPT", model.CheckAuth, chatGPT) + ginServer.Handle("POST", "/api/ai/chatGPTContinueWriteBlocks", model.CheckAuth, chatGPTContinueWriteBlocks) } diff --git a/kernel/model/ai.go b/kernel/model/ai.go new file mode 100644 index 000000000..7f73840cf --- /dev/null +++ b/kernel/model/ai.go @@ -0,0 +1,41 @@ +// SiYuan - Build Your Eternal Digital Garden +// Copyright (c) 2020-present, b3log.org +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package model + +import ( + "bytes" + + "github.com/siyuan-note/siyuan/kernel/sql" + "github.com/siyuan-note/siyuan/kernel/util" +) + +func ChatGPTContinueWriteBlocks(ids []string) (ret string) { + sqlBlocks := sql.GetBlocks(ids) + + buf := bytes.Buffer{} + for _, sqlBlock := range sqlBlocks { + buf.WriteString(sqlBlock.Content) + buf.WriteString("\n\n") + } + + msg := buf.String() + ret, _ = util.ChatGPTContinueWrite(msg, nil) + return +} +func ChatGPT(msg string) (ret string) { + return util.ChatGPT(msg) +} diff --git a/kernel/util/openai.go b/kernel/util/openai.go index db71654c4..083063a68 100644 --- a/kernel/util/openai.go +++ b/kernel/util/openai.go @@ -19,6 +19,7 @@ package util import ( "bytes" "context" + "github.com/siyuan-note/siyuan/kernel/model" "net/http" "net/url" "os" @@ -47,6 +48,7 @@ func ChatGPT(msg string) (ret string) { func ChatGPTContinueWrite(msg string, contextMsgs []string) (ret string, retContextMsgs []string) { if "" == OpenAIAPIKey { + PushMsg(model.Conf.Language(193), 5000) return }