Skip to content
This repository has been archived by the owner on Jul 12, 2024. It is now read-only.

Commit

Permalink
Merge pull request #10 from loyal812/feat/conversational
Browse files Browse the repository at this point in the history
feat: implement the conversational api
  • Loading branch information
loyal812 committed Mar 27, 2024
2 parents e0d8d9c + b613b89 commit 5e76807
Show file tree
Hide file tree
Showing 7 changed files with 185 additions and 14 deletions.
16 changes: 15 additions & 1 deletion chatting.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)))

Expand Down
115 changes: 115 additions & 0 deletions src/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -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})
Expand All @@ -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 = "[email protected]"
Expand All @@ -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 = "[email protected]"
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 = "[email protected]"
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 = "[email protected]"
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 = "[email protected]"
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)
7 changes: 3 additions & 4 deletions src/models/chatting_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
52 changes: 52 additions & 0 deletions src/utils/chatting.py
Original file line number Diff line number Diff line change
@@ -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()
3 changes: 0 additions & 3 deletions src/utils/check_api_key.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@

import os
import gc
import argparse
from pathlib import Path
from urllib.parse import quote_plus

Expand Down
3 changes: 0 additions & 3 deletions src/utils/create_api.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@

import os
import gc
import argparse
from pathlib import Path
from datetime import datetime
from urllib.parse import quote_plus
Expand Down
3 changes: 0 additions & 3 deletions src/utils/delete_api_key.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@

import os
import gc
import argparse
from pathlib import Path
from urllib.parse import quote_plus

Expand Down

0 comments on commit 5e76807

Please sign in to comment.