diff --git a/api/.importlinter b/api/.importlinter
index 6a880678e8..ff0577222e 100644
--- a/api/.importlinter
+++ b/api/.importlinter
@@ -105,7 +105,6 @@ ignore_imports =
core.workflow.nodes.loop.loop_node -> core.app.workflow.node_factory
core.workflow.graph_engine.command_channels.redis_channel -> extensions.ext_redis
core.workflow.workflow_entry -> core.app.workflow.layers.observability
- core.workflow.graph_engine.worker_management.worker_pool -> configs
core.workflow.nodes.agent.agent_node -> core.model_manager
core.workflow.nodes.agent.agent_node -> core.provider_manager
core.workflow.nodes.agent.agent_node -> core.tools.tool_manager
diff --git a/api/core/workflow/graph_engine/__init__.py b/api/core/workflow/graph_engine/__init__.py
index fe792c71ad..0e1c7dd60a 100644
--- a/api/core/workflow/graph_engine/__init__.py
+++ b/api/core/workflow/graph_engine/__init__.py
@@ -1,3 +1,4 @@
+from .config import GraphEngineConfig
from .graph_engine import GraphEngine
-__all__ = ["GraphEngine"]
+__all__ = ["GraphEngine", "GraphEngineConfig"]
diff --git a/api/core/workflow/graph_engine/config.py b/api/core/workflow/graph_engine/config.py
new file mode 100644
index 0000000000..10dbbd7535
--- /dev/null
+++ b/api/core/workflow/graph_engine/config.py
@@ -0,0 +1,14 @@
+"""
+GraphEngine configuration models.
+"""
+
+from pydantic import BaseModel
+
+
+class GraphEngineConfig(BaseModel):
+ """Configuration for GraphEngine worker pool scaling."""
+
+ min_workers: int = 1
+ max_workers: int = 5
+ scale_up_threshold: int = 3
+ scale_down_idle_time: float = 5.0
diff --git a/api/core/workflow/graph_engine/graph_engine.py b/api/core/workflow/graph_engine/graph_engine.py
index dbb2727c98..0b359a2392 100644
--- a/api/core/workflow/graph_engine/graph_engine.py
+++ b/api/core/workflow/graph_engine/graph_engine.py
@@ -37,6 +37,7 @@ from .command_processing import (
PauseCommandHandler,
UpdateVariablesCommandHandler,
)
+from .config import GraphEngineConfig
from .entities.commands import AbortCommand, PauseCommand, UpdateVariablesCommand
from .error_handler import ErrorHandler
from .event_management import EventHandler, EventManager
@@ -70,10 +71,7 @@ class GraphEngine:
graph: Graph,
graph_runtime_state: GraphRuntimeState,
command_channel: CommandChannel,
- min_workers: int | None = None,
- max_workers: int | None = None,
- scale_up_threshold: int | None = None,
- scale_down_idle_time: float | None = None,
+ config: GraphEngineConfig,
) -> None:
"""Initialize the graph engine with all subsystems and dependencies."""
# stop event
@@ -85,18 +83,12 @@ class GraphEngine:
self._graph_runtime_state.stop_event = self._stop_event
self._graph_runtime_state.configure(graph=cast("GraphProtocol", graph))
self._command_channel = command_channel
+ self._config = config
# Graph execution tracks the overall execution state
self._graph_execution = cast("GraphExecution", self._graph_runtime_state.graph_execution)
self._graph_execution.workflow_id = workflow_id
- # === Worker Management Parameters ===
- # Parameters for dynamic worker pool scaling
- self._min_workers = min_workers
- self._max_workers = max_workers
- self._scale_up_threshold = scale_up_threshold
- self._scale_down_idle_time = scale_down_idle_time
-
# === Execution Queues ===
self._ready_queue = cast(ReadyQueue, self._graph_runtime_state.ready_queue)
@@ -167,10 +159,7 @@ class GraphEngine:
graph=self._graph,
layers=self._layers,
execution_context=execution_context,
- min_workers=self._min_workers,
- max_workers=self._max_workers,
- scale_up_threshold=self._scale_up_threshold,
- scale_down_idle_time=self._scale_down_idle_time,
+ config=self._config,
stop_event=self._stop_event,
)
diff --git a/api/core/workflow/graph_engine/worker_management/worker_pool.py b/api/core/workflow/graph_engine/worker_management/worker_pool.py
index 9ce7d16e93..3bff566ac8 100644
--- a/api/core/workflow/graph_engine/worker_management/worker_pool.py
+++ b/api/core/workflow/graph_engine/worker_management/worker_pool.py
@@ -10,11 +10,11 @@ import queue
import threading
from typing import final
-from configs import dify_config
from core.workflow.context import IExecutionContext
from core.workflow.graph import Graph
from core.workflow.graph_events import GraphNodeEventBase
+from ..config import GraphEngineConfig
from ..layers.base import GraphEngineLayer
from ..ready_queue import ReadyQueue
from ..worker import Worker
@@ -38,11 +38,8 @@ class WorkerPool:
graph: Graph,
layers: list[GraphEngineLayer],
stop_event: threading.Event,
+ config: GraphEngineConfig,
execution_context: IExecutionContext | None = None,
- min_workers: int | None = None,
- max_workers: int | None = None,
- scale_up_threshold: int | None = None,
- scale_down_idle_time: float | None = None,
) -> None:
"""
Initialize the simple worker pool.
@@ -52,23 +49,15 @@ class WorkerPool:
event_queue: Queue for worker events
graph: The workflow graph
layers: Graph engine layers for node execution hooks
+ config: GraphEngine worker pool configuration
execution_context: Optional execution context for context preservation
- min_workers: Minimum number of workers
- max_workers: Maximum number of workers
- scale_up_threshold: Queue depth to trigger scale up
- scale_down_idle_time: Seconds before scaling down idle workers
"""
self._ready_queue = ready_queue
self._event_queue = event_queue
self._graph = graph
self._execution_context = execution_context
self._layers = layers
-
- # Scaling parameters with defaults
- self._min_workers = min_workers or dify_config.GRAPH_ENGINE_MIN_WORKERS
- self._max_workers = max_workers or dify_config.GRAPH_ENGINE_MAX_WORKERS
- self._scale_up_threshold = scale_up_threshold or dify_config.GRAPH_ENGINE_SCALE_UP_THRESHOLD
- self._scale_down_idle_time = scale_down_idle_time or dify_config.GRAPH_ENGINE_SCALE_DOWN_IDLE_TIME
+ self._config = config
# Worker management
self._workers: list[Worker] = []
@@ -96,18 +85,18 @@ class WorkerPool:
if initial_count is None:
node_count = len(self._graph.nodes)
if node_count < 10:
- initial_count = self._min_workers
+ initial_count = self._config.min_workers
elif node_count < 50:
- initial_count = min(self._min_workers + 1, self._max_workers)
+ initial_count = min(self._config.min_workers + 1, self._config.max_workers)
else:
- initial_count = min(self._min_workers + 2, self._max_workers)
+ initial_count = min(self._config.min_workers + 2, self._config.max_workers)
logger.debug(
"Starting worker pool: %d workers (nodes=%d, min=%d, max=%d)",
initial_count,
node_count,
- self._min_workers,
- self._max_workers,
+ self._config.min_workers,
+ self._config.max_workers,
)
# Create initial workers
@@ -176,7 +165,7 @@ class WorkerPool:
Returns:
True if scaled up, False otherwise
"""
- if queue_depth > self._scale_up_threshold and current_count < self._max_workers:
+ if queue_depth > self._config.scale_up_threshold and current_count < self._config.max_workers:
old_count = current_count
self._create_worker()
@@ -185,7 +174,7 @@ class WorkerPool:
old_count,
len(self._workers),
queue_depth,
- self._scale_up_threshold,
+ self._config.scale_up_threshold,
)
return True
return False
@@ -204,7 +193,7 @@ class WorkerPool:
True if scaled down, False otherwise
"""
# Skip if we're at minimum or have no idle workers
- if current_count <= self._min_workers or idle_count == 0:
+ if current_count <= self._config.min_workers or idle_count == 0:
return False
# Check if we have excess capacity
@@ -222,10 +211,10 @@ class WorkerPool:
for worker in self._workers:
# Check if worker is idle and has exceeded idle time threshold
- if worker.is_idle and worker.idle_duration >= self._scale_down_idle_time:
+ if worker.is_idle and worker.idle_duration >= self._config.scale_down_idle_time:
# Don't remove if it would leave us unable to handle the queue
remaining_workers = current_count - len(workers_to_remove) - 1
- if remaining_workers >= self._min_workers and remaining_workers >= max(1, queue_depth // 2):
+ if remaining_workers >= self._config.min_workers and remaining_workers >= max(1, queue_depth // 2):
workers_to_remove.append((worker, worker.worker_id))
# Only remove one worker per check to avoid aggressive scaling
break
@@ -242,7 +231,7 @@ class WorkerPool:
old_count,
len(self._workers),
len(workers_to_remove),
- self._scale_down_idle_time,
+ self._config.scale_down_idle_time,
queue_depth,
active_count,
idle_count - len(workers_to_remove),
@@ -286,6 +275,6 @@ class WorkerPool:
return {
"total_workers": len(self._workers),
"queue_depth": self._ready_queue.qsize(),
- "min_workers": self._min_workers,
- "max_workers": self._max_workers,
+ "min_workers": self._config.min_workers,
+ "max_workers": self._config.max_workers,
}
diff --git a/api/core/workflow/nodes/iteration/iteration_node.py b/api/core/workflow/nodes/iteration/iteration_node.py
index ced996e7e0..c19182549f 100644
--- a/api/core/workflow/nodes/iteration/iteration_node.py
+++ b/api/core/workflow/nodes/iteration/iteration_node.py
@@ -591,7 +591,7 @@ class IterationNode(LLMUsageTrackingMixin, Node[IterationNodeData]):
from core.app.workflow.node_factory import DifyNodeFactory
from core.workflow.entities import GraphInitParams
from core.workflow.graph import Graph
- from core.workflow.graph_engine import GraphEngine
+ from core.workflow.graph_engine import GraphEngine, GraphEngineConfig
from core.workflow.graph_engine.command_channels import InMemoryChannel
from core.workflow.runtime import GraphRuntimeState
@@ -640,6 +640,7 @@ class IterationNode(LLMUsageTrackingMixin, Node[IterationNodeData]):
graph=iteration_graph,
graph_runtime_state=graph_runtime_state_copy,
command_channel=InMemoryChannel(), # Use InMemoryChannel for sub-graphs
+ config=GraphEngineConfig(),
)
return graph_engine
diff --git a/api/core/workflow/nodes/loop/loop_node.py b/api/core/workflow/nodes/loop/loop_node.py
index 07d05966cc..84a9c29414 100644
--- a/api/core/workflow/nodes/loop/loop_node.py
+++ b/api/core/workflow/nodes/loop/loop_node.py
@@ -416,7 +416,7 @@ class LoopNode(LLMUsageTrackingMixin, Node[LoopNodeData]):
from core.app.workflow.node_factory import DifyNodeFactory
from core.workflow.entities import GraphInitParams
from core.workflow.graph import Graph
- from core.workflow.graph_engine import GraphEngine
+ from core.workflow.graph_engine import GraphEngine, GraphEngineConfig
from core.workflow.graph_engine.command_channels import InMemoryChannel
from core.workflow.runtime import GraphRuntimeState
@@ -452,6 +452,7 @@ class LoopNode(LLMUsageTrackingMixin, Node[LoopNodeData]):
graph=loop_graph,
graph_runtime_state=graph_runtime_state_copy,
command_channel=InMemoryChannel(), # Use InMemoryChannel for sub-graphs
+ config=GraphEngineConfig(),
)
return graph_engine
diff --git a/api/core/workflow/workflow_entry.py b/api/core/workflow/workflow_entry.py
index b645f29d27..43f15f6fd0 100644
--- a/api/core/workflow/workflow_entry.py
+++ b/api/core/workflow/workflow_entry.py
@@ -14,7 +14,7 @@ from core.workflow.constants import ENVIRONMENT_VARIABLE_NODE_ID
from core.workflow.entities import GraphInitParams
from core.workflow.errors import WorkflowNodeRunFailedError
from core.workflow.graph import Graph
-from core.workflow.graph_engine import GraphEngine
+from core.workflow.graph_engine import GraphEngine, GraphEngineConfig
from core.workflow.graph_engine.command_channels import InMemoryChannel
from core.workflow.graph_engine.layers import DebugLoggingLayer, ExecutionLimitsLayer
from core.workflow.graph_engine.protocols.command_channel import CommandChannel
@@ -81,6 +81,12 @@ class WorkflowEntry:
graph=graph,
graph_runtime_state=graph_runtime_state,
command_channel=command_channel,
+ config=GraphEngineConfig(
+ min_workers=dify_config.GRAPH_ENGINE_MIN_WORKERS,
+ max_workers=dify_config.GRAPH_ENGINE_MAX_WORKERS,
+ scale_up_threshold=dify_config.GRAPH_ENGINE_SCALE_UP_THRESHOLD,
+ scale_down_idle_time=dify_config.GRAPH_ENGINE_SCALE_DOWN_IDLE_TIME,
+ ),
)
# Add debug logging layer when in debug mode
diff --git a/api/tests/unit_tests/core/workflow/graph_engine/layers/test_layer_initialization.py b/api/tests/unit_tests/core/workflow/graph_engine/layers/test_layer_initialization.py
index d6ba61c50c..f1086c9936 100644
--- a/api/tests/unit_tests/core/workflow/graph_engine/layers/test_layer_initialization.py
+++ b/api/tests/unit_tests/core/workflow/graph_engine/layers/test_layer_initialization.py
@@ -2,7 +2,7 @@ from __future__ import annotations
import pytest
-from core.workflow.graph_engine import GraphEngine
+from core.workflow.graph_engine import GraphEngine, GraphEngineConfig
from core.workflow.graph_engine.command_channels import InMemoryChannel
from core.workflow.graph_engine.layers.base import (
GraphEngineLayer,
@@ -43,6 +43,7 @@ def test_layer_runtime_state_available_after_engine_layer() -> None:
graph=graph,
graph_runtime_state=graph_runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
layer = LayerForTest()
diff --git a/api/tests/unit_tests/core/workflow/graph_engine/test_command_system.py b/api/tests/unit_tests/core/workflow/graph_engine/test_command_system.py
index d826f7a900..1af5a80a56 100644
--- a/api/tests/unit_tests/core/workflow/graph_engine/test_command_system.py
+++ b/api/tests/unit_tests/core/workflow/graph_engine/test_command_system.py
@@ -8,7 +8,7 @@ from core.variables import IntegerVariable, StringVariable
from core.workflow.entities.graph_init_params import GraphInitParams
from core.workflow.entities.pause_reason import SchedulingPause
from core.workflow.graph import Graph
-from core.workflow.graph_engine import GraphEngine
+from core.workflow.graph_engine import GraphEngine, GraphEngineConfig
from core.workflow.graph_engine.command_channels import InMemoryChannel
from core.workflow.graph_engine.entities.commands import (
AbortCommand,
@@ -67,6 +67,7 @@ def test_abort_command():
graph=mock_graph,
graph_runtime_state=shared_runtime_state, # Use shared instance
command_channel=command_channel,
+ config=GraphEngineConfig(),
)
# Send abort command before starting
@@ -173,6 +174,7 @@ def test_pause_command():
graph=mock_graph,
graph_runtime_state=shared_runtime_state,
command_channel=command_channel,
+ config=GraphEngineConfig(),
)
pause_command = PauseCommand(reason="User requested pause")
@@ -228,6 +230,7 @@ def test_update_variables_command_updates_pool():
graph=mock_graph,
graph_runtime_state=shared_runtime_state,
command_channel=command_channel,
+ config=GraphEngineConfig(),
)
update_command = UpdateVariablesCommand(
diff --git a/api/tests/unit_tests/core/workflow/graph_engine/test_conditional_streaming_vs_template_workflow.py b/api/tests/unit_tests/core/workflow/graph_engine/test_conditional_streaming_vs_template_workflow.py
index 70a772fc4c..ee944c8e3e 100644
--- a/api/tests/unit_tests/core/workflow/graph_engine/test_conditional_streaming_vs_template_workflow.py
+++ b/api/tests/unit_tests/core/workflow/graph_engine/test_conditional_streaming_vs_template_workflow.py
@@ -7,7 +7,7 @@ This test validates that:
"""
from core.workflow.enums import NodeType
-from core.workflow.graph_engine import GraphEngine
+from core.workflow.graph_engine import GraphEngine, GraphEngineConfig
from core.workflow.graph_engine.command_channels import InMemoryChannel
from core.workflow.graph_events import (
GraphRunSucceededEvent,
@@ -44,6 +44,7 @@ def test_streaming_output_with_blocking_equals_one():
graph=graph,
graph_runtime_state=graph_runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
# Execute the workflow
@@ -139,6 +140,7 @@ def test_streaming_output_with_blocking_not_equals_one():
graph=graph,
graph_runtime_state=graph_runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
# Execute the workflow
diff --git a/api/tests/unit_tests/core/workflow/graph_engine/test_graph_engine.py b/api/tests/unit_tests/core/workflow/graph_engine/test_graph_engine.py
index 02f20413e0..5a55d7086e 100644
--- a/api/tests/unit_tests/core/workflow/graph_engine/test_graph_engine.py
+++ b/api/tests/unit_tests/core/workflow/graph_engine/test_graph_engine.py
@@ -11,7 +11,7 @@ from hypothesis import HealthCheck, given, settings
from hypothesis import strategies as st
from core.workflow.enums import ErrorStrategy
-from core.workflow.graph_engine import GraphEngine
+from core.workflow.graph_engine import GraphEngine, GraphEngineConfig
from core.workflow.graph_engine.command_channels import InMemoryChannel
from core.workflow.graph_events import (
GraphRunPartialSucceededEvent,
@@ -469,6 +469,7 @@ def test_layer_system_basic():
graph=graph,
graph_runtime_state=graph_runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
# Add debug logging layer
@@ -525,6 +526,7 @@ def test_layer_chaining():
graph=graph,
graph_runtime_state=graph_runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
# Chain multiple layers
@@ -572,6 +574,7 @@ def test_layer_error_handling():
graph=graph,
graph_runtime_state=graph_runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
# Add faulty layer
@@ -753,6 +756,7 @@ def test_graph_run_emits_partial_success_when_node_failure_recovered():
graph=graph,
graph_runtime_state=graph_runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
events = list(engine.run())
diff --git a/api/tests/unit_tests/core/workflow/graph_engine/test_mock_nodes.py b/api/tests/unit_tests/core/workflow/graph_engine/test_mock_nodes.py
index 5937bbfb39..2179ff663b 100644
--- a/api/tests/unit_tests/core/workflow/graph_engine/test_mock_nodes.py
+++ b/api/tests/unit_tests/core/workflow/graph_engine/test_mock_nodes.py
@@ -566,7 +566,7 @@ class MockIterationNode(MockNodeMixin, IterationNode):
# Import dependencies
from core.workflow.entities import GraphInitParams
from core.workflow.graph import Graph
- from core.workflow.graph_engine import GraphEngine
+ from core.workflow.graph_engine import GraphEngine, GraphEngineConfig
from core.workflow.graph_engine.command_channels import InMemoryChannel
from core.workflow.runtime import GraphRuntimeState
@@ -623,6 +623,7 @@ class MockIterationNode(MockNodeMixin, IterationNode):
graph=iteration_graph,
graph_runtime_state=graph_runtime_state_copy,
command_channel=InMemoryChannel(), # Use InMemoryChannel for sub-graphs
+ config=GraphEngineConfig(),
)
return graph_engine
@@ -641,7 +642,7 @@ class MockLoopNode(MockNodeMixin, LoopNode):
# Import dependencies
from core.workflow.entities import GraphInitParams
from core.workflow.graph import Graph
- from core.workflow.graph_engine import GraphEngine
+ from core.workflow.graph_engine import GraphEngine, GraphEngineConfig
from core.workflow.graph_engine.command_channels import InMemoryChannel
from core.workflow.runtime import GraphRuntimeState
@@ -685,6 +686,7 @@ class MockLoopNode(MockNodeMixin, LoopNode):
graph=loop_graph,
graph_runtime_state=graph_runtime_state_copy,
command_channel=InMemoryChannel(), # Use InMemoryChannel for sub-graphs
+ config=GraphEngineConfig(),
)
return graph_engine
diff --git a/api/tests/unit_tests/core/workflow/graph_engine/test_parallel_streaming_workflow.py b/api/tests/unit_tests/core/workflow/graph_engine/test_parallel_streaming_workflow.py
index e8cd665107..53c6bc3d60 100644
--- a/api/tests/unit_tests/core/workflow/graph_engine/test_parallel_streaming_workflow.py
+++ b/api/tests/unit_tests/core/workflow/graph_engine/test_parallel_streaming_workflow.py
@@ -17,7 +17,7 @@ from core.app.workflow.node_factory import DifyNodeFactory
from core.workflow.entities import GraphInitParams
from core.workflow.enums import NodeType, WorkflowNodeExecutionStatus
from core.workflow.graph import Graph
-from core.workflow.graph_engine import GraphEngine
+from core.workflow.graph_engine import GraphEngine, GraphEngineConfig
from core.workflow.graph_engine.command_channels import InMemoryChannel
from core.workflow.graph_events import (
GraphRunSucceededEvent,
@@ -123,6 +123,7 @@ def test_parallel_streaming_workflow():
graph=graph,
graph_runtime_state=graph_runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
# Define LLM outputs
diff --git a/api/tests/unit_tests/core/workflow/graph_engine/test_stop_event.py b/api/tests/unit_tests/core/workflow/graph_engine/test_stop_event.py
index ea8d3a977f..0b998034b1 100644
--- a/api/tests/unit_tests/core/workflow/graph_engine/test_stop_event.py
+++ b/api/tests/unit_tests/core/workflow/graph_engine/test_stop_event.py
@@ -12,7 +12,7 @@ from unittest.mock import MagicMock, Mock, patch
from core.app.entities.app_invoke_entities import InvokeFrom
from core.workflow.entities.graph_init_params import GraphInitParams
from core.workflow.graph import Graph
-from core.workflow.graph_engine import GraphEngine
+from core.workflow.graph_engine import GraphEngine, GraphEngineConfig
from core.workflow.graph_engine.command_channels import InMemoryChannel
from core.workflow.graph_events import (
GraphRunStartedEvent,
@@ -41,6 +41,7 @@ class TestStopEventPropagation:
graph=mock_graph,
graph_runtime_state=runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
# Verify stop_event was created
@@ -84,6 +85,7 @@ class TestStopEventPropagation:
graph=mock_graph,
graph_runtime_state=runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
# Set the stop_event before running
@@ -131,6 +133,7 @@ class TestStopEventPropagation:
graph=mock_graph,
graph_runtime_state=runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
# Initially not set
@@ -155,6 +158,7 @@ class TestStopEventPropagation:
graph=mock_graph,
graph_runtime_state=runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
# Verify WorkerPool has the stop_event
@@ -174,6 +178,7 @@ class TestStopEventPropagation:
graph=mock_graph,
graph_runtime_state=runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
# Verify Dispatcher has the stop_event
@@ -311,6 +316,7 @@ class TestStopEventIntegration:
graph=mock_graph,
graph_runtime_state=runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
# Set stop_event before running
@@ -360,6 +366,7 @@ class TestStopEventIntegration:
graph=mock_graph,
graph_runtime_state=runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
# All nodes should share the same stop_event
@@ -385,6 +392,7 @@ class TestStopEventTimeoutBehavior:
graph=mock_graph,
graph_runtime_state=runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
dispatcher = engine._dispatcher
@@ -411,6 +419,7 @@ class TestStopEventTimeoutBehavior:
graph=mock_graph,
graph_runtime_state=runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
worker_pool = engine._worker_pool
@@ -460,6 +469,7 @@ class TestStopEventResumeBehavior:
graph=mock_graph,
graph_runtime_state=runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
# Simulate a previous execution that set stop_event
@@ -490,6 +500,7 @@ class TestWorkerStopBehavior:
graph=mock_graph,
graph_runtime_state=runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
# Get the worker pool and check workers
diff --git a/api/tests/unit_tests/core/workflow/graph_engine/test_table_runner.py b/api/tests/unit_tests/core/workflow/graph_engine/test_table_runner.py
index 10ac1206fb..afa9265fcd 100644
--- a/api/tests/unit_tests/core/workflow/graph_engine/test_table_runner.py
+++ b/api/tests/unit_tests/core/workflow/graph_engine/test_table_runner.py
@@ -32,7 +32,7 @@ from core.variables import (
)
from core.workflow.entities.graph_init_params import GraphInitParams
from core.workflow.graph import Graph
-from core.workflow.graph_engine import GraphEngine
+from core.workflow.graph_engine import GraphEngine, GraphEngineConfig
from core.workflow.graph_engine.command_channels import InMemoryChannel
from core.workflow.graph_events import (
GraphEngineEvent,
@@ -309,10 +309,12 @@ class TableTestRunner:
graph=graph,
graph_runtime_state=graph_runtime_state,
command_channel=InMemoryChannel(),
- min_workers=self.graph_engine_min_workers,
- max_workers=self.graph_engine_max_workers,
- scale_up_threshold=self.graph_engine_scale_up_threshold,
- scale_down_idle_time=self.graph_engine_scale_down_idle_time,
+ config=GraphEngineConfig(
+ min_workers=self.graph_engine_min_workers,
+ max_workers=self.graph_engine_max_workers,
+ scale_up_threshold=self.graph_engine_scale_up_threshold,
+ scale_down_idle_time=self.graph_engine_scale_down_idle_time,
+ ),
)
# Execute and collect events
diff --git a/api/tests/unit_tests/core/workflow/graph_engine/test_tool_in_chatflow.py b/api/tests/unit_tests/core/workflow/graph_engine/test_tool_in_chatflow.py
index 34682ff8f9..bfcc6e1a5f 100644
--- a/api/tests/unit_tests/core/workflow/graph_engine/test_tool_in_chatflow.py
+++ b/api/tests/unit_tests/core/workflow/graph_engine/test_tool_in_chatflow.py
@@ -1,4 +1,4 @@
-from core.workflow.graph_engine import GraphEngine
+from core.workflow.graph_engine import GraphEngine, GraphEngineConfig
from core.workflow.graph_engine.command_channels import InMemoryChannel
from core.workflow.graph_events import (
GraphRunSucceededEvent,
@@ -27,6 +27,7 @@ def test_tool_in_chatflow():
graph=graph,
graph_runtime_state=graph_runtime_state,
command_channel=InMemoryChannel(),
+ config=GraphEngineConfig(),
)
events = list(engine.run())
diff --git a/web/app/components/app/log/list.spec.tsx b/web/app/components/app/log/list.spec.tsx
index 81901c6cad..cb92ecc437 100644
--- a/web/app/components/app/log/list.spec.tsx
+++ b/web/app/components/app/log/list.spec.tsx
@@ -182,12 +182,12 @@ describe('Chat Message Loading Race Condition Prevention', () => {
// Update pagination anchor with oldest answer ID
const answerItems = chatItems.filter(item => item.isAnswer)
- const oldestAnswer = answerItems[answerItems.length - 1]
+ const oldestAnswer = answerItems[0]
if (oldestAnswer?.id) {
oldestAnswerIdRef = oldestAnswer.id
}
- expect(oldestAnswerIdRef).toBe('answer-2')
+ expect(oldestAnswerIdRef).toBe('answer-1')
})
it('should use pagination anchor in subsequent requests', () => {
diff --git a/web/app/components/app/log/list.tsx b/web/app/components/app/log/list.tsx
index 5197a02bb3..b13eec2e3d 100644
--- a/web/app/components/app/log/list.tsx
+++ b/web/app/components/app/log/list.tsx
@@ -321,7 +321,7 @@ function DetailPanel({ detail, onFeedback }: IDetailPanel) {
// Update pagination anchor ref with the oldest answer ID
const answerItems = allChatItems.filter(item => item.isAnswer)
- const oldestAnswer = answerItems[answerItems.length - 1]
+ const oldestAnswer = answerItems[0]
if (oldestAnswer?.id)
oldestAnswerIdRef.current = oldestAnswer.id
}, [allChatItems, hasMore, detail?.model_config?.configs?.introduction])
@@ -506,56 +506,18 @@ function DetailPanel({ detail, onFeedback }: IDetailPanel) {
}
}, [detail.id, hasMore, isLoading, timezone, t, appDetail, detail?.model_config?.configs?.introduction])
- useEffect(() => {
+ const handleScroll = useCallback(() => {
const scrollableDiv = document.getElementById('scrollableDiv')
- const outerDiv = scrollableDiv?.parentElement
- const chatContainer = document.querySelector('.mx-1.mb-1.grow.overflow-auto') as HTMLElement
-
- let scrollContainer: HTMLElement | null = null
-
- if (outerDiv && outerDiv.scrollHeight > outerDiv.clientHeight) {
- scrollContainer = outerDiv
- }
- else if (scrollableDiv && scrollableDiv.scrollHeight > scrollableDiv.clientHeight) {
- scrollContainer = scrollableDiv
- }
- else if (chatContainer && chatContainer.scrollHeight > chatContainer.clientHeight) {
- scrollContainer = chatContainer
- }
- else {
- const possibleContainers = document.querySelectorAll('.overflow-auto, .overflow-y-auto')
- for (let i = 0; i < possibleContainers.length; i++) {
- const container = possibleContainers[i] as HTMLElement
- if (container.scrollHeight > container.clientHeight) {
- scrollContainer = container
- break
- }
- }
- }
-
- if (!scrollContainer)
+ if (!scrollableDiv)
return
+ const clientHeight = scrollableDiv.clientHeight
+ const scrollHeight = scrollableDiv.scrollHeight
+ const currentScrollTop = scrollableDiv.scrollTop
+ // currentScrollTop is negative due to column-reverse flex direction
+ const isNearTop = Math.abs(currentScrollTop) > scrollHeight - clientHeight - 40
- const handleScroll = () => {
- const currentScrollTop = scrollContainer!.scrollTop
- const isNearTop = currentScrollTop < 30
-
- if (isNearTop && hasMore && !isLoading) {
- loadMoreMessages()
- }
- }
-
- scrollContainer.addEventListener('scroll', handleScroll, { passive: true })
-
- const handleWheel = (e: WheelEvent) => {
- if (e.deltaY < 0)
- handleScroll()
- }
- scrollContainer.addEventListener('wheel', handleWheel, { passive: true })
-
- return () => {
- scrollContainer!.removeEventListener('scroll', handleScroll)
- scrollContainer!.removeEventListener('wheel', handleWheel)
+ if (isNearTop && hasMore && !isLoading) {
+ loadMoreMessages()
}
}, [hasMore, isLoading, loadMoreMessages])
@@ -690,19 +652,10 @@ function DetailPanel({ detail, onFeedback }: IDetailPanel) {
height: '100%',
overflow: 'auto',
}}
+ onScroll={handleScroll}
>
{/* Put the scroll bar always on the bottom */}
- {/* Loading state indicator - only shown when loading */}
- {hasMore && isLoading && (
-
-
- {t('detail.loading', { ns: 'appLog' })}
- ...
-
-
- )}
-
+ {hasMore && (
+
+
+ {t('detail.loading', { ns: 'appLog' })}
+ ...
+
+
+ )}
)}
diff --git a/web/i18n/ar-TN/dataset-documents.json b/web/i18n/ar-TN/dataset-documents.json
index 68369c153a..88683d4365 100644
--- a/web/i18n/ar-TN/dataset-documents.json
+++ b/web/i18n/ar-TN/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "إيقاف مؤقت",
"list.action.resume": "استئناف",
"list.action.settings": "إعدادات التقطيع",
+ "list.action.summary": "إنشاء ملخص",
"list.action.sync": "مزامنة",
"list.action.unarchive": "إلغاء الأرشفة",
"list.action.uploadFile": "تحميل ملف جديد",
@@ -75,6 +76,9 @@
"list.status.indexing": "فهرسة",
"list.status.paused": "متوقف مؤقتًا",
"list.status.queuing": "في الانتظار",
+ "list.summary.generating": "جارٍ الإنشاء...",
+ "list.summary.generatingSummary": "جارٍ إنشاء الملخص",
+ "list.summary.ready": "الملخص جاهز",
"list.table.header.action": "إجراء",
"list.table.header.chunkingMode": "وضع التقطيع",
"list.table.header.fileName": "الاسم",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "نتيجة",
"segment.searchResults_other": "نتائج",
"segment.searchResults_zero": "نتيجة",
+ "segment.summary": "ملخص",
+ "segment.summaryPlaceholder": "اكتب ملخصًا موجزًا لاسترجاع أفضل…",
"segment.vectorHash": "تجزئة المتجه: "
}
diff --git a/web/i18n/ar-TN/dataset-settings.json b/web/i18n/ar-TN/dataset-settings.json
index 5aa9f5ce35..66ed879c56 100644
--- a/web/i18n/ar-TN/dataset-settings.json
+++ b/web/i18n/ar-TN/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "إعدادات الاسترجاع",
"form.save": "حفظ",
"form.searchModel": "نموذج البحث",
+ "form.summaryAutoGen": "إنشاء الملخص التلقائي",
+ "form.summaryAutoGenEnableTip": "بمجرد التمكين، سيتم إنشاء الملخصات تلقائيًا للمستندات المضافة حديثًا. يمكن لا يزال تلخيص المستندات الموجودة يدويًا.",
+ "form.summaryAutoGenTip": "يتم إنشاء الملخصات تلقائيًا للمستندات المضافة حديثًا. يمكن لا يزال تلخيص المستندات الموجودة يدويًا.",
+ "form.summaryInstructions": "تعليمات",
+ "form.summaryInstructionsPlaceholder": "صف القواعد أو الأسلوب للملخصات المُنشأة تلقائيًا…",
+ "form.summaryModel": "نموذج الملخص",
"form.upgradeHighQualityTip": "بمجرد الترقية إلى وضع الجودة العالية، لا يتوفر الرجوع إلى الوضع الاقتصادي",
"title": "إعدادات المعرفة"
}
diff --git a/web/i18n/de-DE/dataset-documents.json b/web/i18n/de-DE/dataset-documents.json
index b636e58dd3..576f1b9b64 100644
--- a/web/i18n/de-DE/dataset-documents.json
+++ b/web/i18n/de-DE/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "Pause",
"list.action.resume": "Fortsetzen",
"list.action.settings": "Segment-Einstellungen",
+ "list.action.summary": "Zusammenfassung generieren",
"list.action.sync": "Synchronisieren",
"list.action.unarchive": "Archivierung aufheben",
"list.action.uploadFile": "Neue Datei hochladen",
@@ -75,6 +76,9 @@
"list.status.indexing": "Indizierung",
"list.status.paused": "Pausiert",
"list.status.queuing": "In Warteschlange",
+ "list.summary.generating": "Wird generiert...",
+ "list.summary.generatingSummary": "Zusammenfassung wird generiert",
+ "list.summary.ready": "Zusammenfassung bereit",
"list.table.header.action": "AKTION",
"list.table.header.chunkingMode": "CHUNKING-MODUS",
"list.table.header.fileName": "DATEINAME",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "ERGEBNIS",
"segment.searchResults_other": "BEFUND",
"segment.searchResults_zero": "ERGEBNIS",
+ "segment.summary": "ZUSAMMENFASSUNG",
+ "segment.summaryPlaceholder": "Schreiben Sie eine kurze Zusammenfassung für bessere Abrufbarkeit…",
"segment.vectorHash": "Vektor-Hash: "
}
diff --git a/web/i18n/de-DE/dataset-settings.json b/web/i18n/de-DE/dataset-settings.json
index 68ebc38e50..bdb522accd 100644
--- a/web/i18n/de-DE/dataset-settings.json
+++ b/web/i18n/de-DE/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "Einstellungen für den Abruf",
"form.save": "Speichern",
"form.searchModel": "Modell suchen",
+ "form.summaryAutoGen": "Automatische Zusammenfassungserstellung",
+ "form.summaryAutoGenEnableTip": "Nach der Aktivierung werden Zusammenfassungen automatisch für neu hinzugefügte Dokumente generiert. Vorhandene Dokumente können weiterhin manuell zusammengefasst werden.",
+ "form.summaryAutoGenTip": "Zusammenfassungen werden automatisch für neu hinzugefügte Dokumente generiert. Vorhandene Dokumente können weiterhin manuell zusammengefasst werden.",
+ "form.summaryInstructions": "Anweisungen",
+ "form.summaryInstructionsPlaceholder": "Beschreiben Sie die Regeln oder den Stil für automatisch generierte Zusammenfassungen…",
+ "form.summaryModel": "Zusammenfassungsmodell",
"form.upgradeHighQualityTip": "Nach dem Upgrade auf den Modus \"Hohe Qualität\" ist das Zurücksetzen auf den Modus \"Wirtschaftlich\" nicht mehr möglich",
"title": "Wissenseinstellungen"
}
diff --git a/web/i18n/es-ES/dataset-documents.json b/web/i18n/es-ES/dataset-documents.json
index 8ab1dbb30c..56e6d96de3 100644
--- a/web/i18n/es-ES/dataset-documents.json
+++ b/web/i18n/es-ES/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "Pausa",
"list.action.resume": "Reanudar",
"list.action.settings": "Configuración de segmento",
+ "list.action.summary": "Generar resumen",
"list.action.sync": "Sincronizar",
"list.action.unarchive": "Desarchivar",
"list.action.uploadFile": "Subir nuevo archivo",
@@ -75,6 +76,9 @@
"list.status.indexing": "Indexando",
"list.status.paused": "Pausado",
"list.status.queuing": "En cola",
+ "list.summary.generating": "Generando...",
+ "list.summary.generatingSummary": "Generando resumen",
+ "list.summary.ready": "Resumen listo",
"list.table.header.action": "ACCIÓN",
"list.table.header.chunkingMode": "MODO DE FRAGMENTACIÓN",
"list.table.header.fileName": "NOMBRE DEL ARCHIVO",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "RESULTADO",
"segment.searchResults_other": "RESULTADOS",
"segment.searchResults_zero": "RESULTADO",
+ "segment.summary": "RESUMEN",
+ "segment.summaryPlaceholder": "Escriba un breve resumen para una mejor recuperación…",
"segment.vectorHash": "Hash de vector: "
}
diff --git a/web/i18n/es-ES/dataset-settings.json b/web/i18n/es-ES/dataset-settings.json
index 499720558d..f70f6d89eb 100644
--- a/web/i18n/es-ES/dataset-settings.json
+++ b/web/i18n/es-ES/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "Configuración de recuperación",
"form.save": "Guardar",
"form.searchModel": "Buscar modelo",
+ "form.summaryAutoGen": "Generación Automática de Resumen",
+ "form.summaryAutoGenEnableTip": "Una vez habilitado, los resúmenes se generarán automáticamente para documentos recién agregados. Los documentos existentes aún se pueden resumir manualmente.",
+ "form.summaryAutoGenTip": "Los resúmenes se generan automáticamente para documentos recién agregados. Los documentos existentes aún se pueden resumir manualmente.",
+ "form.summaryInstructions": "Instrucciones",
+ "form.summaryInstructionsPlaceholder": "Describa las reglas o el estilo para resúmenes generados automáticamente…",
+ "form.summaryModel": "Modelo de Resumen",
"form.upgradeHighQualityTip": "Una vez que se actualiza al modo de alta calidad, no está disponible volver al modo económico",
"title": "Configuración del conjunto de datos"
}
diff --git a/web/i18n/fa-IR/dataset-documents.json b/web/i18n/fa-IR/dataset-documents.json
index d2a8835ee7..5564b3e13a 100644
--- a/web/i18n/fa-IR/dataset-documents.json
+++ b/web/i18n/fa-IR/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "مکث",
"list.action.resume": "ادامه",
"list.action.settings": "تنظیمات بخشبندی",
+ "list.action.summary": "ایجاد خلاصه",
"list.action.sync": "همگامسازی",
"list.action.unarchive": "خارج کردن از بایگانی",
"list.action.uploadFile": "بارگذاری فایل جدید",
@@ -75,6 +76,9 @@
"list.status.indexing": "ایندکسسازی",
"list.status.paused": "متوقف شده",
"list.status.queuing": "در صف",
+ "list.summary.generating": "در حال ایجاد...",
+ "list.summary.generatingSummary": "در حال ایجاد خلاصه",
+ "list.summary.ready": "خلاصه آماده است",
"list.table.header.action": "اقدام",
"list.table.header.chunkingMode": "حالت تکه تکه کردن",
"list.table.header.fileName": "نام فایل",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "نتیجه",
"segment.searchResults_other": "نتیجه",
"segment.searchResults_zero": "نتیجه",
+ "segment.summary": "خلاصه",
+ "segment.summaryPlaceholder": "خلاصهای کوتاه برای بازیابی بهتر بنویسید…",
"segment.vectorHash": "هش برداری: "
}
diff --git a/web/i18n/fa-IR/dataset-settings.json b/web/i18n/fa-IR/dataset-settings.json
index dd4ada7808..2dd4147580 100644
--- a/web/i18n/fa-IR/dataset-settings.json
+++ b/web/i18n/fa-IR/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "تنظیمات بازیابی",
"form.save": "ذخیره",
"form.searchModel": "جستجوی مدل",
+ "form.summaryAutoGen": "ایجاد خودکار خلاصه",
+ "form.summaryAutoGenEnableTip": "پس از فعالسازی، خلاصهها بهطور خودکار برای اسناد تازه اضافهشده ایجاد میشوند. اسناد موجود همچنان میتوانند بهصورت دستی خلاصه شوند.",
+ "form.summaryAutoGenTip": "خلاصهها بهطور خودکار برای اسناد تازه اضافهشده ایجاد میشوند. اسناد موجود همچنان میتوانند بهصورت دستی خلاصه شوند.",
+ "form.summaryInstructions": "دستورالعملها",
+ "form.summaryInstructionsPlaceholder": "قوانین یا سبک خلاصههای ایجاد شده خودکار را شرح دهید…",
+ "form.summaryModel": "مدل خلاصه",
"form.upgradeHighQualityTip": "پس از ارتقاء به حالت کیفیت بالا، بازگشت به حالت اقتصادی در دسترس نیست",
"title": "تنظیمات دانش"
}
diff --git a/web/i18n/fr-FR/dataset-documents.json b/web/i18n/fr-FR/dataset-documents.json
index bd26c3fc31..aee756041b 100644
--- a/web/i18n/fr-FR/dataset-documents.json
+++ b/web/i18n/fr-FR/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "Pause",
"list.action.resume": "Reprendre",
"list.action.settings": "Paramètres de segment",
+ "list.action.summary": "Générer un résumé",
"list.action.sync": "Synchroniser",
"list.action.unarchive": "Décompresser",
"list.action.uploadFile": "Télécharger un nouveau fichier",
@@ -75,6 +76,9 @@
"list.status.indexing": "Indexation",
"list.status.paused": "En pause",
"list.status.queuing": "Mise en file d'attente",
+ "list.summary.generating": "Génération...",
+ "list.summary.generatingSummary": "Génération du résumé",
+ "list.summary.ready": "Résumé prêt",
"list.table.header.action": "ACTION",
"list.table.header.chunkingMode": "MODE DE MORCEAU",
"list.table.header.fileName": "NOM DU FICHIER",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "RÉSULTAT",
"segment.searchResults_other": "RÉSULTATS",
"segment.searchResults_zero": "RÉSULTAT",
+ "segment.summary": "RÉSUMÉ",
+ "segment.summaryPlaceholder": "Rédigez un bref résumé pour une meilleure récupération…",
"segment.vectorHash": "Vector hash: "
}
diff --git a/web/i18n/fr-FR/dataset-settings.json b/web/i18n/fr-FR/dataset-settings.json
index 76c322f08c..e4b881ffdc 100644
--- a/web/i18n/fr-FR/dataset-settings.json
+++ b/web/i18n/fr-FR/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "Paramètres de récupération",
"form.save": "Enregistrer",
"form.searchModel": "Rechercher un modèle",
+ "form.summaryAutoGen": "Génération Auto de Résumé",
+ "form.summaryAutoGenEnableTip": "Une fois activé, les résumés seront générés automatiquement pour les documents nouvellement ajoutés. Les documents existants peuvent toujours être résumés manuellement.",
+ "form.summaryAutoGenTip": "Les résumés sont générés automatiquement pour les documents nouvellement ajoutés. Les documents existants peuvent toujours être résumés manuellement.",
+ "form.summaryInstructions": "Instructions",
+ "form.summaryInstructionsPlaceholder": "Décrivez les règles ou le style pour les résumés générés automatiquement…",
+ "form.summaryModel": "Modèle de Résumé",
"form.upgradeHighQualityTip": "Une fois la mise à niveau vers le mode Haute Qualité, il n’est pas possible de revenir au mode Économique",
"title": "Paramètres de connaissance"
}
diff --git a/web/i18n/hi-IN/dataset-documents.json b/web/i18n/hi-IN/dataset-documents.json
index 5f9758f4c2..3c8e6675a4 100644
--- a/web/i18n/hi-IN/dataset-documents.json
+++ b/web/i18n/hi-IN/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "रोकें",
"list.action.resume": "रिज़्यूमे",
"list.action.settings": "खंड सेटिंग्स",
+ "list.action.summary": "सारांश बनाएं",
"list.action.sync": "सिंक्रोनाइज़ करें",
"list.action.unarchive": "संग्रह से बाहर करें",
"list.action.uploadFile": "नई फाइल अपलोड करें",
@@ -75,6 +76,9 @@
"list.status.indexing": "अनुक्रमण",
"list.status.paused": "रुका हुआ",
"list.status.queuing": "पंक्तिबद्ध",
+ "list.summary.generating": "बना रहे हैं...",
+ "list.summary.generatingSummary": "सारांश बना रहे हैं",
+ "list.summary.ready": "सारांश तैयार है",
"list.table.header.action": "क्रिया",
"list.table.header.chunkingMode": "चंकिंग मोड",
"list.table.header.fileName": "फाइल का नाम",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "परिणाम",
"segment.searchResults_other": "परिणाम",
"segment.searchResults_zero": "परिणाम",
+ "segment.summary": "सारांश",
+ "segment.summaryPlaceholder": "बेहतर पुनर्प्राप्ति के लिए संक्षिप्त सारांश लिखें…",
"segment.vectorHash": "वेक्टर हैश: "
}
diff --git a/web/i18n/hi-IN/dataset-settings.json b/web/i18n/hi-IN/dataset-settings.json
index 366519806a..3355b36567 100644
--- a/web/i18n/hi-IN/dataset-settings.json
+++ b/web/i18n/hi-IN/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "पुनर्प्राप्ति सेटिंग्स",
"form.save": "सेवना",
"form.searchModel": "मॉडल खोजें",
+ "form.summaryAutoGen": "सारांश स्वतः निर्माण",
+ "form.summaryAutoGenEnableTip": "सक्षम होने पर, नए जोड़े गए दस्तावेज़ों के लिए सारांश स्वचालित रूप से बनाए जाएंगे। मौजूदा दस्तावेज़ों को अभी भी मैन्युअल रूप से सारांशित किया जा सकता है।",
+ "form.summaryAutoGenTip": "नए जोड़े गए दस्तावेज़ों के लिए सारांश स्वचालित रूप से बनाए जाते हैं। मौजूदा दस्तावेज़ों को अभी भी मैन्युअल रूप से सारांशित किया जा सकता है।",
+ "form.summaryInstructions": "निर्देश",
+ "form.summaryInstructionsPlaceholder": "स्वचालित रूप से बनाए गए सारांश के लिए नियम या शैली का वर्णन करें…",
+ "form.summaryModel": "सारांश मॉडल",
"form.upgradeHighQualityTip": "एक बार उच्च गुणवत्ता मोड में अपग्रेड करने के बाद, किफायती मोड में वापस जाना उपलब्ध नहीं है",
"title": "ज्ञान सेटिंग्ज"
}
diff --git a/web/i18n/id-ID/dataset-documents.json b/web/i18n/id-ID/dataset-documents.json
index df894c1891..47eefe4274 100644
--- a/web/i18n/id-ID/dataset-documents.json
+++ b/web/i18n/id-ID/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "Jeda",
"list.action.resume": "Melanjutkan",
"list.action.settings": "Pengaturan Chunking",
+ "list.action.summary": "Buat ringkasan",
"list.action.sync": "Sync",
"list.action.unarchive": "Batalkan arsip",
"list.action.uploadFile": "Unggah file baru",
@@ -75,6 +76,9 @@
"list.status.indexing": "Pengindeksan",
"list.status.paused": "Berhenti",
"list.status.queuing": "Antrian",
+ "list.summary.generating": "Membuat...",
+ "list.summary.generatingSummary": "Membuat ringkasan",
+ "list.summary.ready": "Ringkasan siap",
"list.table.header.action": "PERBUATAN",
"list.table.header.chunkingMode": "CHUNKING MODE",
"list.table.header.fileName": "NAMA",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "HASIL",
"segment.searchResults_other": "HASIL",
"segment.searchResults_zero": "HASIL",
+ "segment.summary": "RINGKASAN",
+ "segment.summaryPlaceholder": "Tulis ringkasan singkat untuk pencarian yang lebih baik…",
"segment.vectorHash": "Hash vektor:"
}
diff --git a/web/i18n/id-ID/dataset-settings.json b/web/i18n/id-ID/dataset-settings.json
index 79916ea940..271501d181 100644
--- a/web/i18n/id-ID/dataset-settings.json
+++ b/web/i18n/id-ID/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "Pengaturan Pengambilan",
"form.save": "Simpan",
"form.searchModel": "Model pencarian",
+ "form.summaryAutoGen": "Pembuatan Ringkasan Otomatis",
+ "form.summaryAutoGenEnableTip": "Setelah diaktifkan, ringkasan akan dibuat secara otomatis untuk dokumen yang baru ditambahkan. Dokumen yang ada masih dapat diringkas secara manual.",
+ "form.summaryAutoGenTip": "Ringkasan dibuat secara otomatis untuk dokumen yang baru ditambahkan. Dokumen yang ada masih dapat diringkas secara manual.",
+ "form.summaryInstructions": "Instruksi",
+ "form.summaryInstructionsPlaceholder": "Jelaskan aturan atau gaya untuk ringkasan yang dibuat secara otomatis…",
+ "form.summaryModel": "Model Ringkasan",
"form.upgradeHighQualityTip": "Setelah memutakhirkan ke mode Kualitas Tinggi, kembali ke mode Ekonomis tidak tersedia",
"title": "Setelan pengetahuan"
}
diff --git a/web/i18n/it-IT/dataset-documents.json b/web/i18n/it-IT/dataset-documents.json
index 1c8e4df53d..eb62715c65 100644
--- a/web/i18n/it-IT/dataset-documents.json
+++ b/web/i18n/it-IT/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "Pausa",
"list.action.resume": "Riprendi",
"list.action.settings": "Impostazioni segmenti",
+ "list.action.summary": "Genera riepilogo",
"list.action.sync": "Sincronizza",
"list.action.unarchive": "Disarchivia",
"list.action.uploadFile": "Carica nuovo file",
@@ -75,6 +76,9 @@
"list.status.indexing": "Indicizzazione",
"list.status.paused": "In pausa",
"list.status.queuing": "In coda",
+ "list.summary.generating": "Generazione...",
+ "list.summary.generatingSummary": "Generazione riepilogo",
+ "list.summary.ready": "Riepilogo pronto",
"list.table.header.action": "AZIONE",
"list.table.header.chunkingMode": "MODALITÀ DI SUDDIVISIONE IN BLOCCHI",
"list.table.header.fileName": "NOME FILE",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "RISULTATO",
"segment.searchResults_other": "RISULTATI",
"segment.searchResults_zero": "RISULTATO",
+ "segment.summary": "RIEPILOGO",
+ "segment.summaryPlaceholder": "Scrivi un breve riepilogo per un migliore recupero…",
"segment.vectorHash": "Hash del vettore: "
}
diff --git a/web/i18n/it-IT/dataset-settings.json b/web/i18n/it-IT/dataset-settings.json
index 87a9603683..2193b873f9 100644
--- a/web/i18n/it-IT/dataset-settings.json
+++ b/web/i18n/it-IT/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "Impostazioni di recupero",
"form.save": "Salva",
"form.searchModel": "Cerca modello",
+ "form.summaryAutoGen": "Generazione Automatica Riepilogo",
+ "form.summaryAutoGenEnableTip": "Una volta abilitato, i riepiloghi verranno generati automaticamente per i documenti appena aggiunti. I documenti esistenti possono ancora essere riassunti manualmente.",
+ "form.summaryAutoGenTip": "I riepiloghi vengono generati automaticamente per i documenti appena aggiunti. I documenti esistenti possono ancora essere riassunti manualmente.",
+ "form.summaryInstructions": "Istruzioni",
+ "form.summaryInstructionsPlaceholder": "Descrivi le regole o lo stile per i riepiloghi generati automaticamente…",
+ "form.summaryModel": "Modello di Riepilogo",
"form.upgradeHighQualityTip": "Una volta effettuato l'aggiornamento alla modalità Alta qualità, il ripristino della modalità Risparmio non è disponibile",
"title": "Impostazioni della Conoscenza"
}
diff --git a/web/i18n/ja-JP/dataset-documents.json b/web/i18n/ja-JP/dataset-documents.json
index 7f5a04679f..a686633bb8 100644
--- a/web/i18n/ja-JP/dataset-documents.json
+++ b/web/i18n/ja-JP/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "一時停止",
"list.action.resume": "再開",
"list.action.settings": "チャンク設定",
+ "list.action.summary": "要約を生成",
"list.action.sync": "同期",
"list.action.unarchive": "アーカイブ解除",
"list.action.uploadFile": "新しいファイルをアップロード",
@@ -75,6 +76,9 @@
"list.status.indexing": "インデックス化中",
"list.status.paused": "一時停止中",
"list.status.queuing": "キューイング中",
+ "list.summary.generating": "生成中...",
+ "list.summary.generatingSummary": "要約を生成中",
+ "list.summary.ready": "要約が完成しました",
"list.table.header.action": "アクション",
"list.table.header.chunkingMode": "チャンキングモード",
"list.table.header.fileName": "ファイル名",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "検索結果",
"segment.searchResults_other": "検索結果",
"segment.searchResults_zero": "検索結果",
+ "segment.summary": "要約",
+ "segment.summaryPlaceholder": "より良い検索のために簡潔な要約を記入してください…",
"segment.vectorHash": "ベクトルハッシュ:"
}
diff --git a/web/i18n/ja-JP/dataset-settings.json b/web/i18n/ja-JP/dataset-settings.json
index b422ff0f7a..952794b267 100644
--- a/web/i18n/ja-JP/dataset-settings.json
+++ b/web/i18n/ja-JP/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "検索設定",
"form.save": "保存",
"form.searchModel": "検索モデル",
+ "form.summaryAutoGen": "要約自動生成",
+ "form.summaryAutoGenEnableTip": "有効にすると、新しく追加されたドキュメントの要約が自動的に生成されます。既存のドキュメントは引き続き手動で要約できます。",
+ "form.summaryAutoGenTip": "新しく追加されたドキュメントの要約は自動的に生成されます。既存のドキュメントは引き続き手動で要約できます。",
+ "form.summaryInstructions": "指示",
+ "form.summaryInstructionsPlaceholder": "自動生成される要約のルールやスタイルを記述してください…",
+ "form.summaryModel": "要約モデル",
"form.upgradeHighQualityTip": "高品質モードにアップグレードすると、経済的モードには戻せません。",
"title": "ナレッジベースの設定"
}
diff --git a/web/i18n/ko-KR/dataset-documents.json b/web/i18n/ko-KR/dataset-documents.json
index f2484bcf11..15d1e2a4cc 100644
--- a/web/i18n/ko-KR/dataset-documents.json
+++ b/web/i18n/ko-KR/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "일시 중지",
"list.action.resume": "재개",
"list.action.settings": "세그먼트 설정",
+ "list.action.summary": "요약 생성",
"list.action.sync": "동기화",
"list.action.unarchive": "아카이브 해제",
"list.action.uploadFile": "새 파일 업로드",
@@ -75,6 +76,9 @@
"list.status.indexing": "색인화 중",
"list.status.paused": "일시 중지됨",
"list.status.queuing": "대기 중",
+ "list.summary.generating": "생성 중...",
+ "list.summary.generatingSummary": "요약 생성 중",
+ "list.summary.ready": "요약 완료",
"list.table.header.action": "동작",
"list.table.header.chunkingMode": "청크 모드",
"list.table.header.fileName": "파일명",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "결과",
"segment.searchResults_other": "결과",
"segment.searchResults_zero": "결과",
+ "segment.summary": "요약",
+ "segment.summaryPlaceholder": "더 나은 검색을 위해 간단한 요약을 작성하세요…",
"segment.vectorHash": "벡터 해시: "
}
diff --git a/web/i18n/ko-KR/dataset-settings.json b/web/i18n/ko-KR/dataset-settings.json
index f494f0bab9..d3cc077193 100644
--- a/web/i18n/ko-KR/dataset-settings.json
+++ b/web/i18n/ko-KR/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "검색 설정",
"form.save": "저장",
"form.searchModel": "모델 검색",
+ "form.summaryAutoGen": "요약 자동 생성",
+ "form.summaryAutoGenEnableTip": "활성화하면 새로 추가된 문서에 대해 요약이 자동으로 생성됩니다. 기존 문서는 여전히 수동으로 요약할 수 있습니다.",
+ "form.summaryAutoGenTip": "새로 추가된 문서에 대해 요약이 자동으로 생성됩니다. 기존 문서는 여전히 수동으로 요약할 수 있습니다.",
+ "form.summaryInstructions": "지침",
+ "form.summaryInstructionsPlaceholder": "자동 생성 요약의 규칙이나 스타일을 설명하세요…",
+ "form.summaryModel": "요약 모델",
"form.upgradeHighQualityTip": "고품질 모드로 업그레이드한 후에는 경제적 모드로 되돌릴 수 없습니다.",
"title": "지식 설정"
}
diff --git a/web/i18n/pl-PL/dataset-documents.json b/web/i18n/pl-PL/dataset-documents.json
index 70bf022243..99f0de118b 100644
--- a/web/i18n/pl-PL/dataset-documents.json
+++ b/web/i18n/pl-PL/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "Pauza",
"list.action.resume": "Wznów",
"list.action.settings": "Ustawienia segmentacji",
+ "list.action.summary": "Wygeneruj podsumowanie",
"list.action.sync": "Synchronizuj",
"list.action.unarchive": "Usuń z archiwum",
"list.action.uploadFile": "Wgraj nowy plik",
@@ -75,6 +76,9 @@
"list.status.indexing": "Indeksowanie",
"list.status.paused": "Wstrzymane",
"list.status.queuing": "Oczekiwanie",
+ "list.summary.generating": "Generowanie...",
+ "list.summary.generatingSummary": "Generowanie podsumowania",
+ "list.summary.ready": "Podsumowanie gotowe",
"list.table.header.action": "AKCJA",
"list.table.header.chunkingMode": "TRYB CHUNKINGU",
"list.table.header.fileName": "NAZWA PLIKU",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "WYNIK",
"segment.searchResults_other": "WYNIKI",
"segment.searchResults_zero": "WYNIK",
+ "segment.summary": "PODSUMOWANIE",
+ "segment.summaryPlaceholder": "Napisz krótkie podsumowanie dla lepszego wyszukiwania…",
"segment.vectorHash": "Wektor hash: "
}
diff --git a/web/i18n/pl-PL/dataset-settings.json b/web/i18n/pl-PL/dataset-settings.json
index 94ac597b9a..84cf4f2699 100644
--- a/web/i18n/pl-PL/dataset-settings.json
+++ b/web/i18n/pl-PL/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "Ustawienia pobierania",
"form.save": "Zapisz",
"form.searchModel": "Szukaj modelu",
+ "form.summaryAutoGen": "Automatyczne Generowanie Podsumowania",
+ "form.summaryAutoGenEnableTip": "Po włączeniu podsumowania będą generowane automatycznie dla nowo dodanych dokumentów. Istniejące dokumenty nadal mogą być podsumowywane ręcznie.",
+ "form.summaryAutoGenTip": "Podsumowania są generowane automatycznie dla nowo dodanych dokumentów. Istniejące dokumenty nadal mogą być podsumowywane ręcznie.",
+ "form.summaryInstructions": "Instrukcje",
+ "form.summaryInstructionsPlaceholder": "Opisz zasady lub styl dla automatycznie generowanych podsumowań…",
+ "form.summaryModel": "Model Podsumowania",
"form.upgradeHighQualityTip": "Po uaktualnieniu do trybu wysokiej jakości powrót do trybu ekonomicznego nie jest dostępny",
"title": "Ustawienia wiedzy"
}
diff --git a/web/i18n/pt-BR/dataset-documents.json b/web/i18n/pt-BR/dataset-documents.json
index 775d29f5d1..9e41457873 100644
--- a/web/i18n/pt-BR/dataset-documents.json
+++ b/web/i18n/pt-BR/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "Pausa",
"list.action.resume": "Retomar",
"list.action.settings": "Configurações de segmento",
+ "list.action.summary": "Gerar resumo",
"list.action.sync": "Sincronizar",
"list.action.unarchive": "Desarquivar",
"list.action.uploadFile": "Enviar novo arquivo",
@@ -75,6 +76,9 @@
"list.status.indexing": "Indexando",
"list.status.paused": "Pausado",
"list.status.queuing": "Em fila",
+ "list.summary.generating": "Gerando...",
+ "list.summary.generatingSummary": "Gerando resumo",
+ "list.summary.ready": "Resumo pronto",
"list.table.header.action": "AÇÃO",
"list.table.header.chunkingMode": "MODO DE FRAGMENTAÇÃO",
"list.table.header.fileName": "NOME DO ARQUIVO",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "RESULTADO",
"segment.searchResults_other": "RESULTADOS",
"segment.searchResults_zero": "RESULTADO",
+ "segment.summary": "RESUMO",
+ "segment.summaryPlaceholder": "Escreva um breve resumo para melhor recuperação…",
"segment.vectorHash": "Hash do vetor: "
}
diff --git a/web/i18n/pt-BR/dataset-settings.json b/web/i18n/pt-BR/dataset-settings.json
index 13b5f9182e..100339d13b 100644
--- a/web/i18n/pt-BR/dataset-settings.json
+++ b/web/i18n/pt-BR/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "Configurações de recuperação",
"form.save": "Salvar",
"form.searchModel": "Pesquisar modelo",
+ "form.summaryAutoGen": "Geração Automática de Resumo",
+ "form.summaryAutoGenEnableTip": "Uma vez ativado, resumos serão gerados automaticamente para documentos recém-adicionados. Documentos existentes ainda podem ser resumidos manualmente.",
+ "form.summaryAutoGenTip": "Resumos são gerados automaticamente para documentos recém-adicionados. Documentos existentes ainda podem ser resumidos manualmente.",
+ "form.summaryInstructions": "Instruções",
+ "form.summaryInstructionsPlaceholder": "Descreva as regras ou estilo para resumos gerados automaticamente…",
+ "form.summaryModel": "Modelo de Resumo",
"form.upgradeHighQualityTip": "Depois de atualizar para o modo de alta qualidade, reverter para o modo econômico não está disponível",
"title": "Configurações do conhecimento"
}
diff --git a/web/i18n/ro-RO/dataset-documents.json b/web/i18n/ro-RO/dataset-documents.json
index 68cd5187de..9ca26edd8c 100644
--- a/web/i18n/ro-RO/dataset-documents.json
+++ b/web/i18n/ro-RO/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "Pauză",
"list.action.resume": "Reia",
"list.action.settings": "Setări de segment",
+ "list.action.summary": "Generați rezumat",
"list.action.sync": "Sincronizează",
"list.action.unarchive": "Dezarhivează",
"list.action.uploadFile": "Încarcă un fișier nou",
@@ -75,6 +76,9 @@
"list.status.indexing": "Indexare",
"list.status.paused": "Întrerupt",
"list.status.queuing": "În coadă",
+ "list.summary.generating": "Generare...",
+ "list.summary.generatingSummary": "Generare rezumat",
+ "list.summary.ready": "Rezumat gata",
"list.table.header.action": "ACȚIUNE",
"list.table.header.chunkingMode": "MOD DE FRAGMENTARE",
"list.table.header.fileName": "NUMELE FIȘIERULUI",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "REZULTAT",
"segment.searchResults_other": "REZULTATELE",
"segment.searchResults_zero": "REZULTAT",
+ "segment.summary": "REZUMAT",
+ "segment.summaryPlaceholder": "Scrieți un rezumat scurt pentru o recuperare mai bună…",
"segment.vectorHash": "Vector hash: "
}
diff --git a/web/i18n/ro-RO/dataset-settings.json b/web/i18n/ro-RO/dataset-settings.json
index a433b22f27..89939819f2 100644
--- a/web/i18n/ro-RO/dataset-settings.json
+++ b/web/i18n/ro-RO/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "Setări de recuperare",
"form.save": "Salvare",
"form.searchModel": "Căutare model",
+ "form.summaryAutoGen": "Generare Automată Rezumat",
+ "form.summaryAutoGenEnableTip": "Odată activat, rezumatele vor fi generate automat pentru documentele nou adăugate. Documentele existente pot fi încă rezumate manual.",
+ "form.summaryAutoGenTip": "Rezumatele sunt generate automat pentru documentele nou adăugate. Documentele existente pot fi încă rezumate manual.",
+ "form.summaryInstructions": "Instrucțiuni",
+ "form.summaryInstructionsPlaceholder": "Descrieți regulile sau stilul pentru rezumatele generate automat…",
+ "form.summaryModel": "Model Rezumat",
"form.upgradeHighQualityTip": "După ce faceți upgrade la modul Înaltă calitate, revenirea la modul Economic nu este disponibilă",
"title": "Setări de cunoștințe"
}
diff --git a/web/i18n/ru-RU/dataset-documents.json b/web/i18n/ru-RU/dataset-documents.json
index ecf42dea85..e94444d9eb 100644
--- a/web/i18n/ru-RU/dataset-documents.json
+++ b/web/i18n/ru-RU/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "Пауза",
"list.action.resume": "Возобновить",
"list.action.settings": "Настройки сегментации",
+ "list.action.summary": "Создать резюме",
"list.action.sync": "Синхронизировать",
"list.action.unarchive": "Разархивировать",
"list.action.uploadFile": "Загрузить новый файл",
@@ -75,6 +76,9 @@
"list.status.indexing": "Индексация",
"list.status.paused": "Приостановлено",
"list.status.queuing": "В очереди",
+ "list.summary.generating": "Создание...",
+ "list.summary.generatingSummary": "Создание резюме",
+ "list.summary.ready": "Резюме готово",
"list.table.header.action": "ДЕЙСТВИЕ",
"list.table.header.chunkingMode": "РЕЖИМ ДРОБЛЕНИЯ",
"list.table.header.fileName": "НАЗВАНИЕ ФАЙЛА",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "РЕЗУЛЬТАТ",
"segment.searchResults_other": "РЕЗУЛЬТАТЫ",
"segment.searchResults_zero": "РЕЗУЛЬТАТ",
+ "segment.summary": "РЕЗЮМЕ",
+ "segment.summaryPlaceholder": "Напишите краткое резюме для лучшего поиска…",
"segment.vectorHash": "Векторный хэш: "
}
diff --git a/web/i18n/ru-RU/dataset-settings.json b/web/i18n/ru-RU/dataset-settings.json
index 90dbf9a271..87ce706d68 100644
--- a/web/i18n/ru-RU/dataset-settings.json
+++ b/web/i18n/ru-RU/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "Настройки извлечения",
"form.save": "Сохранить",
"form.searchModel": "Поиск модели",
+ "form.summaryAutoGen": "Автоматическое создание резюме",
+ "form.summaryAutoGenEnableTip": "После включения резюме будут автоматически генерироваться для вновь добавленных документов. Существующие документы по-прежнему можно резюмировать вручную.",
+ "form.summaryAutoGenTip": "Резюме автоматически генерируются для вновь добавленных документов. Существующие документы по-прежнему можно резюмировать вручную.",
+ "form.summaryInstructions": "Инструкции",
+ "form.summaryInstructionsPlaceholder": "Опишите правила или стиль для автоматически сгенерированных резюме…",
+ "form.summaryModel": "Модель резюме",
"form.upgradeHighQualityTip": "После обновления до режима «Высокое качество» возврат к экономичному режиму невозможен",
"title": "Настройки базы знаний"
}
diff --git a/web/i18n/sl-SI/dataset-documents.json b/web/i18n/sl-SI/dataset-documents.json
index 7ea55e3beb..db12c4ab94 100644
--- a/web/i18n/sl-SI/dataset-documents.json
+++ b/web/i18n/sl-SI/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "Zaustavi",
"list.action.resume": "Nadaljuj",
"list.action.settings": "Nastavitve segmenta",
+ "list.action.summary": "Ustvari povzetek",
"list.action.sync": "Sinhroniziraj",
"list.action.unarchive": "Razveljavi arhiviranje",
"list.action.uploadFile": "Naloži novo datoteko",
@@ -75,6 +76,9 @@
"list.status.indexing": "Indeksiranje",
"list.status.paused": "Zaustavljeno",
"list.status.queuing": "V čakalni vrsti",
+ "list.summary.generating": "Ustvarjanje...",
+ "list.summary.generatingSummary": "Ustvarjanje povzetka",
+ "list.summary.ready": "Povzetek pripravljen",
"list.table.header.action": "DEJANJE",
"list.table.header.chunkingMode": "NAČIN KOŠČENJA",
"list.table.header.fileName": "IME DATOTEKE",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "REZULTAT",
"segment.searchResults_other": "REZULTATI",
"segment.searchResults_zero": "REZULTAT",
+ "segment.summary": "POVZETEK",
+ "segment.summaryPlaceholder": "Napišite kratek povzetek za boljše iskanje…",
"segment.vectorHash": "Vektorski hash: "
}
diff --git a/web/i18n/sl-SI/dataset-settings.json b/web/i18n/sl-SI/dataset-settings.json
index 6857191ded..24eb16a478 100644
--- a/web/i18n/sl-SI/dataset-settings.json
+++ b/web/i18n/sl-SI/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "Nastavitve pridobivanja",
"form.save": "Shrani",
"form.searchModel": "Išči model",
+ "form.summaryAutoGen": "Samodejna Tvorba Povzetka",
+ "form.summaryAutoGenEnableTip": "Ko je omogočeno, bodo povzetki samodejno ustvarjeni za novo dodane dokumente. Obstoječe dokumente lahko še vedno povzamete ročno.",
+ "form.summaryAutoGenTip": "Povzetki so samodejno ustvarjeni za novo dodane dokumente. Obstoječe dokumente lahko še vedno povzamete ročno.",
+ "form.summaryInstructions": "Navodila",
+ "form.summaryInstructionsPlaceholder": "Opišite pravila ali slog za samodejno ustvarjene povzetke…",
+ "form.summaryModel": "Model Povzetka",
"form.upgradeHighQualityTip": "Ko nadgradite na način visoke kakovosti, vrnitev v ekonomični način ni na voljo",
"title": "Nastavitve znanja"
}
diff --git a/web/i18n/th-TH/dataset-documents.json b/web/i18n/th-TH/dataset-documents.json
index b598c04ae7..e15c5a5a9a 100644
--- a/web/i18n/th-TH/dataset-documents.json
+++ b/web/i18n/th-TH/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "หยุด",
"list.action.resume": "ดำเนิน",
"list.action.settings": "การตั้งค่ากลุ่ม",
+ "list.action.summary": "สร้างสรุป",
"list.action.sync": "ซิงค์",
"list.action.unarchive": "ยกเลิกการเก็บถาวร",
"list.action.uploadFile": "อัปโหลดไฟล์ใหม่",
@@ -75,6 +76,9 @@
"list.status.indexing": "ดัชนี",
"list.status.paused": "หยุดชั่วคราว",
"list.status.queuing": "จัด คิว",
+ "list.summary.generating": "กำลังสร้าง...",
+ "list.summary.generatingSummary": "กำลังสร้างสรุป",
+ "list.summary.ready": "สรุปพร้อมแล้ว",
"list.table.header.action": "การเคลื่อนไหว",
"list.table.header.chunkingMode": "โหมดก้อน",
"list.table.header.fileName": "ชื่อไฟล์",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "ผล",
"segment.searchResults_other": "ผลลัพธ์",
"segment.searchResults_zero": "ผล",
+ "segment.summary": "สรุป",
+ "segment.summaryPlaceholder": "เขียนสรุปสั้นๆ เพื่อการค้นหาที่ดีขึ้น…",
"segment.vectorHash": "แฮชเวกเตอร์:"
}
diff --git a/web/i18n/th-TH/dataset-settings.json b/web/i18n/th-TH/dataset-settings.json
index b94e9cff92..f508547b42 100644
--- a/web/i18n/th-TH/dataset-settings.json
+++ b/web/i18n/th-TH/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "การตั้งค่าการดึงข้อมูล",
"form.save": "ประหยัด",
"form.searchModel": "ค้นหารุ่น",
+ "form.summaryAutoGen": "สร้างสรุปอัตโนมัติ",
+ "form.summaryAutoGenEnableTip": "เมื่อเปิดใช้งาน สรุปจะถูกสร้างขึ้นโดยอัตโนมัติสำหรับเอกสารที่เพิ่มใหม่ เอกสารที่มีอยู่ยังคงสามารถสรุปด้วยตนเองได้",
+ "form.summaryAutoGenTip": "สรุปจะถูกสร้างขึ้นโดยอัตโนมัติสำหรับเอกสารที่เพิ่มใหม่ เอกสารที่มีอยู่ยังคงสามารถสรุปด้วยตนเองได้",
+ "form.summaryInstructions": "คำแนะนำ",
+ "form.summaryInstructionsPlaceholder": "อธิบายกฎหรือรูปแบบสำหรับการสรุปที่สร้างขึ้นอัตโนมัติ…",
+ "form.summaryModel": "โมเดลสรุป",
"form.upgradeHighQualityTip": "เมื่ออัปเกรดเป็นโหมดคุณภาพสูงแล้ว จะไม่สามารถเปลี่ยนกลับเป็นโหมดประหยัดได้",
"title": "การตั้งค่าความรู้"
}
diff --git a/web/i18n/tr-TR/dataset-documents.json b/web/i18n/tr-TR/dataset-documents.json
index 1f3aa39b2d..5504619763 100644
--- a/web/i18n/tr-TR/dataset-documents.json
+++ b/web/i18n/tr-TR/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "Duraklat",
"list.action.resume": "Devam Et",
"list.action.settings": "Segment ayarları",
+ "list.action.summary": "Özet oluştur",
"list.action.sync": "Senkronize et",
"list.action.unarchive": "Arşivden Çıkar",
"list.action.uploadFile": "Yeni dosya yükle",
@@ -75,6 +76,9 @@
"list.status.indexing": "Dizine Ekleniyor",
"list.status.paused": "Durduruldu",
"list.status.queuing": "Kuyrukta",
+ "list.summary.generating": "Oluşturuluyor...",
+ "list.summary.generatingSummary": "Özet oluşturuluyor",
+ "list.summary.ready": "Özet hazır",
"list.table.header.action": "EYLEM",
"list.table.header.chunkingMode": "PARÇALAMA MODU",
"list.table.header.fileName": "DOSYA ADI",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "SONUÇ",
"segment.searchResults_other": "SONUÇ -LARI",
"segment.searchResults_zero": "SONUÇ",
+ "segment.summary": "ÖZET",
+ "segment.summaryPlaceholder": "Daha iyi arama için kısa bir özet yazın…",
"segment.vectorHash": "Vektör hash: "
}
diff --git a/web/i18n/tr-TR/dataset-settings.json b/web/i18n/tr-TR/dataset-settings.json
index bc84448771..c02b24c723 100644
--- a/web/i18n/tr-TR/dataset-settings.json
+++ b/web/i18n/tr-TR/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "Alma Ayarları",
"form.save": "Kaydet",
"form.searchModel": "Model Ara",
+ "form.summaryAutoGen": "Özet Otomatik Oluşturma",
+ "form.summaryAutoGenEnableTip": "Etkinleştirildiğinde, yeni eklenen belgeler için özetler otomatik olarak oluşturulacaktır. Mevcut belgeler hala manuel olarak özetlenebilir.",
+ "form.summaryAutoGenTip": "Yeni eklenen belgeler için özetler otomatik olarak oluşturulur. Mevcut belgeler hala manuel olarak özetlenebilir.",
+ "form.summaryInstructions": "Talimatlar",
+ "form.summaryInstructionsPlaceholder": "Otomatik oluşturulan özetler için kuralları veya stili açıklayın…",
+ "form.summaryModel": "Özet Modeli",
"form.upgradeHighQualityTip": "Yüksek Kalite moduna yükselttikten sonra Ekonomik moda geri dönülemez",
"title": "Bilgi ayarları"
}
diff --git a/web/i18n/uk-UA/dataset-documents.json b/web/i18n/uk-UA/dataset-documents.json
index 38eb68e051..deffa9544f 100644
--- a/web/i18n/uk-UA/dataset-documents.json
+++ b/web/i18n/uk-UA/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "Пауза",
"list.action.resume": "Продовжити",
"list.action.settings": "Налаштування сегмента",
+ "list.action.summary": "Створити резюме",
"list.action.sync": "Синхронізувати",
"list.action.unarchive": "Розархівувати",
"list.action.uploadFile": "Завантажити новий файл",
@@ -75,6 +76,9 @@
"list.status.indexing": "Індексування",
"list.status.paused": "Призупинено",
"list.status.queuing": "В черзі",
+ "list.summary.generating": "Створення...",
+ "list.summary.generatingSummary": "Створення резюме",
+ "list.summary.ready": "Резюме готове",
"list.table.header.action": "ДІЯ",
"list.table.header.chunkingMode": "РЕЖИМ ФРАГМЕНТАЦІЇ",
"list.table.header.fileName": "НАЗВА ФАЙЛУ",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "РЕЗУЛЬТАТ",
"segment.searchResults_other": "РЕЗУЛЬТАТІВ",
"segment.searchResults_zero": "РЕЗУЛЬТАТ",
+ "segment.summary": "РЕЗЮМЕ",
+ "segment.summaryPlaceholder": "Напишіть короткий опис для кращого пошуку…",
"segment.vectorHash": "Векторний хеш: "
}
diff --git a/web/i18n/uk-UA/dataset-settings.json b/web/i18n/uk-UA/dataset-settings.json
index 0e569c6d00..dbdb229ba6 100644
--- a/web/i18n/uk-UA/dataset-settings.json
+++ b/web/i18n/uk-UA/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "Налаштування отримання",
"form.save": "Зберегти",
"form.searchModel": "Пошук моделі",
+ "form.summaryAutoGen": "Автоматичне створення резюме",
+ "form.summaryAutoGenEnableTip": "Після увімкнення резюме будуть автоматично генеруватися для нових документів. Існуючі документи все ще можна резюмувати вручну.",
+ "form.summaryAutoGenTip": "Резюме автоматично генеруються для нових документів. Існуючі документи все ще можна резюмувати вручну.",
+ "form.summaryInstructions": "Інструкції",
+ "form.summaryInstructionsPlaceholder": "Опишіть правила або стиль для автоматично згенерованих резюме…",
+ "form.summaryModel": "Модель резюме",
"form.upgradeHighQualityTip": "Після оновлення до режиму високої якості повернення до економного режиму недоступне",
"title": "Налаштування бази знань"
}
diff --git a/web/i18n/vi-VN/dataset-documents.json b/web/i18n/vi-VN/dataset-documents.json
index 4ebe9e6b9b..e7d7890eaa 100644
--- a/web/i18n/vi-VN/dataset-documents.json
+++ b/web/i18n/vi-VN/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "Tạm dừng",
"list.action.resume": "Tiếp tục",
"list.action.settings": "Cài đặt phân đoạn",
+ "list.action.summary": "Tạo tóm tắt",
"list.action.sync": "Đồng bộ",
"list.action.unarchive": "Khôi phục",
"list.action.uploadFile": "Tải lên tệp mới",
@@ -75,6 +76,9 @@
"list.status.indexing": "Đang lập chỉ mục",
"list.status.paused": "Tạm dừng",
"list.status.queuing": "Đang chờ",
+ "list.summary.generating": "Đang tạo...",
+ "list.summary.generatingSummary": "Đang tạo tóm tắt",
+ "list.summary.ready": "Tóm tắt đã sẵn sàng",
"list.table.header.action": "THAO TÁC",
"list.table.header.chunkingMode": "CHẾ ĐỘ CHUNKING",
"list.table.header.fileName": "TÊN TỆP",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "KẾT QUẢ",
"segment.searchResults_other": "KẾT QUẢ",
"segment.searchResults_zero": "KẾT QUẢ",
+ "segment.summary": "TÓM TẮT",
+ "segment.summaryPlaceholder": "Viết tóm tắt ngắn gọn để tìm kiếm tốt hơn…",
"segment.vectorHash": "Mã băm vector: "
}
diff --git a/web/i18n/vi-VN/dataset-settings.json b/web/i18n/vi-VN/dataset-settings.json
index c1127a7377..7f49c6b5d1 100644
--- a/web/i18n/vi-VN/dataset-settings.json
+++ b/web/i18n/vi-VN/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "Cài đặt truy xuất",
"form.save": "Lưu",
"form.searchModel": "Tìm kiếm mô hình",
+ "form.summaryAutoGen": "Tự động Tạo Tóm tắt",
+ "form.summaryAutoGenEnableTip": "Sau khi bật, tóm tắt sẽ được tạo tự động cho các tài liệu mới được thêm. Các tài liệu hiện có vẫn có thể được tóm tắt thủ công.",
+ "form.summaryAutoGenTip": "Tóm tắt được tạo tự động cho các tài liệu mới được thêm. Các tài liệu hiện có vẫn có thể được tóm tắt thủ công.",
+ "form.summaryInstructions": "Hướng dẫn",
+ "form.summaryInstructionsPlaceholder": "Mô tả các quy tắc hoặc phong cách cho tóm tắt được tạo tự động…",
+ "form.summaryModel": "Mô hình Tóm tắt",
"form.upgradeHighQualityTip": "Sau khi nâng cấp lên chế độ Chất lượng cao, không thể hoàn nguyên về chế độ Tiết kiệm",
"title": "Cài đặt Kiến thức"
}
diff --git a/web/i18n/zh-Hant/dataset-documents.json b/web/i18n/zh-Hant/dataset-documents.json
index 417856786a..02d838cdf9 100644
--- a/web/i18n/zh-Hant/dataset-documents.json
+++ b/web/i18n/zh-Hant/dataset-documents.json
@@ -31,6 +31,7 @@
"list.action.pause": "暫停",
"list.action.resume": "恢復",
"list.action.settings": "分段設定",
+ "list.action.summary": "產生摘要",
"list.action.sync": "同步",
"list.action.unarchive": "撤銷歸檔",
"list.action.uploadFile": "上傳新檔案",
@@ -75,6 +76,9 @@
"list.status.indexing": "索引中",
"list.status.paused": "已暫停",
"list.status.queuing": "排隊中",
+ "list.summary.generating": "產生中...",
+ "list.summary.generatingSummary": "產生摘要中",
+ "list.summary.ready": "摘要已完成",
"list.table.header.action": "操作",
"list.table.header.chunkingMode": "分塊模式",
"list.table.header.fileName": "檔名",
@@ -329,5 +333,7 @@
"segment.searchResults_one": "結果",
"segment.searchResults_other": "結果",
"segment.searchResults_zero": "結果",
+ "segment.summary": "摘要",
+ "segment.summaryPlaceholder": "撰寫簡短的摘要以便更好地檢索…",
"segment.vectorHash": "向量雜湊:"
}
diff --git a/web/i18n/zh-Hant/dataset-settings.json b/web/i18n/zh-Hant/dataset-settings.json
index 3c4bc575a6..46f167f1e8 100644
--- a/web/i18n/zh-Hant/dataset-settings.json
+++ b/web/i18n/zh-Hant/dataset-settings.json
@@ -39,6 +39,12 @@
"form.retrievalSettings": "檢索設置",
"form.save": "儲存",
"form.searchModel": "搜索模型",
+ "form.summaryAutoGen": "摘要自動產生",
+ "form.summaryAutoGenEnableTip": "啟用後,將自動為新添加的文件產生摘要。現有文件仍可手動摘要。",
+ "form.summaryAutoGenTip": "將自動為新添加的文件產生摘要。現有文件仍可手動摘要。",
+ "form.summaryInstructions": "指令",
+ "form.summaryInstructionsPlaceholder": "描述自動產生摘要的規則或風格…",
+ "form.summaryModel": "摘要模型",
"form.upgradeHighQualityTip": "升級到高品質模式后,無法恢復到經濟模式",
"title": "知識庫設定"
}