diff --git a/api/controllers/console/datasets/datasets.py b/api/controllers/console/datasets/datasets.py index 3834daa007..823cf6a9e7 100644 --- a/api/controllers/console/datasets/datasets.py +++ b/api/controllers/console/datasets/datasets.py @@ -339,7 +339,7 @@ class DatasetApi(Resource): dataset_id_str = str(dataset_id) # The role of the current user in the ta table must be admin, owner, or editor - if not current_user.is_editor or current_user.is_dataset_operator: + if not (current_user.is_editor or current_user.is_dataset_operator): raise Forbidden() try: diff --git a/api/controllers/console/datasets/external.py b/api/controllers/console/datasets/external.py index 043f39f623..e149d550e7 100644 --- a/api/controllers/console/datasets/external.py +++ b/api/controllers/console/datasets/external.py @@ -131,7 +131,7 @@ class ExternalApiTemplateApi(Resource): external_knowledge_api_id = str(external_knowledge_api_id) # The role of the current user in the ta table must be admin, owner, or editor - if not current_user.is_editor or current_user.is_dataset_operator: + if not (current_user.is_editor or current_user.is_dataset_operator): raise Forbidden() ExternalDatasetService.delete_external_knowledge_api(current_user.current_tenant_id, external_knowledge_api_id) diff --git a/api/migrations/versions/2025_05_15_1558-b35c3db83d09_add_pipeline_info.py b/api/migrations/versions/2025_05_15_1558-b35c3db83d09_add_pipeline_info.py index 9e02fe1a03..6416f30619 100644 --- a/api/migrations/versions/2025_05_15_1558-b35c3db83d09_add_pipeline_info.py +++ b/api/migrations/versions/2025_05_15_1558-b35c3db83d09_add_pipeline_info.py @@ -20,7 +20,7 @@ depends_on = None def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.create_table('pipeline_built_in_templates', - sa.Column('id', models.types.StringUUID(), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('id', models.types.StringUUID(), server_default=sa.text('uuidv7()'), nullable=False), sa.Column('pipeline_id', models.types.StringUUID(), nullable=False), sa.Column('name', sa.String(length=255), nullable=False), sa.Column('description', sa.Text(), nullable=False), @@ -35,7 +35,7 @@ def upgrade(): sa.PrimaryKeyConstraint('id', name='pipeline_built_in_template_pkey') ) op.create_table('pipeline_customized_templates', - sa.Column('id', models.types.StringUUID(), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('id', models.types.StringUUID(), server_default=sa.text('uuidv7()'), nullable=False), sa.Column('tenant_id', models.types.StringUUID(), nullable=False), sa.Column('pipeline_id', models.types.StringUUID(), nullable=False), sa.Column('name', sa.String(length=255), nullable=False), @@ -52,7 +52,7 @@ def upgrade(): batch_op.create_index('pipeline_customized_template_tenant_idx', ['tenant_id'], unique=False) op.create_table('pipelines', - sa.Column('id', models.types.StringUUID(), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('id', models.types.StringUUID(), server_default=sa.text('uuidv7()'), nullable=False), sa.Column('tenant_id', models.types.StringUUID(), nullable=False), sa.Column('name', sa.String(length=255), nullable=False), sa.Column('description', sa.Text(), server_default=sa.text("''::character varying"), nullable=False), diff --git a/api/migrations/versions/2025_05_30_0033-c459994abfa8_add_pipeline_info_3.py b/api/migrations/versions/2025_05_30_0033-c459994abfa8_add_pipeline_info_3.py index 0b010d535d..ad7deaaac5 100644 --- a/api/migrations/versions/2025_05_30_0033-c459994abfa8_add_pipeline_info_3.py +++ b/api/migrations/versions/2025_05_30_0033-c459994abfa8_add_pipeline_info_3.py @@ -20,7 +20,7 @@ depends_on = None def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.create_table('datasource_oauth_params', - sa.Column('id', models.types.StringUUID(), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('id', models.types.StringUUID(), server_default=sa.text('uuidv7()'), nullable=False), sa.Column('plugin_id', models.types.StringUUID(), nullable=False), sa.Column('provider', sa.String(length=255), nullable=False), sa.Column('system_credentials', postgresql.JSONB(astext_type=sa.Text()), nullable=False), @@ -28,7 +28,7 @@ def upgrade(): sa.UniqueConstraint('plugin_id', 'provider', name='datasource_oauth_config_datasource_id_provider_idx') ) op.create_table('datasource_providers', - sa.Column('id', models.types.StringUUID(), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('id', models.types.StringUUID(), server_default=sa.text('uuidv7()'), nullable=False), sa.Column('tenant_id', models.types.StringUUID(), nullable=False), sa.Column('plugin_id', models.types.StringUUID(), nullable=False), sa.Column('provider', sa.String(length=255), nullable=False), diff --git a/api/migrations/versions/2025_06_17_1905-70a0fc0c013f_add_pipeline_info_7.py b/api/migrations/versions/2025_06_17_1905-70a0fc0c013f_add_pipeline_info_7.py index a695adc74a..071f15adb4 100644 --- a/api/migrations/versions/2025_06_17_1905-70a0fc0c013f_add_pipeline_info_7.py +++ b/api/migrations/versions/2025_06_17_1905-70a0fc0c013f_add_pipeline_info_7.py @@ -20,7 +20,7 @@ depends_on = None def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.create_table('document_pipeline_execution_logs', - sa.Column('id', models.types.StringUUID(), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('id', models.types.StringUUID(), server_default=sa.text('uuidv7()'), nullable=False), sa.Column('pipeline_id', models.types.StringUUID(), nullable=False), sa.Column('document_id', models.types.StringUUID(), nullable=False), sa.Column('datasource_type', sa.String(length=255), nullable=False), diff --git a/api/migrations/versions/2025_09_01_1443-8c5088481127_add_pipeline_info_17.py b/api/migrations/versions/2025_09_01_1443-8c5088481127_add_pipeline_info_17.py index 0269c6a32d..bd9f254cb1 100644 --- a/api/migrations/versions/2025_09_01_1443-8c5088481127_add_pipeline_info_17.py +++ b/api/migrations/versions/2025_09_01_1443-8c5088481127_add_pipeline_info_17.py @@ -20,7 +20,7 @@ depends_on = None def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.create_table('pipeline_recommended_plugins', - sa.Column('id', models.types.StringUUID(), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('id', models.types.StringUUID(), server_default=sa.text('uuidv7()'), nullable=False), sa.Column('plugin_id', sa.Text(), nullable=False), sa.Column('provider_name', sa.Text(), nullable=False), sa.Column('position', sa.Integer(), nullable=False), diff --git a/api/models/dataset.py b/api/models/dataset.py index 4674ef81e6..bbebf59ea8 100644 --- a/api/models/dataset.py +++ b/api/models/dataset.py @@ -1225,7 +1225,7 @@ class PipelineBuiltInTemplate(Base): # type: ignore[name-defined] __tablename__ = "pipeline_built_in_templates" __table_args__ = (db.PrimaryKeyConstraint("id", name="pipeline_built_in_template_pkey"),) - id = db.Column(StringUUID, server_default=db.text("uuid_generate_v4()")) + id = db.Column(StringUUID, server_default=db.text("uuidv7()")) name = db.Column(db.String(255), nullable=False) description = db.Column(db.Text, nullable=False) chunk_structure = db.Column(db.String(255), nullable=False) @@ -1256,7 +1256,7 @@ class PipelineCustomizedTemplate(Base): # type: ignore[name-defined] db.Index("pipeline_customized_template_tenant_idx", "tenant_id"), ) - id = db.Column(StringUUID, server_default=db.text("uuid_generate_v4()")) + id = db.Column(StringUUID, server_default=db.text("uuidv7()")) tenant_id = db.Column(StringUUID, nullable=False) name = db.Column(db.String(255), nullable=False) description = db.Column(db.Text, nullable=False) @@ -1283,7 +1283,7 @@ class Pipeline(Base): # type: ignore[name-defined] __tablename__ = "pipelines" __table_args__ = (db.PrimaryKeyConstraint("id", name="pipeline_pkey"),) - id = db.Column(StringUUID, server_default=db.text("uuid_generate_v4()")) + id = db.Column(StringUUID, server_default=db.text("uuidv7()")) tenant_id: Mapped[str] = db.Column(StringUUID, nullable=False) name = db.Column(db.String(255), nullable=False) description = db.Column(db.Text, nullable=False, server_default=db.text("''::character varying")) @@ -1306,7 +1306,7 @@ class DocumentPipelineExecutionLog(Base): db.Index("document_pipeline_execution_logs_document_id_idx", "document_id"), ) - id = db.Column(StringUUID, server_default=db.text("uuid_generate_v4()")) + id = db.Column(StringUUID, server_default=db.text("uuidv7()")) pipeline_id = db.Column(StringUUID, nullable=False) document_id = db.Column(StringUUID, nullable=False) datasource_type = db.Column(db.String(255), nullable=False) @@ -1321,7 +1321,7 @@ class PipelineRecommendedPlugin(Base): __tablename__ = "pipeline_recommended_plugins" __table_args__ = (db.PrimaryKeyConstraint("id", name="pipeline_recommended_plugin_pkey"),) - id = db.Column(StringUUID, server_default=db.text("uuid_generate_v4()")) + id = db.Column(StringUUID, server_default=db.text("uuidv7()")) plugin_id = db.Column(db.Text, nullable=False) provider_name = db.Column(db.Text, nullable=False) position = db.Column(db.Integer, nullable=False, default=0) diff --git a/api/models/oauth.py b/api/models/oauth.py index 9869fb40ff..b6a76793fc 100644 --- a/api/models/oauth.py +++ b/api/models/oauth.py @@ -15,7 +15,7 @@ class DatasourceOauthParamConfig(Base): # type: ignore[name-defined] db.UniqueConstraint("plugin_id", "provider", name="datasource_oauth_config_datasource_id_provider_idx"), ) - id = db.Column(StringUUID, server_default=db.text("uuid_generate_v4()")) + id = db.Column(StringUUID, server_default=db.text("uuidv7()")) plugin_id: Mapped[str] = db.Column(db.String(255), nullable=False) provider: Mapped[str] = db.Column(db.String(255), nullable=False) system_credentials: Mapped[dict] = db.Column(JSONB, nullable=False) @@ -28,7 +28,7 @@ class DatasourceProvider(Base): db.UniqueConstraint("tenant_id", "plugin_id", "provider", "name", name="datasource_provider_unique_name"), db.Index("datasource_provider_auth_type_provider_idx", "tenant_id", "plugin_id", "provider"), ) - id = db.Column(StringUUID, server_default=db.text("uuid_generate_v4()")) + id = db.Column(StringUUID, server_default=db.text("uuidv7()")) tenant_id = db.Column(StringUUID, nullable=False) name: Mapped[str] = db.Column(db.String(255), nullable=False) provider: Mapped[str] = db.Column(db.String(255), nullable=False) @@ -50,7 +50,7 @@ class DatasourceOauthTenantParamConfig(Base): db.UniqueConstraint("tenant_id", "plugin_id", "provider", name="datasource_oauth_tenant_config_unique"), ) - id = db.Column(StringUUID, server_default=db.text("uuid_generate_v4()")) + id = db.Column(StringUUID, server_default=db.text("uuidv7()")) tenant_id = db.Column(StringUUID, nullable=False) provider: Mapped[str] = db.Column(db.String(255), nullable=False) plugin_id: Mapped[str] = db.Column(db.String(255), nullable=False) diff --git a/api/services/dataset_service.py b/api/services/dataset_service.py index f0b800842c..45cca454e8 100644 --- a/api/services/dataset_service.py +++ b/api/services/dataset_service.py @@ -46,6 +46,7 @@ from models.dataset import ( ) from models.model import UploadFile from models.provider_ids import ModelProviderID +from models.source import DataSourceOauthBinding from services.entities.knowledge_entities.knowledge_entities import ( ChildChunkUpdateArgs, KnowledgeConfig, diff --git a/web/app/components/rag-pipeline/hooks/use-available-nodes-meta-data.ts b/web/app/components/rag-pipeline/hooks/use-available-nodes-meta-data.ts index 6ce4524c8e..66b9214214 100644 --- a/web/app/components/rag-pipeline/hooks/use-available-nodes-meta-data.ts +++ b/web/app/components/rag-pipeline/hooks/use-available-nodes-meta-data.ts @@ -6,6 +6,7 @@ import dataSourceDefault from '@/app/components/workflow/nodes/data-source/defau import dataSourceEmptyDefault from '@/app/components/workflow/nodes/data-source-empty/default' import { WORKFLOW_COMMON_NODES } from '@/app/components/workflow/constants/node' import type { AvailableNodesMetaData } from '@/app/components/workflow/hooks-store/store' +import { BlockEnum } from '@/app/components/workflow/types' export const useAvailableNodesMetaData = () => { const { t } = useTranslation() @@ -59,7 +60,10 @@ export const useAvailableNodesMetaData = () => { return useMemo(() => { return { nodes: availableNodesMetaData, - nodesMap: availableNodesMetaDataMap, + nodesMap: { + ...availableNodesMetaDataMap, + [BlockEnum.VariableAssigner]: availableNodesMetaDataMap?.[BlockEnum.VariableAggregator], + }, } }, [availableNodesMetaData, availableNodesMetaDataMap]) } diff --git a/web/app/components/workflow-app/hooks/use-available-nodes-meta-data.ts b/web/app/components/workflow-app/hooks/use-available-nodes-meta-data.ts index f590c1a8ce..ba51b06401 100644 --- a/web/app/components/workflow-app/hooks/use-available-nodes-meta-data.ts +++ b/web/app/components/workflow-app/hooks/use-available-nodes-meta-data.ts @@ -7,6 +7,7 @@ import AnswerDefault from '@/app/components/workflow/nodes/answer/default' import { WORKFLOW_COMMON_NODES } from '@/app/components/workflow/constants/node' import type { AvailableNodesMetaData } from '@/app/components/workflow/hooks-store/store' import { useIsChatMode } from './use-is-chat-mode' +import { BlockEnum } from '@/app/components/workflow/types' export const useAvailableNodesMetaData = () => { const { t } = useTranslation() @@ -58,7 +59,10 @@ export const useAvailableNodesMetaData = () => { return useMemo(() => { return { nodes: availableNodesMetaData, - nodesMap: availableNodesMetaDataMap, + nodesMap: { + ...availableNodesMetaDataMap, + [BlockEnum.VariableAssigner]: availableNodesMetaDataMap?.[BlockEnum.VariableAggregator], + }, } }, [availableNodesMetaData, availableNodesMetaDataMap]) }