diff --git a/chatting.py b/chatting.py index 021e4c1..39b7563 100644 --- a/chatting.py +++ b/chatting.py @@ -2,6 +2,7 @@ import gc import argparse from pathlib import Path +from urllib.parse import quote_plus from src.utils.read_json import read_json from src.chatting.ChattingClass import ChattingClass @@ -15,11 +16,24 @@ def chatting(args): # Payload payload_data = read_json(args.payload_dir) + # Your MongoDB Atlas connection details + mongodb_username = payload_data["mongodb_username"] + mongodb_password = payload_data["mongodb_password"] + mongodb_cluster_name = payload_data["mongodb_cluster_name"] + mongodb_database_name = payload_data["mongodb_database_name"] + + # Escape the mongodb_username and mongodb_password + mongodb_escaped_username = quote_plus(mongodb_username) + mongodb_escaped_password = quote_plus(mongodb_password) + + # Construct the MongoDB Atlas URI + mongo_uri = f"mongodb+srv://{mongodb_escaped_username}:{mongodb_escaped_password}@{mongodb_cluster_name}.mongodb.net/{mongodb_database_name}" + # Call class instance mongodb = MongoDBClass( db_name=payload_data["db_name"], collection_name=payload_data["collection_name"], - mongo_uri=payload_data["mongo_uri"]) + mongo_uri=mongo_uri) is_available = mongodb.check_validation_api(api_key=str(Path(args.api_key)), user=str(Path(args.user))) diff --git a/src/main.py b/src/main.py index c82548b..df0554d 100644 --- a/src/main.py +++ b/src/main.py @@ -17,7 +17,14 @@ from starlette.status import HTTP_201_CREATED from src.models.main_model import MainModel +from src.models.create_api_model import CreateAPIModel +from src.models.chatting_model import ChattingModel +from utils.total_process import total_process +from utils.create_api import create_api_key +from utils.delete_api_key import delete_api_key +from utils.check_api_key import check_api_key +from utils.chatting import chatting # Create a FastAPI application app = FastAPI(swagger_ui_parameters={"tryItOutEnabled": True}) @@ -39,12 +46,31 @@ allow_headers=["*"], ) +# Current directory +current_dir = os.path.dirname(os.path.abspath(__file__)) + +# Get the parent directory +parent_dir = os.path.dirname(current_dir) # Define a route to handle the root endpoint and redirect to the API documentation @app.get("/") async def root(): return RedirectResponse(app.docs_url) +def get_payload_dir(data_id: str): + payload_name = "payload.json" + if data_id == "": + test_name = "regression_test013" + else: + test_name = data_id + + payload_dir = os.path.join(parent_dir, "test", "regression", test_name, "payload", payload_name) + + return payload_dir + +@app.post("/finetuning") +async def finetuning(request_body: MainModel): + payload_dir = get_payload_dir(request_body.data_id) if request_body.user == "": user = "user@gmail.com" @@ -63,3 +89,92 @@ async def root(): } total_process(args) + + +@app.post("/create_api") +async def create_api(request_body: CreateAPIModel): + payload_dir = get_payload_dir(request_body.data_id) + + if request_body.user == "": + user = "user@gmail.com" + else: + user = request_body.user + + args = { + 'payload_dir' : payload_dir, + 'user' : user, + 'title' : request_body.title, + 'description' : request_body.description + } + + create_api_key(args) + + +@app.post("/delete_api") +async def delete_api(request_body: MainModel): + payload_dir = get_payload_dir(request_body.data_id) + + if request_body.user == "": + user = "user@gmail.com" + else: + user = request_body.user + + if request_body.api_key == "": + api_key = "AMEYbpdcmrUxNu_Fb80qutukUZdlsmYiH4g7As5LzNA1" + else: + api_key = request_body.api_key + + args = { + 'payload_dir' : payload_dir, + 'user' : user, + 'api_key' : api_key + } + + delete_api_key(args) + + +@app.post("/check_api") +async def check_api(request_body: MainModel): + payload_dir = get_payload_dir(request_body.data_id) + + if request_body.user == "": + user = "user@gmail.com" + else: + user = request_body.user + + if request_body.api_key == "": + api_key = "AMEYbpdcmrUxNu_Fb80qutukUZdlsmYiH4g7As5LzNA1" + else: + api_key = request_body.api_key + + args = { + 'payload_dir' : payload_dir, + 'user' : user, + 'api_key' : api_key + } + + check_api_key(args) + + +@app.post("/conversation") +async def conversation(request_body: ChattingModel): + payload_dir = get_payload_dir(request_body.data_id) + + if request_body.user == "": + user = "user@gmail.com" + else: + user = request_body.user + + if request_body.api_key == "": + api_key = "AMEYbpdcmrUxNu_Fb80qutukUZdlsmYiH4g7As5LzNA1" + else: + api_key = request_body.api_key + + args = { + 'payload_dir' : payload_dir, + 'user' : user, + 'api_key' : api_key, + 'question' : request_body.question + } + + chatting(args) \ No newline at end of file diff --git a/src/models/chatting_model.py b/src/models/chatting_model.py index 8f9bca1..5d57596 100644 --- a/src/models/chatting_model.py +++ b/src/models/chatting_model.py @@ -3,7 +3,6 @@ class ChattingModel(BaseModel): api_key: Optional[str] = "" - data_path: Optional[str] = "" - model: Optional[str] = "" - temperature: Optional[float] = 0.3 - question: Optional[str] = "" + user: Optional[str] = "" + data_id: Optional[str] = "" + question: Optional[str] = "hi" diff --git a/src/utils/chatting.py b/src/utils/chatting.py new file mode 100644 index 0000000..ab758a4 --- /dev/null +++ b/src/utils/chatting.py @@ -0,0 +1,52 @@ +import gc +from pathlib import Path +from urllib.parse import quote_plus + +from src.utils.read_json import read_json +from src.chatting.ChattingClass import ChattingClass +from src.mongodb.MongoDBClass import MongoDBClass + +def chatting(args): + """ + main entry point + """ + + # Payload + payload_data = read_json(args['payload_dir']) + + # Your MongoDB Atlas connection details + mongodb_username = payload_data["mongodb_username"] + mongodb_password = payload_data["mongodb_password"] + mongodb_cluster_name = payload_data["mongodb_cluster_name"] + mongodb_database_name = payload_data["mongodb_database_name"] + + # Escape the mongodb_username and mongodb_password + mongodb_escaped_username = quote_plus(mongodb_username) + mongodb_escaped_password = quote_plus(mongodb_password) + + # Construct the MongoDB Atlas URI + mongo_uri = f"mongodb+srv://{mongodb_escaped_username}:{mongodb_escaped_password}@{mongodb_cluster_name}.mongodb.net/{mongodb_database_name}" + + # Call class instance + mongodb = MongoDBClass( + db_name=payload_data["db_name"], + collection_name=payload_data["collection_name"], + mongo_uri=mongo_uri) + + is_available = mongodb.check_validation_api(api_key=str(Path(args['api_key'])), user=str(Path(args['user']))) + + if is_available: + print("valid api key") + # Call class instance + chatting = ChattingClass( + data_path=payload_data["data_path"], + api_key=payload_data["api_key"], + model_id=payload_data["model_id"], + temperature=payload_data["temperature"]) + + response = chatting.ask_question(args['question']) + print(response) + else: + print("invalide api key") + + gc.collect() \ No newline at end of file diff --git a/src/utils/check_api_key.py b/src/utils/check_api_key.py index c0be1c3..543136a 100644 --- a/src/utils/check_api_key.py +++ b/src/utils/check_api_key.py @@ -1,7 +1,4 @@ - -import os import gc -import argparse from pathlib import Path from urllib.parse import quote_plus diff --git a/src/utils/create_api.py b/src/utils/create_api.py index 9137745..67b49a7 100644 --- a/src/utils/create_api.py +++ b/src/utils/create_api.py @@ -1,7 +1,4 @@ - -import os import gc -import argparse from pathlib import Path from datetime import datetime from urllib.parse import quote_plus diff --git a/src/utils/delete_api_key.py b/src/utils/delete_api_key.py index 7b86f4f..0509dc0 100644 --- a/src/utils/delete_api_key.py +++ b/src/utils/delete_api_key.py @@ -1,7 +1,4 @@ - -import os import gc -import argparse from pathlib import Path from urllib.parse import quote_plus