diff --git a/kernel/conf/ai.go b/kernel/conf/ai.go new file mode 100644 index 000000000..6f265883f --- /dev/null +++ b/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 . + +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} +} diff --git a/kernel/model/conf.go b/kernel/model/conf.go index eb733cff6..be2fd0840 100644 --- a/kernel/model/conf.go +++ b/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 {