diff --git a/app/interview/[id]/page.tsx b/app/interview/[id]/page.tsx index 89ae8af..5933853 100644 --- a/app/interview/[id]/page.tsx +++ b/app/interview/[id]/page.tsx @@ -66,6 +66,20 @@ export default function InterviewCanvasPage({ params }: PageProps) { const canvasStateRef = useRef(null); const saveAbortControllerRef = useRef(null); + const handleConstraintChange = useCallback((change: IConstraintChange) => { + setSession(prev => { + if (!prev) return prev; + const existing = prev.constraintChanges || []; + if (existing.some(item => item.id === change.id)) { + return prev; + } + return { + ...prev, + constraintChanges: [...existing, change] + }; + }); + }, []); + // Interview timer const timer = useInterviewTimer({ timeLimit: session?.timeLimit || 45, @@ -83,19 +97,7 @@ export default function InterviewCanvasPage({ params }: PageProps) { stateRef: canvasStateRef, timeRemaining: timer.minutes, initialMessages: session?.aiMessages || [], - onConstraintChange: (change) => { - setSession(prev => { - if (!prev) return prev; - const existing = prev.constraintChanges || []; - if (existing.some(item => item.id === change.id)) { - return prev; - } - return { - ...prev, - constraintChanges: [...existing, change] - }; - }); - } + onConstraintChange: handleConstraintChange }); // Fetch session data diff --git a/src/hooks/useInterviewAI.ts b/src/hooks/useInterviewAI.ts index 86e3249..621bd4c 100644 --- a/src/hooks/useInterviewAI.ts +++ b/src/hooks/useInterviewAI.ts @@ -38,11 +38,14 @@ export function useInterviewAI({ }: UseInterviewAIProps) { const [messages, setMessages] = useState(() => initialMessages); const [isThinking, setIsThinking] = useState(false); + const hasInitializedMessagesRef = useRef(false); useEffect(() => { - if (initialMessages.length > 0) { - setMessages(initialMessages); - } + if (hasInitializedMessagesRef.current) return; + if (initialMessages.length === 0) return; + + setMessages(initialMessages); + hasInitializedMessagesRef.current = true; }, [initialMessages]); const isThinkingRef = useRef(isThinking); diff --git a/src/lib/db/models/InterviewSession.ts b/src/lib/db/models/InterviewSession.ts index ba513a1..0bbaddb 100644 --- a/src/lib/db/models/InterviewSession.ts +++ b/src/lib/db/models/InterviewSession.ts @@ -133,7 +133,7 @@ const ConstraintChangeSchema = new Schema( description: { type: String, required: true }, severity: { type: String, enum: ['moderate', 'high'], required: true }, introducedAt: { type: Date, required: true }, - introducedAtMinute: { type: Number, required: true }, + introducedAtMinute: { type: Number, required: true, min: 0 }, status: { type: String, enum: ['active', 'acknowledged', 'addressed'], diff --git a/src/lib/evaluation/scoringEngine.ts b/src/lib/evaluation/scoringEngine.ts index 27e5945..3ff6b79 100644 --- a/src/lib/evaluation/scoringEngine.ts +++ b/src/lib/evaluation/scoringEngine.ts @@ -30,7 +30,10 @@ export function combineEvaluations( score: reasoning.score, strengths: reasoning.strengths, weaknesses: reasoning.weaknesses, - suggestions: reasoning.suggestions + suggestions: reasoning.suggestions, + adaptationSummary: reasoning.adaptationSummary, + addressedConstraintChanges: reasoning.addressedConstraintChanges, + missedConstraintChanges: reasoning.missedConstraintChanges }, finalScore, weights: WEIGHTS