From 1a67878b7e8ae3c07dc9306659ff551b18fe00b0 Mon Sep 17 00:00:00 2001 From: better629 Date: Thu, 23 Nov 2023 09:29:40 +0800 Subject: [PATCH] move after_log as general one --- metagpt/actions/action.py | 16 ++-------------- metagpt/utils/utils.py | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 14 deletions(-) create mode 100644 metagpt/utils/utils.py diff --git a/metagpt/actions/action.py b/metagpt/actions/action.py index cb5bd9ce1..0a7a1656d 100644 --- a/metagpt/actions/action.py +++ b/metagpt/actions/action.py @@ -6,7 +6,6 @@ @File : action.py """ -import typing from abc import ABC from typing import Optional @@ -16,21 +15,10 @@ from metagpt.actions.action_output import ActionOutput from metagpt.llm import LLM from metagpt.logs import logger from metagpt.utils.common import OutputParser +from metagpt.utils.utils import general_after_log from metagpt.provider.postprecess.llm_output_postprecess import llm_output_postprecess -def action_after_log(logger: "loguru.Logger", sec_format: str = "%0.3f") -> typing.Callable[["RetryCallState"], None]: - def log_it(retry_state: "RetryCallState") -> None: - if retry_state.fn is None: - fn_name = "" - else: - fn_name = _utils.get_callback_name(retry_state.fn) - logger.error(f"Finished call to '{fn_name}' after {sec_format % retry_state.seconds_since_start}(s), " - f"this was the {_utils.to_ordinal(retry_state.attempt_number)} time calling it. " - f"exp: {retry_state.outcome.exception()}") - return log_it - - class Action(ABC): def __init__(self, name: str = "", context=None, llm: LLM = None): self.name: str = name @@ -65,7 +53,7 @@ class Action(ABC): @retry( stop=stop_after_attempt(3), wait=wait_fixed(1), - after=action_after_log(logger), + after=general_after_log(logger), ) async def _aask_v1( self, diff --git a/metagpt/utils/utils.py b/metagpt/utils/utils.py new file mode 100644 index 000000000..f479ec3b8 --- /dev/null +++ b/metagpt/utils/utils.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : + +import typing + +from tenacity import after_log, _utils + + +def general_after_log(logger: "loguru.Logger", sec_format: str = "%0.3f") -> typing.Callable[["RetryCallState"], None]: + def log_it(retry_state: "RetryCallState") -> None: + if retry_state.fn is None: + fn_name = "" + else: + fn_name = _utils.get_callback_name(retry_state.fn) + logger.error(f"Finished call to '{fn_name}' after {sec_format % retry_state.seconds_since_start}(s), " + f"this was the {_utils.to_ordinal(retry_state.attempt_number)} time calling it. " + f"exp: {retry_state.outcome.exception()}") + return log_it