diff --git a/src/.env b/src/.env deleted file mode 100644 index 47b0eea..0000000 --- a/src/.env +++ /dev/null @@ -1,9 +0,0 @@ -QDRANT_HOST = "192.168.99.122" -QDRANT_PORT = 6333 -QDRANT_HTTPS='true' -QDRANT_SSL_VERIFY= 'false' -QDRANT_API_KEY=NS00TXlKUUIweUhWaGFuUUpUVTk6bWNVWXI1VXRSN2VWcFRtaEZ6NmdCUQ== -QDRANT_CLUSTER='' -QDRANT_COLLECTION_NAME='titan-2502110203' -TOKENIZER_FOLDER=/home/charlenewsl/model-files/tokenizer -MODEL_FOLDER=/home/charlenewsl/model-files \ No newline at end of file diff --git a/src/app.py b/src/app.py index dd85f17..195f05b 100644 --- a/src/app.py +++ b/src/app.py @@ -1,9 +1,14 @@ -from flask import Flask, jsonify, request +from flask import Flask, jsonify, request, Response # from dotenv import load_dotenv from services.embedding_service import Embedding import logging import json +import uuid_utils as uuid from qdrant_client.http import models +from qdrant_client.models import PointStruct +from werkzeug.exceptions import BadRequest +from qdrant_services.qdrant import Qdrant + logger = logging.getLogger(__name__) @@ -19,10 +24,55 @@ def hello(): return jsonify({"message":"Hello, World!"}) +@app.post("/add") +def add(): + if request.content_type == 'application/json': + try: + data = request.get_json(force=True) + if data is None: + raise BadRequest + except BadRequest: + return jsonify({"error": "Invalid JSON"}), 400 + else: + + data = request.form.to_dict() + + clause_text = data.get("clause", '') + user_payload = data.get("payload", None) + user_meta = data.get("meta", None) + + if clause_text=='': + return jsonify({"error":"clause is required"}), 400 + + payload = {"clause": clause_text} + if user_payload is not None: + payload["user_payload"] = user_payload + + if user_meta is not None: + # decode for form-data only + payload["user_meta"] = user_meta if isinstance(user_meta, dict) else json.loads(user_meta) + + clause_vectors = Embedding.call(clause_text) + + result = Qdrant.get_client().upsert( + points=[ + PointStruct( + id=str(uuid.uuid7()), + vector=vector.tolist(), + payload=payload + ) + for vector in clause_vectors + ] + ) + + + logger.info("add clause [%s], result: %s" % (clause_text, result)) + return Response(status=202) + + @app.get("/recommend") def recommend(): try: - from services.recommend_service import Recommend clause = request.args.get("clause", '') # filter shall be a json array. each element is a dict with following keys: