demo-python/code/custom-vectorizer/api/functions/function_app.py (34 lines of code) (raw):

import azure.functions as func from sentence_transformers import SentenceTransformer import json import logging import os app = func.FunctionApp() @app.function_name(name="GetTextEmbedding") @app.route(route="embed") def GetTextEmbedding(req: func.HttpRequest) -> str: # Read input text input_text = [] if req.method == "GET": if "text" in req.params: input_text.append(req.params["text"]) else: try: req_body = req.get_json() if "text" in req_body: input_text.append(req_body["text"]) elif "values" in req_body: for value in req_body["values"]: input_text.append(value["data"]["text"]) except Exception as e: logging.exception(e, "Could not get text from request body") if len(input_text) == 0: return func.HttpResponse( "No input text found", status_code=400 ) model = os.environ["SENTENCE_TRANSFORMERS_TEXT_EMBEDDING_MODEL"] model_path = os.path.join(os.getcwd(), 'models', model) model = SentenceTransformer(model_path) embeddings = model.encode(input_text) response = { "values": [ { "recordId": i, "data": { "vector": embedding.tolist() } } for i, embedding in enumerate(embeddings)]} return func.HttpResponse(body=json.dumps(response), mimetype="application/json", status_code=200)