Spaces:
Runtime error
Runtime error
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)
|