Module cogsgpt.cogsmodel.nlp.text_translation

Expand source code
from __future__ import annotations

import os
import uuid

import requests

from cogsgpt.schema import ArgsType, LanguageType
from cogsgpt.cogsmodel import BaseModel


class TextTranslationModel(BaseModel):
    def __init__(self) -> None:
        super().__init__()

        COGS_KEY = os.environ['COGS_KEY']
        COGS_REGION = os.environ['COGS_REGION']
        self.translate_endpoint = "https://api.cognitive.microsofttranslator.com/translate"
        self.headers = {
            'Ocp-Apim-Subscription-Key': COGS_KEY,
            # location required if you're using a multi-service or regional (not global) resource.
            'Ocp-Apim-Subscription-Region': COGS_REGION,
            'Content-type': 'application/json',
            'X-ClientTraceId': str(uuid.uuid4())
        }

        self.supported_language = {
            LanguageType.English.value: "en",
            LanguageType.Chinese.value: "zh-Hans",
        }

    def _translate(self, text: str, src_language: str, tgt_language: str) -> str:
        body = [{
            'text': text
        }]
        params = {
            'api-version': '3.0',
            'from': src_language,
            'to': tgt_language
        }

        request = requests.post(self.translate_endpoint, headers=self.headers, params=params, json=body)
        response = request.json()
        return response[0]['translations'][0]['text']

    def run(self, *args, **kwargs) -> str:
        text = kwargs[ArgsType.TEXT.value]
        src_language = self.supported_language[kwargs[ArgsType.SRC_LANGUAGE.value]]
        tgt_language = self.supported_language[kwargs[ArgsType.TGT_LANGUAGE.value]]
        return self._translate(text, src_language, tgt_language)

Classes

class TextTranslationModel

Helper class that provides a standard way to create an ABC using inheritance.

Expand source code
class TextTranslationModel(BaseModel):
    def __init__(self) -> None:
        super().__init__()

        COGS_KEY = os.environ['COGS_KEY']
        COGS_REGION = os.environ['COGS_REGION']
        self.translate_endpoint = "https://api.cognitive.microsofttranslator.com/translate"
        self.headers = {
            'Ocp-Apim-Subscription-Key': COGS_KEY,
            # location required if you're using a multi-service or regional (not global) resource.
            'Ocp-Apim-Subscription-Region': COGS_REGION,
            'Content-type': 'application/json',
            'X-ClientTraceId': str(uuid.uuid4())
        }

        self.supported_language = {
            LanguageType.English.value: "en",
            LanguageType.Chinese.value: "zh-Hans",
        }

    def _translate(self, text: str, src_language: str, tgt_language: str) -> str:
        body = [{
            'text': text
        }]
        params = {
            'api-version': '3.0',
            'from': src_language,
            'to': tgt_language
        }

        request = requests.post(self.translate_endpoint, headers=self.headers, params=params, json=body)
        response = request.json()
        return response[0]['translations'][0]['text']

    def run(self, *args, **kwargs) -> str:
        text = kwargs[ArgsType.TEXT.value]
        src_language = self.supported_language[kwargs[ArgsType.SRC_LANGUAGE.value]]
        tgt_language = self.supported_language[kwargs[ArgsType.TGT_LANGUAGE.value]]
        return self._translate(text, src_language, tgt_language)

Ancestors

Methods

def run(self, *args, **kwargs) ‑> str
Expand source code
def run(self, *args, **kwargs) -> str:
    text = kwargs[ArgsType.TEXT.value]
    src_language = self.supported_language[kwargs[ArgsType.SRC_LANGUAGE.value]]
    tgt_language = self.supported_language[kwargs[ArgsType.TGT_LANGUAGE.value]]
    return self._translate(text, src_language, tgt_language)