Skip to content
Snippets Groups Projects

Feature/add auth asr service

1 file
+ 1
1
Compare changes
  • Side-by-side
  • Inline
import os
from abc import ABC, abstractmethod
from typing import List, Optional
import numpy as np
import numpy.typing as npt
from flask import Flask, Response, jsonify, request
from flask_httpauth import HTTPTokenAuth
_TEMP_DIRECTORY = "asr_processing"
_AUTH_TOKEN = "AUTH_TOKEN"
_SERVICE_PORT = "SERVICE_PORT"
class EmbeddingBaseProcessor(ABC):
user_token: str
def __init__(self):
self.user_token = os.environ[_AUTH_TOKEN]
@abstractmethod
def get_embedding(self, phrase: str, language: str) -> npt.NDArray[np.float64]:
"""Method to call for embedding of phrase."""
@staticmethod
def numpy_to_list(arr) -> List[float]:
return [float(it) for it in arr]
def process_embeddings(self, language: str):
words = request.json
if not isinstance(words, List) or not all(isinstance(elem, str) for elem in words):
print(f"words: {words}")
raise Exception("Incorrect body")
return jsonify(
{word: self.numpy_to_list(self.get_embedding(word, language)) for word in words}
)
def is_token_correct(self, token: str) -> Optional[str]:
if token == self.user_token:
return "asr_client"
else:
return None
def health_check(self) -> Response:
return jsonify({"status": "running"})
def start_processor(self):
app = Flask(__name__)
auth = HTTPTokenAuth(scheme="Bearer")
auth.verify_token(self.is_token_correct)
app.route("/process_embedding/<language>", methods=["POST"])(
auth.login_required(self.process_embeddings)
)
app.route("/health_check", methods=["GET"])(self.health_check)
port = int(os.environ[_SERVICE_PORT]) if _SERVICE_PORT in os.environ else 5000
app.run(debug=True, host="0.0.0.0", port=port, use_reloader=False)
Loading