Merge remote-tracking branch 'origin/main'

This commit is contained in:
wangjiahao
2025-08-06 14:46:17 +08:00
11 changed files with 62 additions and 29 deletions
+3 -2
View File
@@ -79,8 +79,9 @@ jobs:
-czvf $package_online .
#Sync files to OSS
ossutil cp -r ${package_offline} oss://$ALIYUN_OSS_BUCKET/sqlbot/${package_offline} --access-key-id=$ALIYUN_OSS_ACCESS_KEY --access-key-secret=$ALIYUN_OSS_ACCESS_SECRET --endpoint=${ALIYUN_OSS_BUCKET_ENDPOINT}
ossutil cp -r ${package_online} oss://$ALIYUN_OSS_BUCKET/sqlbot/${package_online} --access-key-id=$ALIYUN_OSS_ACCESS_KEY --access-key-secret=$ALIYUN_OSS_ACCESS_SECRET --endpoint=${ALIYUN_OSS_BUCKET_ENDPOINT}
ossutil cp -rf ${package_offline} oss://$ALIYUN_OSS_BUCKET/sqlbot/${package_offline} --access-key-id=$ALIYUN_OSS_ACCESS_KEY --access-key-secret=$ALIYUN_OSS_ACCESS_SECRET --endpoint=${ALIYUN_OSS_BUCKET_ENDPOINT}
ossutil cp -rf ${package_online} oss://$ALIYUN_OSS_BUCKET/sqlbot/${package_online} --access-key-id=$ALIYUN_OSS_ACCESS_KEY --access-key-secret=$ALIYUN_OSS_ACCESS_SECRET --endpoint=${ALIYUN_OSS_BUCKET_ENDPOINT}
+1
View File
@@ -1,4 +1,5 @@
[default.extend-words]
sibing = "sibing"
[default.extend-identifiers]
maintain_column_froms = "maintain_column_froms"
[files]
+1 -1
View File
@@ -78,7 +78,7 @@ async def query(
AiModelDetail.default_model)
if keyword is not None:
statement = statement.where(AiModelDetail.name.like(f"%{keyword}%"))
statement = statement.order_by(AiModelDetail.create_time.asc())
statement = statement.order_by(AiModelDetail.default_model.desc(), AiModelDetail.name, AiModelDetail.create_time)
items = session.exec(statement).all()
return items
+1 -1
View File
@@ -50,7 +50,7 @@ async def validator(session: SessionDep, id: int, virtual: Optional[int] = Query
@router.get("", response_model=list[AssistantModel])
async def query(session: SessionDep):
list_result = session.exec(select(AssistantModel).order_by(AssistantModel.create_time.asc())).all()
list_result = session.exec(select(AssistantModel).order_by(AssistantModel.name, AssistantModel.create_time)).all()
return list_result
@router.post("")
+1 -1
View File
@@ -59,7 +59,7 @@ async def pager(
select(UserModel, UserWsModel.oid.label('ws_oid'))
.join(UserWsModel, UserModel.id == UserWsModel.uid, isouter=True)
.where(UserModel.id.in_(uid_list))
.order_by(UserModel.create_time)
.order_by(UserModel.account, UserModel.create_time)
)
user_workspaces = session.exec(stmt).all()
merged = defaultdict(list)
+2 -2
View File
@@ -32,7 +32,7 @@ async def option_pager(
stmt = select(UserModel.id, UserModel.account, UserModel.name).where(
~exists().where(UserWsModel.uid == UserModel.id, UserWsModel.oid == oid),
UserModel.id != 1
).order_by(UserModel.create_time.asc())
).order_by(UserModel.account, UserModel.create_time)
if keyword:
keyword_pattern = f"%{keyword}%"
@@ -97,7 +97,7 @@ async def pager(
).where(
UserWsModel.oid == workspace_id,
UserModel.id != 1
).order_by(UserModel.create_time.asc())
).order_by(UserModel.account, UserModel.create_time)
if keyword:
keyword_pattern = f"%{keyword}%"
+2 -2
View File
@@ -46,13 +46,13 @@ def authenticate(*, session: Session, account: str, password: str) -> BaseUserDT
async def user_ws_options(session: Session, uid: int, trans: Optional[I18n] = None) -> list[UserWs]:
if uid == 1:
stmt = select(WorkspaceModel.id, WorkspaceModel.name).order_by(WorkspaceModel.create_time)
stmt = select(WorkspaceModel.id, WorkspaceModel.name).order_by(WorkspaceModel.name, WorkspaceModel.create_time)
else:
stmt = select(WorkspaceModel.id, WorkspaceModel.name).join(
UserWsModel, UserWsModel.oid == WorkspaceModel.id
).where(
UserWsModel.uid == uid,
).order_by(WorkspaceModel.create_time)
).order_by(WorkspaceModel.name, WorkspaceModel.create_time)
result = session.exec(stmt)
if not trans:
return result.all()
+27 -20
View File
@@ -1,4 +1,5 @@
from collections import defaultdict
from typing import Optional
from sqlmodel import Session, func, select, update
@@ -25,17 +26,10 @@ async def reset_user_oid(session: Session, oid: int):
select(
UserModel.id,
UserModel.oid,
func.coalesce(
func.array_remove(
func.array_agg(UserWsModel.oid),
None
),
[]
).label("oid_list")
UserWsModel.oid.label("associated_oid")
)
.join(UserWsModel, UserModel.id == UserWsModel.uid, isouter=True)
.where(UserModel.id != 1)
.group_by(UserModel.id)
)
user_filter = (
@@ -46,17 +40,30 @@ async def reset_user_oid(session: Session, oid: int):
)
stmt = stmt.where(UserModel.id.in_(user_filter))
result_user_list = session.exec(stmt)
for row in result_user_list:
result_dict = {}
for item, key in zip(row, row._fields):
result_dict[key] = item
origin_oid = result_dict['oid']
oid_list: list = list(filter(lambda x: x != oid, result_dict['oid_list']))
result_user_list = session.exec(stmt).all()
if not result_user_list:
return
merged = defaultdict(list)
extra_attrs = {}
for (id, oid, associated_oid) in result_user_list:
item = {"id": id, "oid": oid}
merged[id].append(associated_oid)
if id not in extra_attrs:
extra_attrs[id] = {k: v for k, v in item.items()}
# 组合结果
result = [
{**extra_attrs[user_id], "oid_list": oid_list}
for user_id, oid_list in merged.items()
]
for row in result:
origin_oid = row['oid']
oid_list: list = list(filter(lambda x: x != oid, row['oid_list']))
if origin_oid not in oid_list:
result_dict['oid'] = oid_list[0] if oid_list else 0
if result_dict['oid'] != origin_oid:
result_dict.pop("oid_list", None)
update_stmt = update(UserModel).where(UserModel.id == result_dict['id']).values(oid=result_dict['oid'])
row['oid'] = oid_list[0] if oid_list else 0
if row['oid'] != origin_oid:
update_stmt = update(UserModel).where(UserModel.id == row['id']).values(oid=row['oid'])
session.exec(update_stmt)
+1
View File
@@ -6,6 +6,7 @@
"AI Model Configuration": "AI Model Configuration"
},
"common": {
"no_model_yet": "No model yet",
"intelligent_questioning_platform": "Welcome to the SQLBot Intelligent Questioning Platform",
"login": "Login",
"login_": "Login",
+1
View File
@@ -6,6 +6,7 @@
"AI Model Configuration": "模型配置"
},
"common": {
"no_model_yet": "暂无模型",
"intelligent_questioning_platform": "欢迎使用 SQLBot 智能问数平台",
"login": "账号登录",
"login_": "登录",
+22
View File
@@ -367,6 +367,22 @@ const submit = (item: any) => {
</el-col>
</el-row>
</div>
<template v-if="!keywords && !modelListWithSearch.length">
<EmptyBackground
class="datasource-yet"
:description="$t('common.no_model_yet')"
img-type="noneWhite"
/>
<div style="text-align: center; margin-top: -10px">
<el-button type="primary" @click="handleAddModel">
<template #icon>
<icon_add_outlined></icon_add_outlined>
</template>
{{ t('model.add_model') }}
</el-button>
</div>
</template>
<el-drawer
v-model="modelConfigvVisible"
:close-on-click-modal="false"
@@ -424,6 +440,12 @@ const submit = (item: any) => {
.model-config {
height: calc(100% - 16px);
padding: 16px 0 16px 0;
.datasource-yet {
padding-bottom: 0;
height: auto;
padding-top: 200px;
}
.model-methods {
display: flex;
align-items: center;