diff --git a/api/controllers/service_api/dataset/document.py b/api/controllers/service_api/dataset/document.py
index c800c0e4e1..49ff4f57dc 100644
--- a/api/controllers/service_api/dataset/document.py
+++ b/api/controllers/service_api/dataset/document.py
@@ -261,17 +261,6 @@ class DocumentAddByFileApi(DatasetApiResource):
@cloud_edition_billing_rate_limit_check("knowledge", "dataset")
def post(self, tenant_id, dataset_id):
"""Create document by upload file."""
- args = {}
- if "data" in request.form:
- args = json.loads(request.form["data"])
- if "doc_form" not in args:
- args["doc_form"] = "text_model"
- if "doc_language" not in args:
- args["doc_language"] = "English"
-
- # get dataset info
- dataset_id = str(dataset_id)
- tenant_id = str(tenant_id)
dataset = db.session.query(Dataset).where(Dataset.tenant_id == tenant_id, Dataset.id == dataset_id).first()
if not dataset:
@@ -280,6 +269,18 @@ class DocumentAddByFileApi(DatasetApiResource):
if dataset.provider == "external":
raise ValueError("External datasets are not supported.")
+ args = {}
+ if "data" in request.form:
+ args = json.loads(request.form["data"])
+ if "doc_form" not in args:
+ args["doc_form"] = dataset.chunk_structure or "text_model"
+ if "doc_language" not in args:
+ args["doc_language"] = "English"
+
+ # get dataset info
+ dataset_id = str(dataset_id)
+ tenant_id = str(tenant_id)
+
indexing_technique = args.get("indexing_technique") or dataset.indexing_technique
if not indexing_technique:
raise ValueError("indexing_technique is required.")
@@ -370,17 +371,6 @@ class DocumentUpdateByFileApi(DatasetApiResource):
@cloud_edition_billing_rate_limit_check("knowledge", "dataset")
def post(self, tenant_id, dataset_id, document_id):
"""Update document by upload file."""
- args = {}
- if "data" in request.form:
- args = json.loads(request.form["data"])
- if "doc_form" not in args:
- args["doc_form"] = "text_model"
- if "doc_language" not in args:
- args["doc_language"] = "English"
-
- # get dataset info
- dataset_id = str(dataset_id)
- tenant_id = str(tenant_id)
dataset = db.session.query(Dataset).where(Dataset.tenant_id == tenant_id, Dataset.id == dataset_id).first()
if not dataset:
@@ -389,6 +379,18 @@ class DocumentUpdateByFileApi(DatasetApiResource):
if dataset.provider == "external":
raise ValueError("External datasets are not supported.")
+ args = {}
+ if "data" in request.form:
+ args = json.loads(request.form["data"])
+ if "doc_form" not in args:
+ args["doc_form"] = dataset.chunk_structure or "text_model"
+ if "doc_language" not in args:
+ args["doc_language"] = "English"
+
+ # get dataset info
+ dataset_id = str(dataset_id)
+ tenant_id = str(tenant_id)
+
# indexing_technique is already set in dataset since this is an update
args["indexing_technique"] = dataset.indexing_technique
diff --git a/web/app/components/provider/serwist.tsx b/web/app/components/provider/serwist.tsx
index 39a80f5ac2..2eef43a7d6 100644
--- a/web/app/components/provider/serwist.tsx
+++ b/web/app/components/provider/serwist.tsx
@@ -1,3 +1,42 @@
'use client'
-export { SerwistProvider } from '@serwist/turbopack/react'
+import { SerwistProvider } from '@serwist/turbopack/react'
+import { useEffect } from 'react'
+import { IS_DEV } from '@/config'
+import { isClient } from '@/utils/client'
+
+export function PWAProvider({ children }: { children: React.ReactNode }) {
+ if (IS_DEV) {
+ return {children}
+ }
+
+ const basePath = process.env.NEXT_PUBLIC_BASE_PATH || ''
+ const swUrl = `${basePath}/serwist/sw.js`
+
+ return (
+
+ {children}
+
+ )
+}
+
+function DisabledPWAProvider({ children }: { children: React.ReactNode }) {
+ useEffect(() => {
+ if (isClient && 'serviceWorker' in navigator) {
+ navigator.serviceWorker.getRegistrations()
+ .then((registrations) => {
+ registrations.forEach((registration) => {
+ registration.unregister()
+ .catch((error) => {
+ console.error('Error unregistering service worker:', error)
+ })
+ })
+ })
+ .catch((error) => {
+ console.error('Error unregistering service workers:', error)
+ })
+ }
+ }, [])
+
+ return <>{children}>
+}
diff --git a/web/app/components/workflow/nodes/_base/components/next-step/index.tsx b/web/app/components/workflow/nodes/_base/components/next-step/index.tsx
index 0b22d44aac..8081f09b0c 100644
--- a/web/app/components/workflow/nodes/_base/components/next-step/index.tsx
+++ b/web/app/components/workflow/nodes/_base/components/next-step/index.tsx
@@ -44,11 +44,19 @@ const NextStep = ({
const connectedEdges = getConnectedEdges([selectedNode] as Node[], edges).filter(edge => edge.source === selectedNode!.id)
const list = useMemo(() => {
+ const resolveNextNodes = (connected: typeof connectedEdges) => {
+ return connected.reduce((acc, edge) => {
+ const nextNode = outgoers.find(outgoer => outgoer.id === edge.target)
+ if (nextNode)
+ acc.push(nextNode)
+ return acc
+ }, [])
+ }
let items = []
if (branches?.length) {
items = branches.map((branch, index) => {
const connected = connectedEdges.filter(edge => edge.sourceHandle === branch.id)
- const nextNodes = connected.map(edge => outgoers.find(outgoer => outgoer.id === edge.target)!)
+ const nextNodes = resolveNextNodes(connected)
return {
branch: {
@@ -61,7 +69,7 @@ const NextStep = ({
}
else {
const connected = connectedEdges.filter(edge => edge.sourceHandle === 'source')
- const nextNodes = connected.map(edge => outgoers.find(outgoer => outgoer.id === edge.target)!)
+ const nextNodes = resolveNextNodes(connected)
items = [{
branch: {
@@ -73,7 +81,7 @@ const NextStep = ({
if (data.error_strategy === ErrorHandleTypeEnum.failBranch && hasErrorHandleNode(data.type)) {
const connected = connectedEdges.filter(edge => edge.sourceHandle === ErrorHandleTypeEnum.failBranch)
- const nextNodes = connected.map(edge => outgoers.find(outgoer => outgoer.id === edge.target)!)
+ const nextNodes = resolveNextNodes(connected)
items.push({
branch: {
diff --git a/web/app/layout.tsx b/web/app/layout.tsx
index b970fddc7a..845cae2d4e 100644
--- a/web/app/layout.tsx
+++ b/web/app/layout.tsx
@@ -12,7 +12,7 @@ import { ToastProvider } from './components/base/toast'
import BrowserInitializer from './components/browser-initializer'
import { ReactScanLoader } from './components/devtools/react-scan/loader'
import { I18nServerProvider } from './components/provider/i18n-server'
-import { SerwistProvider } from './components/provider/serwist'
+import { PWAProvider } from './components/provider/serwist'
import SentryInitializer from './components/sentry-initializer'
import RoutePrefixHandle from './routePrefixHandle'
import './styles/globals.css'
@@ -40,9 +40,6 @@ const LocaleLayout = async ({
}) => {
const locale = await getLocaleOnServer()
- const basePath = process.env.NEXT_PUBLIC_BASE_PATH || ''
- const swUrl = `${basePath}/serwist/sw.js`
-
const datasetMap: Record = {
[DatasetAttr.DATA_API_PREFIX]: process.env.NEXT_PUBLIC_API_PREFIX,
[DatasetAttr.DATA_PUBLIC_API_PREFIX]: process.env.NEXT_PUBLIC_PUBLIC_API_PREFIX,
@@ -96,7 +93,7 @@ const LocaleLayout = async ({
className="color-scheme h-full select-auto"
{...datasetMap}
>
-
+
-
+