fix: handle dataset name duplication

This commit is contained in:
Rhys 2025-12-09 14:39:54 +07:00
parent 51330c0ee6
commit 8856bf1b58
3 changed files with 41 additions and 1 deletions

View File

@ -0,0 +1,31 @@
"""add_index_to_dataset_name
Revision ID: c0dc2235f174
Revises: 09cfdda155d1
Create Date: 2025-12-10 09:25:54.480660
"""
from alembic import op
import models as models
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic.
revision = 'c0dc2235f174'
down_revision = '09cfdda155d1'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('datasets', schema=None) as batch_op:
batch_op.create_index('dataset_tenant_name_idx', ['tenant_id', 'name'], unique=False)
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('datasets', schema=None) as batch_op:
batch_op.drop_index('dataset_tenant_name_idx')
# ### end Alembic commands ###

View File

@ -46,6 +46,7 @@ class Dataset(Base):
__table_args__ = (
sa.PrimaryKeyConstraint("id", name="dataset_pkey"),
sa.Index("dataset_tenant_idx", "tenant_id"),
sa.Index("dataset_tenant_name_idx", "tenant_id", "name"),
adjusted_json_index("retrieval_model_idx", "retrieval_model"),
)

View File

@ -2356,7 +2356,15 @@ class DocumentService:
cut_length = 18
cut_name = documents[0].name[:cut_length]
dataset.name = cut_name + "..."
proposed_name = cut_name + "..."
# Check for duplicate names and auto-increment if needed
existing_dataset_names = db.session.scalars(
select(Dataset.name).where(Dataset.tenant_id == tenant_id, Dataset.name.like(f"{proposed_name}%"))
).all()
if existing_dataset_names:
proposed_name = generate_incremental_name(existing_dataset_names, proposed_name)
dataset.name = proposed_name
dataset.description = "useful for when you want to answer queries about the " + documents[0].name
db.session.commit()