mirror of
https://gh-proxy.org/https://github.com/klinsmaya/SQLBot.git
synced 2026-11-08 01:06:59 +08:00
feat: Terminology / SQL Sample Management add enabled control
This commit is contained in:
@@ -27,7 +27,7 @@ config = context.config
|
||||
# from apps.chat.models.chat_model import SQLModel
|
||||
from apps.terminology.models.terminology_model import SQLModel
|
||||
#from apps.custom_prompt.models.custom_prompt_model import SQLModel
|
||||
# from apps.data_training.models.data_training_model import SQLModel
|
||||
from apps.data_training.models.data_training_model import SQLModel
|
||||
# from apps.dashboard.models.dashboard_model import SQLModel
|
||||
from common.core.config import settings # noqa
|
||||
#from apps.datasource.models.datasource import SQLModel
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
"""050_modify_ddl.py
|
||||
|
||||
Revision ID: 2785e54dc1c4
|
||||
Revises: b58a71ca6ae3
|
||||
Create Date: 2025-11-06 13:43:50.820328
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
import sqlmodel.sql.sqltypes
|
||||
from sqlalchemy.dialects import postgresql
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '2785e54dc1c4'
|
||||
down_revision = 'b58a71ca6ae3'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
sql='''
|
||||
UPDATE data_training SET enabled = true;
|
||||
UPDATE terminology SET enabled = true;
|
||||
'''
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.add_column('data_training', sa.Column('enabled', sa.Boolean(), nullable=True))
|
||||
op.add_column('terminology', sa.Column('enabled', sa.Boolean(), nullable=True))
|
||||
|
||||
op.execute(sql)
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_column('terminology', 'enabled')
|
||||
op.drop_column('data_training', 'enabled')
|
||||
# ### end Alembic commands ###
|
||||
@@ -2,7 +2,8 @@ from typing import Optional
|
||||
|
||||
from fastapi import APIRouter, Query
|
||||
|
||||
from apps.data_training.curd.data_training import page_data_training, create_training, update_training, delete_training
|
||||
from apps.data_training.curd.data_training import page_data_training, create_training, update_training, delete_training, \
|
||||
enable_training
|
||||
from apps.data_training.models.data_training_model import DataTrainingInfo
|
||||
from common.core.deps import SessionDep, CurrentUser, Trans
|
||||
|
||||
@@ -37,3 +38,8 @@ async def create_or_update(session: SessionDep, current_user: CurrentUser, trans
|
||||
@router.delete("")
|
||||
async def delete(session: SessionDep, id_list: list[int]):
|
||||
delete_training(session, id_list)
|
||||
|
||||
|
||||
@router.get("{id}/enable/{enabled}")
|
||||
async def enable(session: SessionDep, id: int, enabled: bool, trans: Trans):
|
||||
enable_training(session, id, enabled, trans)
|
||||
|
||||
@@ -89,7 +89,7 @@ def create_training(session: SessionDep, info: DataTrainingInfo, oid: int, trans
|
||||
if info.datasource is None:
|
||||
raise Exception(trans("i18n_data_training.datasource_cannot_be_none"))
|
||||
parent = DataTraining(question=info.question, create_time=create_time, description=info.description, oid=oid,
|
||||
datasource=info.datasource)
|
||||
datasource=info.datasource, enabled=info.enabled)
|
||||
|
||||
exists = session.query(
|
||||
session.query(DataTraining).filter(
|
||||
@@ -135,6 +135,7 @@ def update_training(session: SessionDep, info: DataTrainingInfo, oid: int, trans
|
||||
question=info.question,
|
||||
description=info.description,
|
||||
datasource=info.datasource,
|
||||
enabled=info.enabled,
|
||||
)
|
||||
session.execute(stmt)
|
||||
session.commit()
|
||||
@@ -151,6 +152,20 @@ def delete_training(session: SessionDep, ids: list[int]):
|
||||
session.commit()
|
||||
|
||||
|
||||
def enable_training(session: SessionDep, id: int, enabled: bool, trans: Trans):
|
||||
count = session.query(DataTraining).filter(
|
||||
DataTraining.id == id
|
||||
).count()
|
||||
if count == 0:
|
||||
raise Exception(trans('i18n_data_training.data_training_not_exists'))
|
||||
|
||||
stmt = update(DataTraining).where(and_(DataTraining.id == id)).values(
|
||||
enabled=enabled,
|
||||
)
|
||||
session.execute(stmt)
|
||||
session.commit()
|
||||
|
||||
|
||||
# def run_save_embeddings(ids: List[int]):
|
||||
# executor.submit(save_embeddings, ids)
|
||||
#
|
||||
|
||||
@@ -3,7 +3,7 @@ from typing import List, Optional
|
||||
|
||||
from pgvector.sqlalchemy import VECTOR
|
||||
from pydantic import BaseModel
|
||||
from sqlalchemy import Column, Text, BigInteger, DateTime, Identity
|
||||
from sqlalchemy import Column, Text, BigInteger, DateTime, Identity, Boolean
|
||||
from sqlmodel import SQLModel, Field
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ class DataTraining(SQLModel, table=True):
|
||||
question: Optional[str] = Field(max_length=255)
|
||||
description: Optional[str] = Field(sa_column=Column(Text, nullable=True))
|
||||
embedding: Optional[List[float]] = Field(sa_column=Column(VECTOR(), nullable=True))
|
||||
enabled: Optional[bool] = Field(sa_column=Column(Boolean, default=True))
|
||||
|
||||
|
||||
class DataTrainingInfo(BaseModel):
|
||||
@@ -26,3 +27,4 @@ class DataTrainingInfo(BaseModel):
|
||||
create_time: Optional[datetime] = None
|
||||
question: Optional[str] = None
|
||||
description: Optional[str] = None
|
||||
enabled: Optional[bool] = True
|
||||
|
||||
@@ -3,7 +3,7 @@ from typing import Optional
|
||||
from fastapi import APIRouter, Query
|
||||
|
||||
from apps.terminology.curd.terminology import page_terminology, create_terminology, update_terminology, \
|
||||
delete_terminology
|
||||
delete_terminology, enable_terminology
|
||||
from apps.terminology.models.terminology_model import TerminologyInfo
|
||||
from common.core.deps import SessionDep, CurrentUser, Trans
|
||||
|
||||
@@ -37,3 +37,8 @@ async def create_or_update(session: SessionDep, current_user: CurrentUser, trans
|
||||
@router.delete("")
|
||||
async def delete(session: SessionDep, id_list: list[int]):
|
||||
delete_terminology(session, id_list)
|
||||
|
||||
|
||||
@router.get("{id}/enable/{enabled}")
|
||||
async def enable(session: SessionDep, id: int, enabled: bool, trans: Trans):
|
||||
enable_terminology(session, id, enabled, trans)
|
||||
|
||||
@@ -230,7 +230,7 @@ def create_terminology(session: SessionDep, info: TerminologyInfo, oid: int, tra
|
||||
raise Exception(trans("i18n_terminology.datasource_cannot_be_none"))
|
||||
|
||||
parent = Terminology(word=info.word, create_time=create_time, description=info.description, oid=oid,
|
||||
specific_ds=specific_ds,
|
||||
specific_ds=specific_ds, enabled=info.enabled,
|
||||
datasource_ids=datasource_ids)
|
||||
|
||||
words = [info.word]
|
||||
@@ -289,7 +289,7 @@ def create_terminology(session: SessionDep, info: TerminologyInfo, oid: int, tra
|
||||
if other_word.strip() == "":
|
||||
continue
|
||||
_list.append(
|
||||
Terminology(pid=result.id, word=other_word, create_time=create_time, oid=oid,
|
||||
Terminology(pid=result.id, word=other_word, create_time=create_time, oid=oid, enabled=result.enabled,
|
||||
specific_ds=specific_ds, datasource_ids=datasource_ids))
|
||||
session.bulk_save_objects(_list)
|
||||
session.flush()
|
||||
@@ -366,7 +366,8 @@ def update_terminology(session: SessionDep, info: TerminologyInfo, oid: int, tra
|
||||
word=info.word,
|
||||
description=info.description,
|
||||
specific_ds=specific_ds,
|
||||
datasource_ids=datasource_ids
|
||||
datasource_ids=datasource_ids,
|
||||
enabled=info.enabled,
|
||||
)
|
||||
session.execute(stmt)
|
||||
session.commit()
|
||||
@@ -383,7 +384,7 @@ def update_terminology(session: SessionDep, info: TerminologyInfo, oid: int, tra
|
||||
continue
|
||||
_list.append(
|
||||
Terminology(pid=info.id, word=other_word, create_time=create_time, oid=oid,
|
||||
specific_ds=specific_ds, datasource_ids=datasource_ids))
|
||||
specific_ds=specific_ds, datasource_ids=datasource_ids, enabled=info.enabled))
|
||||
session.bulk_save_objects(_list)
|
||||
session.flush()
|
||||
session.commit()
|
||||
@@ -400,6 +401,20 @@ def delete_terminology(session: SessionDep, ids: list[int]):
|
||||
session.commit()
|
||||
|
||||
|
||||
def enable_terminology(session: SessionDep, id: int, enabled: bool, trans: Trans):
|
||||
count = session.query(Terminology).filter(
|
||||
Terminology.id == id
|
||||
).count()
|
||||
if count == 0:
|
||||
raise Exception(trans('i18n_terminology.terminology_not_exists'))
|
||||
|
||||
stmt = update(Terminology).where(or_(Terminology.id == id, Terminology.pid == id)).values(
|
||||
enabled=enabled,
|
||||
)
|
||||
session.execute(stmt)
|
||||
session.commit()
|
||||
|
||||
|
||||
# def run_save_embeddings(ids: List[int]):
|
||||
# executor.submit(save_embeddings, ids)
|
||||
#
|
||||
|
||||
@@ -19,6 +19,7 @@ class Terminology(SQLModel, table=True):
|
||||
embedding: Optional[List[float]] = Field(sa_column=Column(VECTOR(), nullable=True))
|
||||
specific_ds: Optional[bool] = Field(sa_column=Column(Boolean, default=False))
|
||||
datasource_ids: Optional[list[int]] = Field(sa_column=Column(JSONB), default=[])
|
||||
enabled: Optional[bool] = Field(sa_column=Column(Boolean, default=True))
|
||||
|
||||
|
||||
class TerminologyInfo(BaseModel):
|
||||
@@ -30,3 +31,4 @@ class TerminologyInfo(BaseModel):
|
||||
specific_ds: Optional[bool] = False
|
||||
datasource_ids: Optional[list[int]] = []
|
||||
datasource_names: Optional[list[str]] = []
|
||||
enabled: Optional[bool] = True
|
||||
|
||||
Reference in New Issue
Block a user