v1.8.0: 模块化重构 + 后台登录认证

This commit is contained in:
2026-06-01 18:31:25 +08:00
parent 7f6cd8897b
commit ac5ea43b91

View File

@@ -0,0 +1,66 @@
"""
搜索/计算/统计 API
"""
from flask import Blueprint, request, jsonify
from config import MODELS_FILE, GPUS_FILE, CPUS_FILE, CATEGORIES_FILE, KNOWLEDGE_FILE
from utils import load_data
search_bp = Blueprint('api_search', __name__)
@search_bp.route('/api/search')
def api_search():
keyword = request.args.get('q', '').strip().lower()
if not keyword:
return jsonify({'models': [], 'gpus': [], 'cpus': []})
models = load_data(MODELS_FILE)
gpus = load_data(GPUS_FILE)
cpus = load_data(CPUS_FILE)
return jsonify({
'models': [m for m in models if m.get('visible', True) and
(keyword in m.get('name', '').lower() or
keyword in m.get('organization', '').lower())],
'gpus': [g for g in gpus if g.get('visible', True) and
(keyword in g.get('name', '').lower() or
keyword in g.get('manufacturer', '').lower())],
'cpus': [c for c in cpus if c.get('visible', True) and
(keyword in c.get('name', '').lower() or
keyword in c.get('manufacturer', '').lower())]
})
@search_bp.route('/api/calculate/vram')
def api_calculate_vram():
params = request.args.get('params', '7', type=float)
precision = request.args.get('precision', 'fp16', type=str)
bytes_per_param = {'fp32': 4, 'fp16': 2, 'int8': 1, 'int4': 0.5}
multiplier = bytes_per_param.get(precision, 2)
vram_gb = params * multiplier * 1e9 / (1024**3)
total_vram = vram_gb * 1.3
gpus = load_data(GPUS_FILE)
suitable_gpus = [g for g in gpus if g.get('visible', True) and
g.get('memory_gb', 0) >= total_vram]
return jsonify({
'model_vram': round(vram_gb, 2),
'total_vram': round(total_vram, 2),
'suitable_gpus': suitable_gpus
})
@search_bp.route('/api/stats')
def api_stats():
models = load_data(MODELS_FILE)
gpus = load_data(GPUS_FILE)
cpus = load_data(CPUS_FILE)
categories = load_data(CATEGORIES_FILE)
knowledge = load_data(KNOWLEDGE_FILE)
visible_models = [m for m in models if m.get('visible', True)]
return jsonify({
'models_count': len(visible_models),
'gpus_count': len([g for g in gpus if g.get('visible', True)]),
'cpus_count': len([c for c in cpus if c.get('visible', True)]),
'categories_count': len([c for c in categories if c.get('visible', True)]),
'knowledge_count': len(knowledge),
'latest_models': sorted(visible_models,
key=lambda x: x.get('created_at', ''), reverse=True)[:5]
})