File size: 2,453 Bytes
46f5320
0128fae
46f5320
 
 
 
 
 
 
 
335cdd4
05912c7
 
46f5320
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
335cdd4
05912c7
335cdd4
 
 
 
 
 
 
 
 
 
 
 
 
3cffb60
 
335cdd4
 
 
 
 
 
 
 
 
 
 
 
 
0128fae
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
"""FastAPI endpoint
To run locally use 'uvicorn app:app --host localhost --port 7860'
"""

from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from pydantic import BaseModel

from modules.nlu import prepare_message_data_for_logging
from mathtext.sentiment import sentiment
from mathtext.text2int import text2int

app = FastAPI()

app.mount("/static", StaticFiles(directory="static"), name="static")

templates = Jinja2Templates(directory="templates")


class Text(BaseModel):
    content: str = ""


@app.get("/")
def home(request: Request):
    return templates.TemplateResponse("home.html", {"request": request})


@app.post("/hello")
def hello(content: Text = None):
    content = {"message": f"Hello {content.content}!"}
    return JSONResponse(content=content)


@app.post("/sentiment-analysis")
def sentiment_analysis_ep(content: Text = None):
    ml_response = sentiment(content.content)
    content = {"message": ml_response}
    return JSONResponse(content=content)


@app.post("/text2int")
def text2int_ep(content: Text = None):
    ml_response = text2int(content.content)
    content = {"message": ml_response}
    return JSONResponse(content=content)


@app.post("/nlu")
async def evaluate_user_message_with_nlu_api(request: Request):
    """ Calls NLU APIs on the most recent user message from Turn.io message data and logs the message data

    Input
    - request.body: a json object of message data for the most recent user response

    Output
    - int_data_dict or sent_data_dict: A dictionary telling the type of NLU run and the resulting data
      {'type':'integer', 'data': '8'}
      {'type':'sentiment', 'data': 'negative'}
    """

    data_dict = await request.json()
    message_data = data_dict.get('message_data', '')
    message_text = message_data['message']['text']['body'].lower()

    int_api_resp = text2int(message_text)

    if int_api_resp == '32202':
        sentiment_api_resp = sentiment(message_text)
        # [{'label': 'POSITIVE', 'score': 0.991188645362854}]
        sent_data_dict = {'type': 'sentiment', 'data': sentiment_api_resp[0]['label']}
        return JSONResponse(content={'type': 'sentiment', 'data': 'negative'})

    prepare_message_data_for_logging(message_data)

    int_data_dict = {'type': 'integer', 'data': int_api_resp}
    return JSONResponse(content=int_data_dict)