fix:优化当前的项目
This commit is contained in:
@@ -108,6 +108,10 @@ class AIRewriter:
|
||||
def __init__(self) -> None:
|
||||
self._client = None
|
||||
self._prefer_chat_first = False
|
||||
self._usage_prompt_tokens = 0
|
||||
self._usage_completion_tokens = 0
|
||||
self._usage_total_tokens = 0
|
||||
self._usage_calls = 0
|
||||
if settings.openai_api_key:
|
||||
base_url = settings.openai_base_url or ""
|
||||
self._prefer_chat_first = "dashscope.aliyuncs.com" in base_url
|
||||
@@ -128,6 +132,22 @@ class AIRewriter:
|
||||
else:
|
||||
logger.warning("AIRewriter_init openai_key_missing=1 rewrite_will_use_fallback_only=1")
|
||||
|
||||
def _accumulate_usage(self, usage: Any) -> None:
|
||||
if usage is None:
|
||||
return
|
||||
data = usage.model_dump() if hasattr(usage, "model_dump") else usage
|
||||
if not isinstance(data, dict):
|
||||
return
|
||||
prompt = int(data.get("prompt_tokens") or data.get("input_tokens") or 0)
|
||||
completion = int(data.get("completion_tokens") or data.get("output_tokens") or 0)
|
||||
total = int(data.get("total_tokens") or 0)
|
||||
if total <= 0:
|
||||
total = max(0, prompt + completion)
|
||||
self._usage_prompt_tokens += max(0, prompt)
|
||||
self._usage_completion_tokens += max(0, completion)
|
||||
self._usage_total_tokens += max(0, total)
|
||||
self._usage_calls += 1
|
||||
|
||||
def rewrite(self, req: RewriteRequest, request_id: str = "") -> RewriteResponse:
|
||||
cleaned_source = self._clean_source(req.source_text)
|
||||
started = time.monotonic()
|
||||
@@ -256,6 +276,12 @@ class AIRewriter:
|
||||
)
|
||||
trace["quality_issues_final"] = final_issues
|
||||
if not final_issues:
|
||||
trace["usage"] = {
|
||||
"prompt_tokens": int(self._usage_prompt_tokens),
|
||||
"completion_tokens": int(self._usage_completion_tokens),
|
||||
"total_tokens": int(self._usage_total_tokens),
|
||||
"model_calls": int(self._usage_calls),
|
||||
}
|
||||
trace["duration_ms"] = round((time.monotonic() - started) * 1000, 1)
|
||||
trace["mode"] = "ai"
|
||||
logger.info(
|
||||
@@ -266,6 +292,12 @@ class AIRewriter:
|
||||
return RewriteResponse(**normalized, mode="ai", quality_notes=[], trace=trace)
|
||||
# 模型已返回有效 JSON:默认「软接受」——仍视为 AI 洗稿,质检问题写入 quality_notes,避免误用模板稿
|
||||
if settings.ai_soft_accept and self._model_output_usable(normalized):
|
||||
trace["usage"] = {
|
||||
"prompt_tokens": int(self._usage_prompt_tokens),
|
||||
"completion_tokens": int(self._usage_completion_tokens),
|
||||
"total_tokens": int(self._usage_total_tokens),
|
||||
"model_calls": int(self._usage_calls),
|
||||
}
|
||||
trace["duration_ms"] = round((time.monotonic() - started) * 1000, 1)
|
||||
trace["mode"] = "ai"
|
||||
trace["quality_soft_accept"] = True
|
||||
@@ -669,6 +701,7 @@ class AIRewriter:
|
||||
msg = (choice.message.content if choice else "") or ""
|
||||
fr = getattr(choice, "finish_reason", None) if choice else None
|
||||
usage = getattr(completion, "usage", None)
|
||||
self._accumulate_usage(usage)
|
||||
udump = (
|
||||
usage.model_dump()
|
||||
if usage is not None and hasattr(usage, "model_dump")
|
||||
@@ -755,6 +788,7 @@ class AIRewriter:
|
||||
text={"format": {"type": "json_object"}},
|
||||
timeout=timeout_sec,
|
||||
)
|
||||
self._accumulate_usage(getattr(completion, "usage", None))
|
||||
output_text = completion.output_text or ""
|
||||
ms = (time.monotonic() - t0) * 1000
|
||||
logger.info(
|
||||
|
||||
Reference in New Issue
Block a user