Explorar el Código

:art: 支持应用内配置人工智能 https://github.com/siyuan-note/siyuan/issues/7714

Liang Ding hace 2 años
padre
commit
b595357610
Se han modificado 2 ficheros con 73 adiciones y 0 borrados
  1. 67 0
      kernel/conf/ai.go
  2. 6 0
      kernel/model/conf.go

+ 67 - 0
kernel/conf/ai.go

@@ -0,0 +1,67 @@
+// 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 <https://www.gnu.org/licenses/>.
+
+package conf
+
+import (
+	"os"
+	"strconv"
+)
+
+type AI struct {
+	OpenAI *OpenAI `json:"openAI"`
+}
+
+type OpenAI struct {
+	APIKey       string `json:"apiKey"`
+	APITimeout   int    `json:"apiTimeout"`
+	APIProxy     string `json:"apiProxy"`
+	APIMaxTokens int    `json:"apiMaxTokens"`
+	APIBaseURL   string `json:"apiBaseURL"`
+}
+
+func NewAI() *AI {
+	openAI := &OpenAI{
+		APITimeout: 30,
+		APIBaseURL: "https://api.openai.com/v1",
+	}
+
+	openAI.APIKey = os.Getenv("SIYUAN_OPENAI_API_KEY")
+
+	if timeout := os.Getenv("SIYUAN_OPENAI_API_TIMEOUT"); "" != timeout {
+		timeoutInt, err := strconv.Atoi(timeout)
+		if nil == err {
+			openAI.APITimeout = timeoutInt
+		}
+	}
+
+	if proxy := os.Getenv("SIYUAN_OPENAI_API_PROXY"); "" != proxy {
+		openAI.APIProxy = proxy
+	}
+
+	if maxTokens := os.Getenv("SIYUAN_OPENAI_API_MAX_TOKENS"); "" != maxTokens {
+		maxTokensInt, err := strconv.Atoi(maxTokens)
+		if nil == err {
+			openAI.APIMaxTokens = maxTokensInt
+		}
+	}
+
+	if baseURL := os.Getenv("SIYUAN_OPENAI_API_BASE_URL"); "" != baseURL {
+		openAI.APIBaseURL = baseURL
+	}
+
+	return &AI{OpenAI: openAI}
+}

+ 6 - 0
kernel/model/conf.go

@@ -70,6 +70,7 @@ type AppConf struct {
 	Sync           *conf.Sync       `json:"sync"`           // 同步配置
 	Search         *conf.Search     `json:"search"`         // 搜索配置
 	Flashcard      *conf.Flashcard  `json:"flashcard"`      // 闪卡配置
+	AI             *conf.AI         `json:"ai"`             // 人工智能配置
 	Stat           *conf.Stat       `json:"stat"`           // 统计
 	Api            *conf.API        `json:"api"`            // API
 	Repo           *conf.Repo       `json:"repo"`           // 数据仓库
@@ -318,6 +319,11 @@ func InitConf() {
 		Conf.Flashcard = conf.NewFlashcard()
 	}
 
+	// TODO 支持应用内配置人工智能 https://github.com/siyuan-note/siyuan/issues/7714
+	//if nil == Conf.AI {
+	//	Conf.AI = conf.NewAI()
+	//}
+
 	Conf.ReadOnly = util.ReadOnly
 
 	if "" != util.AccessAuthCode {