Skip to content

Commit e0cbbbc

Browse files
committed
fix: Correct FeedbackLearning field assignment in feedback_service
- Replace invalid 'target_grade' field with proper FeedbackLearning fields - Extract original_grade and original_score from QueryAnalysis - Calculate feedback_grade_equivalent by converting 1-5 rating scale to 0-100 score - Calculate grade_difference between user feedback and system analysis - Add detailed logging for learning record creation - Tests now pass cleanly with no field validation warnings - All 277 tests passing, 12 feedback tests passing
1 parent c30f7d5 commit e0cbbbc

1 file changed

Lines changed: 29 additions & 14 deletions

File tree

analyzer/services/feedback_service.py

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -309,43 +309,58 @@ def _create_learning_record(
309309
) -> None:
310310
"""Create or update learning record for ML training."""
311311
try:
312-
# Calculate aggregated grade from ratings
312+
# Get the query analysis to extract original grade and score
313+
try:
314+
analysis = user_history.query.analysis
315+
original_grade = analysis.grade
316+
original_score = analysis.score
317+
except:
318+
logger.warning(f"Could not retrieve analysis for query {user_history.query.id}")
319+
return
320+
321+
# Calculate aggregated feedback score from ratings (convert 1-5 scale to 0-100 scale)
313322
avg_rating = (
314323
feedback.accuracy_rating +
315324
feedback.usefulness_rating +
316325
feedback.clarity_rating
317326
) / 3
318327

319-
# Convert to grade (1-5 scale to A-F scale)
320-
if avg_rating >= 4.5:
321-
target_grade = 'A'
322-
elif avg_rating >= 3.5:
323-
target_grade = 'B'
324-
elif avg_rating >= 2.5:
325-
target_grade = 'C'
326-
elif avg_rating >= 1.5:
327-
target_grade = 'D'
328-
else:
329-
target_grade = 'F'
328+
# Convert 1-5 rating scale to 0-100 score scale
329+
# 1 -> 0, 2 -> 25, 3 -> 50, 4 -> 75, 5 -> 100
330+
feedback_score = (avg_rating - 1) * 25
331+
332+
# Calculate the grade difference (user feedback vs system analysis)
333+
grade_difference = feedback_score - original_score
330334

331335
# Get or create learning record
332336
learning_record, created = FeedbackLearning.objects.get_or_create(
333337
user_history=user_history,
334338
defaults={
335-
'target_grade': target_grade,
339+
'original_grade': original_grade,
340+
'original_score': original_score,
341+
'feedback_grade_equivalent': feedback_score,
342+
'grade_difference': grade_difference,
336343
'user_reliability_score': self._calculate_user_reliability(
337344
user_history.user
338345
)
339346
}
340347
)
341348

342349
if not created:
343-
learning_record.target_grade = target_grade
350+
learning_record.original_grade = original_grade
351+
learning_record.original_score = original_score
352+
learning_record.feedback_grade_equivalent = feedback_score
353+
learning_record.grade_difference = grade_difference
344354
learning_record.user_reliability_score = self._calculate_user_reliability(
345355
user_history.user
346356
)
347357
learning_record.save()
348358

359+
logger.info(
360+
f"Created/updated learning record for user {user_history.user.username}: "
361+
f"Original: {original_grade}/{original_score}, Feedback: {feedback_score}, Diff: {grade_difference}"
362+
)
363+
349364
except Exception as e:
350365
logger.warning(f"Failed to create learning record: {e}")
351366

0 commit comments

Comments
 (0)