from flask import Flask, request, jsonify, Response from flask_cors import CORS from sentence_transformers import SentenceTransformer # 1. สร้าง Flask app app = Flask(__name__) # 2. ตั้งค่า CORS (Cross-Origin Resource Sharing) # นี่คือส่วนสำคัญมาก! ที่จะอนุญาตให้ JavaScript (ที่อยู่คนละที่) เรียก API นี้ได้ CORS(app) model = SentenceTransformer("google/embeddinggemma-300m") # 3. สร้าง "Endpoint" หรือ "Route" ของ API # นี่คือ URL ที่ JavaScript จะเรียกมา # เช่น http://127.0.0.1:5000/api/v1/chat/completions @app.route("/", methods=['GET']) def get_start(): return jsonify({"message": "Server is running"}) @app.route("/api/v1/embeddings", methods=['POST']) def return_query_embedding(): # 1. รับ JSON Payload try: data = request.json if not data: return jsonify({"error": "No JSON data provided"}), 400 except Exception: # ดักจับกรณีที่ JSON ที่ส่งมาผิดรูปแบบ return jsonify({"error": "Invalid JSON format"}), 400 # 2. ดึงข้อความสนทนา (Messages) query = data.get("text") if not query: # ตรวจสอบว่ามี key 'messages' อยู่ใน JSON ที่ส่งมาหรือไม่ return jsonify({"error": "Missing 'text' key in request body (JSON)"}), 400 # 3. เรียกใช้ Logic try: query_embeddings = model.encode_query(query) # convert to json query_embeddings = query_embeddings.tolist() query_embeddings_json = { "query_embeddings": query_embeddings } # 4. ส่งคำตอบกลับไป # ใช้ Response Object เพื่อให้แน่ใจว่า Header (mimetype) และ Encoding (UTF-8) ถูกต้อง # เพื่อรองรับภาษาไทยตามที่คุณใช้ ensure_ascii=False return jsonify(query_embeddings_json), 200 except Exception as e: # ดักจับ Error ที่อาจเกิดขึ้นภายในฟังก์ชัน LLM print(f"Error: {e}") return jsonify({"error": str(e)}), 500