コード例 #1
0
ファイル: api.py プロジェクト: erezsc1/ds_translator_server
def translate(source_lang,
              target_lang,
              data_list: List[str] = Query(None),
              special_tokens: List[str] = Query(None)):
    '''
    :param source_lang: source language [arb, eng, heb]
    :param target_lang: target language [arb, eng, heb]
    :param data_list: list[str]
    :return: list[str]
    '''
    model_index = f"{source_lang}_{target_lang}"
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    if model_index not in running_models.keys():
        # need to init model
        running_models[model_index] = Translator(source_lang=source_lang,
                                                 target_lang=target_lang,
                                                 special_tokens=special_tokens)
    else:  #model exists
        if torch.cuda.is_available():
            running_models[model_index].load_model_to_gpu()
            running_models[model_index].to(device)
    translation_df = running_models[model_index].translate(data_list)
    api_logger.info(
        f"returned value to client: {translation_df['tgt_text'].tolist()}")
    _free_model(model_index)
    return translation_df["tgt_text"].tolist()
コード例 #2
0
 def wrap(*args, **kwargs):
     time1 = time.time()
     ret = f(*args, **kwargs)
     time2 = time.time()
     api_logger.info('{:s} function took {:.3f} ms'.format(
         f.__name__, (time2 - time1) * 1000.0))
     return ret
コード例 #3
0
async def send_file_block(server_id, file_path, piece):
    try:
        buffer = pickle.dumps(piece)
        if server_id == settings.server_id:
            await write_file_block_in_fs(file_path, buffer)
            logger.info('%s: sendblock %d to server %d', file_path, piece.piece_id, server_id)
            return True
        else:
            port = settings.base_port + server_id
            url = 'http://%s:%d/writeblock/%s' % (settings.host, port, file_path)
            headers = {
                'content-type': 'application/octet-stream'
            }
            session = get_session()
            async with session.post(url, data=buffer, headers=headers) as resp:
                resp: aiohttp.ClientResponse
                if resp.status == 200:
                    logger.info('%s: sendblock %d to server %d', file_path, piece.piece_id, server_id)
                    return True
                else:
                    raise Exception(resp)
    except Exception as e:
        logger.error('%s failed: sendblock %d to server %d', file_path, piece.piece_id, server_id)
        logger.exception(e)
    return False
コード例 #4
0
async def write_file_block_in_fs(file_path, buffer):
    async with write_file_block_in_fs_lock:
        filename = get_filename(file_path)
        logger.info('%s: writeblock into server %d', file_path, settings.server_id)
        file_path = os.path.join(settings.data_dir, filename)
        async with aiofile.async_open(file_path, 'wb') as f:
            await f.write(buffer)
コード例 #5
0
 def load_model_to_gpu(self):
     if self.model is None:
         torch.cuda.empty_cache()
         self.model: AutoModelWithLMHead = AutoModelWithLMHead.from_pretrained(
             self.trained_model_path)
         api_logger.info(
             f"loaded model {self.trained_model_path} to gpu memory.")
コード例 #6
0
ファイル: main.py プロジェクト: Rushyanth111/Semester-Stats
async def startup_event():
    db = session_create()

    if db.query(Department).count() == 0:
        logger.info("Inserting Department Details, Previously None")
        db.bulk_insert_mappings(
            Department,
            [{
                "Code": code,
                "Name": name
            } for code, name in dept_dict.items()],
        )

    if db.query(BatchSchemeInfo).count() == 0:
        logger.info("Inserting Batch Details, Previously None")
        db.bulk_insert_mappings(
            BatchSchemeInfo,
            [{
                "Batch": batch,
                "Scheme": scheme
            } for batch, scheme in batch_dict.items()],
        )

    db.commit()
    db.close()
