|
@@ -350,48 +350,87 @@ def list_tables():
|
|
|
|
|
|
@bp.route('/models/<int:model_id>', methods=['GET'])
|
|
|
def get_model(model_id):
|
|
|
+ """
|
|
|
+ 获取单个模型信息的API接口
|
|
|
+
|
|
|
+ @param model_id: 模型ID
|
|
|
+ @return: JSON响应
|
|
|
+ """
|
|
|
+ Session = sessionmaker(bind=db.engine)
|
|
|
+ session = Session()
|
|
|
+
|
|
|
try:
|
|
|
- model = Models.query.filter_by(ModelID=model_id).first()
|
|
|
+ model = session.query(Models).filter_by(ModelID=model_id).first()
|
|
|
if model:
|
|
|
return jsonify({
|
|
|
'ModelID': model.ModelID,
|
|
|
- 'ModelName': model.ModelName,
|
|
|
- 'ModelType': model.ModelType,
|
|
|
- 'CreatedAt': model.CreatedAt.strftime('%Y-%m-%d %H:%M:%S'),
|
|
|
- 'Description': model.Description
|
|
|
+ 'Model_name': model.Model_name,
|
|
|
+ 'Model_type': model.Model_type,
|
|
|
+ 'Created_at': model.Created_at.strftime('%Y-%m-%d %H:%M:%S'),
|
|
|
+ 'Description': model.Description,
|
|
|
+ 'Performance_score': float(model.Performance_score) if model.Performance_score else None,
|
|
|
+ 'Data_type': model.Data_type
|
|
|
})
|
|
|
else:
|
|
|
- return jsonify({'message': 'Model not found'}), 404
|
|
|
+ return jsonify({'message': '未找到模型'}), 404
|
|
|
+
|
|
|
except Exception as e:
|
|
|
- return jsonify({'error': 'Internal server error', 'message': str(e)}), 500
|
|
|
+ logger.error(f'获取模型信息失败: {str(e)}')
|
|
|
+ return jsonify({'error': '服务器内部错误', 'message': str(e)}), 500
|
|
|
+
|
|
|
+ finally:
|
|
|
+ session.close()
|
|
|
|
|
|
|
|
|
@bp.route('/models', methods=['GET'])
|
|
|
def get_all_models():
|
|
|
+ """
|
|
|
+ 获取所有模型信息的API接口
|
|
|
+
|
|
|
+ @return: JSON响应
|
|
|
+ """
|
|
|
+ Session = sessionmaker(bind=db.engine)
|
|
|
+ session = Session()
|
|
|
+
|
|
|
try:
|
|
|
- models = Models.query.all() # 获取所有模型数据
|
|
|
+ models = session.query(Models).all()
|
|
|
if models:
|
|
|
result = [
|
|
|
{
|
|
|
'ModelID': model.ModelID,
|
|
|
- 'ModelName': model.ModelName,
|
|
|
- 'ModelType': model.ModelType,
|
|
|
- 'CreatedAt': model.CreatedAt.strftime('%Y-%m-%d %H:%M:%S'),
|
|
|
- 'Description': model.Description
|
|
|
+ 'Model_name': model.Model_name,
|
|
|
+ 'Model_type': model.Model_type,
|
|
|
+ 'Created_at': model.Created_at.strftime('%Y-%m-%d %H:%M:%S'),
|
|
|
+ 'Description': model.Description,
|
|
|
+ 'Performance_score': float(model.Performance_score) if model.Performance_score else None,
|
|
|
+ 'Data_type': model.Data_type
|
|
|
}
|
|
|
for model in models
|
|
|
]
|
|
|
return jsonify(result)
|
|
|
else:
|
|
|
- return jsonify({'message': 'No models found'}), 404
|
|
|
+ return jsonify({'message': '未找到任何模型'}), 404
|
|
|
+
|
|
|
except Exception as e:
|
|
|
- return jsonify({'error': 'Internal server error', 'message': str(e)}), 500
|
|
|
+ logger.error(f'获取所有模型信息失败: {str(e)}')
|
|
|
+ return jsonify({'error': '服务器内部错误', 'message': str(e)}), 500
|
|
|
+
|
|
|
+ finally:
|
|
|
+ session.close()
|
|
|
|
|
|
|
|
|
@bp.route('/model-parameters', methods=['GET'])
|
|
|
def get_all_model_parameters():
|
|
|
+ """
|
|
|
+ 获取所有模型参数的API接口
|
|
|
+
|
|
|
+ @return: JSON响应
|
|
|
+ """
|
|
|
+ Session = sessionmaker(bind=db.engine)
|
|
|
+ session = Session()
|
|
|
+
|
|
|
try:
|
|
|
- parameters = ModelParameters.query.all() # 获取所有参数数据
|
|
|
+ parameters = session.query(ModelParameters).all()
|
|
|
if parameters:
|
|
|
result = [
|
|
|
{
|
|
@@ -404,9 +443,14 @@ def get_all_model_parameters():
|
|
|
]
|
|
|
return jsonify(result)
|
|
|
else:
|
|
|
- return jsonify({'message': 'No parameters found'}), 404
|
|
|
+ return jsonify({'message': '未找到任何参数'}), 404
|
|
|
+
|
|
|
except Exception as e:
|
|
|
- return jsonify({'error': 'Internal server error', 'message': str(e)}), 500
|
|
|
+ logger.error(f'获取所有模型参数失败: {str(e)}')
|
|
|
+ return jsonify({'error': '服务器内部错误', 'message': str(e)}), 500
|
|
|
+
|
|
|
+ finally:
|
|
|
+ session.close()
|
|
|
|
|
|
|
|
|
@bp.route('/models/<int:model_id>/parameters', methods=['GET'])
|
|
@@ -817,7 +861,14 @@ def get_task_status(task_id):
|
|
|
|
|
|
|
|
|
@bp.route('/delete-model/<int:model_id>', methods=['DELETE'])
|
|
|
-def delete_model(model_id):
|
|
|
+def delete_model_route(model_id):
|
|
|
+ # 将URL参数转换为布尔值
|
|
|
+ delete_dataset_param = request.args.get('delete_dataset', 'False').lower() == 'true'
|
|
|
+
|
|
|
+ # 调用原始函数
|
|
|
+ return delete_model(model_id, delete_dataset=delete_dataset_param)
|
|
|
+
|
|
|
+def delete_model(model_id, delete_dataset=False):
|
|
|
"""
|
|
|
删除指定模型的API接口
|
|
|
|
|
@@ -853,7 +904,6 @@ def delete_model(model_id):
|
|
|
return jsonify({'error': f'删除模型文件失败: {str(e)}'}), 500
|
|
|
|
|
|
# 3. 如果需要删除关联的数据集
|
|
|
- delete_dataset = request.args.get('delete_dataset', 'false').lower() == 'true'
|
|
|
if delete_dataset and dataset_id:
|
|
|
try:
|
|
|
dataset_response = delete_dataset_endpoint(dataset_id)
|
|
@@ -879,7 +929,6 @@ def delete_model(model_id):
|
|
|
'dataset_id': dataset_id,
|
|
|
'message': '关联数据集已删除'
|
|
|
}
|
|
|
-
|
|
|
return jsonify(response_data), 200
|
|
|
|
|
|
except Exception as e:
|
|
@@ -1456,3 +1505,132 @@ def get_model_history(data_type):
|
|
|
|
|
|
finally:
|
|
|
session.close()
|
|
|
+
|
|
|
+@bp.route('/batch-delete-datasets', methods=['POST'])
|
|
|
+def batch_delete_datasets():
|
|
|
+ """
|
|
|
+ 批量删除数据集的API接口
|
|
|
+
|
|
|
+ @body_param dataset_ids: 要删除的数据集ID列表
|
|
|
+ @return: JSON响应
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ data = request.get_json()
|
|
|
+ dataset_ids = data.get('dataset_ids', [])
|
|
|
+
|
|
|
+ if not dataset_ids:
|
|
|
+ return jsonify({'error': '未提供数据集ID列表'}), 400
|
|
|
+
|
|
|
+ results = {
|
|
|
+ 'success': [],
|
|
|
+ 'failed': [],
|
|
|
+ 'protected': [] # 被模型使用的数据集
|
|
|
+ }
|
|
|
+
|
|
|
+ for dataset_id in dataset_ids:
|
|
|
+ try:
|
|
|
+ # 调用单个删除接口
|
|
|
+ response = delete_dataset_endpoint(dataset_id)
|
|
|
+
|
|
|
+ # 解析响应
|
|
|
+ if response[1] == 200:
|
|
|
+ results['success'].append(dataset_id)
|
|
|
+ elif response[1] == 400 and 'models' in response[0].json:
|
|
|
+ # 数据集被模型保护
|
|
|
+ results['protected'].append({
|
|
|
+ 'id': dataset_id,
|
|
|
+ 'models': response[0].json['models']
|
|
|
+ })
|
|
|
+ else:
|
|
|
+ results['failed'].append({
|
|
|
+ 'id': dataset_id,
|
|
|
+ 'reason': response[0].json.get('error', '删除失败')
|
|
|
+ })
|
|
|
+
|
|
|
+ except Exception as e:
|
|
|
+ logger.error(f'删除数据集 {dataset_id} 失败: {str(e)}')
|
|
|
+ results['failed'].append({
|
|
|
+ 'id': dataset_id,
|
|
|
+ 'reason': str(e)
|
|
|
+ })
|
|
|
+
|
|
|
+ # 构建响应消息
|
|
|
+ message = f"成功删除 {len(results['success'])} 个数据集"
|
|
|
+ if results['protected']:
|
|
|
+ message += f", {len(results['protected'])} 个数据集被保护"
|
|
|
+ if results['failed']:
|
|
|
+ message += f", {len(results['failed'])} 个数据集删除失败"
|
|
|
+
|
|
|
+ return jsonify({
|
|
|
+ 'message': message,
|
|
|
+ 'results': results
|
|
|
+ }), 200
|
|
|
+
|
|
|
+ except Exception as e:
|
|
|
+ logger.error(f'批量删除数据集失败: {str(e)}')
|
|
|
+ return jsonify({'error': str(e)}), 500
|
|
|
+
|
|
|
+@bp.route('/batch-delete-models', methods=['POST'])
|
|
|
+def batch_delete_models():
|
|
|
+ """
|
|
|
+ 批量删除模型的API接口
|
|
|
+
|
|
|
+ @body_param model_ids: 要删除的模型ID列表
|
|
|
+ @query_param delete_datasets: 布尔值,是否同时删除关联的数据集,默认为False
|
|
|
+ @return: JSON响应
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ data = request.get_json()
|
|
|
+ model_ids = data.get('model_ids', [])
|
|
|
+ delete_datasets = request.args.get('delete_datasets', 'false').lower() == 'true'
|
|
|
+
|
|
|
+ if not model_ids:
|
|
|
+ return jsonify({'error': '未提供模型ID列表'}), 400
|
|
|
+
|
|
|
+ results = {
|
|
|
+ 'success': [],
|
|
|
+ 'failed': [],
|
|
|
+ 'datasets_deleted': [] # 如果delete_datasets为true,记录被删除的数据集
|
|
|
+ }
|
|
|
+
|
|
|
+ for model_id in model_ids:
|
|
|
+ try:
|
|
|
+ # 调用单个删除接口
|
|
|
+ response = delete_model(model_id, delete_dataset=delete_datasets)
|
|
|
+
|
|
|
+ # 解析响应
|
|
|
+ if response[1] == 200:
|
|
|
+ results['success'].append(model_id)
|
|
|
+ # 如果删除了关联数据集,记录数据集ID
|
|
|
+ if 'dataset_info' in response[0].json:
|
|
|
+ results['datasets_deleted'].append(
|
|
|
+ response[0].json['dataset_info']['dataset_id']
|
|
|
+ )
|
|
|
+ else:
|
|
|
+ results['failed'].append({
|
|
|
+ 'id': model_id,
|
|
|
+ 'reason': response[0].json.get('error', '删除失败')
|
|
|
+ })
|
|
|
+
|
|
|
+ except Exception as e:
|
|
|
+ logger.error(f'删除模型 {model_id} 失败: {str(e)}')
|
|
|
+ results['failed'].append({
|
|
|
+ 'id': model_id,
|
|
|
+ 'reason': str(e)
|
|
|
+ })
|
|
|
+
|
|
|
+ # 构建响应消息
|
|
|
+ message = f"成功删除 {len(results['success'])} 个模型"
|
|
|
+ if results['datasets_deleted']:
|
|
|
+ message += f", {len(results['datasets_deleted'])} 个关联数据集"
|
|
|
+ if results['failed']:
|
|
|
+ message += f", {len(results['failed'])} 个模型删除失败"
|
|
|
+
|
|
|
+ return jsonify({
|
|
|
+ 'message': message,
|
|
|
+ 'results': results
|
|
|
+ }), 200
|
|
|
+
|
|
|
+ except Exception as e:
|
|
|
+ logger.error(f'批量删除模型失败: {str(e)}')
|
|
|
+ return jsonify({'error': str(e)}), 500
|