|
import random |
|
|
|
from fastapi import APIRouter, Depends |
|
from fastapi.responses import JSONResponse |
|
|
|
from src.api_models import ( |
|
ResponseGuessWord, ResponseSemanticCalculation, |
|
RequestSemanticCalculation, ResponseMessage, |
|
SemanticCalculation |
|
) |
|
from src.setting import AVAILABLE_WORDS, CFG |
|
from src.vector_db import VectorDatabaseHandler |
|
|
|
router = APIRouter() |
|
|
|
DEFAULT_RESPONSES = { |
|
500: {"description": "Internal Server Error", "model": ResponseMessage}, |
|
} |
|
|
|
|
|
@router.get( |
|
"/v1/service/status", |
|
response_model=ResponseMessage, |
|
responses={**DEFAULT_RESPONSES}, |
|
description="Description: The endpoint is used to check the service status.", |
|
tags=["Service Status"] |
|
) |
|
async def status() -> ResponseMessage: |
|
"""Health endpoint.""" |
|
return ResponseMessage(message="Success.") |
|
|
|
|
|
@router.get( |
|
"/v1/service/get_guess_word", |
|
response_model=ResponseGuessWord, |
|
responses={**DEFAULT_RESPONSES}, |
|
description="Description: The endpoint is used to get a random word from the list of available words.", |
|
tags=["Get Word"] |
|
) |
|
async def get_guess_word() -> ResponseGuessWord: |
|
try: |
|
guess_word = random.choices(AVAILABLE_WORDS, k=1)[0] |
|
except Exception as e: |
|
return JSONResponse(status_code=500, content={"message": str(e)}) |
|
return ResponseGuessWord(word=guess_word) |
|
|
|
|
|
@router.get( |
|
"/v1/service/semantic_calculation", |
|
response_model=ResponseSemanticCalculation, |
|
responses={**DEFAULT_RESPONSES}, |
|
description="Description: The endpoint is used to calculate the semantic similarity between the guessed word \ |
|
and the supposed word.", |
|
tags=["Semantic Analysis"] |
|
) |
|
async def semantic_calculation( |
|
request: RequestSemanticCalculation = Depends(RequestSemanticCalculation) |
|
) -> ResponseGuessWord: |
|
supposed_word = request.supposed_word |
|
guessed_word = request.guessed_word |
|
|
|
if supposed_word not in AVAILABLE_WORDS: |
|
return ResponseSemanticCalculation( |
|
word_exist=False, |
|
metadata=None |
|
) |
|
|
|
vector_db = VectorDatabaseHandler( |
|
db_path=CFG.db.folder_path, |
|
table_name=CFG.db.table_name, |
|
metrics_cfg=CFG.db.metrics |
|
) |
|
|
|
try: |
|
result = vector_db(guessed_word, supposed_word) |
|
except Exception as e: |
|
return JSONResponse(status_code=500, content={"message": str(e)}) |
|
return ResponseSemanticCalculation( |
|
word_exist=True, |
|
metadata=SemanticCalculation(**result) |
|
) |
|
|