You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.1 KiB
92 lines
2.1 KiB
#!/usr/bin/env python
|
|
|
|
import logging
|
|
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
|
|
import falcon
|
|
import falcon.asgi
|
|
from pydantic import BaseModel, Field
|
|
from typing import List
|
|
from spectree import Response, SpecTree, Tag
|
|
|
|
from language_detector import predict, model
|
|
|
|
SUPPORTED_LANGS = model.classes_.tolist()
|
|
|
|
log = logging.getLogger("server")
|
|
|
|
api = SpecTree(
|
|
"falcon-asgi",
|
|
title="Language detection service",
|
|
version="0.0.1",
|
|
description="Detect language of given text",
|
|
contact={
|
|
"name": "Harish",
|
|
"email": "harish2704@gmail.com",
|
|
"url": "https://github.com/harish2704",
|
|
},
|
|
)
|
|
|
|
|
|
class LanguageDetectionRequest(BaseModel):
|
|
text: str
|
|
|
|
class Config:
|
|
schema_extra = {
|
|
"example": {
|
|
"text": "How are you?",
|
|
}
|
|
}
|
|
|
|
|
|
class AvailableLanguagesResponse(BaseModel):
|
|
supported_languages: List[str]
|
|
|
|
class Config:
|
|
schema_extra = {
|
|
"example": {
|
|
"supported_languages": ["English", "Hindi"],
|
|
}
|
|
}
|
|
|
|
|
|
class LanguageDetectionResponse(BaseModel):
|
|
lang: str
|
|
score: float = Field(gt=0, le=1, description="Probability score of the detection")
|
|
|
|
class Config:
|
|
schema_extra = {
|
|
"example": {
|
|
"lang": "English",
|
|
"score": 0.993,
|
|
}
|
|
}
|
|
|
|
|
|
class LanguageDetection:
|
|
"""
|
|
Language detection demo
|
|
"""
|
|
|
|
@api.validate(
|
|
json=LanguageDetectionRequest, resp=Response(HTTP_200=LanguageDetectionResponse)
|
|
)
|
|
async def on_post(self, req, resp):
|
|
"""
|
|
Detect language of given text
|
|
"""
|
|
pred = predict(req.context.json.text)
|
|
resp.media = {"lang": pred[1][0], "score": pred[0][0]}
|
|
|
|
@api.validate(resp=Response(HTTP_200=AvailableLanguagesResponse))
|
|
async def on_get(self, req, resp):
|
|
"""
|
|
Get a list of supported languages
|
|
"""
|
|
resp.media = {"supported_languages": SUPPORTED_LANGS}
|
|
|
|
|
|
app = falcon.asgi.App()
|
|
app.add_route("/api/language/predict", LanguageDetection())
|
|
api.register(app)
|
|
|