添加默认logger

This commit is contained in:
xunbu
2025-09-09 17:32:08 +08:00
parent 787009dcaa
commit e82f6f1d15
4 changed files with 88 additions and 84 deletions

View File

@@ -40,7 +40,7 @@ class PartialAgentResultError(ValueError):
@dataclass(kw_only=True) @dataclass(kw_only=True)
class AgentConfig: class AgentConfig:
logger: logging.Logger logger: logging.Logger = global_logger
base_url: str base_url: str
api_key: str | None = None api_key: str | None = None
model_id: str model_id: str
@@ -236,7 +236,7 @@ class Agent:
self.max_concurrent = config.concurrent self.max_concurrent = config.concurrent
self.timeout = httpx.Timeout(connect=5, read=config.timeout, write=300, pool=10) self.timeout = httpx.Timeout(connect=5, read=config.timeout, write=300, pool=10)
self.thinking = config.thinking self.thinking = config.thinking
self.logger = config.logger or global_logger self.logger = config.logger
self.total_error_counter = TotalErrorCounter(logger=self.logger) self.total_error_counter = TotalErrorCounter(logger=self.logger)
# 新增:用于统计最终未解决的错误 # 新增:用于统计最终未解决的错误
self.unresolved_error_lock = Lock() self.unresolved_error_lock = Lock()
@@ -461,7 +461,6 @@ class Agent:
async with httpx.AsyncClient( async with httpx.AsyncClient(
trust_env=False, proxies=proxies, verify=False, limits=limits trust_env=False, proxies=proxies, verify=False, limits=limits
) as client: ) as client:
async def send_with_semaphore(p_text: str): async def send_with_semaphore(p_text: str):
async with semaphore: async with semaphore:
result = await self.send_async( result = await self.send_async(
@@ -491,9 +490,9 @@ class Agent:
# 新增打印token使用统计 # 新增打印token使用统计
token_stats = self.token_counter.get_stats() token_stats = self.token_counter.get_stats()
self.logger.info( self.logger.info(
f"Token使用统计 - 输入: {token_stats['input_tokens']/1000:.2f}K(含cached: {token_stats['cached_tokens']/1000:.2f}K), " f"Token使用统计 - 输入: {token_stats['input_tokens'] / 1000:.2f}K(含cached: {token_stats['cached_tokens'] / 1000:.2f}K), "
f"输出: {token_stats['output_tokens']/1000:.2f}K(含reasoning: {token_stats['reasoning_tokens']/1000:.2f}K), " f"输出: {token_stats['output_tokens'] / 1000:.2f}K(含reasoning: {token_stats['reasoning_tokens'] / 1000:.2f}K), "
f"总计: {token_stats['total_tokens']/1000:.2f}K" f"总计: {token_stats['total_tokens'] / 1000:.2f}K"
) )
return results return results
@@ -721,9 +720,9 @@ class Agent:
# 新增打印token使用统计 # 新增打印token使用统计
token_stats = self.token_counter.get_stats() token_stats = self.token_counter.get_stats()
self.logger.info( self.logger.info(
f"Token使用统计 - 输入: {token_stats['input_tokens']/1000:.2f}K(含cached: {token_stats['cached_tokens']/1000:.2f}K), " f"Token使用统计 - 输入: {token_stats['input_tokens'] / 1000:.2f}K(含cached: {token_stats['cached_tokens'] / 1000:.2f}K), "
f"输出: {token_stats['output_tokens']/1000:.2f}K(含reasoning: {token_stats['reasoning_tokens']/1000:.2f}K), " f"输出: {token_stats['output_tokens'] / 1000:.2f}K(含reasoning: {token_stats['reasoning_tokens'] / 1000:.2f}K), "
f"总计: {token_stats['total_tokens']/1000:.2f}K" f"总计: {token_stats['total_tokens'] / 1000:.2f}K"
) )
return output_list return output_list

View File

@@ -12,7 +12,7 @@ from docutranslate.logger import global_logger
@dataclass(kw_only=True) @dataclass(kw_only=True)
class ConverterConfig(ABC): class ConverterConfig(ABC):
logger: Logger | None = None logger: Logger = global_logger
@abstractmethod @abstractmethod
def gethash(self) -> Hashable: def gethash(self) -> Hashable:
@@ -23,9 +23,7 @@ class Converter(ABC):
def __init__(self, config: ConverterConfig | None = None): def __init__(self, config: ConverterConfig | None = None):
self.config = config self.config = config
if config: if config:
self.logger = config.logger or global_logger self.logger = config.logger
else:
self.logger = global_logger
@abstractmethod @abstractmethod
def convert(self, document: Document) -> Document: def convert(self, document: Document) -> Document:

View File

@@ -1,29 +1,35 @@
# SPDX-FileCopyrightText: 2025 QinHan # SPDX-FileCopyrightText: 2025 QinHan
# SPDX-License-Identifier: MPL-2.0 # SPDX-License-Identifier: MPL-2.0
from abc import ABC, abstractmethod
from dataclasses import dataclass from dataclasses import dataclass
from logging import Logger from logging import Logger
from typing import TypeVar,Generic from typing import TypeVar, Generic
from abc import ABC,abstractmethod
from docutranslate.ir.document import Document from docutranslate.ir.document import Document
from docutranslate.logger import global_logger from docutranslate.logger import global_logger
@dataclass(kw_only=True) @dataclass(kw_only=True)
class TranslatorConfig: class TranslatorConfig:
logger:Logger|None=None logger: Logger = global_logger
T=TypeVar('T',bound=Document)
class Translator(ABC,Generic[T]): T = TypeVar('T', bound=Document)
class Translator(ABC, Generic[T]):
""" """
翻译中间文本原地替换Translator不做格式转换 翻译中间文本原地替换Translator不做格式转换
""" """
def __init__(self,config:TranslatorConfig|None=None):
self.config=config def __init__(self, config: TranslatorConfig | None = None):
self.logger=config.logger or global_logger self.config = config
self.logger = config.logger or global_logger
@abstractmethod @abstractmethod
def translate(self, document:T) -> Document: def translate(self, document: T) -> Document:
... ...
@abstractmethod @abstractmethod
async def translate_async(self, document: T) -> Document: async def translate_async(self, document: T) -> Document:
... ...

View File

@@ -9,11 +9,12 @@ from typing import Self, Generic, TypeVar
from docutranslate.exporter.base import Exporter from docutranslate.exporter.base import Exporter
from docutranslate.ir.attachment_manager import AttachMentManager from docutranslate.ir.attachment_manager import AttachMentManager
from docutranslate.ir.document import Document from docutranslate.ir.document import Document
from docutranslate.logger import global_logger
@dataclass(kw_only=True) @dataclass(kw_only=True)
class WorkflowConfig: class WorkflowConfig:
logger: Logger | None = None logger: Logger = global_logger
T_Config = TypeVar("T_Config", bound=WorkflowConfig) T_Config = TypeVar("T_Config", bound=WorkflowConfig)