Skip to content

Commit 451e843

Browse files
committed
feat: Terminology / SQL Sample Management add enabled control
1 parent d52a2b6 commit 451e843

File tree

8 files changed

+91
-9
lines changed

8 files changed

+91
-9
lines changed

backend/alembic/env.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
# from apps.chat.models.chat_model import SQLModel
2828
from apps.terminology.models.terminology_model import SQLModel
2929
#from apps.custom_prompt.models.custom_prompt_model import SQLModel
30-
# from apps.data_training.models.data_training_model import SQLModel
30+
from apps.data_training.models.data_training_model import SQLModel
3131
# from apps.dashboard.models.dashboard_model import SQLModel
3232
from common.core.config import settings # noqa
3333
#from apps.datasource.models.datasource import SQLModel
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
"""050_modify_ddl.py
2+
3+
Revision ID: 2785e54dc1c4
4+
Revises: b58a71ca6ae3
5+
Create Date: 2025-11-06 13:43:50.820328
6+
7+
"""
8+
from alembic import op
9+
import sqlalchemy as sa
10+
import sqlmodel.sql.sqltypes
11+
from sqlalchemy.dialects import postgresql
12+
13+
# revision identifiers, used by Alembic.
14+
revision = '2785e54dc1c4'
15+
down_revision = 'b58a71ca6ae3'
16+
branch_labels = None
17+
depends_on = None
18+
19+
sql='''
20+
UPDATE data_training SET enabled = true;
21+
UPDATE terminology SET enabled = true;
22+
'''
23+
24+
def upgrade():
25+
# ### commands auto generated by Alembic - please adjust! ###
26+
op.add_column('data_training', sa.Column('enabled', sa.Boolean(), nullable=True))
27+
op.add_column('terminology', sa.Column('enabled', sa.Boolean(), nullable=True))
28+
29+
op.execute(sql)
30+
# ### end Alembic commands ###
31+
32+
33+
def downgrade():
34+
# ### commands auto generated by Alembic - please adjust! ###
35+
op.drop_column('terminology', 'enabled')
36+
op.drop_column('data_training', 'enabled')
37+
# ### end Alembic commands ###

backend/apps/data_training/api/data_training.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
from fastapi import APIRouter, Query
44

5-
from apps.data_training.curd.data_training import page_data_training, create_training, update_training, delete_training
5+
from apps.data_training.curd.data_training import page_data_training, create_training, update_training, delete_training, \
6+
enable_training
67
from apps.data_training.models.data_training_model import DataTrainingInfo
78
from common.core.deps import SessionDep, CurrentUser, Trans
89