コード例 #7
0
ファイル: logger.py プロジェクト: tldrd0117/fin-web
    def __getLogger(cls, name: str) -> logging.Logger:
        if name not in cls.__loggers:
            logger = logging.getLogger(name)
            logger.setLevel(logging.INFO)
            if "pytest" in sys.modules:
                print("logger..pytest")
                return logger

            path = pathlib.Path(f"../app/log/{name}")
            logger.info(path.resolve())

            # fileHandler = logging.handlers.TimedRotatingFileHandler(
            #     filename=path.resolve(),
            #     when='midnight',
            #     interval=1
            # )

            fileHandler2 = logging.handlers.RotatingFileHandler(
                filename=path.resolve(), maxBytes=1000000, backupCount=100)

            logger.addHandler(fileHandler2)

            formatter = logging.Formatter(
                '%(asctime)s - %(levelname)s - [%(filename)s:%(lineno)d] %(message)s'
            )
            fileHandler2.setFormatter(formatter)  # 핸들러에 로깅 포맷 할당

            cls.__loggers[name] = logger
        return cls.__loggers[name]
コード例 #8
0
ファイル: logger.py プロジェクト: tldrd0117/fin-web
 def info(self, func: str, msg: str = None) -> None:
     if msg is None:
         info = (f"cls: {self.cls}, msg: {func}")[:200]
         self.logger.info(info)
         return
     info = (f"cls: {self.cls}, func: {func}, msg: {msg}")[:200]
     self.logger.info(info)
     logger.info(info)
コード例 #9
0
def update_problem_config_by_archive(
        file: UploadFile = File(...),
        problem: models.Problem = Depends(parse_problem)
) -> StandardResponse[Empty]:
    logger.info("problem config archive name: %s", file.filename)
    problem_config = LakeFSProblemConfig(problem)
    problem_config.upload_archive(file.filename, file.file)
    return StandardResponse()
コード例 #10
0
ファイル: locator.py プロジェクト: tldrd0117/fin-web
 def register(self, obj: Any) -> None:
     typeName = type(obj).__name__
     key = None
     if typeName == "type":
         key = obj.__name__
     else:
         key = typeName
     self.store[key] = obj
     logger.info("Locator: " + key + " registered")
コード例 #11
0
ファイル: socketEndpoint.py プロジェクト: tldrd0117/fin-web
async def get_token(
        websocket: WebSocket,
        token: Any = Query(None),
) -> Optional[str]:
    logger.info("TOKEN:" + str(token))
    if token is None or not userService.check_token(token):
        await websocket.close(code=status.WS_1008_POLICY_VIOLATION)
        return None
    return token
コード例 #12
0
async def commit_problem_config(
    commit: schemas.ProblemConfigCommit = Body(...),
    problem: models.Problem = Depends(parse_problem),
    user: models.User = Depends(parse_user_from_auth),
) -> StandardResponse[schemas.ProblemConfig]:
    result = await models.ProblemConfig.make_commit(problem=problem,
                                                    committer=user,
                                                    commit=commit)
    logger.info("problem config commit: %s", result)
    return StandardResponse(schemas.ProblemConfig.from_orm(result))
コード例 #13
0
ファイル: apis.py プロジェクト: tc-imba/CE7490-Project2
async def rebuild_redundancy(file: Raid6File, piece_map):
    rebuild_flag = False
    for server_id in piece_map:
        if server_id < 0:
            rebuild_flag = True
            break
    if not rebuild_flag:
        return
    logger.info('%s: rebuild redundancy', file.path)
    await process_file(file, piece_map)
コード例 #14
0
ファイル: apis.py プロジェクト: tc-imba/CE7490-Project2
async def read_file_block(file_path: str):
    try:
        filename = get_filename(file_path)
        logger.info('%s: readblock from server %d', file_path, settings.server_id)
        file_path = os.path.join(settings.data_dir, filename)
        # buffer = await read_file_block_from_fs(file_path)
        # stream = io.BytesIO(buffer)
        return FileResponse(file_path, media_type='application/octet-stream')
    except Exception as e:
        logger.exception(e)
        raise HTTPException(400, str(e))
