@@ -697,6 +697,9 @@ async def _evaluate_single_diff(self, diff_content: str) -> Dict[str, Any]:
697
697
def _validate_scores (self , result : Dict [str , Any ]) -> Dict [str , Any ]:
698
698
"""Validate and normalize scores with enhanced format handling."""
699
699
try :
700
+ # 记录原始结果
701
+ logger .info (f"Validating scores from result: { result } " )
702
+
700
703
# 检查并处理不同格式的评分结果
701
704
normalized_result = {}
702
705
@@ -706,6 +709,13 @@ def _validate_scores(self, result: Dict[str, Any]) -> Dict[str, Any]:
706
709
"error_handling" , "documentation" , "code_style" , "overall_score" , "comments" , "estimated_hours"
707
710
]
708
711
712
+ # 记录是否所有字段都存在
713
+ missing_fields = [field for field in required_fields if field not in result ]
714
+ if missing_fields :
715
+ logger .warning (f"Missing fields in result: { missing_fields } " )
716
+ else :
717
+ logger .info ("All required fields are present in the result" )
718
+
709
719
# 处理可能的不同格式
710
720
# 格式1: {"readability": 8, "efficiency": 7, ...}
711
721
# 格式2: {"score": {"readability": 8, "efficiency": 7, ...}}
@@ -910,7 +920,14 @@ def _validate_scores(self, result: Dict[str, Any]) -> Dict[str, Any]:
910
920
911
921
def _generate_default_scores (self , error_message : str ) -> Dict [str , Any ]:
912
922
"""Generate default scores when evaluation fails."""
913
- return {
923
+ logger .warning (f"Generating default scores due to error: { error_message [:200 ]} ..." )
924
+
925
+ # 记录调用栈,以便了解是从哪里调用的
926
+ import traceback
927
+ stack_trace = traceback .format_stack ()
928
+ logger .debug (f"Default scores generated from:\n { '' .join (stack_trace [- 5 :- 1 ])} " )
929
+
930
+ default_scores = {
914
931
"readability" : 5 ,
915
932
"efficiency" : 5 ,
916
933
"security" : 5 ,
@@ -923,6 +940,9 @@ def _generate_default_scores(self, error_message: str) -> Dict[str, Any]:
923
940
"comments" : error_message
924
941
}
925
942
943
+ logger .info (f"Default scores generated: { default_scores } " )
944
+ return default_scores
945
+
926
946
def _estimate_default_hours (self , additions : int , deletions : int ) -> float :
927
947
"""Estimate default working hours based on additions and deletions.
928
948
@@ -1120,9 +1140,13 @@ def _extract_json(self, text: str) -> str:
1120
1140
return ""
1121
1141
1122
1142
# 打印原始文本的类型和长度
1143
+ logger .info (f"Response type: { type (text )} , length: { len (text )} " )
1123
1144
print (f"DEBUG: Response type: { type (text )} , length: { len (text )} " )
1124
1145
print (f"DEBUG: First 100 chars: '{ text [:100 ]} '" )
1125
1146
1147
+ # 记录完整响应用于调试
1148
+ logger .debug (f"Complete model response: { text } " )
1149
+
1126
1150
# 检查是否包含无法评估的提示(如Base64编码内容)
1127
1151
unevaluable_patterns = [
1128
1152
r'Base64编码' ,
@@ -1276,6 +1300,7 @@ def _fix_malformed_json(self, json_str: str) -> str:
1276
1300
"estimated_hours" : 0.0 ,
1277
1301
"comments" : "API返回空响应,显示默认分数。"
1278
1302
}
1303
+ logger .warning ("Returning default scores due to empty response" )
1279
1304
return json .dumps (default_scores )
1280
1305
1281
1306
# 检查是否是错误消息而不是JSON
@@ -1679,10 +1704,19 @@ async def _evaluate_diff_chunk(self, chunk: str) -> Dict[str, Any]:
1679
1704
retry_count += 1
1680
1705
if retry_count >= 2 : # 只重试两次
1681
1706
logger .error (f"DeepSeek API error after 2 retries, abandoning evaluation: { error_message } " )
1682
- return self ._generate_default_scores (f"DeepSeek API错误,放弃评估: { error_message } " )
1707
+ logger .error (f"Original error: { e } " )
1708
+ logger .error (f"Last response (if any): { generated_text [:500 ] if generated_text else 'No response' } " )
1709
+
1710
+ # 创建一个详细的错误消息
1711
+ error_detail = f"DeepSeek API错误,放弃评估: { error_message } \n "
1712
+ error_detail += f"原始错误: { e } \n "
1713
+ error_detail += f"最后响应: { generated_text [:200 ] if generated_text else '无响应' } "
1714
+
1715
+ return self ._generate_default_scores (error_detail )
1683
1716
# 使用较短的等待时间
1684
1717
wait_time = 3 # 固定3秒等待时间
1685
1718
logger .warning (f"DeepSeek API error, retrying in { wait_time } s (attempt { retry_count } /2)" )
1719
+ logger .warning (f"Error details: { error_message } " )
1686
1720
await asyncio .sleep (wait_time )
1687
1721
else :
1688
1722
# 其他错误直接返回
0 commit comments