Fix AI assignment errors and tag matching
Build and Push Docker Image / build (push) Successful in 9m7s
Details
Build and Push Docker Image / build (push) Successful in 9m7s
Details
- Add missing updatedAt column to AssignmentJob table - Fix algorithmic assignment to use AI-assigned projectTags instead of raw CSV tags - Add case-insensitive tag matching for better expertise matching - Scores should now properly reflect tag matches between judges and projects Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
fbb1173ea9
commit
e3e3fa9da4
|
|
@ -0,0 +1,11 @@
|
|||
-- Add missing updatedAt column to AssignmentJob table
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_name = 'AssignmentJob' AND column_name = 'updatedAt'
|
||||
) THEN
|
||||
ALTER TABLE "AssignmentJob" ADD COLUMN "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP;
|
||||
END IF;
|
||||
END $$;
|
||||
|
|
@ -613,6 +613,9 @@ export const assignmentRouter = router({
|
|||
id: true,
|
||||
title: true,
|
||||
tags: true,
|
||||
projectTags: {
|
||||
include: { tag: { select: { name: true } } },
|
||||
},
|
||||
_count: { select: { assignments: true } },
|
||||
},
|
||||
})
|
||||
|
|
@ -656,13 +659,22 @@ export const assignmentRouter = router({
|
|||
const reasoning: string[] = []
|
||||
let score = 0
|
||||
|
||||
// Expertise match (35% weight)
|
||||
const matchingTags = juror.expertiseTags.filter((tag) =>
|
||||
project.tags.includes(tag)
|
||||
// Expertise match (35% weight) - use AI-assigned projectTags if available
|
||||
const projectTagNames = project.projectTags.map((pt) => pt.tag.name.toLowerCase())
|
||||
|
||||
// Match against AI-assigned tags first, fall back to raw tags
|
||||
const matchingTags = projectTagNames.length > 0
|
||||
? juror.expertiseTags.filter((tag) =>
|
||||
projectTagNames.includes(tag.toLowerCase())
|
||||
)
|
||||
: juror.expertiseTags.filter((tag) =>
|
||||
project.tags.map((t) => t.toLowerCase()).includes(tag.toLowerCase())
|
||||
)
|
||||
|
||||
const totalTags = projectTagNames.length > 0 ? projectTagNames.length : project.tags.length
|
||||
const expertiseScore =
|
||||
matchingTags.length > 0
|
||||
? matchingTags.length / Math.max(project.tags.length, 1)
|
||||
? matchingTags.length / Math.max(totalTags, 1)
|
||||
: 0
|
||||
score += expertiseScore * 35
|
||||
if (matchingTags.length > 0) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue