diff --git a/.dockerignore b/.dockerignore
index 537aa4c..97e82ae 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -15,6 +15,7 @@ screenshot
config.yaml
config.dev.yaml
+# current in ~/storage
addition/generation/data/*
!addition/generation/data/.gitkeep
diff --git a/README.md b/README.md
index 64f5e37..58d083c 100644
--- a/README.md
+++ b/README.md
@@ -145,6 +145,7 @@ _🚀 **Next Generation AI One-Stop Solution**_
-p 8000:8094 \
-v ~/config:/config \
-v ~/logs:/logs \
+ -v ~/storage:/storage \
-e MYSQL_HOST=localhost \
-e MYSQL_PORT=3306 \
-e MYSQL_DATABASE=chatnio \
@@ -160,7 +161,7 @@ _🚀 **Next Generation AI One-Stop Solution**_
> - *-p 8000:8094* 指映射宿主机端口为 8000, 可自行修改冒号前的端口号
> - SECRET: JWT 密钥, 自行生成随机字符串修改
> - SERVE_STATIC: 是否启用静态文件服务 (正常情况下不需要更改此项, 详见下方常见问题解答)
- > - *-v ~/config:/config* 和 *-v ~/logs:/logs* 指挂载配置文件和日志文件的宿主机目录, 可自行修改
+ > - *-v ~/config:/config* 挂载配置文件, *-v ~/logs:/logs* 挂载日志文件的宿主机目录, *-v ~/storage:/storage* 挂载附加功能的生成文件
> - 需配置 MySQL 和 Redis 服务, 请自行参考上方信息修改环境变量
版本更新 (_开启 Watchtower 后无需手动更新, 执行后按照上述步骤重新运行即可_):
diff --git a/addition/article/api.go b/addition/article/api.go
index bccac1e..93a7ff4 100644
--- a/addition/article/api.go
+++ b/addition/article/api.go
@@ -25,13 +25,13 @@ type WebsocketArticleResponse struct {
func ProjectTarDownloadAPI(c *gin.Context) {
hash := strings.TrimSpace(c.Query("hash"))
c.Writer.Header().Add("Content-Disposition", "attachment; filename=article.tar.gz")
- c.File(fmt.Sprintf("addition/article/data/out/%s.tar.gz", hash))
+ c.File(fmt.Sprintf("storage/article/%s.tar.gz", hash))
}
func ProjectZipDownloadAPI(c *gin.Context) {
hash := strings.TrimSpace(c.Query("hash"))
c.Writer.Header().Add("Content-Disposition", "attachment; filename=article.zip")
- c.File(fmt.Sprintf("addition/article/data/out/%s.zip", hash))
+ c.File(fmt.Sprintf("storage/article/%s.zip", hash))
}
func GenerateAPI(c *gin.Context) {
diff --git a/addition/article/generate.go b/addition/article/generate.go
index b35f854..f93a60a 100644
--- a/addition/article/generate.go
+++ b/addition/article/generate.go
@@ -75,8 +75,8 @@ func CreateWorker(c *gin.Context, user *auth.User, model string, prompt string,
hook(StreamProgressResponse{Current: current, Total: total, Quota: 0})
- path := fmt.Sprintf("addition/article/data/%s", hash)
- if _, _, err := utils.GenerateCompressTask(hash, "addition/article/data/out", path, path); err != nil {
+ path := fmt.Sprintf("storage/article/data/%s", hash)
+ if _, _, err := utils.GenerateCompressTask(hash, "storage/article", path, path); err != nil {
globals.Debug(fmt.Sprintf("[article] error during generate compress task: %s", err.Error()))
return ""
}
diff --git a/addition/article/utils.go b/addition/article/utils.go
index 8dad4d8..4352d67 100644
--- a/addition/article/utils.go
+++ b/addition/article/utils.go
@@ -30,7 +30,7 @@ func GenerateDocxFile(target, title, content string) error {
}
func CreateArticleFile(hash, title, content string) string {
- target := fmt.Sprintf("addition/article/data/%s/%s.docx", hash, title)
+ target := fmt.Sprintf("storage/article/data/%s/%s.docx", hash, title)
utils.FileDirSafe(target)
if err := GenerateDocxFile(target, title, content); err != nil {
globals.Debug(fmt.Sprintf("[article] error during generate article %s: %s", title, err.Error()))
diff --git a/addition/generation/api.go b/addition/generation/api.go
index 35f666b..466768b 100644
--- a/addition/generation/api.go
+++ b/addition/generation/api.go
@@ -18,13 +18,13 @@ type WebsocketGenerationForm struct {
func ProjectTarDownloadAPI(c *gin.Context) {
hash := strings.TrimSpace(c.Query("hash"))
c.Writer.Header().Add("Content-Disposition", "attachment; filename=code.tar.gz")
- c.File(fmt.Sprintf("addition/generation/data/out/%s.tar.gz", hash))
+ c.File(fmt.Sprintf("storage/generation/%s.tar.gz", hash))
}
func ProjectZipDownloadAPI(c *gin.Context) {
hash := strings.TrimSpace(c.Query("hash"))
c.Writer.Header().Add("Content-Disposition", "attachment; filename=code.zip")
- c.File(fmt.Sprintf("addition/generation/data/out/%s.zip", hash))
+ c.File(fmt.Sprintf("storage/generation/%s.zip", hash))
}
func GenerateAPI(c *gin.Context) {
diff --git a/addition/generation/build.go b/addition/generation/build.go
index 530b672..364b2ed 100644
--- a/addition/generation/build.go
+++ b/addition/generation/build.go
@@ -7,7 +7,7 @@ import (
)
func GetFolder(hash string) string {
- return fmt.Sprintf("addition/generation/data/%s", hash)
+ return fmt.Sprintf("storage/generation/data/%s", hash)
}
func GetFolderByHash(model string, prompt string) (string, string) {
diff --git a/addition/generation/generate.go b/addition/generation/generate.go
index e8ba285..561cf56 100644
--- a/addition/generation/generate.go
+++ b/addition/generation/generate.go
@@ -15,7 +15,7 @@ func CreateGenerationWithCache(group, model, prompt string, hook func(buffer *ut
}
}
- if _, _, err := utils.GenerateCompressTask(hash, "addition/generation/data/out", path, path); err != nil {
+ if _, _, err := utils.GenerateCompressTask(hash, "storage/generation", path, path); err != nil {
return "", fmt.Errorf("error during generate compress task: %s", err.Error())
}
diff --git a/app/src/components/Markdown.tsx b/app/src/components/Markdown.tsx
index 2b98e58..b6f1a8b 100644
--- a/app/src/components/Markdown.tsx
+++ b/app/src/components/Markdown.tsx
@@ -246,7 +246,10 @@ function MarkdownContent({
{quota.toFixed(2)}
+