@@ -37,3 +38,8 @@ async def create_or_update(session: SessionDep, current_user: CurrentUser, trans
3738
@router.delete("")
3839
async def delete(session: SessionDep, id_list: list[int]):
3940
delete_training(session, id_list)
41+
42+
43+
@router.get("{id}/enable/{enabled}")
44+
async def enable(session: SessionDep, id: int, enabled: bool, trans: Trans):
45+
enable_training(session, id, enabled, trans)

backend/apps/data_training/curd/data_training.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def create_training(session: SessionDep, info: DataTrainingInfo, oid: int, trans
8989
if info.datasource is None:
9090
raise Exception(trans("i18n_data_training.datasource_cannot_be_none"))
9191
parent = DataTraining(question=info.question, create_time=create_time, description=info.description, oid=oid,
92-
datasource=info.datasource)
92+
datasource=info.datasource, enabled=info.enabled)
9393

9494
exists = session.query(
9595
session.query(DataTraining).filter(
@@ -135,6 +135,7 @@ def update_training(session: SessionDep, info: DataTrainingInfo, oid: int, trans
135135
question=info.question,
136136
description=info.description,
137137
datasource=info.datasource,
138+
enabled=info.enabled,
138139
)
139140
session.execute(stmt)
140141
session.commit()
@@ -151,6 +152,20 @@ def delete_training(session: SessionDep, ids: list[int]):
151152
session.commit()
152153

153154

155+
def enable_training(session: SessionDep, id: int, enabled: bool, trans: Trans):
156+
count = session.query(DataTraining).filter(
157+
DataTraining.id == id
158+
).count()
159+
if count == 0:
160+
raise Exception(trans('i18n_data_training.data_training_not_exists'))
161+
162+
stmt = update(DataTraining).where(and_(DataTraining.id == id)).values(
163+
enabled=enabled,
164+
)
165+
session.execute(stmt)
166+
session.commit()
167+
168+
154169
# def run_save_embeddings(ids: List[int]):
155170
# executor.submit(save_embeddings, ids)
156171
#

backend/apps/data_training/models/data_training_model.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from pgvector.sqlalchemy import VECTOR
55
from pydantic import BaseModel
6-
from sqlalchemy import Column, Text, BigInteger, DateTime, Identity
6+
from sqlalchemy import Column, Text, BigInteger, DateTime, Identity, Boolean
77
from sqlmodel import SQLModel, Field
88

99

@@ -16,6 +16,7 @@ class DataTraining(SQLModel, table=True):
1616
question: Optional[str] = Field(max_length=255)
1717
description: Optional[str] = Field(sa_column=Column(Text, nullable=True))
1818
embedding: Optional[List[float]] = Field(sa_column=Column(VECTOR(), nullable=True))
19+
enabled: Optional[bool] = Field(sa_column=Column(Boolean, default=True))
1920

2021

2122
class DataTrainingInfo(BaseModel):
@@ -26,3 +27,4 @@ class DataTrainingInfo(BaseModel):
2627
create_time: Optional[datetime] = None
2728
question: Optional[str] = None
2829
description: Optional[str] = None
30+
enabled: Optional[bool] = True

backend/apps/terminology/api/terminology.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from fastapi import APIRouter, Query
44

55
from apps.terminology.curd.terminology import page_terminology, create_terminology, update_terminology, \
6-
delete_terminology
6+
delete_terminology, enable_terminology
77
from apps.terminology.models.terminology_model import TerminologyInfo
88
from common.core.deps import SessionDep, CurrentUser, Trans
99

@@ -37,3 +37,8 @@ async def create_or_update(session: SessionDep, current_user: CurrentUser, trans
3737
@router.delete("")
3838
async def delete(session: SessionDep, id_list: list[int]):
3939
delete_terminology(session, id_list)
40+
41+
42+
@router.get("{id}/enable/{enabled}")
43+
async def enable(session: SessionDep, id: int, enabled: bool, trans: Trans):
44+
enable_terminology(session, id, enabled, trans)

backend/apps/terminology/curd/terminology.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ def create_terminology(session: SessionDep, info: TerminologyInfo, oid: int, tra
230230
raise Exception(trans("i18n_terminology.datasource_cannot_be_none"))
231231

232232
parent = Terminology(word=info.word, create_time=create_time, description=info.description, oid=oid,
233-
specific_ds=specific_ds,
233+
specific_ds=specific_ds, enabled=info.enabled,
234234
datasource_ids=datasource_ids)
235235

236236
words = [info.word]
@@ -289,7 +289,7 @@ def create_terminology(session: SessionDep, info: TerminologyInfo, oid: int, tra
289289
if other_word.strip() == "":
290290
continue
291291
_list.append(
292-
Terminology(pid=result.id, word=other_word, create_time=create_time, oid=oid,
292+
Terminology(pid=result.id, word=other_word, create_time=create_time, oid=oid, enabled=result.enabled,
293293
specific_ds=specific_ds, datasource_ids=datasource_ids))
294294
session.bulk_save_objects(_list)
295295
session.flush()
@@ -366,7 +366,8 @@ def update_terminology(session: SessionDep, info: TerminologyInfo, oid: int, tra
366366
word=info.word,
367367
description=info.description,
368368
specific_ds=specific_ds,
369-
datasource_ids=datasource_ids
369+
datasource_ids=datasource_ids,
370+
enabled=info.enabled,
370371
)
371372
session.execute(stmt)
372373
session.commit()
@@ -383,7 +384,7 @@ def update_terminology(session: SessionDep, info: TerminologyInfo, oid: int, tra
383384
continue
384385
_list.append(
385386
Terminology(pid=info.id, word=other_word, create_time=create_time, oid=oid,
386-
specific_ds=specific_ds, datasource_ids=datasource_ids))
387+
specific_ds=specific_ds, datasource_ids=datasource_ids, enabled=info.enabled))
387388
session.bulk_save_objects(_list)
388389
session.flush()
389390
session.commit()
@@ -400,6 +401,20 @@ def delete_terminology(session: SessionDep, ids: list[int]):
400401
session.commit()
401402

402403

404+
def enable_terminology(session: SessionDep, id: int, enabled: bool, trans: Trans):
405+
count = session.query(Terminology).filter(
406+
Terminology.id == id
407+
).count()
408+
if count == 0:
409+
raise Exception(trans('i18n_terminology.terminology_not_exists'))
410+
411+
stmt = update(Terminology).where(or_(Terminology.id == id, Terminology.pid == id)).values(
412+
enabled=enabled,
413+
)
414+
session.execute(stmt)
415+
session.commit()
416+
417+
403418
# def run_save_embeddings(ids: List[int]):
404419
# executor.submit(save_embeddings, ids)
405420
#

backend/apps/terminology/models/terminology_model.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class Terminology(SQLModel, table=True):
1919
embedding: Optional[List[float]] = Field(sa_column=Column(VECTOR(), nullable=True))
2020
specific_ds: Optional[bool] = Field(sa_column=Column(Boolean, default=False))
2121
datasource_ids: Optional[list[int]] = Field(sa_column=Column(JSONB), default=[])
22+
enabled: Optional[bool] = Field(sa_column=Column(Boolean, default=True))
2223

2324

2425
class TerminologyInfo(BaseModel):
@@ -30,3 +31,4 @@ class TerminologyInfo(BaseModel):
3031
specific_ds: Optional[bool] = False
3132
datasource_ids: Optional[list[int]] = []
3233
datasource_names: Optional[list[str]] = []
34+
enabled: Optional[bool] = True

0 commit comments

Comments
 (0)