コード例 #15
0
 def _close_file(self):
     """Try to close file"""
     try:
         if self._file is not None and not self._file.closed:
             self._file.close()
             logger.info("WaveFileWriter - File closed: %s",
                         self._file_name)
     except OSError:
         logger.exception("WaveFileWriter - Failed to close file")
         self.on_error(
             "Engine: wave_file_writer - Message: Failed to close")
コード例 #16
0
    async def event_publisher():
        i = 0

        while True:
            disconnected = await req.is_disconnected()
            if disconnected:
                _log.info(f"Disconnecting client {req.client}")
                break
            # yield dict(id=..., event=..., data=...)
            i += 1
            yield dict(data=i)
            await asyncio.sleep(0.9)
        _log.info(f"Disconnected from client {req.client}")
コード例 #17
0
    def __init__(self,
                 source_lang="heb",
                 target_lang="arb",
                 special_tokens=None):
        '''
        :param source_lang: source langauge to be translated from ["heb","arb","eng"]
        :param target_lang: target langauge to be translated to ["heb","arb", "eng"]
        :param max_cache_entries: maximum entrie
        '''

        self.source_lang = SPECIAL_CASE_TGT_MAP.get(source_lang, source_lang)
        self.target_lang = SPECIAL_CASE_TGT_MAP.get(target_lang, target_lang)
        self.special_tokens = special_tokens

        with open("translator_config.json", "r") as fp:
            languages_dict = json.load(fp)
        try:
            pretrained_model = languages_dict[self.source_lang][
                self.target_lang]["model_name"]
            special_token = languages_dict[self.source_lang][
                self.target_lang]["special_tok"]
        except:
            raise NotImplementedError(
                f"translation {self.source_lang}->{self.target_lang} not available"
            )

        trained_model_path = os.path.join("trained_models", pretrained_model)
        self.special_tok = special_token

        # loading models
        self.tokenizer = AutoTokenizer.from_pretrained(trained_model_path)

        self.device = torch.device(
            "cuda" if torch.cuda.is_available() else "cpu")
        api_logger.info(f"inference device: {self.device}")

        self.trained_model_path = trained_model_path
        self.model: AutoModelWithLMHead = AutoModelWithLMHead.from_pretrained(
            self.trained_model_path)

        if self.special_tokens is not None:
            spec_dict = {"additional_special_tokens": self.special_tokens}
            num_added = self.tokenizer.add_special_tokens(spec_dict)
            api_logger.info(f"number tokens added: {num_added}")
            self.model.resize_token_embeddings(len(
                self.tokenizer))  # adding new tokens

        self.model.to(self.device)
        self.max_sequence_len = 512
        self.translation_df = pd.DataFrame(columns=["src_text", "tgt_text"])
        self.translation_cache = {}
コード例 #18
0
    def translate(self, x):
        '''
        translation function
        :param x : [str, [str], pd.Series(str)] - data to be translated:
        :return: returns df : pd.DataFrame with original and translated text
        '''
        cur_translation_df = pd.DataFrame(columns=["src_text", "tgt_text"])
        if type(x) == list:
            cur_translation_df["src_text"] = x
        elif type(x) == str:
            cur_translation_df["src_text"] = [x]
        elif type(x) == pd.Series:
            cur_translation_df["src_text"] = x
        api_logger.info(cur_translation_df)

        no_translations = []
        after_translations = []
        if len(cur_translation_df) > 0:
            for src_text_itr in cur_translation_df["src_text"]:
                translation_itr = self.translation_cache.get(
                    src_text_itr, None)
                if translation_itr is None:
                    # need to translate
                    no_translations.append(src_text_itr)
        # translated new
        if len(no_translations) > 0:
            processed_text_list_no_translation = [
                self.preprocess(x) for x in no_translations
            ]
            input_dict = self.tokenizer.prepare_translation_batch(
                processed_text_list_no_translation)

            # TODO fix the special tokens feature
            # special_tokens_attention_mask = ~input_dict["input_ids"] >= torch.Tensor(
            #     self.tokenizer.additional_special_tokens_ids).min()

            input_dict.to(self.device)
            translated = self.model.generate(**input_dict)
            tgt_text = [
                self.tokenizer.decode(t, skip_special_tokens=True)
                for t in translated
            ]
            for src_text, translated_txt in zip(no_translations, tgt_text):
                self.translation_cache[src_text] = translated_txt

        # get translations from cache
        for query_text in cur_translation_df["src_text"].tolist():
            after_translations.append(self.translation_cache[query_text])
        cur_translation_df["tgt_text"] = after_translations
        return cur_translation_df
