from sentence_transformers import SentenceTransformer from flask import Flask, request, jsonify from flask_cors import CORS # Import CORS app = Flask(__name__) CORS(app) # Enable CORS for all routes # Load the model once when the application starts # This is efficient as it avoids reloading on every request. print("Loading sentence-transformer model...") model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2') print("Model loaded successfully.") @app.route('/', methods=['GET']) def health_check(): """A simple endpoint to check if the service is running.""" return jsonify({ 'status': 'ok', 'model': 'sentence-transformers/all-MiniLM-L6-v2' }) @app.route('/embed', methods=['POST']) def embed_text(): """The main endpoint to generate embeddings.""" data = request.json if not data or 'text' not in data: return jsonify({'error': 'No text provided in JSON body'}), 400 text = data.get('text') if not isinstance(text, str) or not text.strip(): return jsonify({'error': 'Text must be a non-empty string'}), 400 try: # Generate embedding embedding = model.encode(text) # No need to wrap in a list for a single string return jsonify({ 'embedding': embedding.tolist(), 'model': 'all-MiniLM-L6-v2', 'dimension': len(embedding) }) except Exception as e: print(f"Error during embedding: {e}") return jsonify({'error': 'Failed to generate embedding'}), 500