from abc import ABC, abstractmethod from typing import List from loguru import logger import openai class SQLService(ABC): @abstractmethod def translate(self, source_db: str, target_db: str, sql: str) -> List: ... class OpenAIService(SQLService): def __init__(self, api_key) -> None: super().__init__() openai.api_key = api_key def translate(self, source_db: str, target_db: str, sql: str) -> List: results = [] try: response = openai.Completion.create( model="text-davinci-003", prompt=f"##### Translate this function from Oracle into Postgresql\n" f"### {source_db}" f"" f" {sql}" f"" f"### {target_db}", temperature=0, max_tokens=2048, top_p=1, frequency_penalty=0, presence_penalty=0, stop=["###"] ) for choice in response.choices: logger.info(f"transform {source_db} to {target_db}, SQL:") logger.debug(choice.text) results.append(choice.text) except Exception as ex: logger.error(f"transform from {source_db} to {target_db}, failed \n {sql}") logger.exception(ex) return results class GoogleT5Service(SQLService): def translate(self, source_db: str, target_db: str, sql: str) -> List: return ["In Developing now"] def __init__(self): ... class FacebookLLAMAService(SQLService): def translate(self, source_db: str, target_db: str, sql: str) -> List: return ["In facebook waiting list"] def __init__(self): ...