コード例 #19
0
ファイル: apis.py プロジェクト: tc-imba/CE7490-Project2
async def delete_file(file_path: str):
    try:
        logger.info('delete: %s', file_path)
        start = time.time()
        result = await remove_file(file_path)
        deleted_count = sum(result)
        return {
            'success': deleted_count == settings.primary + settings.parity,
            'result': result,
            'delay': time.time() - start
        }
    except Exception as e:
        logger.exception(e)
        raise HTTPException(400, str(e))
コード例 #20
0
    async def event_publisher():
        # The event publisher only conditionally emits items
        has_data = True

        while True:
            disconnected = await req.is_disconnected()
            if disconnected:
                _log.info(f"Disconnecting client {req.client}")
                break
            # Simulate only sending one response
            if has_data:
                yield dict(data="u can haz the data")
                has_data = False
            await asyncio.sleep(0.9)
        _log.info(f"Disconnected from client {req.client}")
コード例 #21
0
 def __init__(self, send_message):
     """Create wave file writer"""
     super().__init__(send_message)
     try:
         WaveFileWriter.file_index = WaveFileWriter.file_index + 1
         if WaveFileWriter.file_index > 99:
             WaveFileWriter.file_index = 1
         self._file_name = (
             f"{settings.recordings_path}{WaveFileWriter.file_index}-{int(time.time())}.wav"
         )
         self._file = open(self._file_name, 'wb')
         logger.info("WaveFileWriter - Created file: %s", self._file_name)
     except OSError:
         logger.exception("WaveFileWriter - Failed to create file")
         self.on_error(
             "Engine: wave_file_writer - Message: Failed to create file")
コード例 #22
0
ファイル: stock.py プロジェクト: tldrd0117/fin-web
 def cancelCrawling(self, data: dict, websocket: WebSocket) -> None:
     dtoList = []
     logger.info(str(data))
     for market in data["market"]:
         dto = StockRunCrawling(
             **{
                 "driverAddr": "http://fin-carwling-webdriver:4444",
                 "market": market,
                 "startDateStr": data["startDate"],
                 "endDateStr": data["endDate"],
                 "taskId": data["taskId"],
                 "taskUniqueId": data["taskUniqueId"]
             })
         dtoList.append(dto)
     for dto in dtoList:
         self.stockService.cancelCrawling(dto)
コード例 #23
0
ファイル: apis.py プロジェクト: tc-imba/CE7490-Project2
async def write_file(file_path: str, file: UploadFile = File(...)):
    try:
        logger.info('write: %s', file_path)
        buffer = await file.read()
        file = generate_file(file_path, buffer)
        piece_map = [-1] * (settings.primary + settings.parity)
        result, delay = await process_file(file, piece_map)
        received_count = sum(result)
        return {
            'success': received_count >= settings.primary,
            'result': result,
            'delay': delay
        }
    except Exception as e:
        logger.exception(e)
        raise HTTPException(400, str(e))
