Dear {{ to }},
{{ inviter_name }} is pleased to invite you to join our workspace on {{application_title}}, a platform specifically designed for LLM application development. On {{application_title}}, you can explore, create, and collaborate to build and operate AI applications.
From 49df9ceaf369f3393178f984855705710997e38d Mon Sep 17 00:00:00 2001
From: NeatGuyCoding <15627489+NeatGuyCoding@users.noreply.github.com>
Date: Wed, 15 Oct 2025 09:41:12 +0800
Subject: [PATCH 2/6] minor fix: test cases for alibabacloud mysql and chinese
translations (#26902)
Signed-off-by: NeatGuyCoding <15627489+NeatGuyCoding@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
---
.../test_alibabacloud_mysql_vector.py | 37 ++++++++++++-------
web/i18n/zh-Hans/common.ts | 2 +-
2 files changed, 25 insertions(+), 14 deletions(-)
diff --git a/api/tests/unit_tests/core/rag/datasource/vdb/alibabacloud_mysql/test_alibabacloud_mysql_vector.py b/api/tests/unit_tests/core/rag/datasource/vdb/alibabacloud_mysql/test_alibabacloud_mysql_vector.py
index 44fe272c8c..8ccd739e64 100644
--- a/api/tests/unit_tests/core/rag/datasource/vdb/alibabacloud_mysql/test_alibabacloud_mysql_vector.py
+++ b/api/tests/unit_tests/core/rag/datasource/vdb/alibabacloud_mysql/test_alibabacloud_mysql_vector.py
@@ -110,19 +110,6 @@ class TestAlibabaCloudMySQLVector(unittest.TestCase):
assert mock_cursor.execute.call_count >= 3 # CREATE TABLE + 2 indexes
mock_redis.set.assert_called_once()
- def test_config_validation(self):
- """Test configuration validation."""
- # Test missing required fields
- with pytest.raises(ValueError):
- AlibabaCloudMySQLVectorConfig(
- host="", # Empty host should raise error
- port=3306,
- user="test",
- password="test",
- database="test",
- max_connection=5,
- )
-
@patch(
"core.rag.datasource.vdb.alibabacloud_mysql.alibabacloud_mysql_vector.mysql.connector.pooling.MySQLConnectionPool"
)
@@ -718,5 +705,29 @@ class TestAlibabaCloudMySQLVector(unittest.TestCase):
mock_cursor.fetchone.side_effect = [{"VERSION()": "8.0.36"}, {"vector_support": True}]
+@pytest.mark.parametrize(
+ "invalid_config_override",
+ [
+ {"host": ""}, # Test empty host
+ {"port": 0}, # Test invalid port
+ {"max_connection": 0}, # Test invalid max_connection
+ ],
+)
+def test_config_validation_parametrized(invalid_config_override):
+ """Test configuration validation for various invalid inputs using parametrize."""
+ config = {
+ "host": "localhost",
+ "port": 3306,
+ "user": "test",
+ "password": "test",
+ "database": "test",
+ "max_connection": 5,
+ }
+ config.update(invalid_config_override)
+
+ with pytest.raises(ValueError):
+ AlibabaCloudMySQLVectorConfig(**config)
+
+
if __name__ == "__main__":
unittest.main()
diff --git a/web/i18n/zh-Hans/common.ts b/web/i18n/zh-Hans/common.ts
index e73ac4cc6b..98ffb49782 100644
--- a/web/i18n/zh-Hans/common.ts
+++ b/web/i18n/zh-Hans/common.ts
@@ -20,7 +20,7 @@ const translation = {
save: '保存',
yes: '是',
no: '否',
- deleteConfirmTitle: '删除?',
+ deleteConfirmTitle: '删除?',
confirmAction: '请确认您的操作。',
saveAndEnable: '保存并启用',
edit: '编辑',
From 556b631c5414161a5639359ff99119a6e1eb4734 Mon Sep 17 00:00:00 2001
From: -LAN-
Date: Wed, 15 Oct 2025 09:42:22 +0800
Subject: [PATCH 3/6] Normalize null metadata handling in tool entities
(#26890)
---
api/core/tools/entities/tool_entities.py | 10 +++++++
.../core/tools/test_tool_entities.py | 29 +++++++++++++++++++
2 files changed, 39 insertions(+)
create mode 100644 api/tests/unit_tests/core/tools/test_tool_entities.py
diff --git a/api/core/tools/entities/tool_entities.py b/api/core/tools/entities/tool_entities.py
index 62e3aa8b5d..15a4f0aafd 100644
--- a/api/core/tools/entities/tool_entities.py
+++ b/api/core/tools/entities/tool_entities.py
@@ -189,6 +189,11 @@ class ToolInvokeMessage(BaseModel):
data: Mapping[str, Any] = Field(..., description="Detailed log data")
metadata: Mapping[str, Any] = Field(default_factory=dict, description="The metadata of the log")
+ @field_validator("metadata", mode="before")
+ @classmethod
+ def _normalize_metadata(cls, value: Mapping[str, Any] | None) -> Mapping[str, Any]:
+ return value or {}
+
class RetrieverResourceMessage(BaseModel):
retriever_resources: list[RetrievalSourceMetadata] = Field(..., description="retriever resources")
context: str = Field(..., description="context")
@@ -376,6 +381,11 @@ class ToolEntity(BaseModel):
def set_parameters(cls, v, validation_info: ValidationInfo) -> list[ToolParameter]:
return v or []
+ @field_validator("output_schema", mode="before")
+ @classmethod
+ def _normalize_output_schema(cls, value: Mapping[str, object] | None) -> Mapping[str, object]:
+ return value or {}
+
class OAuthSchema(BaseModel):
client_schema: list[ProviderConfig] = Field(
diff --git a/api/tests/unit_tests/core/tools/test_tool_entities.py b/api/tests/unit_tests/core/tools/test_tool_entities.py
new file mode 100644
index 0000000000..a5b7e8a9a3
--- /dev/null
+++ b/api/tests/unit_tests/core/tools/test_tool_entities.py
@@ -0,0 +1,29 @@
+from core.tools.entities.common_entities import I18nObject
+from core.tools.entities.tool_entities import ToolEntity, ToolIdentity, ToolInvokeMessage
+
+
+def _make_identity() -> ToolIdentity:
+ return ToolIdentity(
+ author="author",
+ name="tool",
+ label=I18nObject(en_US="Label"),
+ provider="builtin",
+ )
+
+
+def test_log_message_metadata_none_defaults_to_empty_dict():
+ log_message = ToolInvokeMessage.LogMessage(
+ id="log-1",
+ label="Log entry",
+ status=ToolInvokeMessage.LogMessage.LogStatus.START,
+ data={},
+ metadata=None,
+ )
+
+ assert log_message.metadata == {}
+
+
+def test_tool_entity_output_schema_none_defaults_to_empty_dict():
+ entity = ToolEntity(identity=_make_identity(), output_schema=None)
+
+ assert entity.output_schema == {}
From 1b537f904a2fc8fa9e07fe490ea7722c8064fbef Mon Sep 17 00:00:00 2001
From: Yusuke Yamada
Date: Wed, 15 Oct 2025 10:43:10 +0900
Subject: [PATCH 4/6] fix: replace CodeGroup's POST /meta with GET /site
(#26886)
---
web/app/components/develop/template/template.en.mdx | 4 ++--
web/app/components/develop/template/template.ja.mdx | 4 ++--
web/app/components/develop/template/template.zh.mdx | 4 ++--
web/app/components/develop/template/template_chat.en.mdx | 4 ++--
web/app/components/develop/template/template_chat.ja.mdx | 4 ++--
web/app/components/develop/template/template_chat.zh.mdx | 4 ++--
web/app/components/develop/template/template_workflow.en.mdx | 4 ++--
web/app/components/develop/template/template_workflow.ja.mdx | 4 ++--
web/app/components/develop/template/template_workflow.zh.mdx | 4 ++--
9 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/web/app/components/develop/template/template.en.mdx b/web/app/components/develop/template/template.en.mdx
index 38208bb7e0..8cb5f07ae8 100755
--- a/web/app/components/develop/template/template.en.mdx
+++ b/web/app/components/develop/template/template.en.mdx
@@ -767,8 +767,8 @@ The text generation application offers non-session support and is ideal for tran
diff --git a/web/app/components/develop/template/template.ja.mdx b/web/app/components/develop/template/template.ja.mdx
index 892197bf56..9df4421865 100755
--- a/web/app/components/develop/template/template.ja.mdx
+++ b/web/app/components/develop/template/template.ja.mdx
@@ -764,8 +764,8 @@ import { Row, Col, Properties, Property, Heading, SubProperty, Paragraph } from
diff --git a/web/app/components/develop/template/template.zh.mdx b/web/app/components/develop/template/template.zh.mdx
index 8d85e9685f..8436b51ce4 100755
--- a/web/app/components/develop/template/template.zh.mdx
+++ b/web/app/components/develop/template/template.zh.mdx
@@ -728,8 +728,8 @@ import { Row, Col, Properties, Property, Heading, SubProperty } from '../md.tsx'
diff --git a/web/app/components/develop/template/template_chat.en.mdx b/web/app/components/develop/template/template_chat.en.mdx
index 3c664a3d3f..df31177127 100644
--- a/web/app/components/develop/template/template_chat.en.mdx
+++ b/web/app/components/develop/template/template_chat.en.mdx
@@ -1599,8 +1599,8 @@ Chat applications support session persistence, allowing previous chat history to
diff --git a/web/app/components/develop/template/template_chat.ja.mdx b/web/app/components/develop/template/template_chat.ja.mdx
index 69f48d0216..eafa653cad 100644
--- a/web/app/components/develop/template/template_chat.ja.mdx
+++ b/web/app/components/develop/template/template_chat.ja.mdx
@@ -1586,8 +1586,8 @@ import { Row, Col, Properties, Property, Heading, SubProperty, Paragraph } from
diff --git a/web/app/components/develop/template/template_chat.zh.mdx b/web/app/components/develop/template/template_chat.zh.mdx
index 2273290d03..fc3fd6d0d2 100644
--- a/web/app/components/develop/template/template_chat.zh.mdx
+++ b/web/app/components/develop/template/template_chat.zh.mdx
@@ -1579,8 +1579,8 @@ import { Row, Col, Properties, Property, Heading, SubProperty } from '../md.tsx'
diff --git a/web/app/components/develop/template/template_workflow.en.mdx b/web/app/components/develop/template/template_workflow.en.mdx
index f286773685..a820516e88 100644
--- a/web/app/components/develop/template/template_workflow.en.mdx
+++ b/web/app/components/develop/template/template_workflow.en.mdx
@@ -1025,8 +1025,8 @@ Workflow applications offers non-session support and is ideal for translation, a
diff --git a/web/app/components/develop/template/template_workflow.ja.mdx b/web/app/components/develop/template/template_workflow.ja.mdx
index 3b1a8e1c36..ff809b8a9c 100644
--- a/web/app/components/develop/template/template_workflow.ja.mdx
+++ b/web/app/components/develop/template/template_workflow.ja.mdx
@@ -1021,8 +1021,8 @@ import { Row, Col, Properties, Property, Heading, SubProperty, Paragraph } from
diff --git a/web/app/components/develop/template/template_workflow.zh.mdx b/web/app/components/develop/template/template_workflow.zh.mdx
index 8b47e88293..0e2b19df83 100644
--- a/web/app/components/develop/template/template_workflow.zh.mdx
+++ b/web/app/components/develop/template/template_workflow.zh.mdx
@@ -1012,8 +1012,8 @@ Workflow 应用无会话支持,适合用于翻译/文章写作/总结 AI 等
From 513911930711bb66521a85b4ef89e50069e94eca Mon Sep 17 00:00:00 2001
From: lyzno1 <92089059+lyzno1@users.noreply.github.com>
Date: Wed, 15 Oct 2025 09:55:05 +0800
Subject: [PATCH 5/6] chore: bump pnpm version (#26905)
Signed-off-by: lyzno1
---
web/package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/web/package.json b/web/package.json
index 6ce808291e..562938d5b3 100644
--- a/web/package.json
+++ b/web/package.json
@@ -2,7 +2,7 @@
"name": "dify-web",
"version": "1.9.1",
"private": true,
- "packageManager": "pnpm@10.18.2",
+ "packageManager": "pnpm@10.18.3+sha512.bbd16e6d7286fd7e01f6b3c0b3c932cda2965c06a908328f74663f10a9aea51f1129eea615134bf992831b009eabe167ecb7008b597f40ff9bc75946aadfb08d",
"engines": {
"node": ">=v22.11.0"
},
From f906e70f6b80457b0d41e18381b35cdfff5932e5 Mon Sep 17 00:00:00 2001
From: Novice
Date: Wed, 15 Oct 2025 09:55:39 +0800
Subject: [PATCH 6/6] chore: remove redundant dependencies (#26907)
---
api/pyproject.toml | 1 -
api/uv.lock | 4 +---
2 files changed, 1 insertion(+), 4 deletions(-)
diff --git a/api/pyproject.toml b/api/pyproject.toml
index 1fb5747edc..62af88a1b2 100644
--- a/api/pyproject.toml
+++ b/api/pyproject.toml
@@ -86,7 +86,6 @@ dependencies = [
"sendgrid~=6.12.3",
"flask-restx~=1.3.0",
"packaging~=23.2",
- "weaviate-client==4.17.0",
]
# Before adding new dependency, consider place it in
# alphabet order (a-z) and suitable group.
diff --git a/api/uv.lock b/api/uv.lock
index 7914cd6b65..96aee8a97b 100644
--- a/api/uv.lock
+++ b/api/uv.lock
@@ -1,5 +1,5 @@
version = 1
-revision = 3
+revision = 2
requires-python = ">=3.11, <3.13"
resolution-markers = [
"python_full_version >= '3.12.4' and platform_python_implementation != 'PyPy' and sys_platform == 'linux'",
@@ -1372,7 +1372,6 @@ dependencies = [
{ name = "transformers" },
{ name = "unstructured", extra = ["docx", "epub", "md", "ppt", "pptx"] },
{ name = "weave" },
- { name = "weaviate-client" },
{ name = "webvtt-py" },
{ name = "yarl" },
]
@@ -1562,7 +1561,6 @@ requires-dist = [
{ name = "transformers", specifier = "~=4.56.1" },
{ name = "unstructured", extras = ["docx", "epub", "md", "ppt", "pptx"], specifier = "~=0.16.1" },
{ name = "weave", specifier = "~=0.51.0" },
- { name = "weaviate-client", specifier = "==4.17.0" },
{ name = "webvtt-py", specifier = "~=0.5.1" },
{ name = "yarl", specifier = "~=1.18.3" },
]