You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
242 lines
15 KiB
242 lines
15 KiB
1 month ago
|
from dash import dcc, html
|
||
|
import feffery_antd_components as fac
|
||
|
from flask import session
|
||
|
|
||
|
from . import profile
|
||
|
from api.user import get_user_list_api
|
||
|
from api.dept import get_dept_tree_api
|
||
|
from api.modmag import get_models_detail_api
|
||
|
|
||
|
from config.global_config import ApiBaseUrlConfig
|
||
|
|
||
|
# import callbacks.system_c.user_c.user_c
|
||
|
import callbacks.model_c.modmag_c
|
||
|
from utils.common import process_string
|
||
|
|
||
|
|
||
|
def render(*args, **kwargs):
|
||
|
button_perms = kwargs.get('button_perms')
|
||
|
dept_params = dict(dept_name='')
|
||
|
user_params = dict(page_num=1, page_size=10)
|
||
|
model_type_list = ["LLM","embedding","rerank","image","audio"]
|
||
|
tree_data,card_data=get_models_detail_api(model_type_list)
|
||
|
# tree_info = get_dept_tree_api(dept_params)
|
||
|
print(tree_data)
|
||
|
# dcc.Store(id='model-infos', data=card_data)
|
||
|
return [
|
||
|
dcc.Store(id='model-infos', data=card_data),
|
||
|
fac.AntdDrawer(
|
||
|
id="side-drawer", title="侧边示例", placement="right", width=700
|
||
|
),
|
||
|
fac.AntdRow(
|
||
|
[
|
||
|
fac.AntdCol(
|
||
|
[
|
||
|
fac.AntdInput(
|
||
|
id='model-input-search',
|
||
|
placeholder='请输入名称',
|
||
|
autoComplete='off',
|
||
|
allowClear=True,
|
||
|
prefix=fac.AntdIcon(
|
||
|
icon='antd-search'
|
||
|
),
|
||
|
style={
|
||
|
'width': '85%'
|
||
|
}
|
||
|
),
|
||
|
fac.AntdTree(
|
||
|
id='model-tree',
|
||
|
treeData=tree_data,
|
||
|
# defaultExpandAll=True,
|
||
|
showLine=False,
|
||
|
height=900,
|
||
|
style={
|
||
|
'margin-top': '10px',
|
||
|
'fontSize': '18px',
|
||
|
'width': '90%'
|
||
|
}
|
||
|
)
|
||
|
],
|
||
|
span=4
|
||
|
),
|
||
|
fac.AntdCol(
|
||
|
[
|
||
|
fac.AntdRow(
|
||
|
[
|
||
|
fac.AntdCol(
|
||
|
html.Div(
|
||
|
[
|
||
|
fac.AntdForm(
|
||
|
[
|
||
|
fac.AntdSpace(
|
||
|
[
|
||
|
fac.AntdFormItem(
|
||
|
fac.AntdInput(
|
||
|
id='model-name-input',
|
||
|
placeholder='请输入模型名或者描述',
|
||
|
autoComplete='off',
|
||
|
allowClear=True,
|
||
|
style={
|
||
|
'width': 500
|
||
|
}
|
||
|
),
|
||
|
# label='模型名称'
|
||
|
),
|
||
|
fac.AntdFormItem(
|
||
|
fac.AntdSelect(
|
||
|
id='model-ability-select',
|
||
|
placeholder='请选择能力',
|
||
|
options=[
|
||
|
{
|
||
|
'label': 'generate',
|
||
|
'value': 'generate'
|
||
|
},
|
||
|
{
|
||
|
'label': 'chat',
|
||
|
'value': 'chat'
|
||
|
},
|
||
|
{
|
||
|
'label': 'vision',
|
||
|
'value': 'vision'
|
||
|
}
|
||
|
],
|
||
|
style={
|
||
|
'width': 220
|
||
|
}
|
||
|
),
|
||
|
# label='模型能力'
|
||
|
),
|
||
|
fac.AntdFormItem(
|
||
|
fac.AntdSelect(
|
||
|
id='model-status-select',
|
||
|
placeholder='请选择状态',
|
||
|
options=[
|
||
|
{
|
||
|
'label': '未缓存',
|
||
|
'value': '0'
|
||
|
},
|
||
|
{
|
||
|
'label': '已缓存',
|
||
|
'value': '1'
|
||
|
}
|
||
|
],
|
||
|
style={
|
||
|
'width': 220
|
||
|
}
|
||
|
),
|
||
|
label='模型状态'
|
||
|
),
|
||
|
fac.AntdFormItem(
|
||
|
fac.AntdButton(
|
||
|
'查询',
|
||
|
id='model-search',
|
||
|
type='primary',
|
||
|
icon=fac.AntdIcon(
|
||
|
icon='antd-search'
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
],
|
||
|
style={
|
||
|
'paddingBottom': '10px',
|
||
|
# "width": "100%",
|
||
|
'display': 'flex',
|
||
|
'justifyContent': 'flex-end'
|
||
|
}
|
||
|
),
|
||
|
],
|
||
|
layout='inline',
|
||
|
)
|
||
|
],
|
||
|
id='user-search-form-container',
|
||
|
hidden=False
|
||
|
),
|
||
|
)
|
||
|
]
|
||
|
),
|
||
|
fac.AntdRow(
|
||
|
[
|
||
|
fac.AntdCol(
|
||
|
fac.AntdCard(
|
||
|
title=item.get('model_name'),
|
||
|
children=[
|
||
|
fac.AntdSpace(
|
||
|
[
|
||
|
html.Div(
|
||
|
fac.AntdCompact([
|
||
|
fac.AntdTag(content=tag)
|
||
|
for tag in (
|
||
|
(item['model_flag'].get('model_lang') if isinstance(item['model_flag'].get('model_lang'), list) else [item['model_flag'].get('model_lang')]) +
|
||
|
(item['model_flag'].get('model_ability') if isinstance(item['model_flag'].get('model_ability'), list) else [item['model_flag'].get('model_ability')]) +
|
||
|
([str(item['model_flag'].get('context_length'))] if item['model_flag'].get('context_length') is not None else [])
|
||
|
)
|
||
|
if tag is not None
|
||
|
])
|
||
|
),
|
||
|
html.Div(
|
||
|
process_string(item['model_description']),
|
||
|
# style={"marginBottom": "5px"}
|
||
|
),
|
||
|
html.Div(
|
||
|
fac.AntdCompact(
|
||
|
[
|
||
|
fac.AntdButton('查询信息',
|
||
|
id={
|
||
|
"type": "card-button",
|
||
|
"model_name": item['model_name'],
|
||
|
"index": "button1",
|
||
|
},
|
||
|
style={'backgroundColor': '#f0f0f0', 'border': 'none', 'marginRight': '1px'}
|
||
|
),
|
||
|
fac.AntdButton('接口示例',
|
||
|
id={
|
||
|
"type": "card-button",
|
||
|
"model_name": item['model_name'],
|
||
|
"index": "button2",
|
||
|
},
|
||
|
style={'backgroundColor': '#f0f0f0', 'border': 'none', 'marginRight': '1px'}
|
||
|
),
|
||
|
fac.AntdButton('部署模型',
|
||
|
id={
|
||
|
"type": "card-button",
|
||
|
"model_name": item['model_name'],
|
||
|
"index": "button3",
|
||
|
},
|
||
|
style={'backgroundColor': '#f0f0f0', 'border': 'none'}
|
||
|
),
|
||
|
]
|
||
|
)
|
||
|
),
|
||
|
],
|
||
|
align='start',
|
||
|
direction='vertical',
|
||
|
),
|
||
|
],
|
||
|
hoverable=True,
|
||
|
style={"marginBottom": "5px", "width": "100%", "height": "210px"},
|
||
|
headStyle={"width": "100%"},
|
||
|
),
|
||
|
span=8,
|
||
|
style={
|
||
|
"width": "100%",
|
||
|
# "marginTop": "-1px"
|
||
|
},
|
||
|
)
|
||
|
for item in card_data
|
||
|
],
|
||
|
gutter=[25, 25],
|
||
|
id='card-container'
|
||
|
),
|
||
|
],
|
||
|
span=20,
|
||
|
style={
|
||
|
"height": "700px",
|
||
|
"marginTop": "-1px"
|
||
|
},
|
||
|
)
|
||
|
],
|
||
|
gutter=5
|
||
|
),
|
||
|
|
||
|
]
|