コード例 #24
0
async def delete_file_block_in_fs(file_path, timestamp):
    async with write_file_block_in_fs_lock:
        filename = get_filename(file_path)
        new_file_path = os.path.join(settings.data_dir, filename)
        delete_flag = True
        try:
            async with aiofile.async_open(new_file_path, 'rb') as f:
                piece = pickle.loads(await f.read())
                if piece.timestamp >= timestamp:
                    delete_flag = False
        except Exception as e:
            logger.exception(e)
            pass
        logger.info('%s: deleteblock from server %d, flag=%d', file_path, settings.server_id, delete_flag)
        if delete_flag:
            os.remove(new_file_path)
    return delete_flag
コード例 #25
0
async def delete_file_block(server_id, file_path, timestamp):
    try:
        if server_id == settings.server_id:
            return await delete_file_block_in_fs(file_path, timestamp)
        else:
            port = settings.base_port + server_id
            url = 'http://%s:%d/deleteblock/%s?timestamp=%d' % (settings.host, port, file_path, timestamp)
            session = get_session()
            async with session.get(url) as resp:
                resp: aiohttp.ClientResponse
                if resp.status == 200:
                    data = await resp.json()
                    logger.info(data)
                    if data['result'] is True:
                        return True
                else:
                    raise Exception(resp)
    except Exception as e:
        pass
        # logger.error('%s failed: receiveblock from server %d', file_path, server_id)
        logger.exception(e)
    return False
コード例 #26
0
async def receive_file_block(server_id, file_path):
    try:
        if server_id == settings.server_id:
            buffer = await read_file_block_from_fs(file_path)
            piece = pickle.loads(buffer)
            logger.info('%s: receiveblock %d from server %d', file_path, piece.piece_id, server_id)
            return piece
        else:
            port = settings.base_port + server_id
            url = 'http://%s:%d/readblock/%s' % (settings.host, port, file_path)
            session = get_session()
            async with session.get(url) as resp:
                resp: aiohttp.ClientResponse
                if resp.status == 200:
                    buffer = await resp.read()
                    piece = pickle.loads(buffer)
                    logger.info('%s: receiveblock %d from server %d', file_path, piece.piece_id, server_id)
                    return piece
                else:
                    raise Exception(resp)
    except Exception as e:
        logger.error('%s failed: receiveblock from server %d', file_path, server_id)
        logger.exception(e)
    return None
コード例 #27
0
 async def event_publisher():
     i = 0
     try:
         while True:
             disconnected = await req.is_disconnected()
             if disconnected:
                 _log.info(f"Disconnecting client {req.client}")
                 break
             # yield dict(id=..., event=..., data=...)
             i += 1
             yield dict(data=i)
             await asyncio.sleep(0.9)
         _log.info(f"Disconnected from client {req.client}")
     except asyncio.CancelledError as e:
         _log.info(f"Disconnected from client (via refresh/close) {req.client}")
         # Do any other cleanup, if any
         raise e
コード例 #28
0
ファイル: main.py プロジェクト: tldrd0117/fin-web
]

app = FastAPI()
app.include_router(socketRouter)
app.include_router(userRouter)
app.include_router(stockRouter)
app.include_router(factorRouter)
app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

logger.info("initiate app2")

# def my_excepthook(type, value, traceback):
#     logger.error('Unhandled error:', str(type), str(value), str(traceback))

# sys.excepthook = my_excepthook


@app.get("/hello")
async def hello() -> dict:
    return {"message": "Hello World"}


loop = None

コード例 #29
0
 def free_model_mem(self):
     del self.model
     self.model = None
     torch.cuda.empty_cache()
     api_logger.info(
         f"freed model {self.trained_model_path} from gpu memory.")
コード例 #30
0
async def read_file_block_from_fs(file_path):
    filename = get_filename(file_path)
    logger.info('%s: readblock from server %d', file_path, settings.server_id)
    file_path = os.path.join(settings.data_dir, filename)
    async with aiofile.async_open(file_path, 'rb') as f:
        return await f.read()