From 66164e6cdecb1d6fcbc621d14fd0548ed901910a Mon Sep 17 00:00:00 2001 From: wangdan-fit2cloud Date: Wed, 26 Feb 2025 16:48:23 +0800 Subject: [PATCH 1/6] fix: execution detail missing field --- ui/src/components/ai-chat/ExecutionDetailDialog.vue | 1 + ui/src/components/ai-chat/component/ParagraphCard.vue | 8 ++++++-- .../views/function-lib/component/FunctionFormDrawer.vue | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ui/src/components/ai-chat/ExecutionDetailDialog.vue b/ui/src/components/ai-chat/ExecutionDetailDialog.vue index 4f97c0085..76917fc9d 100644 --- a/ui/src/components/ai-chat/ExecutionDetailDialog.vue +++ b/ui/src/components/ai-chat/ExecutionDetailDialog.vue @@ -454,6 +454,7 @@ :data="paragraph.metadata" :content="paragraph.page_content" :index="paragraphIndex" + :score="paragraph.metadata?.relevance_score" /> diff --git a/ui/src/components/ai-chat/component/ParagraphCard.vue b/ui/src/components/ai-chat/component/ParagraphCard.vue index de8010deb..82fbd13cd 100644 --- a/ui/src/components/ai-chat/component/ParagraphCard.vue +++ b/ui/src/components/ai-chat/component/ParagraphCard.vue @@ -9,10 +9,10 @@ -
{{ data.similarity?.toFixed(3) }}
+
{{ score?.toFixed(3) || data.similarity?.toFixed(3) }}
- + {{ $t('chat.tip.stopAnswer') }} - + {{ $t('chat.tip.answerLoading') }} diff --git a/ui/src/components/ai-chat/component/prologue-content/index.vue b/ui/src/components/ai-chat/component/prologue-content/index.vue index 3cf7a467e..0ed86b625 100644 --- a/ui/src/components/ai-chat/component/prologue-content/index.vue +++ b/ui/src/components/ai-chat/component/prologue-content/index.vue @@ -6,7 +6,7 @@
- +
-
+
- - + + +
@@ -53,17 +47,8 @@
- - + + +
- {{ chatRecord.problem_text }} + {{ chatRecord.problem_text }}
@@ -140,6 +125,16 @@ onMounted(() => {}) .question-content { display: flex; justify-content: flex-end; + padding-left: var(--padding-left); + width: 100%; + box-sizing: border-box; + + .content { + background: #d6e2ff; + padding-left: 16px; + padding-right: 16px; + + } .download-file { height: 43px; @@ -163,5 +158,44 @@ onMounted(() => {}) display: none; } } + .media-file-width { + :deep(.el-space__item) { + min-width: 40% !important; + flex-grow: 1; + } + } + .media_2 { + flex: 1; + } + .media_0 { + flex: inherit; + } + .media_1 { + width: 50%; + } +} +@media only screen and (max-width: 768px) { + .question-content { + .media-file-width { + :deep(.el-space__item) { + min-width: 100% !important; + } + } + .media_1 { + width: 100%; + } + } +} +.debug-ai-chat { + .question-content { + .media-file-width { + :deep(.el-space__item) { + min-width: 100% !important; + } + } + .media_1 { + width: 100%; + } + } } diff --git a/ui/src/components/ai-chat/component/user-form/index.vue b/ui/src/components/ai-chat/component/user-form/index.vue index b2c89a0e4..980ad8663 100644 --- a/ui/src/components/ai-chat/component/user-form/index.vue +++ b/ui/src/components/ai-chat/component/user-form/index.vue @@ -7,7 +7,7 @@ class="mb-16" style="padding: 0 24px" > - +
-
+
-

+

{{ currentChatName }}

From 1811a80eccdffd13cb567726b98a66a17d169ef7 Mon Sep 17 00:00:00 2001 From: shaohuzhang1 <80892890+shaohuzhang1@users.noreply.github.com> Date: Thu, 27 Feb 2025 10:17:04 +0800 Subject: [PATCH 6/6] perf: enable gzip. (#2422) --- apps/common/middleware/gzip.py | 84 ++++++++++++++++++++++++++++++++++ apps/smartdoc/settings/base.py | 2 +- 2 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 apps/common/middleware/gzip.py diff --git a/apps/common/middleware/gzip.py b/apps/common/middleware/gzip.py new file mode 100644 index 000000000..229ec09b3 --- /dev/null +++ b/apps/common/middleware/gzip.py @@ -0,0 +1,84 @@ +# coding=utf-8 +""" + @project: MaxKB + @Author:虎 + @file: gzip.py + @date:2025/2/27 10:03 + @desc: +""" +from django.utils.cache import patch_vary_headers +from django.utils.deprecation import MiddlewareMixin +from django.utils.regex_helper import _lazy_re_compile +from django.utils.text import compress_sequence, compress_string + +re_accepts_gzip = _lazy_re_compile(r"\bgzip\b") + + +class GZipMiddleware(MiddlewareMixin): + """ + Compress content if the browser allows gzip compression. + Set the Vary header accordingly, so that caches will base their storage + on the Accept-Encoding header. + """ + + max_random_bytes = 100 + + def process_response(self, request, response): + if request.method != 'GET' or request.path.startswith('/api'): + return response + # It's not worth attempting to compress really short responses. + if not response.streaming and len(response.content) < 200: + return response + + # Avoid gzipping if we've already got a content-encoding. + if response.has_header("Content-Encoding"): + return response + + patch_vary_headers(response, ("Accept-Encoding",)) + + ae = request.META.get("HTTP_ACCEPT_ENCODING", "") + if not re_accepts_gzip.search(ae): + return response + + if response.streaming: + if response.is_async: + # pull to lexical scope to capture fixed reference in case + # streaming_content is set again later. + orignal_iterator = response.streaming_content + + async def gzip_wrapper(): + async for chunk in orignal_iterator: + yield compress_string( + chunk, + max_random_bytes=self.max_random_bytes, + ) + + response.streaming_content = gzip_wrapper() + else: + response.streaming_content = compress_sequence( + response.streaming_content, + max_random_bytes=self.max_random_bytes, + ) + # Delete the `Content-Length` header for streaming content, because + # we won't know the compressed size until we stream it. + del response.headers["Content-Length"] + else: + # Return the compressed content only if it's actually shorter. + compressed_content = compress_string( + response.content, + max_random_bytes=self.max_random_bytes, + ) + if len(compressed_content) >= len(response.content): + return response + response.content = compressed_content + response.headers["Content-Length"] = str(len(response.content)) + + # If there is a strong ETag, make it weak to fulfill the requirements + # of RFC 9110 Section 8.8.1 while also allowing conditional request + # matches on ETags. + etag = response.get("ETag") + if etag and etag.startswith('"'): + response.headers["ETag"] = "W/" + etag + response.headers["Content-Encoding"] = "gzip" + + return response diff --git a/apps/smartdoc/settings/base.py b/apps/smartdoc/settings/base.py index cda860b76..b804c637e 100644 --- a/apps/smartdoc/settings/base.py +++ b/apps/smartdoc/settings/base.py @@ -55,7 +55,7 @@ MIDDLEWARE = [ 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.gzip.GZipMiddleware', + 'common.middleware.gzip.GZipMiddleware', 'common.middleware.static_headers_middleware.StaticHeadersMiddleware', 'common.middleware.cross_domain_middleware.CrossDomainMiddleware'