What it does
Natural language product search
Price filter support
FAISS semantic search
Multi-language query support
REST API with JSON output
Stack
PythonOpenAI EmbeddingsFAISSFlask
Deploy on
✓ Flask on Render✓ Google Colab
Full source code
Install commands are in the top comments. Copy and run.
import json, faiss, numpy as np
from openai import OpenAI
from flask import Flask, request, jsonify
app = Flask(__name__)
client = OpenAI()
def embed(text):
return np.array(client.embeddings.create(input=text,model='text-embedding-3-small').data[0].embedding,dtype='float32')
def build_index(products):
embs = [embed(f"{p['name']} {p['description']} {p['category']}") for p in products]
matrix = np.stack(embs); faiss.normalize_L2(matrix)
idx = faiss.IndexFlatIP(1536); idx.add(matrix)
return idx, products
with open('products.json') as f: products = json.load(f)
idx, meta = build_index(products)
@app.route('/search', methods=['POST'])
def search():
q_text = request.json.get('query','')
k = request.json.get('k',5)
max_price = request.json.get('max_price')
q_emb = embed(q_text).reshape(1,-1); faiss.normalize_L2(q_emb)
_, ids = idx.search(q_emb, k*3)
results = [meta[i] for i in ids[0] if not (max_price and meta[i].get('price',0)>max_price)][:k]
return jsonify(results)