refactor: 备用大模型整合到大模型配置页
- 备用大模型不再单独页面,直接在大模型配置页显示 - 新增/编辑使用模态框,更简洁高效 - 移除独立的 backup_llm.html 和 backup_llm_form.html - 统一侧边栏导航,移除备用大模型链接 - API 改为只返回 JSON,不再渲染页面
This commit is contained in:
129
admin.py
129
admin.py
@@ -686,7 +686,10 @@ def llm_config():
|
||||
'timeout': DynamicConfig.get('llm_timeout', LLM_CONFIG.get('timeout')),
|
||||
}
|
||||
|
||||
return render_template('admin/llm_config.html', config=config)
|
||||
# 获取备用大模型配置
|
||||
backup_configs = BackupLLMConfig.query.order_by(BackupLLMConfig.sort_order).all()
|
||||
|
||||
return render_template('admin/llm_config.html', config=config, backup_configs=[c.to_dict() for c in backup_configs])
|
||||
|
||||
|
||||
@admin_bp.route('/llm_config/save', methods=['POST'])
|
||||
@@ -1224,92 +1227,72 @@ def get_all_membership_plans():
|
||||
@admin_bp.route('/backup-llm')
|
||||
@admin_required
|
||||
def backup_llm_list():
|
||||
"""备用大模型接口列表"""
|
||||
configs = BackupLLMConfig.query.order_by(BackupLLMConfig.sort_order).all()
|
||||
|
||||
# 如果数据库中没有数据,初始化默认配置
|
||||
if not configs:
|
||||
init_default_backup_llm()
|
||||
configs = BackupLLMConfig.query.order_by(BackupLLMConfig.sort_order).all()
|
||||
|
||||
return render_template('admin/backup_llm.html', configs=configs)
|
||||
"""备用大模型接口列表 - 重定向到大模型配置页"""
|
||||
return redirect(url_for('admin.llm_config'))
|
||||
|
||||
|
||||
@admin_bp.route('/backup-llm/add', methods=['GET', 'POST'])
|
||||
@admin_bp.route('/backup-llm/add', methods=['POST'])
|
||||
@admin_required
|
||||
def add_backup_llm():
|
||||
"""添加备用大模型接口"""
|
||||
if request.method == 'POST':
|
||||
data = request.json if request.is_json else request.form
|
||||
|
||||
config = BackupLLMConfig(
|
||||
provider_name=data.get('provider_name'),
|
||||
api_base=data.get('api_base'),
|
||||
api_key=data.get('api_key'),
|
||||
model=data.get('model'),
|
||||
is_active=data.get('is_active', True) if isinstance(data.get('is_active'), bool) else data.get('is_active') == 'true',
|
||||
sort_order=int(data.get('sort_order', 0)),
|
||||
description=data.get('description'),
|
||||
)
|
||||
|
||||
db.session.add(config)
|
||||
db.session.commit()
|
||||
|
||||
# 记录日志
|
||||
log = OperationLog(
|
||||
user_id=session.get('user_id'),
|
||||
username='admin',
|
||||
action='add_backup_llm',
|
||||
target=config.provider_name,
|
||||
detail=json.dumps(config.to_dict(), ensure_ascii=False)
|
||||
)
|
||||
db.session.add(log)
|
||||
db.session.commit()
|
||||
|
||||
if request.is_json:
|
||||
return jsonify({'success': True, 'config': config.to_dict()})
|
||||
flash('备用大模型接口已添加', 'success')
|
||||
return redirect(url_for('admin.backup_llm_list'))
|
||||
data = request.json
|
||||
|
||||
return render_template('admin/backup_llm_form.html', config=None)
|
||||
config = BackupLLMConfig(
|
||||
provider_name=data.get('provider_name'),
|
||||
api_base=data.get('api_base'),
|
||||
api_key=data.get('api_key'),
|
||||
model=data.get('model'),
|
||||
is_active=data.get('is_active', True),
|
||||
sort_order=int(data.get('sort_order', 0)),
|
||||
description=data.get('description'),
|
||||
)
|
||||
|
||||
db.session.add(config)
|
||||
db.session.commit()
|
||||
|
||||
# 记录日志
|
||||
log = OperationLog(
|
||||
user_id=session.get('user_id'),
|
||||
username='admin',
|
||||
action='add_backup_llm',
|
||||
target=config.provider_name,
|
||||
detail=json.dumps(config.to_dict(), ensure_ascii=False)
|
||||
)
|
||||
db.session.add(log)
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({'success': True, 'config': config.to_dict()})
|
||||
|
||||
|
||||
@admin_bp.route('/backup-llm/<int:config_id>/edit', methods=['GET', 'POST'])
|
||||
@admin_bp.route('/backup-llm/<int:config_id>/edit', methods=['POST'])
|
||||
@admin_required
|
||||
def edit_backup_llm(config_id):
|
||||
"""编辑备用大模型接口"""
|
||||
config = BackupLLMConfig.query.get_or_404(config_id)
|
||||
data = request.json
|
||||
|
||||
if request.method == 'POST':
|
||||
data = request.json if request.is_json else request.form
|
||||
|
||||
config.provider_name = data.get('provider_name', config.provider_name)
|
||||
config.api_base = data.get('api_base', config.api_base)
|
||||
config.api_key = data.get('api_key', config.api_key)
|
||||
config.model = data.get('model', config.model)
|
||||
config.is_active = data.get('is_active', True) if isinstance(data.get('is_active'), bool) else data.get('is_active') == 'true'
|
||||
config.sort_order = int(data.get('sort_order', config.sort_order))
|
||||
config.description = data.get('description', config.description)
|
||||
|
||||
db.session.commit()
|
||||
|
||||
# 记录日志
|
||||
log = OperationLog(
|
||||
user_id=session.get('user_id'),
|
||||
username='admin',
|
||||
action='edit_backup_llm',
|
||||
target=config.provider_name,
|
||||
detail=json.dumps(config.to_dict(), ensure_ascii=False)
|
||||
)
|
||||
db.session.add(log)
|
||||
db.session.commit()
|
||||
|
||||
if request.is_json:
|
||||
return jsonify({'success': True, 'config': config.to_dict()})
|
||||
flash('备用大模型接口已更新', 'success')
|
||||
return redirect(url_for('admin.backup_llm_list'))
|
||||
config.provider_name = data.get('provider_name', config.provider_name)
|
||||
config.api_base = data.get('api_base', config.api_base)
|
||||
config.api_key = data.get('api_key', config.api_key)
|
||||
config.model = data.get('model', config.model)
|
||||
config.is_active = data.get('is_active', True)
|
||||
config.sort_order = int(data.get('sort_order', config.sort_order))
|
||||
config.description = data.get('description', config.description)
|
||||
|
||||
return render_template('admin/backup_llm_form.html', config=config)
|
||||
db.session.commit()
|
||||
|
||||
# 记录日志
|
||||
log = OperationLog(
|
||||
user_id=session.get('user_id'),
|
||||
username='admin',
|
||||
action='edit_backup_llm',
|
||||
target=config.provider_name,
|
||||
detail=json.dumps(config.to_dict(), ensure_ascii=False)
|
||||
)
|
||||
db.session.add(log)
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({'success': True, 'config': config.to_dict()})
|
||||
|
||||
|
||||
@admin_bp.route('/backup-llm/<int:config_id>/delete', methods=['POST'])
|
||||
|
||||
Reference in New Issue
Block a user