Spaces:
Running
Running
File size: 1,404 Bytes
90f5392 0db0051 90f5392 0db0051 aacc39b 0db0051 aacc39b 0db0051 aacc39b 0db0051 aacc39b 0db0051 aacc39b 0db0051 90f5392 0db0051 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
from flask import Flask, request, jsonify
from sentence_transformers import SentenceTransformer, util
app = Flask(__name__)
# 预加载模型(线上部署关键)
model = SentenceTransformer("flax-sentence-embeddings/st-codesearch-distilroberta-base")
code_snippets = [...] # 你的代码片段
code_embeddings = model.encode(code_snippets, convert_to_tensor=True)
@app.route('/v1/search', methods=['POST'])
def api_handler():
"""生产级API端点"""
try:
# 请求验证
if not request.is_json:
return jsonify({"error": "Invalid Content-Type"}), 415
data = request.get_json()
if 'query' not in data:
return jsonify({"error": "Missing query parameter"}), 400
# 执行语义搜索
query = data['query']
query_emb = model.encode(query, convert_to_tensor=True)
results = util.semantic_search(query_emb, code_embeddings, top_k=1)[0]
# 构建响应
return jsonify({
"data": {
"best_match": code_snippets[results[0]['corpus_id']],
"similarity": float(results[0]['score'])
}
})
except Exception as e:
app.logger.error(f"API Error: {str(e)}")
return jsonify({"error": "Internal Server Error"}), 500
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8080) |